Twilio Studio Webhook返回含Body仍报错:消息体必填问题排查
问题分析与解决
你遇到的问题根源是返回的Twilio XML格式不符合官方要求,导致Twilio无法正确解析出消息体,因此抛出了“Message body is required”的错误。下面拆解你的代码问题并给出修正方案:
核心错误点
标签用法错误 :Twilio的<Message>标签中,发送方标识应该作为from属性传入,而非单独的<From>子标签,且不需要添加From=前缀。- 标签用法错误:你无需在
<Message>内嵌套<Body>标签,更不该在内容前加Body=前缀。消息正文可以直接写在<Message>标签内部,若要显式用<Body>,只需在标签内直接放文本内容即可。 - 不必要的HTML实体转义:你代码里用
<代替<、>代替>完全没必要,因为已经设置了Content-Type:text/xml,直接输出XML标签字符即可被Twilio正确识别。
修正后的代码
function trigger_receive_sms($from) { header ('Content-Type:text/xml'); echo '<?xml version="1.0" encoding="UTF-8"?>'; echo '<Response>'; // 将from作为Message的属性,正文直接放在标签内 echo '<Message from="MCC">'; echo 'Thank you for accepting this position. Here is the body content'; echo '</Message>'; echo '</Response>'; die(); }
如果需要拆分感谢语和主体内容,也可以用显式的<Body>标签写法:
function trigger_receive_sms($from) { header ('Content-Type:text/xml'); echo '<?xml version="1.0" encoding="UTF-8"?>'; echo '<Response>'; echo '<Message from="MCC">'; echo '<Body>Thank you for accepting this position. Here is the body content</Body>'; echo '</Message>'; echo '</Response>'; die(); }
为什么之前的代码会报错?
你返回的XML结构中,<Message>的直接内容是Thank you for accepting this position.,但后续嵌套的<From>和<Body>子标签不符合Twilio的XML规范——Twilio不会把这些子标签的内容识别为消息体的一部分,因此它认为没有有效的消息正文,从而抛出错误。
内容的提问来源于stack exchange,提问作者Dean Harry
相关产品推荐
相关产品推荐

