v2 Webhooks API
概览
功能概览
级别 | 价格 | webhook(回调接口)数量 |
---|---|---|
自助式 Pro | $5000/月 | 1 |
Enterprise | 联系销售 | 5+ |
支持 webhook 的产品
管理 Webhooks
1. 开发 Webhook 消费方 App
- 创建一个具有公网可访问 HTTPS URL 的 Web 应用,该应用将充当 webhook endpoint 来接收事件。
- URI 的路径由您自行决定。例如:https://mydomain.com/service/listen
- 如果需要同时接收来自多种来源的 webhooks,常见的路径模式是:https://mydomain.com/webhook/twitter
- 请注意,指定的 URL 不能包含端口号(https://mydomain.com:5000/NoWorkie)。
- 首先编写代码以接收来自 X 的 Challenge Response Check(CRC)GET 请求,并返回格式正确的 JSON 响应。
- 注册您的 webhook URL。您需要向 /2/webhooks endpoint 发送一个 POST 请求,并在 JSON body 中包含该 URL。发出该请求后,X 会向您的 Web 应用发送 CRC 请求。
- 当 webhook 注册成功时,响应会包含一个 webhook id。后续在调用支持 webhooks 的产品时需要该 webhook id。
- X 会向您注册的 URL 发送包含事件的 POST 请求。这些事件将采用 JSON 编码。参见此处以查看示例 webhook JSON 载荷。
可选:使用 xurl 进行测试
xurl
project 的最新版本,配置授权后运行:
- 注册你的 webhook URL 时,你的 Web 应用需要使用 App 的 consumer secret 对 CRC 校验进行加密。
- 所有收到的私信都会通过 webhook(回调接口)投递。通过 POST /2/dm_conversations/with/:participant_id/messages 发送的所有私信也会通过 webhook(回调接口)投递。这样你的 Web 应用就能感知由其他客户端发送的私信。
- 如果有多个 Web 应用共享同一个 webhook URL,且同一用户被映射到每个应用,则同一事件会多次发送到你的 webhook(每个 Web 应用各一次)。
- 在某些情况下,你的 webhook 可能会收到重复事件。你的 webhook 应用应具备容错能力,并根据事件 id 进行去重。
-
请参阅示例代码:
- Account Activity API Setup:一个使用 Account Activity API Enterprise 等级来显示 webhook 事件的 Node Web 应用。
2. 保护 Webhook
- 挑战-响应检查使 X 能够确认接收 webhook 事件的 Web 应用的所有权。
- 每个 POST 请求中的签名请求头使你能够确认传入的 webhook 来自 X。
3. Webhooks API
https
回调 URL 必须在 JSON 请求体中传递。先为给定的应用程序 context 注册一个新的 webhook URL。 认证: OAuth2 App Only Bearer Token
- Bearer token
<BEARER_TOKEN>
例如AAAAAAAAAAAA0%2EUifi76ZC9Ub0wn...
- URL
<URL>
,例如https://yourdomain.com/webhooks/twitter/
原因 | 说明 |
---|---|
CrcValidationFailed | 回调 URL 未对 CRC 检查作出正确响应(例如超时、响应格式不正确)。 |
UrlValidationFailed | 提供的回调 URL 不满足要求(例如不是 https 、格式无效)。 |
DuplicateUrlFailed | 你的应用已为该回调 URL 注册了一个 webhook(回调接口)。 |
WebhookLimitExceeded | 你的应用已达到允许的 webhook(回调接口)配置数量上限。 |
-
Bearer token
<BEARER_TOKEN>
,例如AAAAAAAAAAAA0%2EUifi76ZC9Ub0wn...
-
URL
<URL>
,例如https://yourdomain.com/webhooks/twitter/
webhook_id
删除 webhook 配置。该 ID 可从 POST /2/webhooks
的创建响应或 GET /2/webhooks
的列表响应中获取。
认证:
OAuth 2.0 App only OAuth 2.0 Bearer Token
- Bearer token
<BEARER_TOKEN>
例如AAAAAAAAAAAA0%2EUifi76ZC9Ub0wn...
参数 | 描述 |
---|---|
webhook_id | 要删除的 webhook 的 id。 |
原因 | 描述 |
---|---|
WebhookIdInvalid | 提供的 webhook_id 未找到或未与您的 App 关联。 |
valid
以重新启用该 webhook。
认证:
OAuth 2.0 App only Bearer Token
- Bearer token
<BEARER_TOKEN>
例如AAAAAAAAAAAA0%2EUifi76ZC9Ub0wn...
参数 | 说明 |
---|---|
webhook_id | 要验证的 webhook 的 id。 |
valid
字段反映的是检查尝试之后的状态。如果 CRC 检查成功,webhook(回调接口)的状态将更新为 valid。您可以使用 GET /2/webhooks
验证当前状态。
原因 | 描述 |
---|---|
WebhookIdInvalid | 提供的 webhook_id 未找到,或未与您的 App 关联。 |
CrcValidationFailed | 回调 URL 未正确响应 CRC 校验请求。 |
4. CRC 校验
- 初次注册 webhook 时(
POST /2/webhooks
) - 由 X 每小时定期验证
- 通过
PUT /2/webhooks/:id
手动触发
- 使用 crc_token 作为消息
- 使用 App 的 consumer secret 作为密钥
- 生成 HMAC SHA-256 hash
- 将结果进行 Base64 编码
示例 App
- Simple webhook server
- 一个独立的 Python 脚本,演示如何响应 CRC 校验并接收 POST 事件。
- Account Activity API sample dashboard
- 一个使用 bun.sh 构建的 Web 应用,支持在 App 内直接管理 webhook(回调接口)、订阅,并接收实时事件。