Cet endpoint a été mis à jour pour inclure les métadonnées d’édition de Publication. Pour en savoir plus sur ces métadonnées, consultez la page de notions de base « Edit Posts ». Cet endpoint est souvent utilisé avec les endpoints Direct Messages. Nous avons lancé de nouveaux endpoints Direct Messages v2. Notez que les Account Activity APIs Enterprise et Premium prennent en charge les messages v2 en tête-à-tête, mais ne prennent pas encore en charge les conversations de groupe.
Enterprise
L’Account Activity API vous permet de vous abonner à des activités en temps réel liées à un compte utilisateur via des webhooks. Cela signifie que vous pouvez recevoir en temps réel des Publications, des Direct Messages et d’autres événements de compte provenant d’un ou plusieurs des comptes que vous possédez ou auxquels vous êtes abonné, via une seule connexion.
Vous recevrez toutes les activités suivantes pour chaque abonnement utilisateur associé à votre enregistrement de webhook :
Veuillez noter - Nous ne fournissons pas de données de la timeline d’accueil via l’Account Activity API. Veuillez utiliser GET statuses/home_timeline pour récupérer ces données.
Découvrez notre série de quatre vidéos sur l’API Account Activity pour vous mettre rapidement à niveau !
-
Des questions ? Vous rencontrez des erreurs ?
- Consultez notre page Questions fréquentes ou le guide de résolution des erreurs.
-
Explorez nos exemples de code :
- Tableau de bord Enterprise Account Activity API, une application web Node.js qui affiche les événements webhook en utilisant l’offre Enterprise de l’Account Activity API et inclut la fonctionnalité Replay.
- Le chatbot SnowBot, une application web Ruby basée sur les API Enterprise Account Activity et Direct Message.
- Une App X enregistrée - inscrivez-vous ici
- Un Jeton Bearer - en savoir plus
- Un webhook qui réussit un Challenge-Response Check (CRC) - en savoir plus
- Un compte Enterprise - [postuler ici]https://developer.x.com/en/products/x-api/enterprise
- Ajouter un webhook
- Afficher un webhook
- Supprimer un webhook
Commençons par enregistrer une nouvelle URL de webhook pour le contexte d’application donné.L’URL sera validée via une requête CRC avant l’enregistrement. Une fois que vous avez enregistré un webhook, veillez à noter l’ID du webhook, car vous en aurez besoin plus tard.Copiez la requête cURL suivante dans votre ligne de commande après avoir modifié les éléments suivants :
-
URL
<URL>par ex.https://yourdomain.com/webhooks/twitter/ -
Consumer key
<CONSUMER_KEY>par ex.xvz1evFS4wEEPTGEFPHBog -
Access token
<ACCESS_TOKEN>par ex.370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb
- Ajouter un abonnement
- Afficher les abonnements
- Supprimer un abonnement
Nous allons commencer par abonner un utilisateur afin que vous receviez tous les types d’événements.Copiez la requête cURL suivante dans votre terminal après avoir modifié les éléments suivants :
-
Webhook ID
<:WEBHOOK_ID>p. ex.1234567890 -
Nom de la clé consommateur
<CONSUMER_KEY>p. ex.xvz1evFS4wEEPTGEFPHBog -
Jeton d’accès de l’utilisateur abonné
<SUBSCRIBING_USER'S_ACCESS_TOKEN>p. ex.370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb
- Vue d’ensemble du Challenge-Response Check (CRC)
- [Types de données de l’API Account Activity](/x-api/enterprise-gnip-2.0/fundamentals/account-activity#account-activity-data-object-structure
- Gestion des webhooks et des abonnements
- Enregistrer un webhook
- Ajouter un abonnement utilisateur
- Supprimer un abonnement utilisateur
- Recevoir les activités de compte
- Rejouer les activités de compte
-
Vous avez des questions ? Vous rencontrez des erreurs ?
- Lisez notre foire aux questions ou le guide de résolution des erreurs.
-
Explorez notre code d’exemple :
- Enterprise Account Activity API dashboard, une application web Node qui affiche les événements de webhook à l’aide du niveau Enterprise de l’Account Activity API et inclut la fonctionnalité Replay.
- Le SnowBot chatbot, une application web Ruby basée sur les API Enterprise Account Activity et Direct Message.
- Créez une app X avec un compte développeur approuvé depuis la Console de développement. Si vous créez l’app au nom de votre entreprise, il est recommandé de la créer avec un compte X d’entreprise. Pour demander un compte développeur, cliquez ici.
- Activez « Read, Write and Access direct messages » dans l’onglet permissions de la page de votre app.
- Dans l’onglet « Keys and Access Tokens », notez la Consumer Key (API Key) et le Consumer Token (API Secret) de votre app.
- Dans ce même onglet, générez l’Access Token et l’Access Token Secret de votre app. Vous aurez besoin de ces Access Tokens pour enregistrer l’URL de votre webhook, qui est l’endpoint où X enverra les événements de compte.
- Si vous ne connaissez pas encore X Sign-in et le fonctionnement des contextes utilisateur avec la X API, consultez la section Obtaining Access Tokens. Lorsque vous ajoutez des comptes pour lesquels recevoir des événements, vous les abonnerez en utilisant les Access Tokens de ce compte.
- Notez l’ID numérique de votre app, tel qu’il apparaît sur la page « Apps » de la Console de développement. Lorsque vous demandez l’accès à l’Account Activity API, vous aurez besoin de cet app ID.
-
Créez une application web avec une URL à utiliser comme webhook pour recevoir les événements. Il s’agit de l’endpoint déployé sur votre serveur pour écouter les événements de webhook X entrants.
- Le path de l’URI est entièrement à votre discrétion. Cet exemple serait valide : https://mydomain.com_/service/listen_
- Si vous écoutez des webhooks provenant de diverses sources, un modèle courant est : https://mydomain.com/webhook/twitter
- Notez que l’URL spécifiée ne peut pas comporter de port (https://mydomain.com:5000/NoWorkie).
- Comme décrit dans notre guide Securing Webhooks, une première étape consiste à écrire du code qui reçoit une requête GET X Challenge Response Check (CRC) et y répond avec une réponse JSON correctement formatée.
- Enregistrez votre URL de webhook. Vous ferez une requête POST vers l’endpoint /webhooks.json?url=. Lorsque vous faites cette requête, X enverra une requête CRC à votre application web. Lorsqu’un webhook est correctement enregistré, la réponse inclut un id de webhook. Cet id de webhook sera nécessaire plus tard pour effectuer certaines requêtes vers l’Account Activity API.
- X enverra les événements de webhook de compte à l’URL que vous avez enregistrée. Assurez-vous que votre application web prend en charge les requêtes POST pour les événements entrants. Ces événements seront encodés en JSON. Voir ICI pour des exemples de payloads JSON de webhook.
- Une fois votre application web prête, l’étape suivante consiste à ajouter les comptes pour lesquels vous souhaitez recevoir des activités. Lors de l’ajout (ou de la suppression) de comptes, vous effectuerez des requêtes POST qui font référence à l’id du compte. Consultez notre guide sur l’ajout d’abonnements pour plus d’informations.
- Pour vérifier que votre App et votre webhook sont correctement configurés, ajoutez une Publication aux favoris parmi celles publiées par l’un des comptes X auxquels votre App est abonnée. Vous devriez recevoir un
favorite_eventsvia une requête POST vers l’URL de votre webhook pour chaque favori reçu par vos abonnés. - Notez qu’il peut s’écouler jusqu’à 10 secondes avant que les événements commencent à être délivrés après l’ajout d’un abonnement.
- Lors de l’enregistrement de l’URL de votre webhook, votre application web doit s’authentifier avec son consumer token et son secret et avec le user access token et le secret du propriétaire de l’App.
- Tous les Messages Privés entrants seront délivrés via webhooks. Tous les Messages Privés envoyés via POST direct_messages/events/new (message_create) seront également délivrés via webhooks. Cela permet à votre application web d’être informée des Messages Privés envoyés via un autre client.
-
Notez que chaque événement de webhook inclut un user ID
for_user_idqui indique pour quel abonnement l’événement a été délivré. - Si deux utilisateurs utilisent votre application web pour les Messages Privés dans une même conversation, votre webhook recevra deux événements en double (un pour chaque utilisateur). Votre application web doit en tenir compte.
- Si vous avez plusieurs applications web partageant la même URL de webhook et le même utilisateur associé à chaque application, le même événement sera envoyé plusieurs fois à votre webhook (une fois par application web).
- Dans certains cas, votre webhook peut recevoir des événements en double. Votre application de webhook doit être tolérante à ce comportement et effectuer une déduplication par event ID.
- N’attendez pas qu’une réponse Quick Reply suive directement une demande. Un utilisateur peut ignorer une demande Quick Reply et répondre via un Message Privé traditionnel. L’utilisateur peut également envoyer une réponse Quick Reply à une demande à laquelle il n’a pas répondu plus tôt dans le fil de messages.
-
Voir le code d’exemple :
- Enterprise Account Activity API dashboard, une application web Node qui affiche les événements de webhook en utilisant l’offre Enterprise de l’Account Activity API et inclut la fonctionnalité Replay.
- Le chatbot SnowBot, une application web Ruby appuyée sur les APIs Account Activity et Direct Message. Ce code source inclut un script pour aider à configurer les webhooks de l’Account Activity API.
- Les vérifications de type challenge-response 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 dans chaque requête POST vous permet de confirmer que X est bien la source des webhooks entrants.
crc_token. À la réception de cette requête, votre application web doit construire un response_token chiffré à partir du paramètre crc_token et du Consumer Secret de votre application (détails ci‑dessous). Le response_token doit être encodé en JSON (voir l’exemple ci‑dessous) et renvoyé en moins de trois secondes. En cas de succès, un id de webhook sera renvoyé.
Un CRC est envoyé lorsque vous enregistrez votre URL de webhook ; l’implémentation de votre code de réponse CRC est donc une première étape fondamentale. Une fois votre webhook établi, X déclenchera un CRC approximativement toutes les 24 heures à partir de la dernière fois où nous avons reçu une réponse valide. Votre application peut également déclencher un CRC au besoin en effectuant une requête PUT avec l’id de votre webhook. Déclencher un CRC est utile lorsque vous développez votre application de webhook, par exemple après le déploiement d’un nouveau code et le redémarrage de votre service.
Le crc_token doit être considéré comme changeant à chaque requête CRC entrante et doit être utilisé comme message dans le calcul, où votre Consumer Secret est la clé.
Si la réponse n’est pas renvoyée dans les 3 secondes ou devient invalide, les événements ne seront plus envoyés au webhook enregistré.
- Lorsqu’une URL de webhook est enregistrée.
- Environ toutes les heures pour valider votre URL de webhook.
- Vous pouvez déclencher manuellement un CRC en effectuant une requête PUT. Lorsque vous développez votre client de webhook, prévoyez de déclencher manuellement le CRC au fur et à mesure que vous développez votre réponse CRC.
- Un hachage HMAC SHA-256 encodé en base64, créé à partir du
crc_tokenet de votre Consumer Secret d’App - Un
response_tokenvalide et un format JSON valide. - Une latence inférieure à 3 secondes.
- Un code de réponse HTTP 200.
- ICI se trouve un exemple de méthode de réponse CRC écrite en Node.js.
- ICI se trouve un exemple de méthode de réponse CRC écrite en Ruby (voir generate_crc_response et la route /GET qui reçoit les événements CRC).
- Créez un hachage à l’aide de votre consumer secret et du corps du payload reçu.
- Comparez le hachage créé avec la valeur x-twitter-webhooks-signature encodée en base64. Utilisez une méthode comme compare_digest pour réduire la vulnérabilité aux attaques par temporisation.
- 199.59.148.0/22
- 199.16.156.0/22
- 192.133.77.0/26
- 64.63.15.0/24
- 64.63.31.0/24
- 64.63.47.0/24
- 202.160.128.0/24
- 202.160.129.0/24
- 202.160.130.0/24
- Note “A” au test ssllabs.com
- Activer TLS 1.2
- Activer la confidentialité persistante (Forward Secrecy)
- Désactiver SSLv2
- Désactiver SSLv3 (à cause de POODLE)
- Désactiver TLS 1.0
- Désactiver TLS 1.1
- Désactiver la compression TLS
- Désactiver les session tickets, sauf si vous faites une rotation des clés de tickets de session.
- Régler l’option “ssl_prefer_server_ciphers” ou “SSLHonorCipherOrder” sur “on” dans la configuration SSL.
- S’assurer que la liste de suites de chiffrement est une liste moderne, telle que :
ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:DES-CBC3-SHA
Pourquoi les configurations de webhook sont-elles immuables ? X prend la sécurité très au sérieux. Si l’URL de votre webhook est modifiée, il se peut que la consumer key et la consumer secret de votre application aient été compromises. En vous obligeant à créer une nouvelle configuration de webhook, vous êtes également obligé de vous réabonner aux événements de votre utilisateur. Cela nécessite l’utilisation de jetons d’accès qu’une partie malveillante est moins susceptible de posséder. Par conséquent, la probabilité qu’un tiers reçoive les informations privées de votre utilisateur est réduite.
Le niveau Enterprise prend en charge des milliers d’abonnements. Si vous avez déjà un chargé de compte, veuillez le contacter pour toute question. Pour demander l’accès aux API Enterprise, cliquez ici.
Account Activity API : Enterprise
Veuillez noter : X doit activer l’accès à l’Account Activity API pour votre App développeur avant que vous puissiez commencer à utiliser l’API. À cette fin, veillez à communiquer l’App ID que vous avez l’intention d’utiliser pour l’authentification à votre responsable de compte ou à votre équipe d’assistance technique.
*_ L’authentification nécessite les jetons d’accès de l’utilisateur abonné. _
Pour les endpoints nécessitant une authentification OAuth 1.0a avec contexte utilisateur, vous devrez fournir les identifiants suivants pour authentifier la requête :
- Consumer Keys (API Key et Secret)
- Access Tokens (Access Token et Secret)
- POST account_activity/webhooks : Enregistrer une nouvelle URL de webhook pour le contexte d’application donné
- PUT account_activity/webhooks/:webhook_id : Déclencher une vérification de réponse au challenge (CRC) pour l’URL d’un webhook donné
- DELETE account_activity/webhooks/:webhook_id : Supprimer un webhook
- POST account_activity/webhooks/:webhook_id/subscriptions/all : Abonner l’application aux événements de compte d’un utilisateur
- GET account_activity/webhooks/:webhook_id/subscriptions/all : Vérifier si une configuration de webhook est abonnée aux événements d’un utilisateur
- DELETE account_activity/webhooks/:webhook_id/subscriptions/all : Désactiver un abonnement pour le contexte utilisateur et l’application fournis [DÉPRÉCIÉ]
Please note: Assurez-vous que votre App développeur est activée pour « Read, Write, and Direct Messages. » Vous pouvez modifier ce paramètre dans la section Projects & Apps de votre compte développeur, sous « App permissions » pour l’App développeur sélectionnée. Vous devrez régénérer les identifiants de votre App après avoir modifié les paramètres d’autorisations.
Please note: X doit activer l’accès à l’API Account Activity pour votre App développeur avant que vous puissiez commencer à utiliser l’API. À cette fin, veillez à communiquer l’App ID que vous avez l’intention d’utiliser à des fins d’authentification à votre responsable de compte ou à votre équipe d’assistance technique.
*_ L’authentification nécessite les jetons d’accès de l’utilisateur abonné._
Pour les points de terminaison qui nécessitent une authentification OAuth 1.0a en contexte utilisateur, vous devrez fournir les identifiants suivants pour authentifier la requête :
- Consumer Keys (API Key et Secret)
- Access Tokens (Access Token et Secret)
- POST account_activity/webhooks : Enregistrer une nouvelle URL de webhook pour le contexte d’application donné
- PUT account_activity/webhooks/:webhook_id : Déclencher un contrôle CRC (challenge response check) pour l’URL d’un webhook donné
- DELETE account_activity/webhooks/:webhook_id : Supprimer un webhook
- POST account_activity/webhooks/:webhook_id/subscriptions/all : Abonner l’application aux événements de compte d’un utilisateur
- GET account_activity/webhooks/:webhook_id/subscriptions/all : Vérifier si une configuration de webhook est abonnée aux événements d’un utilisateur
- DELETE account_activity/webhooks/:webhook_id/subscriptions/all : Désactiver un abonnement pour le contexte utilisateur et l’application fournis [DEPRECATED]
Remarque : Assurez-vous que votre App développeur est activée pour « Read, Write, and Direct Messages ». Vous pouvez modifier ce paramètre dans la section Projects & Apps de votre compte développeur, sous « App permissions » pour l’App développeur sélectionnée. Vous devrez régénérer les identifiants de votre App après avoir modifié les paramètres d’autorisation.
Enterprise
L’un des avantages du niveau Enterprise de l’Account Activity API est un mécanisme de réessai pour les événements de webhook. Si un code de réponse HTTP 200 « success » n’est pas reçu, le serveur X déclenche un mécanisme de réessai, renvoyant l’événement de webhook jusqu’à trois fois sur une période de cinq minutes. Ce service de réessai des événements de webhook contribue à garantir la fiabilité et la récupération des événements lorsque des problèmes de réseau surviennent et pendant les interruptions de service et les déploiements côté client.
L’Account Activity API fournit une fonctionnalité de nouvelle tentative (retry) lorsque l’app web du client ne renvoie pas une réponse 200 « success » pour un événement de webhook d’activité de compte. Lorsque le côté client ne confirme pas la bonne réception d’un événement, X part du principe que l’événement n’a pas été reçu. Si une réponse non 200 est reçue, si aucune réponse n’est reçue dans les trois secondes, ou si nous ne recevons pas de réponse du tout, nous renvoyons la requête et la laissons ouverte pendant trois secondes. Cela signifie que vous disposez d’environ cinq secondes réparties sur deux tentatives pour répondre et ainsi recevoir l’activité que nous essayons d’envoyer vers votre URL de webhook. Dans le cas où votre serveur ne répond pas ou renvoie une erreur transitoire, nous réessaierons pendant cinq minutes. Il y aura au total trois tentatives de retry pour confirmer la validation. Cela offre une redondance et garantit que vous recevez tous les événements de webhook. Notez que les abonnements avec retries recevront des événements retentés pour n’importe quelles activités de tous les utilisateurs abonnés sur leur webhook.
Si vous ne confirmez pas la validation au cours de ces huit tentatives, l’activité ne sera plus disponible via l’Account Activity API.
L’Account Activity API effectuera jusqu’à trois nouvelles tentatives sur une période de cinq minutes, jusqu’à réception d’une réponse 200. Reportez-vous au tableau ci-dessous pour plus de détails. Au bout d’environ cinq minutes, l’activité ne peut plus être renvoyée via l’Account Activity API. Vous devrez utiliser d’autres endpoints X pour récupérer les données manquantes. Par exemple, les search APIs peuvent être utilisées pour récupérer les Publications, Retweets, Tweets cités, mentions et réponses concernés. Les Messages privés manqués peuvent être récupérés avec cet endpoint.
Activités disponibles
Exemples de charge utile
Reportez-vous aux exemples de charge utile ci-dessous pour chaque événement Account Activity décrit dans le tableau ci-dessus.
Enterprise
L’API Account Activity Replay est un outil de récupération de données qui vous permet de récupérer des événements jusqu’à cinq jours en arrière. Elle doit être utilisée pour récupérer des données dans les scénarios où votre serveur de webhook rate des événements : que ce soit en raison de déconnexions plus longues que la fenêtre de nouvelle tentative, ou dans les scénarios de reprise après sinistre où vous avez besoin de quelques jours pour rétablir votre système à la normale.
L’API Account Activity Replay a été développée pour tout scénario dans lequel vous n’ingérez pas les activités pendant une certaine période. Elle envoie les activités au même webhook utilisé pour la diffusion en temps réel d’origine des activités. Ce produit est un outil de récupération et non un outil de reconstitution, ce qui signifie que les événements ne seront rejoués que si une tentative de livraison antérieure a eu lieu. L’API Account Activity Replay ne peut pas livrer d’événements pour une période antérieure au moment de création d’un abonnement.
Si votre compte est configuré avec la fonctionnalité Replay, vous pouvez effectuer des requêtes de manière similaire aux requêtes vers l’API Account Activity. Il est important de noter que votre requête doit spécifier un paramètre webhook id pour indiquer les activités du webhook que vous souhaitez rejouer. En d’autres termes, une requête Replay demande à l’API Account Activity Replay de récupérer des événements entre une date et une heure de début et une date et une heure de fin, sur la base du webhook id et de l’application id.
Veuillez noter que l’heure attendue est l’heure UTC. Ces activités sont envoyées via le webhook enregistré associé à l’id, à un taux pouvant atteindre 2 500 événements par seconde. Gardez également à l’esprit qu’une seule tâche Replay par webhook peut être en cours d’exécution à la fois, même si tous les abonnements qui étaient actifs pendant l’intervalle de date/heure spécifié pour ce webhook seront rejoués.
Les événements sont envoyés en commençant par la première minute (la plus ancienne) de la période de temps spécifiée, puis en continuant dans l’ordre chronologique (autant que possible) jusqu’à la livraison de la dernière minute. À ce moment-là, Replay enverra un événement de fin de travail au webhook. Comme nous travaillons de façon chronologique pour la livraison des activités, s’il y a peu ou pas de résultats correspondants près de l’heure de début, il y aura probablement un laps de temps avant la livraison des premiers résultats.
Replay est conçu comme un outil permettant de récupérer facilement des activités jusqu’à cinq jours en arrière, mais il ne renverra pas d’événements antérieurs au moment de création d’un abonnement. Par exemple, si vous avez ajouté un nouvel abonnement il y a trois jours et exécuté une tâche Replay avec une fenêtre couvrant les cinq jours précédant aujourd’hui, vous ne recevrez des données que pour les trois jours durant lesquels ce nouvel abonnement était actif.
Les activités de l’API Account Activity Replay sont disponibles pendant cinq jours à compter du lancement de la requête, de nouvelles données devenant disponibles environ 10 minutes après la création d’une activité donnée. Vous pourrez effectuer des requêtes en spécifiant une période dans cette fenêtre de cinq jours à l’aide des paramètres from_date et to_date dans la requête. Les événements qui ont été initialement envoyés avant que vous n’ayez accès à Replay ne peuvent pas être rejoués. Par exemple, si votre compte a été activé pour l’accès à l’API Account Activity Replay le 1er juin 2019 à 15 h 30 UTC, vous ne pourrez pas utiliser Replay pour récupérer des événements antérieurs à cette date et heure.
Passez à la Référence de l’API Account Activity Replay
Nous avons mis hors service les produits Site Streams, User Streams et la version bêta standard de l’Account Activity API - DM Only en 2018. Si vous utilisiez ces produits, veillez à migrer vers la version premium ou enterprise de l’Account Activity API.
**Nous avons également mis hors service les anciens endpoints Direct Message. Si vous utilisiez ces endpoints, veillez à migrer soit vers les nouveaux endpoints DM, soit vers la version premium ou enterprise de l’Account Activity API. **
Veuillez consulter cette annonce pour en savoir plus.
Voici les endpoints qui seront affectés par ces changements :
- User Streams
- Site Streams
- GET direct_messages
- GET direct_messages/sent
- GET direct_messages/show
- POST direct_messages/new
- POST direct_messages/destroy
- Account Activity API enterprise et premium
- GET direct_messages/events/list
- GET direct_messages/events/show
- POST direct_messages/events/new
- POST direct_messages/events/destroy
- Guide de migration Account Activity API pour ceux qui passent de User Streams et Site Streams à notre nouveau service basé sur des webhooks
- Guide de migration Direct Message pour ceux qui migrent entre les endpoints REST Direct Message
- L’Account Activity Dashboard est une application web Node.js d’exemple, avec des scripts d’assistance pour démarrer avec l’Account Activity API.
- SnowBot est un chatbot d’exemple utilisant l’Account Activity API et les endpoints REST Direct Message. Il est écrit en Ruby, utilise le framework web Sinatra et est déployé sur Heroku.
Résumé des modifications
L’API Account Activity vous enverra des événements pour les comptes authentifiés et abonnés au moyen de webhooks, plutôt que via une connexion de streaming comme avec User Streams et Site Streams. GET user GET site (y compris les flux de contrôle : GET site/c/:stream_id, GET site/c/:stream_id/info.json, GET site/c/:stream_id/friends/ids.json, POST site/c/:stream_id/add_user.json, POST /site/c/:stream_id/remove_user.json) Enterprise Account Activity API - Toutes les activités Format de l’API : La nouvelle Account Activity API fonctionne différemment de User Streams et Site Streams. Vous devrez modifier votre application web pour recevoir des données via des webhooks. Vous trouverez plus d’informations sur les webhooks ici. Données disponibles : Une autre différence clé que vous remarquerez concerne les données transmises. X n’enverra plus d’événements en provenance des personnes que vous suivez sur X (c’est‑à‑dire votre fil d’accueil). Il s’agit d’un changement intentionnel et nous ne prévoyons pas de le modifier à l’avenir. Fiabilité : Contrairement au streaming, les webhooks permettent la confirmation de la livraison et offrent des options pour retenter l’envoi des activités envoyées en POST qui n’atteignent pas l’URL du webhook. Cela offre davantage de garanties que l’application reçoit toutes les activités concernées, même en cas de brèves interruptions de connexion ou de périodes d’indisponibilité. L’Account Activity API propose de nombreuses nouvelles fonctionnalités, notamment le fait que les données sont désormais transmises via des webhooks plutôt que par streaming. Les webhooks offrent de nombreux avantages par rapport au streaming, les principaux étant la rapidité et la fiabilité. L’API vous enverra les données sous forme d’événements JSON dès qu’elles seront disponibles et vous n’aurez plus besoin de maintenir une connexion active ni de sonder l’endpoint. Cela limite le besoin de mécanismes de redondance et améliore l’efficacité globale. Vous trouverez davantage d’informations sur les webhooks dans la documentation technique. L’API Account Activity permet de configurer plusieurs abonnements pour un même webhook enregistré. Cela permet d’acheminer les activités de plusieurs abonnements utilisateur vers le même emplacement, de manière similaire à l’architecture Site Streams, mais avec des webhooks. Vous pouvez ainsi suivre vos abonnements, en ce qui concerne vos limites d’abonnement, indépendamment de la connexion du webhook. Cela permet également de faire évoluer votre intégration, en passant d’un ou de quelques abonnements à des milliers d’abonnements pour un seul webhook.Suivez les étapes ci-dessous pour migrer facilement de l’API Site Streams vers l’API Account Activity
- Nombre de webhooks nécessaires
- Abonnements/utilisateurs autorisés actuels/prévus gérés sur votre application
- Nombre actuel d’applications client X
- Niveau de support souhaité de la part de X (support via forum ou support enterprise géré en mode 1:1)
- Prix de chaque formule
- Activez « Read, Write and Access direct messages » dans l’onglet permissions de la page de votre App X. Notez que la modification de ces paramètres n’est pas rétroactive ; tout utilisateur déjà autorisé conservera les paramètres d’autorisation en vigueur au moment où il a été autorisé. Si un utilisateur ne vous a pas déjà donné l’accès en lecture, écriture et messages privés, vous devrez lui demander de réautoriser votre application.
- Si vous ne connaissez pas X Sign-in et le fonctionnement des contextes utilisateur avec la X API, consultez Obtaining Access Tokens.
- Générez des jetons d’accès pour le propriétaire de l’App X en bas de l’onglet « Keys and Tokens ». Sur ce même onglet, notez votre Consumer Key, Consumer Secret, Access Token et Access Token Secret. Vous en aurez besoin pour utiliser l’API.
- Générez un Jeton Bearer à l’aide de votre Consumer Key et de votre Consumer Secret pour les méthodes d’API application-only.
- Créez une application web avec un endpoint à utiliser comme webhook pour recevoir les événements (par exemple : https://your_domain.com/webhook/twitter ou https://webhooks.your_domain.com).
-
Utilisez votre Consumer Key, Consumer Secret, Access Token et Access Token Secret lors de la création de votre webhook. Notez que votre endpoint doit retourner une réponse JSON contenant un
response_tokenqui est un hachage HMAC SHA-256 encodé en base64, créé à partir ducrc_tokenet du Consumer Secret de votre App. - Consultez la documentation Securing Webhooks, en portant une attention particulière aux exigences liées au Challenge Response Check (CRC).
- Assurez-vous que votre webhook prend en charge les requêtes POST pour les événements entrants et les requêtes GET pour le CRC.
- Assurez-vous que votre webhook présente une faible latence (moins de 3 secondes pour répondre aux requêtes POST).
- Les API de webhooks sécurisent vos webhooks de deux manières :
- Afin de vérifier que vous êtes à la fois le propriétaire de l’application web et de l’URL du webhook, X effectuera un Challenge Response Check (CRC), à ne pas confondre avec un contrôle de redondance cyclique.
- Une requête GET avec un paramètre nommé
crc_tokensera envoyée à l’URL de votre webhook. Votre endpoint doit retourner une réponse JSON contenant unresponse_tokenqui est un hachage HMAC SHA-256 encodé en base64, créé à partir ducrc_tokenet du Consumer Secret de votre App. - Le
crc_tokenest susceptible de changer pour chaque requête CRC entrante. Lecrc_tokendoit être utilisé comme message dans le calcul, où votre Consumer Secret est la clé. - Si la réponse est invalide, l’envoi des événements au webhook enregistré cessera.
- Générez la liste de vos abonnements utilisateur actuels sur User Streams
- Configurez vos nouveaux abonnements à l’Account Activity API à l’aide de la requête POST account_activity/all/:env_name/subscriptions
- Confirmez vos abonnements à l’Account Activity API à l’aide de la requête _GET account_activity/all/:env_name/subscriptions/list _
- Générez la liste de vos abonnements actuels sur Site Streams à l’aide de la requête GET /1.1/site/c/:stream_id/info.json
- Configurez vos nouveaux abonnements à l’Account Activity API à l’aide de la requête POST account_activity/all/:env_name/subscriptions
- Confirmez vos abonnements à l’Account Activity API à l’aide de la requête _GET account_activity/all/:env_name/subscriptions/list _
- Enregistrez l’URL de votre webhook avec votre App à l’aide de POST webhooks et recevez un webhook_id.
- Utilisez le webhook_id renvoyé pour ajouter des abonnements utilisateur avec POST webhooks/:webhook_id/subscriptions/all.
- Téléchargez l’application d’exemple Account Activity Dashboard ici (elle utilise Node.js)
- Suivez les instructions du README pour installer et lancer l’application
- Une fois l’application lancée, vous pouvez utiliser l’interface utilisateur pour configurer facilement votre webhook et créer un nouvel abonnement
Le 17 septembre 2018, nous avons supprimé les anciens endpoints de Messages privés.
Si vous utilisiez ces endpoints, veillez à migrer vers les nouveaux endpoints de Messages privés ou vers l’API Account Activity.
Veuillez consulter cette annonce pour en savoir plus.
Ce guide est conçu pour vous aider à migrer des anciennes API REST de Messages privés vers leurs remplaçantes améliorées, qui sont désormais hors version bêta. Vous trouverez ci-dessous un résumé des changements, une liste des nouvelles fonctionnalités, ainsi que les principales différences et points à prendre en compte pour faciliter la transition. Les nouveaux endpoints de Messages privés sont désormais disponibles pour tous les développeurs. Pour obtenir des conseils sur la migration depuis User Streams ou Site Streams, consultez le guide de migration vers l’API Account Activity.
- Résumé des changements
- Nouvelles fonctionnalités
- Envoi de Messages privés
- Réception de Messages privés
- Suppression de Messages privés
Les nouveaux endpoints de l’API de Messages privés prennent en charge un certain nombre de nouvelles fonctionnalités et offrent un accès amélioré aux anciens Messages privés. Les nouvelles fonctionnalités incluent :
- Prise en charge des pièces jointes multimédias (image, GIF et vidéo).
- Possibilité d’inviter les utilisateurs à fournir des réponses structurées avec une liste d’options prédéfinies.
- Jusqu’à 30 jours d’accès à l’historique des Messages privés.
Résumé
- Structure d’objet Direct Message entièrement nouvelle.
- Objet user simplifié.
- Nouvelles informations disponibles (réponses Quick Reply, pièces jointes, etc.).
Résumé
- Le message est défini dans le corps de la requête POST, au format JSON
- L’en-tête Content-Type doit être défini avec la valeur application/json
- Le corps JSON n’est pas pris en compte lors de la génération de la signature OAuth.
- Les messages envoyés et reçus sont désormais renvoyés par le même endpoint.
- Jusqu’à 30 jours de messages sont renvoyés.
- Pagination basée sur des curseurs.
- Accès en temps réel aux Messages privés (Direct Messages) via webhook.
Résumé
- La suppression d’un message privé nécessite l’id.
- Le nouveau endpoint requiert une requête DELETE.
- La manière dont les messages privés supprimés sont affichés dans les clients officiels X reste inchangée.
- Vitesse : nous livrons les données à la vitesse de X.
- Simplicité : nous livrons tous les événements d’un compte via une seule connexion webhook. Les activités diffusées via l’API incluent les Publications, les @mentions, les réponses, les Retweets, les Tweets cités, les Retweets de Tweets cités, les favoris, les Messages privés envoyés, les Messages privés reçus, les abonnements, les blocages et les masquages.
- Évolutivité : vous recevez toutes les activités pour un compte que vous gérez sans être limité par des limites de taux ni des plafonds d’événements.
webhook_id.
J’ai besoin d’environnements de développement, de préproduction et de production pour l’Account Activity API, est‑ce possible ?
Oui ! Avec les niveaux payants de l’Account Activity API (Premium payant et Enterprise), il est possible d’enregistrer plusieurs URL de webhook et de gérer séparément les abonnements pour chacune via les méthodes de l’API. De plus, plusieurs apps clientes peuvent être ajoutées à une liste d’autorisation afin de maintenir l’autorisation pour vos utilisateurs actuellement autorisés.
Avez-vous des guides étape par étape pour la mise en place de l’Account Activity API ?
En effet, nous en avons !
- Si vous débutez, nous vous recommandons de consulter notre guide Getting started with webhooks
-
Suivez nos scripts pris en charge par X Dev :
- Account Activity API dashboard, une application web Node qui affiche les événements webhook.
- Le chatbot SnowBot, une application web Ruby construite sur les Account Activity et Direct Message APIs. Cette base de code inclut un script pour aider à configurer les webhooks de l’Account Activity API.
- Le serveur répond à un CRC avec un jeton incorrect. Dans ce cas, notre système ne réessaiera pas de vous envoyer l’activité.
- L’URL du webhook a un certificat incorrect configuré. Dans ce cas, notre système ne réessaiera pas de vous envoyer l’activité.
- Votre serveur renvoie un code de réponse qui n’est ni 2XX, ni 4XXX, ni 5XXX.
- Vous indiquez l’utilisation de gzip sans réellement l’envoyer.
- Vous n’indiquez pas l’utilisation de gzip, mais vous l’envoyez effectivement dans la réponse.
/all/ de l’endpoint suivant par d’autres objets de données d’Account Activity pour limiter les activités livrées par l’API ? **POST https://api.x.com/1.1/account_activity/all/:env_name/subscriptions.json
Non, ce n’est pas possible. À l’heure actuelle, nous n’avons que le produit /all/ disponible.
**Existe-t-il un moyen d’utiliser l’Account Activity API sans demander les autorisations Direct Messages aux utilisateurs ? **
À ce stade, les autorisations Direct Messages sont nécessaires, car il n’existe aucun moyen de « filtrer » les activités Direct Messages pour cette API.
Existe-t-il une version sandbox de l’Account Activity API ?
Oui, nous proposons une option sandbox pour les tests. Notre option sandbox est limitée à un seul webhook avec une limite de 15 abonnements maximum. Vous pouvez en savoir plus sur l’option sandbox dans notre documentation.
**Est-il possible d’utiliser l’Account Activity API pour obtenir les Retweets de Publications qui mentionnent des utilisateurs abonnés ? **
Malheureusement, cela ne fait pas partie des activités livrées avec cette API. Pour cela, nous vous suggérons d’utiliser plutôt la Streaming API.
Quels sont les types d’activité possibles représentés par un tweet_create_event ?
Un payload tweet_create_event sera envoyé :
Si l’utilisateur abonné effectue l’une des actions suivantes :
- Crée une Publication
- Fait un Retweet
- Répond à une Publication
- @mentionne* l’utilisateur abonné
- Cite un Tweet créé par l’utilisateur abonné
user_has_blocked au niveau supérieur de la réponse JSON, défini sur « true » ou « false ». Ce champ ne sera exposé que pour les mentions de Publication.
Enterprise
Comment puis-je ajouter mon app à une allowlist ou vérifier si mon app est déjà sur l’allowlist ?
Pour gérer les X apps que vous avez ajoutées à une liste d’autorisation pour l’accès via les Enterprise APIs, veuillez contacter votre responsable de compte en lui fournissant l’id de votre application. Vous pouvez trouver l’id de votre application en accédant à la page “Apps” dans la Console de développement.
Si j’ai accès à trois webhooks, puis-je utiliser trois webhooks pour chacune des applications que j’ai enregistrées pour un usage Enterprise ?
La limite de webhooks est définie au niveau du compte, et non au niveau de l’application. Si vous avez accès à trois webhooks et à deux applications enregistrées pour un usage Enterprise, vous pouvez utiliser deux webhooks sur une application et le troisième sur l’autre, mais pas trois sur chaque application.
Puis-je spécifier quels types d’événements seront renvoyés à l’aide de l’Account Activity Replay API ?
Les types d’événements à rejouer ne peuvent pas être spécifiés. Tous les événements transmis pendant la fenêtre de dates et d’heures spécifiée seront rejoués.
Y aura-t-il de nouvelles tentatives si mon application ne parvient pas à ingérer un événement de l’Account Activity Replay API ?
Non, il n’y aura pas de nouvelles tentatives. Si une application ne parvient pas à ingérer un événement envoyé par l’Account Activity Replay API, un autre job Replay peut être soumis pour la même période afin de tenter une nouvelle livraison de tous les événements Replay manqués.
Que dois-je faire lorsque je reçois un événement de fin de traitement indiquant un succès partiel ?
Nous vous suggérons de relever les horodatages des événements reçus et de demander un autre job Replay pour les événements qui ont été manqués.
Combien de jobs Account Activity Replay API puis-je faire tourner en même temps ?
Un seul job Account Activity Replay API par webhook peut être en cours d’exécution à la fois.
Comment puis-je différencier les événements Account Activity Replay API des événements de production en temps réel lorsqu’ils sont livrés à mon webhook ?
Étant donné que l’Account Activity Replay API livre toujours des événements passés, les événements peuvent être différenciés des événements de production en temps réel en se basant sur l’horodatage de l’événement.
Combien de temps après puis-je commencer à utiliser l’Account Activity Replay API pour renvoyer une activité que mon application a abandonnée ou manquée ?
Une activité devient disponible pour une nouvelle livraison environ 10 minutes après sa création.
Cette erreur signifie généralement qu’un élément est mal formé dans la requête, les en-têtes, les informations d’autorisation ou l’URL que vous spécifiez. Ce n’est pas une erreur de l’Account Activity API, c’est une erreur d’autorisation et X ne reçoit pas la configuration OAuth ou l’URL appropriée.
- Enterprise - Assurez-vous que les consumer keys et les access tokens que vous utilisez appartiennent à une App X qui a été enregistrée pour l’utilisation des produits Enterprise. Si vous ne disposez pas de vos consumer keys et access tokens, ou si vous devez ajouter votre App X à la liste d’autorisation (allowlist), veuillez contacter votre responsable de compte.
-
Si vous vous authentifiez avec un contexte utilisateur, assurez-vous d’avoir correctement autorisé votre requête avec les
oauth nonce,oauth_signatureetoauth_timestampappropriés. -
Assurez-vous que vos access tokens ont le niveau d’autorisation approprié.
- Dans l’onglet « Keys and tokens » du app dashboard, veuillez vérifier que vos access tokens ont le niveau d’autorisation « Read, write, and direct messages » (permission level).
- Si le niveau d’autorisation des tokens est défini sur une valeur inférieure, accédez à l’onglet « Permissions », ajustez l’autorisation d’accès sur « Read, write, and direct messages », puis régénérez vos access tokens et secrets depuis l’onglet « Keys and tokens ».
-
Assurez-vous que votre URL est correctement formée.
- Veuillez garder à l’esprit que
:env_nameest sensible à la casse.
- Veuillez garder à l’esprit que
- Premium - Assurez-vous de disposer d’un compte développeur approuvé avant d’essayer d’effectuer une requête vers l’API. Vous devez également utiliser la valeur :env_name appropriée dans la requête, que vous pouvez configurer sur la page dev environments.
- Enterprise - Assurez-vous que votre gestionnaire de compte vous a bien accordé l’accès à l’Account Activity API.
- Assurez-vous d’avoir correctement configuré votre URI. Cette erreur peut se produire si vous avez saisi un URI incorrect dans votre requête.
- Assurez-vous d’utiliser HTTPS.
- L’URL de votre webhook est peut-être mal formée.
- Pour en savoir plus sur la configuration de votre URL de webhook, consultez la section Develop webhook consumer app sur la page Getting started with webhooks.
Code 214 - Latence élevée lors de la requête CRC GET. Votre webhook doit répondre en moins de 3 secondes.
- Cela signifie que votre serveur est lent. Assurez-vous que vous répondez au CRC en moins de 3 secondes.
- Votre serveur est en panne. Assurez-vous qu’il fonctionne correctement.
- Enterprise - Vous avez déjà utilisé tous vos webhooks. Utilisez l’endpoint GET webhooks avec chacune de vos applications enregistrées pour identifier où sont distribués vos webhooks.
- L’App que vous utilisez avec l’API n’a pas le niveau d’autorisation approprié défini pour son jeton d’accès (access token) et son secret de jeton d’accès (access token secret). Accédez à l’onglet ‘Keys and tokens’ sur le tableau de bord X apps et vérifiez les niveaux d’autorisation attribués à votre jeton d’accès et à son secret. S’il est défini sur autre chose que ‘Read, write and Direct Messages’, vous devrez alors ajuster les paramètres dans l’onglet ‘Permission’ et régénérer votre jeton d’accès et son secret pour appliquer les nouveaux paramètres.
- Autre possibilité : vous tentez d’enregistrer un webhook en utilisant l’authentification App-only, ce qui n’est pas pris en charge. Authentifiez-vous plutôt avec un contexte utilisateur, comme indiqué dans les sections de la Référence de l’API pour l’enregistrement d’un webhook pour Enterprise Account Activity API.
Enregistre une nouvelle URL de webhook pour le contexte d’application donné. L’URL sera validée via une requête CRC avant d’être enregistrée. Si la validation échoue, un message d’erreur détaillé est renvoyé au demandeur.
Le nombre de webhooks autorisés est déterminé par le forfait de facturation.
https://api.x.com/1.1/account_activity/webhooks.json
$ curl —request POST
—url ‘https://api.x.com/1.1/account_activity/webhooks.json?url=https%3A%2F%2Fyour_domain.com%2Fwebhooks%2Ftwitter%2F0'
—header ‘authorization: OAuth oauth_consumer_key=“CONSUMER_KEY”, oauth_nonce=“GENERATED”, oauth_signature=“GENERATED”, oauth_signature_method=“HMAC-SHA1”, oauth_timestamp=“GENERATED”, oauth_token=“ACCESS_TOKEN”, oauth_version=“1.0“‘
HTTP 403
URL de ressource
https://api.x.com/1.1/account_activity/webhooks.json
Exemple de requête
Messages d’erreur
Déclenche la vérification de réponse au défi (CRC) pour l’URL du webhook spécifié. Si la vérification réussit, renvoie un 204 et réactive le webhook en définissant son statut sur
valid.
URL de la ressource
https://api.x.com/1.1/account_activity/webhooks/:webhook_id.json
Messages d’erreur
Abonne l’application fournie à tous les événements, pour tous les types de messages, dans le contexte de l’utilisateur indiqué. Après l’activation, tous les événements pour l’utilisateur ayant émis la requête seront envoyés au webhook de l’application via une requête POST.
Les abonnements sont actuellement limités en fonction de la configuration de votre compte. Si vous avez besoin d’ajouter davantage d’abonnements, veuillez contacter votre chargé de compte.
https://api.x.com/1.1/account_activity/webhooks/:webhook_id/subscriptions/all.json
Informations sur la ressource
Exemple de réponse - succès
HTTP 204 NO CONTENT
Renvoie le nombre d’abonnements actuellement actifs sur votre compte. Notez que le endpoint
/count nécessite l’authentification OAuth en mode application seule (application-only OAuth) ; vous devez donc effectuer vos requêtes à l’aide d’un jeton Bearer plutôt qu’avec un contexte utilisateur.
https://api.x.com/1.1/account_activity/subscriptions/count.json
Exemple de requête
Exemple de réponse - Succès
HTTP 200Messages d’erreur
HTTP 401
https://api.x.com/1.1/account_activity/webhooks/:webhook_id/subscriptions/all.json
Paramètres
Exemple de requête
$ curl —request GET —url https://api.x.com/1.1/account_activity/webhooks/:WEBHOOK_ID/subscriptions/all.json —header ‘authorization: OAuth oauth_consumer_key=“WHITELISTED_CONSUMER_KEY”, oauth_nonce=“GENERATED”, oauth_signature=“GENERATED”, oauth_signature_method=“HMAC-SHA1”, oauth_timestamp=“GENERATED”, oauth_token=“SUBSCRIBING_USER’S_ACCESS_TOKEN”, oauth_version=“1.0“‘Exemple de réponse - Succès
HTTP 204 NO CONTENThttps://api.x.com/1.1/account_activity/webhooks/:webhook_id/subscriptions/all/list.json
Paramètres
Codes de réponse HTTP
Exemple de requête
$ curl —request GET —url https://api.x.com/1.1/account_activity/webhooks/:WEBHOOK_ID/subscriptions/all/list.json —header ‘authorization: Bearer TOKEN’Exemple de réponse - Succès
HTTP 200
HTTP 401
https://api.x.com/1.1/account_activity/webhooks/:webhook_id.json
Informations sur la ressource
Exemple de requête
URL de la ressource
https://api.x.com/1.1/account_activity/webhooks/:webhook_id/subscriptions/all.json
Informations sur la ressource
Paramètres
Exemple de requête
URL de la ressource
https://api.x.com/1.1/account_activity/webhooks/:webhook_id/subscriptions/:user_id/all.json
Réponse
HTTP 204 NO CONTENTMessages d’erreur
POST /1.1/account_activity/replay/webhooks/:webhook_id/subscriptions/all.json ¶
Envoie une requête pour récupérer les activités des cinq derniers jours au maximum pour toutes les souscriptions présentes pendant les fenêtres de dates et d’heures spécifiées dans la requête. Si votre webhook possède des souscriptions utilisateur actives, vous recevrez également ces événements en parallèle. Remarque : nous effectuons un CRC avant de livrer les événements de replay.
Les réponses suivantes peuvent être renvoyées par l’API. La plupart des codes d’erreur sont renvoyés avec une chaîne de caractères contenant des détails supplémentaires dans le corps. Pour les réponses dont le statut est différent de 200, vous devez corriger l’erreur puis réessayer.
Une fois que votre tâche est terminée avec succès, l’API Account Activity Replay enverra l’événement de fin de tâche suivant. Une fois que vous aurez reçu cet événement, la tâche sera terminée et vous pourrez en soumettre une autre.