API de actividad de cuentas v2
La API de actividad de cuentas v2 ya está disponible en Pro.
Descripción general
Esta API se utiliza comúnmente para crear aplicaciones que necesitan reaccionar de inmediato a las acciones de los usuarios o mantener un estado actualizado basado en la actividad del usuario. Recibirás todas las actividades relacionadas que se indican a continuación por cada suscripción de usuario en tu registro de webhook:
Tipos de actividad
- Posts (del usuario)
- Eliminaciones de Post (del usuario)
- @menciones (del usuario)
- Respuestas (al usuario o del usuario)
- Reposts (del usuario o sobre el usuario)
- Posts citados (del usuario o sobre el usuario)
- Reposts de Posts citados (del usuario o sobre el usuario)
- Me gusta (del usuario o sobre el usuario)
- Seguimientos (del usuario o hacia el usuario)
- Dejar de seguir (del usuario o hacia el usuario)
- Bloqueos (del usuario o hacia el usuario)
- Desbloqueos (del usuario o hacia el usuario)
- Silenciamientos (del usuario o hacia el usuario)
- Quitar silenciamiento (del usuario o hacia el usuario)
- Mensajes Directos enviados (por el usuario)
- Mensajes Directos recibidos (por el usuario)
- Indicadores de escritura (hacia el usuario)
- Confirmaciones de lectura (hacia el usuario)
- Revocaciones de suscripción (por el usuario)
Resumen de funcionalidades
| Nivel | Precio | Número de suscripciones únicas | Número de webhooks |
|---|---|---|---|
| Pro | 5000 $ / mes | 3 | 1 |
| Empresarial | Contactar al equipo de ventas | 5000+ | 5+ |
Administrar suscripciones
1. Crea una App de X
- Habilita “Lectura, escritura y acceso a mensajes directos” en la pestaña de permisos de la página de tu App.
- En la pestaña “Keys and Access Tokens”, toma nota de los Consumer Key (API Key), Consumer Token (API Secret) y Bearer Token de tu App.
- Genera el Access Token y el Access Token Secret de tu App. Estos se necesitan para suscribirte a cuentas de usuario.
- Revisa Obtaining Access Tokens si no estás familiarizado con X Sign-in y los contextos de usuario.
- Toma nota del id numérico de tu App en la página “Apps” del Portal de desarrolladores. Esto es necesario al solicitar acceso a la Account Activity API.
2. Obtén acceso a la API de Account Activity
3. Registra un webhook
- Asegúrate de que tu webhook esté configurado para aceptar solicitudes POST con cargas de eventos codificadas en JSON.
- Obtén el webhook_id de la respuesta al registrar el webhook, ya que se requiere para gestionar suscripciones.
4. Validar la configuración
- Suscribe una cuenta de usuario a tu webhook (consulta “Adding a Subscription” más abajo).
- Marca como favorito un Post publicado por una de las cuentas de X a las que tu App esté suscrita.
- Deberías recibir un payload de favorite_events mediante una solicitud POST a la URL de tu webhook.
- Nota: La entrega de eventos puede tardar hasta 10 segundos en comenzar después de agregar una suscripción.
Notas importantes
- Autenticación: Al suscribir usuarios, usa la consumer key, consumer secret, access token y access token secret de la cuenta del usuario.
- Mensajes directos: Todos los mensajes directos entrantes y salientes (enviados mediante POST /2/dm_conversations/with/:participant_id/messages) se entregan mediante webhooks para mantener tu App al tanto de toda la actividad de MD.
- Duplicación de eventos:
- Si dos usuarios suscritos están en la misma conversación de MD, tu webhook recibe eventos duplicados (uno por usuario). Usa el campo for_user_id para distinguirlos.
- Si varias Apps comparten la misma URL de webhook y el mismo usuario, los eventos se envían varias veces (una por App).
- Tu App debe desduplicar eventos usando el id del evento para manejar duplicados ocasionales.
- Código de ejemplo: Consulta Account Activity API Setup para ver una aplicación web que muestra eventos de webhook.
Gestión de usuarios suscritos (API v2)
Descripción: Suscribe al usuario autenticado para recibir eventos a través del webhook especificado.
Autenticación: OAuthUser (se requiere flujo OAuth de 3 etapas, que representa al usuario que se suscribe).
- Consumer Key: p. ej., xvz1evFS…
- Access Token: p. ej., 370773112-GmHxMAgYyLbN…
| Parámetro | Descripción |
|---|---|
| webhook_id | El id del webhook con el que asociar la suscripción. |
bash
- Correcto (200 OK):
- json
- Error (400 Bad Request):
| Motivo | Descripción |
|---|---|
| WebhookIdInvalid | El webhook_id proporcionado no se encontró o no está asociado con la App. |
| DuplicateSubscriptionFailed | Ya existe una suscripción para este usuario para el webhook_id especificado. |
| SubscriptionLimitExceeded | La aplicación ha alcanzado su límite de suscripciones en todos los webhooks. |
Endpoint: GET /2/account_activity/webhooks/:webhook_id/subscriptions/all
Description: Comprueba si el usuario autenticado está suscrito al webhook especificado.
Authentication: OAuthUser (se requiere flujo OAuth de 3 patas).
Path Parameters:
| Parameter | Description |
|---|---|
| webhook_id | El id del webhook que se desea comprobar. |
bash
- Correcto (200 OK):
- json
- Error (400 Solicitud incorrecta):
| Motivo | Descripción |
|---|---|
| WebhookIdInvalid | El webhook_id proporcionado no se encontró o no está asociado a la App. |
Endpoint: DELETE /2/account_activity/webhooks/:webhook_id/subscriptions/:user_id/all
Descripción: Desactiva la suscripción para un id de usuario específico y detiene la entrega de eventos al webhook.
Autenticación: OAuth2 App Only Bearer Token.
- Bearer Token: p. ej., AAAAAAAAAAAA0%2EUifi76ZC9Ub0wn…
| Parámetro | Descripción |
|---|---|
| webhook_id | El id del webhook que contiene la suscripción. |
| user_id | El id numérico del usuario al que se dará de baja. |
bash
- Correcto (200 OK):
- json
- Error (400 Solicitud incorrecta):
| Motivo | Descripción |
|---|---|
| SubscriptionNotFound | No existe una suscripción para el user_id especificado en el webhook_id indicado. |
| WebhookIdInvalid | El webhook_id proporcionado no se encontró o no está asociado con la App. |
Descripción: Recupera una lista de todos los id de usuario actualmente suscritos al webhook especificado.
Autenticación: Token Bearer de App OAuth2 Only.
Parámetros de ruta:
| Parámetro | Descripción |
|---|---|
| webhook_id | El id del webhook para el que se desea listar suscripciones. |
bash
- Correcto (200 OK):
- JSON
- Error (400 Solicitud incorrecta):
| Motivo | Descripción |
|---|---|
| WebhookIdInvalid | El webhook_id proporcionado no se encontró o no está asociado a la App. |
Endpoint: GET /2/account_activity/subscriptions/count
Descripción: Devuelve el número total de suscripciones activas y el límite aprovisionado para la App que se autentica.
Autenticación: OAuth2 App Only Bearer Token.
Solicitud:
bash
- Correcto (200 OK):
- json
| Parámetro | Descripción |
|---|---|
| webhook_id | El id del webhook con el que iniciar la repetición |
| Parámetro | Descripción |
|---|---|
| from_date | La marca de tiempo UTC más antigua (de inicio) a partir de la cual se proporcionarán los eventos; debe estar en formato ‘yyyymmddhhmm’. La marca de tiempo tiene granularidad de minutos y es inclusiva (p. ej., 12:00 incluye el minuto 00). Las horas válidas deben estar dentro de las últimas 24 horas (UTC) y no más recientes que 31 minutos antes del momento actual. Se recomienda que from_date y to_date estén dentro de ~2 horas. |
| to_date | La marca de tiempo UTC más reciente (de fin) hasta la cual se proporcionarán los eventos; debe estar en formato ‘yyyymmddhhmm’. La marca de tiempo tiene granularidad de minutos y es exclusiva (p. ej., 12:30 no incluye el minuto 30 de la hora). Las horas válidas deben estar dentro de las últimas 24 horas (UTC) y no más de 10 minutos antes del momento actual. |
| Reason | Description |
|---|---|
| QueryParamInvalid | from_date es anterior a 24 horas con respecto a la hora actual. |
| QueryParamInvalid | from_date es más reciente que to_date. |
| QueryParamInvalid | from_date está en el futuro. |
| QueryParamInvalid | to_date está en el futuro. |
| QueryParamInvalid | from_date o to_date no tienen el formato correcto. |
| CrcValidationFailed | Se recibió una respuesta incorrecta desde la URL del webhook durante la validación de CRC. |
| ReplayConflictError | Ya hay un trabajo de repetición en curso para el webhook especificado. |
| WebhookIdInvalid | El webhook_id proporcionado no es válido o no está asociado con la App. |
Mensajes de trabajo completado
Estructura del objeto de datos de actividad de la cuenta
| Objeto | Detalles |
|---|---|
| for_user_id | Identifica la suscripción de usuario con la que se relaciona el evento. |
| is_blocked_by | (Condicional) Se muestra solo en eventos de mención de Post si el usuario que menciona está bloqueado por el usuario suscrito. |
| source | El usuario que realiza la actividad (p. ej., el que sigue, bloquea o silencia). |
| target | El usuario al que se aplica la actividad (p. ej., el que es seguido, bloqueado o silenciado). |
Actividades disponibles
| Tipo de mensaje | Detalles |
|---|---|
| tweet_create_events | Estado de Post para Posts, Retweets, respuestas, @menciones, Tweets citados o Retweets de Tweets citados. |
| favorite_events | Evento de Me gusta con usuario y destino. |
| follow_events | Evento de seguir con usuario y destino. |
| unfollow_events | Evento de dejar de seguir con usuario y destino. |
| block_events | Evento de bloqueo con usuario y destino. |
| unblock_events | Evento de desbloqueo con usuario y destino. |
| mute_events | Evento de silencio con usuario y destino. |
| unmute_events | Evento de reactivar sonido con usuario y destino. |
| user_event | Eventos de revocación cuando un usuario elimina la autorización de la App (suscripción eliminada automáticamente). |
| direct_message_events | Estado de MD para mensajes enviados o recibidos. |
| direct_message_indicate_typing_events | Evento de escritura en MD con usuario y destino. |
| direct_message_mark_read_events | Evento de lectura en MD con usuario y destino. |
| tweet_delete_events | Aviso de Posts eliminados para fines de cumplimiento. |
| spaces_events | Actualmente no disponible. Próximamente. |
Ejemplos de cargas útiles
tweet_create_events (Posts, Retweets, Replies, Tweets citados)
tweet_create_events (@menciones)
favorite_events
follow_events
eventos_dejar_de_seguir
block_events
unblock_events
mute_events
unmute_events
user_event
direct_message_events
eventos_de_indicación_de_escritura_en_mensajes_directos
direct_message_mark_read_events
tweet_delete_events
Compatibilidad con Posts de formato largo
- full_text: El texto completo del Post, incluidos todos los caracteres que exceden el límite de 280.
- entities: Cualquier entidad (p. ej., hashtags, URL, menciones de usuarios, símbolos) que aparezca en el texto completo, incluidas las que estén después del carácter 280.
- display_text_range: El rango de caracteres que se debe mostrar, considerando el texto completo.
API de actividad de la cuenta: migración de Legacy Enterprise a v2
Preguntas frecuentes
- Velocidad: Entrega datos a la velocidad de X.
- Simplicidad: Proporciona todos los eventos de la cuenta mediante una única conexión de webhook, incluidos Posts, menciones (@mentions), respuestas (Replies), Reposts, Tweets citados (Quote Tweets), Me gusta (Likes), MD (DMs), seguimientos (Follows), bloqueos (Blocks) y silenciamientos (Mutes).
- Escala: Admite todas las actividades para cuentas gestionadas sin límites de velocidad ni topes de eventos (nivel Empresarial).
Índice de referencia de la API de actividad de la cuenta
| Propósito | Endpoint V2 |
|---|---|
| Suscribe una App a los eventos de una cuenta | POST /2/account_activity/webhooks/:webhook_id/subscriptions/all |
| Devuelve el recuento de suscripciones activas | GET /2/account_activity/subscriptions/count |
| Comprueba si un webhook está suscrito a una cuenta | GET /2/account_activity/webhooks/:webhook_id/subscriptions/all |
| Devuelve la lista de suscripciones activas | GET /2/account_activity/webhooks/:webhook_id/subscriptions/all/list |
| Desactiva una suscripción con OAuth solo para la App | DELETE /2/account_activity/webhooks/:webhook_id/subscriptions/:user_id/all |
| Crea un trabajo de repetición | POST /2/account_activity/replay/webhooks/:webhook_id/subscriptions/all |