PHP/Laravel环境下用户退订短信时Twilio Try/Catch未抛出异常问题
问题原因与解决方案
1. 退订后创建会话未返回forbidden的原因
Twilio的STOP退订规则是短信投递环节的拦截逻辑,不会作用于会话创建、参与者添加这两类接口:
- 你调用创建会话、添加退订号码为参与者的接口时,Twilio只会校验参数合法性、账户权限,不会校验目标号码的退订状态,因此不会同步抛出403错误
- 错误会在实际触发短信投递时产生,对应的Twilio错误码通常为
21610(向已退订号码发送短信),部分场景下该错误为异步返回,不会在你调用messages->create()时同步抛出异常,你可以登录Twilio控制台查看对应消息的投递状态和错误日志确认。
2. 是否需要拆分try/catch块
不需要强制拆分,可根据你的业务需求决定:
- 如果你只需要统一捕获所有Twilio接口异常、统一返回错误提示,你现在的外层统一套try/catch的写法完全够用
- 如果你需要针对不同环节的失败做差异化处理(比如创建会话失败直接返回提示,添加参与者失败需要先删除已经创建成功的空会话避免产生无用资源、对应不同的错误返回不同的用户提示),再拆分到单个操作做单独捕获即可。
优化建议
你当前数据库表已经设计了optedOut字段,建议补充Twilio退订/复订webhook的监听:当用户回复STOP退订时,自动将对应Recipient_Number的optedOut字段标记为true,每次创建会话、发消息前先校验该字段状态,为true直接拦截请求,无需调用Twilio接口,既减少不必要的请求,也能提前拦截错误。
内容的提问来源于stack exchange,提问作者Webdevbuilds
相关产品推荐
相关产品推荐

