跳转到主要内容
Twilio 在处理短信、语音等请求时遇到问题,会在 Debugger 中记录一条事件,并按级别分为 Error(请求无法处理)和 Warning(请求仍被处理)。通过 Twilio 控制台的 Error webhook,可以把 Error 级别的事件同步到 Flashduty On-call:
  • 同一 Twilio 账户上同一错误码的事件合并为一条告警,例如您的应用地址返回 404 导致的一批 11200 错误
  • Warning 级别的事件不生成告警
Error webhook 在 Twilio 的所有区域(US1、IE、AU)都可以使用。

在 Flashduty On-call

您可通过以下两种方式获取集成推送地址,任选其一即可。

使用专属集成

  1. 进入 Flashduty 控制台,选择 协作空间,打开一个协作空间
  2. 选择 配置 → 集成数据 → 专属集成,点击 新增集成
  3. 选择 Twilio,点击 保存
  4. 打开生成的集成卡片,复制 推送地址

使用共享集成

  1. 进入 Flashduty 控制台,选择 集成中心 → 告警事件
  2. 选择 Twilio,填写集成名称
  3. 配置默认路由并选择协作空间;创建后可在 路由 中增加更多规则
  4. 点击 保存,复制生成的 推送地址

在 Twilio 中配置

1

在 Twilio 中填写 Error webhook

操作路径:Twilio Console › Monitor › Error webhookTwilio 文档将该设置放在控制台的 Monitor 下;新版控制台可能已把它移到 Develop › Troubleshoot › Error Webhook,这一位置尚未在 Twilio 官方文档中得到确认。找不到时,在控制台搜索 “Error webhook”。保存。
2

开启超时自动关闭

操作路径:Flashduty 控制台 › 协作空间 › 配置 › 设置 › 高级配置Debugger 事件是一次性的日志,Twilio 不会在错误消失后再发送通知,告警不会自动恢复。故障关闭时,关联的告警一并关闭;错误仍在发生时,下一条事件会重新打开告警。详见 超时自动关闭。
3

产生一条真实的 Error 事件并验证

操作路径:Twilio Console › Phone NumbersError webhook 没有“发送测试通知”按钮,请用真实的 Error 事件验证:
  1. 在 Phone Numbers 中打开一个号码,把 A call comes in 的地址改成一个会返回 404 的地址,例如 https://example.com/not-found
  2. 拨打这个号码,Twilio 请求该地址失败,在 Debugger 中记录错误 11200
  3. 几秒后 Flashduty 中出现标题为 Twilio error 11200: ... 的告警
测试完成后把号码的地址改回原值。回到 Flashduty,集成显示 最新事件时间,说明配置成功。

推送内容

Twilio 每次推送一个 Debugger 事件,请求体为 application/x-www-form-urlencoded,其中 Payload 是 JSON: 每条告警还带有标签 source=twilio,描述中附有该错误码在 Twilio 错误字典中的链接(https://www.twilio.com/docs/errors/<错误码>)。标题示例:Twilio error 11200: An attempt to retrieve content from https://app.example.com/voice returned the HTTP status code 404。

Alert Key

Flashduty 用 AccountSid 和 Payload.error_code 共同计算 Alert Key,不使用事件 ID Sid:
  • 同一账户上同一错误码的事件合并到同一条告警,告警的标题、描述和标签显示最近一次事件的内容
  • 不同错误码、不同账户(包括不同子账户)的事件是不同的告警
  • 这与 Twilio Alarms 按账户、按错误码统计错误的方式一致

状态和告警等级

Error 事件缺少 AccountSid 或 Payload.error_code,或 Payload 不是合法的 JSON 时,请求会被拒绝。

常见问题

Twilio 把请求仍能被处理的问题记为 Warning,例如 TwiML 校验警告。这类事件数量多、通常不需要值班人员立即处理,Flashduty 返回成功但不生成告警。它们仍然可以在 Twilio 的 Debugger 中查看。
同一账户、同一错误码的事件会合并到一条告警上,告警的事件数随之增加,不会为每次出错单独打开告警。开启超时自动关闭后,故障在超时后关闭;如果错误还在发生,下一条事件会打开新的告警。
不需要。Flashduty 通过推送地址中的 integration_key 识别集成,不校验 X-Twilio-Signature 签名。请像保管密钥一样保管推送地址。

排查问题

  • Twilio 的 Debugger 中出现错误但 Flashduty 没有告警:确认 Error webhook(见步骤 1 的位置说明)中的地址完整(包含 integration_key),并且事件级别为 Error
  • 请求被拒绝(4xx):确认推送地址是 Twilio 集成的地址,不是其他集成的地址
  • 告警一直不关闭:在协作空间中开启超时自动关闭