Skip to main content

Découvrez le SDK Wire Integrations

Créez des apps sécurisées et chiffrées de bout en bout avec le SDK Wire Integrations. Apprenez à créer des automatisations, des assistants IA et des flux de travail qui s'exécutent à l'intérieur de conversations chiffrées, sur une infrastructure que vous contrôlez.

Le SDK Wire Integrations est conçu pour les développeurs qui souhaitent étendre Wire sans compromettre son modèle de sécurité. Contrairement aux plateformes de robots traditionnelles, les Wire Apps sont des participants cryptographiques à la conversation, ils fonctionnent avec le même cryptage MLS de bout en bout que n'importe quel utilisateur humain. Ce guide couvre les concepts clés dont vous avez besoin pour construire en toute confiance sur la plateforme.

TERMES CLÉS

SDK - Kit de développement logiciel

Ensemble d'outils, de bibliothèques et de codes que les développeurs utilisent pour créer des applications pour une plateforme spécifique. Le SDK Wire Integrations donne aux développeurs tout ce dont ils ont besoin pour créer des applications qui se connectent à Wire - sans avoir à implémenter eux-mêmes le réseau de bas niveau, le cryptage ou les détails du protocole.

MLS - Messaging Layer Security (sécurité de la couche de messagerie)

Norme ouverte (IETF RFC 9420) pour la messagerie de groupe chiffrée de bout en bout. Wire est l'une des premières plateformes à mettre en œuvre MLS à l'échelle de la production. MLS assure la confidentialité des messages (les anciens messages restent sécurisés si une clé est compromise ultérieurement) et la sécurité post-compromission (les futurs messages restent sécurisés après la résolution d'une brèche). Le SDK gère automatiquement toute la complexité du MLS - les développeurs ne touchent jamais aux primitives cryptographiques.

E2EE - End-to-End Encryption (chiffrement de bout en bout)

Méthode de cryptage des messages de sorte que seuls l'expéditeur et les destinataires prévus puissent les lire. Même le fournisseur de services (Wire) ne peut pas accéder au contenu. L'E2EE est appliqué au niveau de l'appareil - les messages sont cryptés avant de quitter l'appareil de l'expéditeur et ne sont décryptés que sur l'appareil du destinataire.

App - Application

Dans Wire, une application est un service logiciel indépendant construit à l'aide du SDK Wire Integrations qui se connecte aux conversations Wire. Les applications peuvent envoyer et recevoir des messages, réagir à des événements et automatiser des flux de travail, le tout dans un environnement crypté de bout en bout. Contrairement aux plugins de navigateur ou aux modules complémentaires intégrés, les Wire Apps fonctionnent sur votre propre infrastructure et sont ajoutées aux conversations de l'équipe par un administrateur.

Comment ça marche en un paragraphe

Le SDK Wire Integrations est un kit de développement que vous utilisez pour créer des Apps - des services automatisés qui envoient des messages, répondent à des événements et exécutent des flux de travail dans les conversations Wire. Vous écrivez la logique de l'application et vous la déployez sur votre propre infrastructure - vos serveurs, votre nuage, vos règles. Wire ne touche jamais à votre code ou à vos données. Une fois déployée, votre application peut être ajoutée à n'importe quelle conversation Wire Team en utilisant son App ID - soit au sein de votre propre équipe, soit partagée avec une autre équipe en tant qu'application tierce. Tout ce que l'application envoie et reçoit reste crypté de bout en bout à l'intérieur de Wire.

Une application, plusieurs équipes

Une fois que vous avez créé et déployé une application, celle-ci reçoit un identifiant unique. Tout administrateur d'équipe Wire peut l'ajouter à son équipe en utilisant cet identifiant - votre application participe alors à leurs conversations en tant qu'application tierce de confiance, entièrement cryptée, sans que votre application ait besoin d'être redéployée ou reconfigurée. Vous gardez le contrôle de l'infrastructure ; ils contrôlent les conversations auxquelles l'application participe.

Comment cela fonctionne-t-il ?

  1. Vous créez l'application à l'aide du SDK Wire Integrations et vous la déployez sur vos propres serveurs.

  2. Votre application reçoit un identifiant unique lorsqu'elle est enregistrée.

  3. N'importe quel administrateur d'équipe Wire - dans votre équipe ou dans une autre organisation - peut ajouter l'application à son équipe en utilisant cet identifiant.

  4. L'application se joint à leurs conversations en tant que participant cryptographique. Tous les messages restent cryptés de bout en bout.

  5. Aucun redéploiement n'est nécessaire. Votre infrastructure sert chaque équipe qui ajoute l'application.

Ce que vous pouvez construire

Le SDK Wire Integrations est une base, pas un ensemble fixe de fonctionnalités. Si vous pouvez décrire un flux de travail, vous pouvez créer une application. Les exemples ci-dessous sont un point de départ - ce qui est construit ensuite n'est limité que par l'imagination de votre équipe.

Pipelines de notification

Remplacez les webhooks REST par des notifications cryptées et authentifiées délivrées directement dans les conversations Wire.

Exemples : Alertes CI/CD GitHub - incidents PagerDuty - surveillance Datadog - état du déploiement - alertes de sécurité - rapports planifiés.

Automatisation du flux de travail

Réagissez aux événements de la conversation pour déclencher des actions dans des systèmes externes - approbations, ticketing, synchronisation des données - sans quitter Wire.

Exemples : flux d'approbation avec boutons - création de tickets Jira - mises à jour Salesforce - bots de transfert d'appel - gestion des demandes d'accès.

Applications alimentées par l'IA : Connectez n'importe quel modèle d'IA (sur site ou dans le cloud) aux conversations Wire.

Comme votre application s'exécute sur votre propre infrastructure, vous choisissez l'emplacement du modèle d'IA. Associez le SDK à un LLM auto-hébergé (Llama 3, Mistral) pour obtenir un pipeline entièrement protégé, ou utilisez un modèle en nuage si vos règles de conformité le permettent.

  • Traduction: Traduire des messages en temps réel à travers les langues à l'intérieur d'une conversation cryptée.

  • Transcription : Transcrivez les appels téléphoniques et publiez des résumés structurés - décisions, actions à entreprendre - dans la conversation.

  • Résumé : Résumez de longues conversations à la demande. Utile pour les rattrapages, les dossiers de conformité et les rapports d'état.

  • Intelligence documentaire : Analysez les documents partagés dans Wire - extrayez les clauses, signalez les risques, répondez aux questions - sans envoyer de fichiers à des services externes.

Conformité et audit

Applications qui surveillent, enregistrent et établissent des rapports sur l'activité des conversations dans les secteurs réglementés, le tout dans un environnement crypté.
Exemples : bots de piste d'audit - contrôles de conformité aux politiques - détection de mots-clés sensibles - exportations eDiscovery - mise en œuvre de la conservation des données.

Intégrations tierces

Reliez les conversations Wire aux outils que votre équipe utilise déjà - de manière bidirectionnelle, avec un chiffrement préservé tout au long du processus.
Exemples : Jira - ServiceNow - Salesforce - Zendesk - SAP - outils internes personnalisés

La limite est votre imagination

Tout service capable d'envoyer une requête HTTP ou de s'exécuter en tant que processus JVM peut devenir une Wire App. Si votre équipe peut décrire un flux de travail - même s'il est spécifique à votre industrie, à votre chaîne d'outils ou à vos exigences de conformité - le SDK Wire Integrations vous donne les éléments de base pour le réaliser, à l'intérieur d'un cryptage de bout en bout, sur une infrastructure que vous contrôlez.

Une histoire à laquelle vous pouvez vous identifier

Voici Lena, ingénieur principal dans une entreprise de fintech de 400 personnes. Son équipe a choisi Wire parce qu'elle manipule des données financières sensibles, et le chiffrement de bout en bout (E2EE) n'était donc pas négociable. Tout se passait bien jusqu'à ce que l'équipe produit commence à poser des questions.

Can we get GitHub notifications in Wire? Run polls in our conversations? Have an AI assistant answer compliance questions - without data leaving our systems?

Son premier réflexe est de se tourner vers ce qu'elle connaît. Mais lorsqu'elle regarde comment les bots fonctionnent sur d'autres plateformes, quelque chose l'arrête. Toutes les intégrations qu'elle a construites fonctionnent de la même manière : la plateforme décrypte le message sur ses serveurs, puis le transmet à votre robot. La frontière de cryptage s'arrête à la plateforme. Son robot vit à l'extérieur.

For a fintech company whose Wire conversations reference client accounts and compliance decisions, that legacy architecture is a hard no. The moment a bot reads a message, that message has left the encrypted environment.

Elle se plonge dans le SDK Wire Integrations. L'architecture est différente.

Une application construite avec le SDK Wire est un participant cryptographique dans le groupe MLS. Elle possède sa propre identité et ses propres clés. Elle reçoit les messages sous forme de texte chiffré et les déchiffre localement - de la même manière que le fait un client Wire humain. Comme l'application participe au groupe chiffré, elle déchiffre les messages localement, comme le ferait un client utilisateur. Le backend Wire achemine les messages chiffrés sans avoir accès à leur contenu.

Pour commencer

Ajoutez le SDK à votre projet Kotlin ou Java :

// build.gradle.kts

dépendances {

implementation("com.wire:wire-integrations-jvm-sdk:0.0.1")

}

Initialiser le SDK avec vos informations d'identification, l'hôte du backend et le gestionnaire d'événements. La clé cryptographyStorageKey de 32 octets chiffre l'état local du SDK - générez-la avec SecureRandom et stockez-la dans un gestionnaire de secrets, jamais en clair.

fun main() {

val sdk = WireAppSdk(

applicationId = UUID.fromString(System.getenv("WIRE_SDK_APP_ID")),

apiToken = System.getenv("WIRE_SDK_API_TOKEN"),

apiHost = System.getenv("WIRE_SDK_API_HOST"),

cryptographyStorageKey = loadKeyFromVault(), // 32 octets, SecureRandom

wireEventsHandler = MyEventsHandler()

)

sdk.startListening() // ouvre WebSocket, fonctionne indéfiniment

}

Le SDK gère la connexion WebSocket (un canal permanent en temps réel vers le backend Wire), le décryptage MLS, la gestion des clés et l'état du groupe. Lorsqu'un événement arrive dans votre gestionnaire, il est déjà déchiffré et typé. Vous écrivez la logique commerciale, pas la plomberie cryptographique.

Pour plus d'informations, visitez dev.wire.com ou demandez un bac à sable de développement en remplissant le formulaire.

01 - Notifications GitHub

HISTOIRE DE L'UTILISATEUR

En tant qu'ingénieur, je veux que les fusions PR (Pull Request) et les échecs CI (Continuous Integration) soient affichés dans Wire afin que je puisse rester au top du pipeline sans changer d'outil.

PR / CI/CD - Pull Request / Continuous Integration & Continuous Delivery : Une Pull Request (PR) est la demande d'un développeur de fusionner un ensemble de modifications de code dans la base de code principale, généralement examinée par des coéquipiers avant d'être approuvée. CI/CD (Continuous Integration / Continuous Delivery) se réfère à des pipelines automatisés qui construisent, testent et déploient des logiciels à chaque fois que des modifications sont apportées au code. L'exemple de l'application GitHub envoie des notifications filaires cryptées chaque fois qu'un PR est fusionné ou qu'une construction CI échoue.

Lorsque l'application est ajoutée à un groupe Wire, onAppAddedToConversation se déclenche. Lena stocke l'identifiant de la conversation pour plus tard. Lorsque les webhooks GitHub arrivent, elle les envoie à Wire en utilisant WireApplicationManager:

class GitHubHandler : WireEventsHandlerSuspending() {

override suspend fun onAppAddedToConversation(conversationId : QualifiedId) {

ConversationStore.save(conversationId) // stocker pour des envois proactifs plus tard

manager.sendMessageSuspending(

WireMessage.Text.create(conversationId, "GitHub notifications active.")

)

}

}

// Appelé lorsque le webhook GitHub arrive

suspend fun onGitHubEvent(event : GitHubWebhookEvent) {

val manager = sdk.getApplicationManager()

val text = when (event.type) {

"pull_request.merged" -> "PR fusionné : ${event.title} - ${event.url}"

"check_run.failed" -> "CI failed : ${event.workflowName} - ${event.logsUrl}"

else -> return

}

manager.sendMessageSuspending(

WireMessage.Text.create(ConversationStore.getPrimary(), text)

)

}

Comment se déroule la notification GitHub

Le webhook de GitHub se déclenche

Service Wire SDK (votre application - reçoit le webhook via HTTP)

sdk.getApplicationManager().sendMessageSuspending(message)

Cryptage MLS (CoreCryptoClient - se produit à l'intérieur du SDK)

Wire backend (achemine le texte chiffré - pas d'accès au texte en clair)

Groupe filaire (chaque membre déchiffre localement) ← chiffré de bout en bout

Cette notification d'échec de l'IC - noms des branches, détails de l'engagement, liens - est envoyée sous la forme d'un message MLS entièrement chiffré. Le backend Wire achemine le texte chiffré. Il ne voit jamais ce qui a échoué ni pourquoi.

GitHub Actions app - Notifications d'échec de CI et de fusion de PR dans Wire

02 - Sondages d'équipe

HISTOIRE DE L'UTILISATEUR

En tant que chef de produit, je veux des sondages directement dans Wire pour que l'équipe puisse voter sans quitter l'espace de travail.

Une simple commande permet de créer un sondage interactif :

/poll "Quelle est notre priorité ?" "Performance" "Onboarding" "API v2"

L'application écoute /poll via onTextMessageReceived et envoie un message composite - du texte combiné à des boutons interactifs. Les applications SDK peuvent créer ces messages pour permettre des flux de travail interactifs dans le cadre de conversations cryptées. Les clients finaux peuvent les recevoir et les afficher, mais seules les applications SDK peuvent les créer.

override suspend fun onTextMessageReceived(wireMessage : WireMessage.Text) {

if (!wireMessage.text.startsWith("/poll")) return

val parts = parsePollCommand(wireMessage.text) ? : return

manager.sendMessageSuspending(

WireMessage.Composite.create(

conversationId = wireMessage.conversationId,

text = "Sondage : ${parts.question}",

buttonList = parts.options.mapIndexed { i, opt ->

WireMessage.Button(text = opt, id = "vote-${parts.pollId}-$i")

}

)

)

}

// Chaque vote arrive comme un événement typé - capturé et comptabilisé à l'intérieur de E2EE

override suspend fun onButtonClicked(

conversationId : QualifiedId, messageId : String,

buttonId : Chaîne, userId : QualifiedId

) {

val (pollId, index) = parseButtonId(buttonId)

PollStore.recordVote(pollId, userId, index)

manager.sendMessageSuspending(

WireMessage.Text.create(conversationId, PollStore.formatResults(pollId))

)

}

Chaque vote est un événement MLS crypté. Les priorités du sprint, les décisions de l'équipe, les résultats rétrospectifs - rien de tout cela ne transite par une couche décryptée pour être comptabilisé.

Conversation view

Poll App - sondage en direct sur les priorités du sprint avec les résultats du vote

03 - Assistant AI

HISTOIRE DE L'UTILISATEUR

En tant que responsable de la conformité, je souhaite que l'équipe utilise l'assistance de l'IA au sein de Wire sans qu'aucune donnée de conversation ne quitte notre infrastructure.

API - Interface de programmation d'applications : Un contrat défini qui permet à différents systèmes logiciels de communiquer entre eux. Lorsqu'un pipeline CI/CD envoie une notification, il fait appel à une API. Lorsqu'un assistant d'intelligence artificielle interroge un modèle externe, il fait appel à une API. La question clé des architectures sécurisées est la suivante : quelles API reçoivent des données sensibles, et où ces API s'exécutent-elles - à l'intérieur de votre infrastructure ou à l'extérieur ?

Un mois après la mise en service des deux premières applications, le responsable de la conformité demande un assistant IA - mais avec une contrainte stricte : aucune donnée de conversation ne peut atteindre une API (interface de programmation d'application) externe. Sur la plupart des plateformes, il n'y a pas de réponse claire à cette question. L'ajout de l'IA signifie normalement l'acheminement du contenu de la conversation vers un point de terminaison du modèle de cloud. Pour une société fintech réglementée, cette voie est fermée.

LLM - Large Language Model: Un modèle d'IA formé sur de grands volumes de texte qui peut générer des réponses semblables à celles des humains, répondre à des questions et résumer des informations. Les exemples incluent Llama 3 et Mistral (open-source, auto-hébergeable) et GPT-4 (hébergé dans le nuage). La distinction essentielle dans les environnements réglementés : un LLM auto-hébergé fonctionne au sein de votre propre infrastructure, ce qui signifie que les données sensibles des conversations ne quittent jamais votre contrôle.

Avec le SDK Wire Integrations, l'application de Lena reçoit déjà des messages à l'intérieur de la frontière cryptée. Elle les achemine vers un LLM (Large Language Model) sur site - un modèle d'IA auto-hébergé tel que Llama 3 ou Mistral fonctionnant au sein de l'infrastructure de l'entreprise, sans que les données ne quittent leurs systèmes.

class AiHandler : WireEventsHandlerSuspending() {

// Modèle sur site - auto-hébergé dans l'infrastructure de l'entreprise

private val llm = OnPremiseLlmClient(System.getenv("LLM_ENDPOINT"))

override suspend fun onTextMessageReceived(wireMessage : WireMessage.Text) {

if (!wireMessage.text.startsWith("/ask")) return

val question = wireMessage.text.removePrefix("/ask").trim()

// Accuser réception immédiatement

manager.sendMessageSuspending(

WireMessage.Text.createReply(wireMessage.conversationId,

"Looking into that...", originalMessage = wireMessage)

)

// Interrogation du modèle sur site - les données restent dans votre infrastructure

val answer = llm.query(question)

manager.sendMessageSuspending(

WireMessage.Text.createReply(wireMessage.conversationId,

answer, originalMessage = wireMessage)

)

}

}

Le SDK Wire gère l'E2EE pour le chemin Wire-to-app. Ce que fait votre application avec le message décrypté relève de votre choix architectural. Si vous acheminez le message vers un modèle sur site, l'ensemble du pipeline est protégé par un air-gapped.L'acheminement vers une API en nuage permet aux données de quitter votre infrastructure - une décision délibérée qui vous appartient.

C'est cette architecture qui rend l'IA viable dans les environnements réglementés. Non pas parce que Wire dispose d'une fonction d'IA intégrée, mais parce que le SDK vous permet d'introduire l'IA dans l 'espace crypté, plutôt que d'acheminer l'espace crypté vers l'IA.

Application AI Assistant - réponses aux questions de conformité à partir de la base de connaissances interne - Exemple de maquette pour illustration

Déploiement

JVM- Machine virtuelle Java : L'environnement d'exécution qui exécute le code Java, Kotlin et Scala. Lorsque nous disons que le SDK fonctionne sur la JVM, cela signifie que les applications créées avec lui peuvent être écrites dans n'importe lequel de ces langages et déployées sur n'importe quel serveur ou plateforme cloud - sur site, conteneurisées dans Docker ou dans un environnement cloud. Kotlin est recommandé pour sa syntaxe concise.

Les trois applications sont des processus JVM (Java Virtual Machine) standard - aucun port entrant, aucune configuration TLS (Transport Layer Security) n'est nécessaire. L'accès sortant au backend Wire est tout ce dont elles ont besoin. Conteneurisez et exécutez n'importe où :

FROM eclipse-temurin:17-jre

COPY build/libs/app.jar /app/app.jar

ENV WIRE_SDK_API_HOST=https://prod-nginz-https.wire.com

ENV WIRE_SDK_APP_ID=votre-app-id

ENV WIRE_SDK_API_TOKEN=votre-api-token

ENV WIRE_SDK_CRYPTOGRAPHY_STORAGE_PASSWORD=votre-clé-32-octets

CMD ["java", "-jar", "/app/app.jar"]

Une seule instance par application : Le SDK Wire Integrations conserve un état cryptographique local (matériel de clé MLS) qui ne peut pas être partagé en toute sécurité entre plusieurs instances en cours d'exécution. Exécutez une instance par application.Pour une haute disponibilité, configurez votre déploiement pour redémarrer automatiquement l'instance si elle s'arrête - n'exécutez pas deux copies simultanément.

Le point

Ce que Lena a construit - des notifications GitHub, des sondages d'équipe, un assistant IA - existe sur toutes les grandes plateformes. La différence n'est pas la fonctionnalité. C'est l'emplacement de la fonctionnalité par rapport au cryptage.

Sur de nombreuses plateformes de collaboration, les bots et les intégrations fonctionnent en dehors de l'environnement client chiffré et reposent sur des API côté serveur. La limite du chiffrement s'arrête avant le début de l'intégration. Avec le SDK de Wire, la limite de chiffrement est l'environnement lui-même. L'application SDK devient un participant de confiance dans la conversation chiffrée. La réponse à la question "Ce message est-il crypté de bout en bout ?" est la même, qu'un être humain lise le message ou qu'une application le traite.

Pour la plupart des équipes, cela n'a pas d'importance au quotidien. Pour les secteurs réglementés - finance, santé, gouvernement, défense - c'est souvent la différence entre un outil qui est approuvé et un autre qui ne l'est pas.

Démarrer

La phase 1 est maintenant en ligne - construire et tester sur staging.Demandez vos identifiants à dev.wire.com et nous vous mettrons en place dans les 2 jours ouvrables.

Wire

As a leader in secure communication, we empower businesses and government agencies with expert-driven content that helps protect what matters. Stay ahead with industry trends, compliance updates, and best practices for secure digital exchanges.

Articles similaires

Abonnez-vous à notre newsletter