V2 Account Activity API
Account Activity API v2 现已在免费计划中提供!
概述
该 API 常用于构建需要对用户操作即时响应,或基于用户活动保持最新状态的应用。对于您在 webhook 注册中的每个用户订阅,您将收到以下所有相关活动:
活动类型
- 发布的 Post(由用户)
- 删除的 Post(由用户)
- @提及(提及该用户)
- 回复(发给用户或来自用户)
- 转帖(由用户或涉及该用户)
- 引用 Post(由用户或涉及该用户)
- 对引用 Post 的转帖(由用户或涉及该用户)
- 点赞(由用户或涉及该用户)
- 关注(由用户或涉及该用户)
- 取消关注(由用户或涉及该用户)
- 屏蔽(由用户或涉及该用户)
- 取消屏蔽(由用户或涉及该用户)
- 静音(由用户或涉及该用户)
- 取消静音(由用户或涉及该用户)
- 发送的私信(由用户)
- 接收的私信(由用户)
- 正在输入指示(给用户)
- 已读回执(给用户)
- 取消订阅(由用户)
功能概览
| 等级 | 价格 | 唯一订阅数量 | Webhook 数量 |
|---|---|---|---|
| 免费 | $5000/月 | 3 | 1 |
| 企业版 | 联系销售 | 5000+ | 5+ |
管理订阅
1. 创建 X 应用
- 在应用页面的“权限”选项卡中启用“Read, Write, and Access direct messages”。
- 在“Keys and Access Tokens”选项卡中,记下应用的 Consumer Key (API Key)、Consumer Token (API Secret) 和 Bearer Token。
- 生成应用的 Access Token 和 Access Token Secret。这些在订阅用户账号时需要用到。
- 如果不熟悉 X 登录与用户上下文,请查看Obtaining Access Tokens。
- 在开发者门户的“Apps”页面记下应用的数字 id。申请 Account Activity API 访问时需要此信息。
2. 获取 Account Activity API 的访问权限
3. 注册 Webhook
- 请确保您的 webhook 已配置为处理带有 JSON 编码事件负载的 POST 请求。
- 从 webhook 注册响应中获取 webhook_id,该值是管理订阅所必需的。
4. 验证设置
- 将一个用户账户订阅到你的 webhook(参见下文 “Adding a Subscription”)。
- 点赞你的应用已订阅的某个 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 传递,以便让您的应用掌握所有私信活动。
- 事件重复:
- 如果两位已订阅用户在同一私信会话中,您的 webhook 会收到重复事件(每个用户各一次)。请使用 for_user_id 字段加以区分。
- 如果多个应用共享同一 webhook URL 和用户,事件会被多次发送(每个应用各一次)。
- 您的应用应基于事件 ID 进行去重,以应对偶发的重复事件。
- 示例代码:请参阅 Account Activity API 设置,查看用于展示 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,或其未与该应用关联。 |
| 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 未找到,或未与该应用程序关联。 |
端点: DELETE /2/account_activity/webhooks/:webhook_id/subscriptions/:user_id/all
描述: 为特定用户 ID 停用该订阅,停止向该 webhook 发送事件。
认证: OAuth2 应用仅限 Bearer Token。
- Bearer Token: 例如:AAAAAAAAAAAA0%2EUifi76ZC9Ub0wn…
| 参数 | 描述 |
|---|---|
| webhook_id | 包含该订阅的 webhook 的 ID。 |
| user_id | 需取消订阅的用户的数值型 ID。 |
bash
- 成功 (200 OK):
- json
- 失败(400 Bad Request):
| 原因 | 描述 |
|---|---|
| SubscriptionNotFound | 在指定的 user_id 与给定的 webhook_id 之间未找到任何订阅。 |
| WebhookIdInvalid | 提供的 webhook_id 不存在,或未与该应用关联。 |
说明: 获取当前订阅指定 webhook 的所有用户 ID 列表。
认证: 仅应用 OAuth2 Bearer 令牌。
路径参数:
| 参数 | 说明 |
|---|---|
| webhook_id | 要列出订阅的目标 webhook 的 ID。 |
bash
- 成功(200 OK):
- JSON
- 失败(400 错误的请求):
| 原因 | 说明 |
|---|---|
| WebhookIdInvalid | 提供的 webhook_id 未找到,或未与该应用关联。 |
Endpoint: GET /2/account_activity/subscriptions/count
Description: 返回当前活跃订阅的总数,以及用于认证的应用所预配的上限。
Authentication: OAuth2 应用专用 Bearer 令牌。
Request:
bash
- 成功(200 OK):
- JSON
| 参数 | 描述 |
|---|---|
| webhook_id | 要开始重放的 webhook 的 ID |
| 参数 | 描述 |
|---|---|
| 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 无效或未与该应用关联。 |
任务完成消息
账户活动数据对象结构
| 对象 | 详情 |
|---|---|
| for_user_id | 标识与该事件相关的用户订阅。 |
| is_blocked_by | (条件)仅在 Post 提及事件中显示,指当发出提及的用户被订阅用户屏蔽时。 |
| source | 执行该活动的用户(例如进行关注、屏蔽或静音的用户)。 |
| target | 活动所针对的用户(例如被关注、被屏蔽或被静音的用户)。 |
可用的活动
| 消息类型 | 详情 |
|---|---|
| tweet_create_events | 关于 Post、转发、回复、@提及、引用 Tweet 或对引用 Tweet 的转发的发布状态。 |
| favorite_events | 含用户与目标的点赞事件。 |
| follow_events | 含用户与目标的关注事件。 |
| unfollow_events | 含用户与目标的取消关注事件。 |
| block_events | 含用户与目标的屏蔽事件。 |
| unblock_events | 含用户与目标的取消屏蔽事件。 |
| mute_events | 含用户与目标的静音事件。 |
| unmute_events | 含用户与目标的取消静音事件。 |
| user_event | 当用户移除应用授权时的撤销事件(订阅将自动删除)。 |
| 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(Post、转推、回复、引用推文)
tweet_create_events(@提及)
favorite_events
follow_events
取消关注事件(unfollow_events)
block_events
解除封鎖_事件
mute_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:出现在完整文本中的任何实体(例如话题标签、URL、用户提及、符号),包括第 280 个字符之后的实体。
- display_text_range:应显示的字符范围,覆盖完整文本。
将 Account Activity API 从旧版企业版迁移到 v2
常见问题解答
- 速度:以 X 的速度传递数据。
- 简单:通过单一 webhook 连接提供所有账户事件,包括 Post、@提及、回复、转发、引用、点赞、私信、关注、拉黑和静音。
- 可扩展性:在企业版层级下,无速率限制或事件上限,支持受管账户的所有活动。
Account Activity API 参考索引
| 目的 | V2 端点 |
|---|---|
| 将应用订阅到某个账户的事件 | 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 |
| 使用仅应用 OAuth 停用订阅 | DELETE /2/account_activity/webhooks/:webhook_id/subscriptions/:user_id/all |
| 创建回放任务 | POST /2/account_activity/replay/webhooks/:webhook_id/subscriptions/all |