Account Activity API v2
L’Account Activity API v2 è ora disponibile su Pro!
Panoramica
Questa API è comunemente utilizzata per sviluppare applicazioni che devono reagire istantaneamente alle azioni degli utenti o mantenere uno stato aggiornato in base all’attività dell’utente. Riceverai tutte le attività pertinenti elencate di seguito per ciascuna sottoscrizione utente associata alla registrazione del tuo webhook:
Tipi di attività
- Post (dell’utente)
- Eliminazioni di Post (dell’utente)
- @menzioni (dell’utente)
- Risposte (all’utente o dall’utente)
- Repost (dell’utente o relativi all’utente)
- Post citati (dell’utente o relativi all’utente)
- Repost di Post citati (dell’utente o relativi all’utente)
- Like (dell’utente o relativi all’utente)
- Follow (dell’utente o relativi all’utente)
- Unfollow (dell’utente o relativi all’utente)
- Blocchi (dell’utente o relativi all’utente)
- Sblocchi (dell’utente o relativi all’utente)
- Silenziamenti (dell’utente o relativi all’utente)
- Riattivazioni (dell’utente o relative all’utente)
- Messaggi Diretti inviati (dell’utente)
- Messaggi Diretti ricevuti (dell’utente)
- Indicatori di digitazione (verso l’utente)
- Conferme di lettura (verso l’utente)
- Revoche di sottoscrizione (dell’utente)
Panoramica delle funzionalità
Piano | Prezzo | Numero di abbonamenti univoci | Numero di webhook |
---|---|---|---|
Pro | $5.000/mese | 3 | 1 |
Enterprise | Contatta il reparto vendite | 5000+ | 5+ |
Gestire le sottoscrizioni
1. Crea una X App
- Abilita “Read, Write, and Access Direct Messages” nella scheda delle autorizzazioni della pagina della tua App.
- Nella scheda “Keys and Access Tokens”, annota la Consumer Key (API Key), la Consumer Token (API Secret) e il Bearer Token della tua App.
- Genera l’Access Token e l’Access Token Secret della tua App. Sono necessari per sottoscrivere gli account utente.
- Consulta Obtaining Access Tokens se non conosci X Sign-in e i contesti utente.
- Annota l’id numerico della tua App dalla pagina “Apps” nel developer portal. È richiesto quando si richiede l’accesso all’Account Activity API.
2. Ottenere l’accesso all’Account Activity API
3. Registra un webhook
- Assicurati che il tuo webhook sia configurato per gestire richieste POST con payload di eventi in formato JSON.
- Recupera il webhook_id dalla risposta alla registrazione del webhook, poiché è necessario per gestire le sottoscrizioni.
4. Convalida della configurazione
- Iscrivi un account utente al tuo webhook (vedi “Adding a Subscription” di seguito).
- Metti Mi piace a un Post pubblicato da uno degli account X a cui la tua App è iscritta.
- Dovresti ricevere un payload favorite_events tramite una richiesta POST all’URL del tuo webhook.
- Nota: potrebbero essere necessari fino a 10 secondi prima che gli eventi inizino a essere recapitati dopo l’aggiunta di una sottoscrizione.
Note importanti
- Autenticazione: Quando sottoscrivi gli utenti, utilizza la consumer key, la consumer secret, l’access token e l’access token secret dell’account dell’utente.
- Messaggi Diretti: Tutti i Messaggi Diretti in entrata e in uscita (inviati tramite POST /2/dm_conversations/with/:participant_id/messages) vengono recapitati tramite webhook per mantenere la tua App informata su tutta l’attività dei DM.
- Duplicazione degli eventi:
- Se due utenti sottoscritti partecipano alla stessa conversazione DM, il tuo webhook riceve eventi duplicati (uno per utente). Usa il campo for_user_id per distinguerli.
- Se più App condividono la stessa URL del webhook e lo stesso utente, gli eventi vengono inviati più volte (una per App).
- La tua App dovrebbe deduplicare gli eventi utilizzando l’id dell’evento per gestire duplicati occasionali.
- Codice di esempio: Consulta Account Activity API Setup per un’applicazione web che visualizza gli eventi del webhook.
Gestione degli utenti iscritti (API v2)
Description: Abbona l’utente autenticato a ricevere eventi tramite il webhook specificato.
Authentication: OAuthUser (flusso OAuth a 3 vie richiesto, rappresenta l’utente che viene abbonato).
- Consumer Key: es., xvz1evFS…
- Access Token: es., 370773112-GmHxMAgYyLbN…
Parameter | Description |
---|---|
webhook_id | L’id del webhook con cui associare l’abbonamento. |
bash
- Esito positivo (200 OK):
- JSON
- Errore (400 Bad Request):
Motivo | Descrizione |
---|---|
WebhookIdInvalid | Il webhook_id fornito non è stato trovato o non è associato all’App. |
DuplicateSubscriptionFailed | Esiste già un’iscrizione per questo utente per il webhook_id specificato. |
SubscriptionLimitExceeded | L’applicazione ha raggiunto il limite di iscrizioni su tutti i webhook. |
Endpoint: GET /2/account_activity/webhooks/:webhook_id/subscriptions/all
Description: Verifica se l’utente autenticato è sottoscritto al webhook specificato.
Authentication: OAuthUser (flusso OAuth a 3 vie richiesto).
Path Parameters:
Parameter | Description |
---|---|
webhook_id | L’id del webhook da verificare. |
bash
- Esito positivo (200 OK):
- JSON
- Errore (400 Bad Request):
Motivo | Descrizione |
---|---|
WebhookIdInvalid | Il webhook_id fornito non è stato trovato o non è associato all’App. |
Endpoint: DELETE /2/account_activity/webhooks/:webhook_id/subscriptions/:user_id/all
Description: Disattiva la sottoscrizione per un determinato user ID, interrompendo la consegna degli eventi al webhook.
Authentication: OAuth2 App only Bearer Token.
- Bearer Token: ad es. AAAAAAAAAAAA0%2EUifi76ZC9Ub0wn…
Parameter | Description |
---|---|
webhook_id | L’id del webhook che contiene la sottoscrizione. |
user_id | L’id numerico dell’utente da rimuovere dalla sottoscrizione. |
bash
- Esito positivo (200 OK):
- JSON
- Errore (400 Bad Request):
Motivo | Descrizione |
---|---|
SubscriptionNotFound | Non esiste alcuna sottoscrizione per lo user_id specificato sul webhook_id indicato. |
WebhookIdInvalid | Il webhook_id fornito non è stato trovato o non è associato all’App. |
Description: Recupera l’elenco di tutti gli id utente attualmente sottoscritti al webhook specificato.
Authentication: OAuth2 App only Bearer Token.
Path Parameters:
Parameter | Description |
---|---|
webhook_id | L’id del webhook per cui elencare le sottoscrizioni. |
bash
- Esito positivo (200 OK):
- JSON
- Errore (400 Bad Request):
Motivo | Descrizione |
---|---|
WebhookIdInvalid | Il webhook_id fornito non è stato trovato o non è associato all’App. |
Endpoint: GET /2/account_activity/subscriptions/count
Description: Restituisce il numero totale di sottoscrizioni attive e il limite di provisioning per l’applicazione autenticata.
Authentication: OAuth2 App only Bearer Token.
Request:
bash
- Esito positivo (200 OK):
- JSON
Parameter | Description |
---|---|
webhook_id | L’id del webhook da avviare per il replay |
Parameter | Description |
---|---|
from_date | Il timestamp UTC più vecchio (iniziale) da cui verranno forniti gli eventi; deve essere nel formato ‘yyyymmddhhmm’. Il timestamp ha granularità al minuto ed è inclusivo (ad es. 12:00 include il minuto 00). Gli orari validi devono rientrare nelle ultime 24 ore (UTC) e non essere più recenti di 31 minuti rispetto al momento attuale. Si consiglia che from_date e to_date siano entro ~2 ore. |
to_date | Il timestamp UTC più recente (finale) fino al quale verranno forniti gli eventi; deve essere nel formato ‘yyyymmddhhmm’. Il timestamp ha granularità al minuto ed è esclusivo (ad es. 12:30 non include il trentesimo minuto dell’ora). Gli orari validi devono rientrare nelle ultime 24 ore (UTC) e non essere più recenti di 10 minuti rispetto al momento attuale. |
Motivo | Descrizione |
---|---|
QueryParamInvalid | from_date è antecedente di oltre 24 ore rispetto all’ora corrente. |
QueryParamInvalid | from_date è successivo a to_date. |
QueryParamInvalid | from_date è nel futuro. |
QueryParamInvalid | to_date è nel futuro. |
QueryParamInvalid | from_date o to_date non è nel formato corretto. |
CrcValidationFailed | Risposta non corretta ricevuta dall’URL del webhook durante la convalida CRC. |
ReplayConflictError | Un processo di replay è già in corso per il webhook specificato. |
WebhookIdInvalid | Il webhook_id fornito non è valido o non è associato all’App. |
Messaggi di completamento del job
Struttura dell’oggetto dei dati dell’attività dell’account
Oggetto | Dettagli |
---|---|
for_user_id | Identifica l’abbonamento dell’utente a cui l’evento è correlato. |
is_blocked_by | (Condizionale) Mostrato solo per gli eventi di menzione di Post se l’utente che menziona è bloccato dall’utente iscritto. |
source | L’utente che esegue l’attività (ad es. l’utente che segue, blocca o silenzia). |
target | L’utente a cui si applica l’attività (ad es. l’utente seguito, bloccato o silenziato). |
Attività disponibili
Tipo di messaggio | Dettagli |
---|---|
tweet_create_events | Stato del Post per Post, Retweet, risposte, @menzioni, Quote Tweet o Retweet di Quote Tweet. |
favorite_events | Evento di like con utente e destinatario. |
follow_events | Evento di follow con utente e destinatario. |
unfollow_events | Evento di unfollow con utente e destinatario. |
block_events | Evento di blocco con utente e destinatario. |
unblock_events | Evento di sblocco con utente e destinatario. |
mute_events | Evento di silenziamento con utente e destinatario. |
unmute_events | Evento di riattivazione con utente e destinatario. |
user_event | Evento di revoca quando un utente rimuove l’autorizzazione dell’App (abbonamento eliminato automaticamente). |
direct_message_events | Stato dei DM per messaggi inviati o ricevuti. |
direct_message_indicate_typing_events | Evento di digitazione DM con utente e destinatario. |
direct_message_mark_read_events | Evento di lettura DM con utente e destinatario. |
tweet_delete_events | Notifica di Post eliminati per conformità. |
spaces_events | Attualmente non supportato. In arrivo. |
Esempi di payload
tweet_create_events (Post, Retweet, risposte, QuoteTweets)
tweet_create_events (@menzioni)
favorite_events
eventi_segui
eventi_unfollow
block_events
unblock_events
mute_events
eventi_riattiva_audio
user_event
direct_message_events
eventi_indicazione_digitazione_messaggi_diretti
direct_message_mark_read_events
tweet_delete_events
Supporto per i Post longform
- full_text: Il testo completo del post, inclusi tutti i caratteri oltre il limite di 280.
- entities: Eventuali entità (ad es. hashtag, URL, menzioni utente, simboli) presenti nel testo completo, incluse quelle dopo il 280º carattere.
- display_text_range: L’intervallo di caratteri da visualizzare, calcolato sul testo completo.
Account Activity API: migrazione da Legacy Enterprise a v2
Domande frequenti
- Velocità: Fornisce i dati alla velocità di X.
- Semplicità: Fornisce tutti gli eventi dell’account tramite un’unica connessione webhook, inclusi Post, @menzioni, risposte, Repost, Quote Tweets, like, DM, follow, blocchi e disattivazioni.
- Scalabilità: Supporta tutte le attività per gli account gestiti senza limiti di velocità o limiti di eventi (piano Enterprise).
Indice di riferimento di Account Activity API
Scopo | Endpoint v2 |
---|---|
Iscrive un’App agli eventi di un account | POST /2/account_activity/webhooks/:webhook_id/subscriptions/all |
Restituisce il numero delle sottoscrizioni attualmente attive | GET /2/account_activity/subscriptions/count |
Verifica se un webhook è iscritto a un account | GET /2/account_activity/webhooks/:webhook_id/subscriptions/all |
Restituisce l’elenco delle sottoscrizioni attualmente attive | GET /2/account_activity/webhooks/:webhook_id/subscriptions/all/list |
Disattiva una sottoscrizione utilizzando OAuth dell’app | DELETE /2/account_activity/webhooks/:webhook_id/subscriptions/:user_id/all |
Crea un job di replay | POST /2/account_activity/replay/webhooks/:webhook_id/subscriptions/all |