Bot Framework对接Twilio时MMS状态始终为Sent无法送达问题
我来帮你搞定这个MMS发送的坑!Twilio里状态显示Sent和Delivered的区别很关键:Sent说明Twilio已经把消息传给接收方的运营商了,但运营商没确认消息最终到用户设备上。结合你纯文本SMS能正常送达的情况,咱们从这几个方向逐一排查:
先检查媒体资源的可访问性
Twilio必须能公开、无权限限制地访问到你附加的图片,而且得是HTTPS链接(HTTP的不行)。如果你的图片是本地路径、内网地址或者需要登录才能看的链接,Twilio根本拉不到,自然没法转成MMS发送。
测试方法很简单:直接在浏览器里打开你用的图片链接,看看能不能秒加载出来,不用输账号密码或者跳验证。要是不行,就把图片传到公开存储服务,换个公开HTTPS链接试试。确认接收方号码/设备支持MMS
哪怕是美国号码,也有部分预付费套餐或者老旧机型不支持MMS。你可以换个其他美国号码测试,或者用Twilio自带的测试号码验证。另外,运营商一般对MMS大小有限制,单张图片别超1MB,总媒体大小控制在5MB以内,太大的话会被运营商拦截。简化代码,测试基础MMS发送
你当前用的是HeroCard,虽然Bot Framework支持,但Twilio MMS可能对这种富卡片的兼容性不如直接的媒体附件好。试试用最基础的Attachment方式发送:var msg = new builder.Message(session); msg.addAttachment({ contentType: "image/jpeg", // 根据你的图片格式调整,比如png用image/png contentUrl: "https://你的公开图片链接.jpg" }); session.send(msg);先测试这种方式能不能成功,排除卡片格式带来的问题。
深挖Twilio的日志细节
别只看状态是Sent,点进这条消息的日志详情,看「Debug」标签页,里面会有运营商返回的具体信息——比如有没有提示“媒体无效”“消息被拦截”之类的,这能直接帮你定位根因。确认发送用的Twilio号码支持MMS
最后检查下你用来发消息的Twilio号码,在控制台的号码详情页里看「Capabilities」,确保MMS是开启状态。有些Twilio虚拟号默认只支持SMS,得手动开MMS权限。
内容的提问来源于stack exchange,提问作者Planet-Zoom

