Passer au contenu

Intégration des Webhooks avec TSplus Remote Support

Aperçu

Webhooks vous permettent de connecter TSplus Remote Support à vos propres systèmes (billetterie, CRM, SIEM, outils internes). Lorsqu'un événement se produit dans votre abonnement, Remote Support envoie un HTTP POST demande — contenant une charge utile JSON décrivant l'événement — à une URL que vous contrôlez.

Chaque demande est signé de manière cryptographique afin que votre serveur puisse vérifier qu'il provient réellement de Remote Support et n'a pas été altéré.

Cas d'utilisation typiques :

  • Créer ou mettre à jour automatiquement un ticket lorsque la session de support se termine.
  • Archivez les transcriptions de session de chat dans votre propre stockage.
  • Déclencher des notifications internes ou des flux de travail d'automatisation.

Prérequis

Pour configurer les webhooks, assurez-vous d'avoir :

  • Un abonnement administrateur compte.
  • Un accès public HTTPS point de terminaison capable de recevoir POST demandes.
  • La capacité de lire les en-têtes de requête HTTP et le corps brut de la requête sur votre serveur (nécessaire pour vérifier la signature).

Configurer un webhook

  1. Ouvrir le TSplus Remote Support console d'administration.

  2. Dans le menu de gauche, développez Intégration et cliquez Webhooks .

    Admin console: Integration menu with the Webhooks entry

  3. Cliquez Ajouter un webhook .

    Webhooks list with the Add a webhook button

  4. Remplissez le formulaire :

    • URL — le point de terminaison HTTPS qui recevra les événements.
    • Description optionnel — une étiquette pour vous aider à identifier ce point de terminaison.
    • Événements — sélectionnez au moins un type d'événement auquel vous abonner.
  5. Cliquez Sauvegarder .

    Add a webhook form

  6. A secret est généré et affiché une fois Copiez-le maintenant et conservez-le en toute sécurité — il est utilisé pour vérifier la signature des demandes entrantes et ne sera plus affiché.

    Webhook secret shown once after creation

Sécurité : Pour votre protection, l'URL est validée lorsque vous l'enregistrez. Les points de terminaison pointant vers localhost ou les adresses IP privées/internes sont rejetées.

Gérer vos webhooks

Depuis la liste des Webhooks, vous pouvez :

  • Envoyer un événement de test (icone de flacon) — met en file d'attente une livraison d'échantillon afin que vous puissiez confirmer que votre point de terminaison reçoit et accepte les demandes.
  • Modifier (icône de crayon) — changez l'URL, la description, les événements abonnés ou activez/désactivez le point de terminaison.
  • Supprimer (icone de poubelle) — supprimer définitivement le point de terminaison.

Chaque point de terminaison affiche un statut :

  • Actif — le point de terminaison est activé et reçoit des événements.
  • Désactivé — le point de terminaison a été désactivé manuellement.
  • Auto-désactivé — Le support à distance a automatiquement désactivé le point de terminaison après 10 livraisons consécutives échouées Corrigez le point de terminaison et réactivez-le depuis le formulaire de modification.

Format de charge utile

Chaque événement est livré sous forme de POST demande avec un corps JSON et les en-têtes suivants :

En-tête Description
Type de contenu application/json
X-Webhook-Signature signature HMAC-SHA256 du corps brut, préfixée par sha256=
X-Webhook-Id Identifiant d'événement unique (utilisez-le pour l'idempotence de votre côté)
X-Webhook-Timestamp Horodatage ISO 8601 de la livraison
Agent utilisateur RemoteSupport-Webhook/1.0

Tous les événements partagent une enveloppe commune. Seul le contenu de données changements en fonction du type d'événement :

{
"id": "evt_abc123def456",
"type": "session.ended",
"created_at": "2026-07-10T15:00:00Z",
"subscription_key": "XXXX-XXXX-XXXX",
"data": { }
}

session.terminée

Envoyé lorsque la session de support se termine (tous les participants sont déconnectés). La charge utile comprend la transcription complète du chat collectée pendant la session.

{
"id": "evt_xyz789ghi012",
"type": "session.ended",
"created_at": "2026-07-10T15:00:00Z",
"subscription_key": "XXXX-XXXX-XXXX",
"data": {
"remote_support_id": "ABC123",
"computer_name": "Front-desk PC",
"started_at": "2026-07-10T14:30:00Z",
"ended_at": "2026-07-10T15:00:00Z",
"duration_seconds": 1800,
"is_abnormal_closure": false,
"chat_transcript": [
{ "timestamp": "2026-07-10T14:31:00Z", "sender": "agent", "user_id": 42, "message": "Hello, how can I help you?" },
{ "timestamp": "2026-07-10T14:31:30Z", "sender": "client", "message": "My screen is black" }
]
}
}

est_fermeture_anormale est vrai uniquement lorsqu'une session est fermée par la plateforme après un redémarrage inattendu du relais. Dans ce cas, le transcription_de_chat est vide.

Vérification de la signature

Votre point de terminaison doit toujours vérifier la signature avant de faire confiance à une demande. Quiconque connaît votre URL pourrait sinon envoyer de faux événements ; sans le secret, ils ne peuvent pas produire une signature valide.

Pour vérifier une demande :

  1. Lisez le corps de demande brut les octets exacts reçus — ne pas re-sérialiser le JSON).
  2. Calculer HMAC-SHA256(rawBody, votreSecret) et l'encoder en hexadécimal.
  3. Préfixez-le avec sha256= et le comparer à le X-Webhook-Signature en-tête utilisant une comparaison en temps constant.

Node.js

const crypto = require('crypto');
function verifyWebhook(rawBody, signatureHeader, secret) {
const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(rawBody, 'utf8')
.digest('hex');
const a = Buffer.from(expected);
const b = Buffer.from(signatureHeader || '');
return a.length === b.length && crypto.timingSafeEqual(a, b);
}

Python

import hmac
import hashlib
def verify_webhook(raw_body: bytes, signature_header: str, secret: str) -> bool:
expected = "sha256=" + hmac.new(
secret.encode("utf-8"), raw_body, hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature_header or "")

Livraison et réessais

  • Votre point de terminaison devrait répondre avec un 2xx code d'état aussi rapidement que possible. La demande expire après 10 secondes .
  • Si une livraison échoue, le support à distance réessaie avec un calendrier de retour exponentiel : 10s, 30s, 1min, 5min, 15min, 1h, 4h, 24h (jusqu'à 8 tentatives sur 24 heures).
  • Les tentatives se produisent en cas d'erreurs de connexion, HTTP 429 et 5xx réponses. Autre 4xx les réponses sont considérées comme des échecs permanents et sont non réessayé.
  • Après 10 livraisons échouées consécutives , le point de terminaison est automatiquement désactivé .

Pour éviter de traiter le même événement deux fois (par exemple après une nouvelle tentative), utilisez le X-Webhook-Id en-tête (ou le id champ dans la charge utile) comme clé d'idempotence.

Événements disponibles

Événement Description
session.terminée Une session de support est terminée. Comprend la durée et la transcription complète du chat.

D'autres types d'événements seront ajoutés dans les futures versions.