Twilio如何取消消息/语音webhook订阅以停止接收号码事件通知
Twilio没有提供独立的、专门用于停止Webhook推送的API,相关需求可以通过以下两种成熟方案实现:
方案一:调用号码配置更新API清空Webhook地址(长期停推首选)
Twilio的Webhook规则是绑定在激活号码的配置属性上的,直接调用更新 incoming phone number 的REST API,把对应类型的Webhook地址字段设为空字符串即可停止推送,操作即时生效,不会影响号码本身的激活状态和正常接打、收发短信能力。
对应需要清空的字段:- 语音类事件Webhook:清空
VoiceUrl字段 - 短信类事件Webhook:清空
SmsUrl字段
示例请求(curl):
curl -X POST "https://api.twilio.com/2010-04-01/Accounts/<你的AccountSid>/IncomingPhoneNumbers/<目标号码的Sid>.json" \ --data-urlencode "SmsUrl=" \ --data-urlencode "VoiceUrl=" \ -u "<你的AccountSid>:<你的AuthToken>"接口返回200状态码即代表配置更新完成,后续该号码的对应事件将不再触发Webhook推送。后续需要恢复推送时,重新把对应字段设置为你的Webhook地址即可。
- 语音类事件Webhook:清空
方案二:Webhook接收端做逻辑拦截(临时停推首选)
如果你只是需要临时暂停Webhook通知处理,不想频繁修改Twilio侧的号码配置,可以在自有Webhook服务端增加开关配置:当开关置为关闭状态时,所有来自Twilio的Webhook请求直接返回200状态码 + 空的合法TwiML响应<Response></Response>,不执行后续业务逻辑即可。注意:不要通过返回4xx/5xx错误码的方式拦截请求,Twilio默认开启Webhook失败重试机制,返回错误会触发平台按照退避策略多次重复推送,反而额外占用服务资源。
如果不需要全量停止推送,只是想过滤部分特定事件,直接在Webhook接收端增加事件类型判断逻辑即可,非目标事件直接返回空TwiML,不需要调整Twilio侧的任何配置。
内容的提问来源于stack exchange,提问作者Shanan

