V2 Account Activity API
Account Activity API v2 现已在 Pro 套餐中提供!
概览
此 API 常用于构建需要对用户操作即时响应,或根据用户活动保持最新状态的应用。对于您在 webhook 注册中的每个用户订阅,您将收到下列所有相关活动:
活动类型
- Posts(由用户发布)
- Post delete(由用户执行)
- @提及(提及用户)
- 回复(发给用户或来自用户)
- 转发(由用户或针对用户)
- 引用 Post(由用户或针对用户)
- 对引用 Post 的转发(由用户或针对用户)
- like(由用户或针对用户)
- 关注(由用户或针对用户)
- 取消关注(由用户或针对用户)
- 屏蔽(由用户或针对用户)
- 取消屏蔽(由用户或针对用户)
- 静音(由用户或针对用户)
- 取消静音(由用户或针对用户)
- 发送的私信(由用户发送)
- 收到的私信(由用户接收)
- 正在输入指示器(发给用户)
- 已读回执(发给用户)
- 撤销订阅(由用户执行)
功能概览
级别 | 价格 | 唯一订阅数 | webhook 数量 |
---|---|---|---|
Pro | 每月 $5000 | 3 | 1 |
Enterprise | 联系销售 | 5000+ | 5+ |
管理订阅
1. 创建 X App
- 在 App 页面“权限”选项卡中启用“读取、写入和访问私信”。
- 在“Keys and Access Tokens”选项卡中,记录你的 App 的 Consumer Key (API Key)、Consumer Secret (API Secret) 和 Bearer Token。
- 生成你的 App 的 Access Token 和 Access Token Secret。订阅用户账户时需要它们。
- 如果不熟悉 X 登录和用户上下文,请查看Obtaining Access Tokens。
- 在开发者门户的“Apps”页面记下你的 App 的数值型 id。申请 Account Activity API 访问时需要此项。
2. 获取 Account Activity API 访问权限
3. 注册 Webhook
- 确保你的 webhook 已配置为处理采用 JSON 编码事件负载的 POST 请求。
- 从 webhook 注册的响应中获取 webhook_id,该值是管理订阅所必需的。
4. 验证设置
- 将一个用户账户订阅到你的 webhook(参见下文“Adding a Subscription”)。
- 对你的 App 已订阅的某个 X 账户发布的 Post 点“收藏”。
- 你应通过对你的 webhook URL 发起的 POST 请求收到一个 favorite_events 负载。
- 注意:添加订阅后,事件开始投递可能需要最长 10 秒。
重要说明
- 身份验证:在订阅用户时,请使用该用户账户的 consumer key、consumer secret、access token 和 access token secret。
- 私信:所有收发的私信(通过 POST /2/dm_conversations/with/:participant_id/messages 发送)都会通过 webhook(回调接口)投递,使你的 App 能及时获知所有私信活动。
- 事件重复:
- 如果两个已订阅用户在同一私信会话中,你的 webhook 会分别收到来自每个用户的事件。请使用 for_user_id 字段加以区分。
- 如果多个 App 共享相同的 webhook URL 和用户,事件会被多次发送(每个 App 一次)。
- 你的 App 应基于事件 ID 进行去重,以处理偶发的重复事件。
- 示例代码:参见 Account Activity API Setup,其中提供了一个用于展示 webhook 事件的 Web 应用。
管理已订阅用户(v2 API)
Description: 通过指定的 webhook 为当前认证用户添加订阅,以接收事件。
Authentication: OAuthUser(需要三方 OAuth 授权流程,代表被订阅的用户)。
- Consumer Key: 例如 xvz1evFS…
- Access Token: 例如 370773112-GmHxMAgYyLbN…
Parameter | Description |
---|---|
webhook_id | 要与订阅关联的 webhook 的 id。 |
bash
- 成功(200 OK):
- JSON
- 失败(400 Bad Request):
原因 | 说明 |
---|---|
WebhookIdInvalid | 提供的 webhook_id 未找到,或未与该 App 关联。 |
DuplicateSubscriptionFailed | 指定的 webhook_id 下已存在该用户的订阅。 |
SubscriptionLimitExceeded | 应用在所有 webhook 上的订阅数量已达上限。 |
Endpoint: GET /2/account_activity/webhooks/:webhook_id/subscriptions/all
Description: 检查当前认证用户是否订阅了指定的 webhook(回调接口)。
Authentication: OAuthUser(需要三方 OAuth 授权流程)。
Path Parameters:
Parameter | Description |
---|---|
webhook_id | 要检查的 webhook 的 id。 |
bash
- 成功(200 OK):
- JSON
- 失败(400 Bad Request):
原因 | 说明 |
---|---|
WebhookIdInvalid | 提供的 webhook_id 不存在,或未与该 App 关联。 |
Endpoint: DELETE /2/account_activity/webhooks/:webhook_id/subscriptions/:user_id/all
Description: 停用特定用户ID的订阅,停止向该 webhook(回调接口)投递事件。
Authentication: OAuth 2.0 App only Bearer Token。
- Bearer Token: 例如,AAAAAAAAAAAA0%2EUifi76ZC9Ub0wn…
Parameter | Description |
---|---|
webhook_id | 包含该订阅的 webhook(回调接口)的 id。 |
user_id | 要取消订阅的用户的数值型 id。 |
bash
- 成功(200 OK):
- JSON
- 失败(400 Bad Request):
原因 | 说明 |
---|---|
SubscriptionNotFound | 指定的 user_id 与给定的 webhook_id 不存在对应的订阅。 |
WebhookIdInvalid | 提供的 webhook_id 未找到,或未与该 App 关联。 |
Description: 获取当前订阅指定 webhook(回调接口)的所有用户 id 列表。
Authentication: OAuth 2.0 App only Bearer Token。
Path Parameters:
Parameter | Description |
---|---|
webhook_id | 要列出订阅的目标 webhook 的 id。 |
bash
- 成功(200 OK):
- JSON
- 失败(400 Bad Request):
原因 | 说明 |
---|---|
WebhookIdInvalid | 提供的 webhook_id 未找到,或未与该 App 关联。 |
Endpoint: GET /2/account_activity/subscriptions/count
Description: 返回用于身份验证的应用的有效订阅总数,以及该应用的配置上限。
Authentication: OAuth 2.0 App only Bearer Token。
Request:
bash
- 成功(200 OK):
- JSON
Parameter | Description |
---|---|
webhook_id | 要开始重放的 webhook 的 id |
Parameter | Description |
---|---|
from_date | 事件提供的最早(起始)UTC 时间戳,必须为 ‘yyyymmddhhmm’ 格式。时间戳以分钟为粒度且为包含(例如 12:00 包含第 00 分钟)。有效时间必须在过去 24 小时内(UTC),且不得早于当前时间点 31 分钟内。建议 from_date 与 to_date 的间隔在约 2 小时内。 |
to_date | 事件提供的最晚(结束)UTC 时间戳,必须为 ‘yyyymmddhhmm’ 格式。时间戳以分钟为粒度且为不包含(例如 12:30 不包含该小时的第 30 分钟)。有效时间必须在过去 24 小时内(UTC),且不得早于当前时间点 10 分钟内。 |
原因 | 描述 |
---|---|
QueryParamInvalid | from_date 早于当前时间 24 小时。 |
QueryParamInvalid | from_date 比 to_date 更晚。 |
QueryParamInvalid | from_date 在未来。 |
QueryParamInvalid | to_date 在未来。 |
QueryParamInvalid | from_date 或 to_date 的格式不正确。 |
CrcValidationFailed | 在 CRC 验证期间从 webhook URL 收到的响应不正确。 |
ReplayConflictError | 指定的 webhook 已有回放作业在进行中。 |
WebhookIdInvalid | 提供的 webhook_id 无效,或未与该 App 关联。 |
作业完成消息
账户活动数据对象结构
对象 | 详情 |
---|---|
for_user_id | 标识与该事件相关的用户订阅。 |
is_blocked_by | (条件)仅在 Post 提及事件中显示,且仅当提及者被订阅用户屏蔽时。 |
source | 执行该活动的用户(例如,进行关注、屏蔽或静音的用户)。 |
target | 该活动所作用的用户(例如,被关注、被屏蔽或被静音的用户)。 |
可用活动
消息类型 | 详情 |
---|---|
tweet_create_events | 关于 Posts、转发、回复、@ 提及、引用 Tweet 或对引用 Tweet 的转发的 Post 状态。 |
favorite_events | 包含用户与目标的 like 事件。 |
follow_events | 包含用户与目标的关注事件。 |
unfollow_events | 包含用户与目标的取消关注事件。 |
block_events | 包含用户与目标的屏蔽事件。 |
unblock_events | 包含用户与目标的取消屏蔽事件。 |
mute_events | 包含用户与目标的静音事件。 |
unmute_events | 包含用户与目标的取消静音事件。 |
user_event | 当用户移除 App 授权时的撤销事件(订阅将自动删除)。 |
direct_message_events | 已发送或已接收消息的 DM 状态。 |
direct_message_indicate_typing_events | 包含用户与目标的 DM 正在输入事件。 |
direct_message_mark_read_events | 包含用户与目标的 DM 已读事件。 |
tweet_delete_events | 用于合规的 Post 删除通知。 |
spaces_events | 目前不支持。即将推出。 |
载荷示例
tweet_create_events(Posts、转发、回复、引用推文)
tweet_create_events(@提及)
favorite_events
follow_events
unfollow_events
block_events
unblock_events
mute_events
unmute_events
user_event
direct_message_events
direct_message_indicate_typing_events
direct_message_mark_read_events
tweet_delete_events
对长篇 Post 的支持
- full_text:Post 的完整文本,包括超过 280 字符限制的所有字符。
- entities:完整文本中出现的所有实体(例如,hashtags、URL、用户提及、符号),包括第 280 个字符之后的实体。
- display_text_range:应显示的字符范围,覆盖完整文本。
将 Account Activity API 从旧版 Enterprise 迁移到 v2
常见问题
- 速度:以 X 的速度传递数据。
- 简洁:通过单一 webhook 连接提供所有账户事件,包括 Post、@ 提及、回复、转发、引用 Tweet、like、私信、关注、拉黑和静音。
- 规模:在不受请求速率限制或事件上限约束的情况下支持受管账户的所有活动(Enterprise 等级)。
Account Activity API 参考索引
目的 | v2 endpoint |
---|---|
将应用订阅到某个账户的事件 | POST /2/account_activity/webhooks/:webhook_id/subscriptions/all |
返回当前有效订阅的数量 | GET /2/account_activity/subscriptions/count |
检查某个 webhook 是否已订阅某账户 | GET /2/account_activity/webhooks/:webhook_id/subscriptions/all |
返回当前有效订阅的列表 | GET /2/account_activity/webhooks/:webhook_id/subscriptions/all/list |
使用仅限 App 的 OAuth 停用订阅 | DELETE /2/account_activity/webhooks/:webhook_id/subscriptions/:user_id/all |
创建重放作业 | POST /2/account_activity/replay/webhooks/:webhook_id/subscriptions/all |