API Webhooks v2
Aperçu
Récapitulatif des fonctionnalités
Niveau | Tarification | Nombre de webhooks |
---|---|---|
Self-Serve Pro | 5 000 $/mois | 1 |
Enterprise | Contacter l’équipe commerciale | 5+ |
Produits prenant en charge les webhooks
Gérer les webhooks
1. Développer une App consommatrice de webhook
- Créez une application web avec une URL HTTPS accessible publiquement qui servira d’endpoint de webhook pour recevoir les événements.
- Le chemin de l’URI est entièrement à votre discrétion. L’exemple suivant est valide : https://mydomain.com/service/listen
- Si vous recevez des webhooks provenant de différentes sources, un modèle courant est : https://mydomain.com/webhook/twitter
- Notez que l’URL spécifiée ne peut pas inclure de port (https://mydomain.com:5000/NoWorkie).
- Une première étape consiste à écrire du code qui reçoit une requête GET X Challenge Response Check (CRC) et qui répond avec une réponse JSON correctement formatée.
- Enregistrez votre URL de webhook. Vous effectuerez une requête POST vers l’endpoint /2/webhooks avec l’URL dans le corps JSON. Lorsque vous enverrez cette requête, X adressera une requête CRC à votre application web.
- Lorsqu’un webhook est enregistré avec succès, la réponse inclut un id de webhook. Cet id de webhook sera nécessaire ultérieurement lors de requêtes vers des produits qui prennent en charge les webhooks.
- X enverra des requêtes POST contenant des événements à l’URL que vous avez enregistrée. Ces événements seront encodés en JSON. Consultez ici pour des exemples de payloads JSON de webhook.
Facultatif : utiliser xurl pour les tests
xurl
sur GitHub, configurez votre autorisation, puis exécutez :
- Lors de l’enregistrement de votre URL de webhook, votre application web doit utiliser le consumer secret de votre App pour le chiffrement de la vérification CRC.
- Tous les Messages privés entrants seront remis via des webhooks. Tous les Messages privés envoyés via POST /2/dm_conversations/with/:participant_id/messages seront également remis via des webhooks. Cela permet à votre application web d’être informée des Messages privés envoyés depuis un autre client.
- Si plusieurs applications web partagent la même URL de webhook et mappent le même utilisateur, le même événement sera envoyé à votre webhook plusieurs fois (une fois par application web).
- Dans certains cas, votre webhook peut recevoir des événements en double. Votre application de webhook doit le tolérer et effectuer une déduplication par id d’événement.
-
Voir l’exemple de code :
- Account Activity API Setup, une application web Node qui affiche les événements de webhook en utilisant le niveau Enterprise de l’Account Activity API.
2. Sécurisation des webhooks
- Les vérifications de type défi-réponse permettent à X de confirmer que vous êtes bien propriétaire de l’application web qui reçoit les événements de webhook.
- L’en-tête de signature présent dans chaque requête POST vous permet de confirmer que X est bien la source des webhooks entrants.
3. L’API Webhooks
https
publiquement accessible doit être transmise dans le corps JSON.Commençons par enregistrer une nouvelle URL de webhook pour le contexte d’application donné. Authentification : OAuth2 App only Jeton Bearer
- Jeton Bearer
<BEARER_TOKEN>
p. ex.AAAAAAAAAAAA0%2EUifi76ZC9Ub0wn...
- URL
<URL>
par exemple :https://yourdomain.com/webhooks/twitter/
Motif | Description |
---|---|
CrcValidationFailed | L’URL de rappel n’a pas répondu correctement au contrôle CRC (p. ex. : délai dépassé, réponse incorrecte). |
UrlValidationFailed | L’URL de rappel fournie ne respecte pas les exigences (p. ex. : non https , format invalide). |
DuplicateUrlFailed | Un webhook est déjà enregistré par votre application pour l’URL de rappel fournie. |
WebhookLimitExceeded | Votre application a atteint le nombre maximal de configurations de webhook autorisées. |
-
Jeton Bearer
<BEARER_TOKEN>
p. ex.AAAAAAAAAAAA0%2EUifi76ZC9Ub0wn...
-
URL
<URL>
p. ex.https://yourdomain.com/webhooks/twitter/
webhook_id
spécifique. L’ID peut être obtenu dans la réponse de création POST /2/webhooks
ou dans la réponse de liste GET /2/webhooks
.
Authentification :
OAuth2 App only Jeton Bearer
- Jeton Bearer
<BEARER_TOKEN>
p. ex.AAAAAAAAAAAA0%2EUifi76ZC9Ub0wn...
Paramètre | Description |
---|---|
webhook_id | L’id du webhook à supprimer. |
Raison | Description |
---|---|
WebhookIdInvalid | Le webhook_id fourni est introuvable ou n’est pas associé à votre App. |
valid
.
Authentication :
OAuth2 App only Jeton Bearer
- Jeton Bearer
<BEARER_TOKEN>
p. ex.AAAAAAAAAAAA0%2EUifi76ZC9Ub0wn...
Parameter | Description |
---|---|
webhook_id | L’id du webhook à valider. |
valid
dans la réponse reflète l’état après la tentative de vérification. Si la vérification CRC réussit, l’état du webhook sera mis à jour sur « valid ». Vous pouvez vérifier l’état actuel avec GET /2/webhooks
.
Raison | Description |
---|---|
WebhookIdInvalid | Le webhook_id fourni est introuvable ou n’est pas associé à votre App. |
CrcValidationFailed | L’URL de rappel n’a pas répondu correctement à la requête de vérification CRC. |
4. La vérification CRC
- Lors de l’enregistrement initial du webhook (
POST /2/webhooks
) - Chaque heure par X pour validation
- Manuellement via
PUT /2/webhooks/:id
- Utiliser crc_token comme message
- Utiliser le consumer secret de l’App comme clé
- Créer un hash HMAC SHA-256
- Encoder le résultat en Base64
Exemples d’Apps
- Serveur de webhook simple
- Un script Python unique qui montre comment répondre au contrôle CRC et accepter des événements POST.
- Tableau de bord d’exemple Account Activity API
- Une application web écrite avec bun.sh qui permet de gérer des webhooks, des abonnements et de recevoir des événements en direct directement dans l’App.