使用C#通过Twilio发送WhatsApp媒体模板消息失败求助
问题排查与修复方案
核心问题
你在发送WhatsApp模板消息时,错误地同时指定了ContentSid(审核通过的模板)和MediaUrl参数。Twilio处理模板消息时,会完全依赖模板定义的结构,通过ContentVariables替换变量,手动添加MediaUrl会触发URL验证逻辑,导致错误。
具体原因
- 当使用
ContentSid发送消息时,模板中的媒体URL变量{{1}}会自动通过ContentVariables里的"1": "blah/test.pdf"完成替换,生成完整的媒体URL。 - 你额外设置的
MediaUrl = new List<Uri> { new Uri("https://azure.blah.blah/{{1}}") }是给非模板消息使用的参数,Twilio会直接验证这个URL的有效性,带占位符的URL不符合要求,因此触发63013错误。 - 仅填写域名时,Twilio无法获取有效媒体,会 fallback 到模板中上传的示例文件,这说明模板本身的配置是正常的。
修复步骤
- 移除
MediaUrl参数:删除代码中MediaUrl = new List<Uri> { ... }这一行,只保留模板相关参数。 - 验证变量拼接后的URL有效性:确保替换后的完整URL(
https://azure.blah.blah/blah/test.pdf)可以被公开访问,或者Twilio的IP地址已被允许访问你的Azure存储资源。
修正后的代码示例
string contentSID = "blah"; var contentVariables = JsonConvert.SerializeObject(new Dictionary<string, Object>() { {"1", "blah/test.pdf"} }, Formatting.Indented); var templateOptions = new CreateMessageOptions(new PhoneNumber($"whatsapp:{address}")) { ContentSid = contentSID, MessagingServiceSid = "blah", ContentVariables = contentVariables }; var message = await MessageResource.CreateAsync(templateOptions);
额外检查
- 确认Azure Blob存储的访问权限设置正确,Twilio需要能够读取该媒体文件(可以通过浏览器直接访问URL测试)。
- 检查变量值是否包含多余的斜杠或路径错误,确保拼接后的URL完全正确。
内容的提问来源于stack exchange,提问作者JustLearning
相关产品推荐
相关产品推荐

