V2 Webhooks API
概览
功能摘要
| 等级 | 价格 | Webhook 数量 |
|---|---|---|
| 自助 免费 | $5000/月 | 1 |
| 企业版 | 联系销售 | 5+ |
支持 Webhook 的产品
管理 Webhook
1. 开发 Webhook 消费者应用
- 创建一个具有公网可访问 HTTPS URL 的 Web 应用,将其作为接收事件的 webhook 终端(endpoint)。
- URI 的路径可自行决定。以下示例有效:https://mydomain.com/service/listen
- 如果你要同时监听来自多种来源的 webhook,常见的模式是:https://mydomain.com/webhook/twitter
- 注意,指定的 URL 不能包含端口(https://mydomain.com:5000/NoWorkie)。
- 首先编写代码以接收 X 的 Challenge Response Check(CRC)GET 请求,并返回格式正确的 JSON 响应。
- 注册你的 webhook URL。你需要向 /2/webhooks 端点发起一个 POST 请求,在 JSON 正文中包含该 URL。发起此请求后,X 会向你的 Web 应用发送 CRC 请求。
- 当 webhook 注册成功后,响应会包含一个 webhook id。稍后在对支持 webhook 的产品发起请求时需要用到该 webhook id。
- X 会向你注册的 URL 发送包含事件的 POST 请求。这些事件将以 JSON 编码。示例 webhook JSON 负载见此处。
可选:使用 xurl 进行测试
xurl 项目 的最新版本,配置授权后运行:
- 在注册 webhook URL 时,你的 Web 应用需要使用应用的 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 企业版来显示 webhook 事件的 Node Web 应用。
2. Webhook 安全性
- 挑战—响应校验使 X 能够确认接收 webhook 事件的 Web 应用的所有权。
- 每个 POST 请求中的签名标头使你能够确认传入的 webhook 确实来自 X。
3. Webhooks API
https 回调 URL 必须在 JSON 正文中传递。先为指定的应用上下文注册一个新的 webhook URL。 认证: OAuth2 仅应用 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 的列表响应中获取。
认证:
OAuth2 应用仅限 Bearer Token
- Bearer token
<BEARER_TOKEN>例如AAAAAAAAAAAA0%2EUifi76ZC9Ub0wn...
| 参数 | 说明 |
|---|---|
webhook_id | 要删除的 webhook 的 ID。 |
| 原因 | 说明 |
|---|---|
WebhookIdInvalid | 未找到提供的 webhook_id,或其未与您的应用关联。 |
valid 来重新启用该 webhook。
认证:
OAuth2 应用专用 Bearer 令牌
- Bearer 令牌
<BEARER_TOKEN>,例如AAAAAAAAAAAA0%2EUifi76ZC9Ub0wn...
| 参数 | 描述 |
|---|---|
webhook_id | 要验证的 webhook 的 id。 |
valid 字段反映的是检查尝试之后的状态。若 CRC 检查成功,webhook 的状态将更新为 valid。你可以使用 GET /2/webhooks 查看当前状态。
| 原因 | 说明 |
|---|---|
WebhookIdInvalid | 提供的 webhook_id 未找到,或未与您的应用关联。 |
CrcValidationFailed | 回调 URL 未对 CRC 校验请求作出正确响应。 |
4. CRC 检查
- 初次注册 webhook(
POST /2/webhooks) - 由 X 每小时进行一次校验
- 通过
PUT /2/webhooks/:id手动触发
- 使用 crc_token 作为消息
- 使用应用的**consumer secret(消费者密钥)**作为密钥
- 生成 HMAC-SHA256 哈希
- 将结果进行 Base64 编码
示例应用
- Simple webhook server
- 一个单文件的 Python 脚本,演示如何响应 CRC 检查并接收 POST 事件。
- Account Activity API 示例控制台
- 使用 bun.sh 构建的 Web 应用,可直接在应用内管理 webhook、订阅,并接收实时事件。