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
POSTdemandes. - 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
-
Ouvrir le TSplus Remote Support console d'administration.
-
Dans le menu de gauche, développez Intégration et cliquez Webhooks .
-
Cliquez Ajouter un webhook .
-
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.
-
Cliquez Sauvegarder .
-
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é.
Sécurité : Pour votre protection, l'URL est validée lorsque vous l'enregistrez. Les points de terminaison pointant vers
localhostou 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_anormaleestvraiuniquement lorsqu'une session est fermée par la plateforme après un redémarrage inattendu du relais. Dans ce cas, letranscription_de_chatest 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 :
- Lisez le corps de demande brut les octets exacts reçus — ne pas re-sérialiser le JSON).
-
Calculer
HMAC-SHA256(rawBody, votreSecret)et l'encoder en hexadécimal. -
Préfixez-le avec
sha256=et le comparer à leX-Webhook-Signatureen-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 hmacimport 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
429et5xxréponses. Autre4xxles 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.