C# Twilio WhatsApp入站消息返回PDF链接无法解析为文件如何处理?
问题解决方案
你遇到的URL无法被解析为文件、仅显示纯文本的问题,按以下步骤排查修改即可解决:
- 首先修正媒体链接的可访问性
- 你当前用的
localhost本地链接、未指向实际资源的占位符链接Twilio无法正常抓取,必须替换为公网可直接访问、无强制登录/鉴权、直接返回PDF文件流的直链 - 链接对应的响应头
Content-Type必须为application/pdf,不能是文本类型,同时PDF文件大小不能超过16MB,这是Twilio对接WhatsApp的媒体文件限制
- 你当前用的
- 调整TwiML构造逻辑
- 不要把文件链接放到
Body文本里,Body仅放提示文本即可,链接只需要传给Media()方法,否则Body里的链接本身就会显示为纯文本 - 确认你代码里
message.Media(link)的link变量是你实际的文件公网链接,不要用占位符
- 不要把文件链接放到
- 修改后的代码参考:
[HttpPost("InboundMessage")] [Consumes("application/x-www-form-urlencoded")] public TwiMLResult InboundMessage([FromForm] WhatsappInboundMessage Input) { var em = whatsappMessageLogData.GetAll(Input.From, TenantId); if (em.Count > 0) { em = em.OrderByDescending(x => x.CreatedOn).ToList(); var latestItem = em.FirstOrDefault(); var difference = (DateTime.Now - latestItem.CreatedOn).TotalHours; if (difference < 2) { var message = new Message(); // Body仅保留提示,不要放文件链接 message.Body("你请求的文件已为你准备好,请查收附件"); // 直接传入公网可访问的PDF链接 message.Media(latestItem.FileAccessLink); response.Append(message); return TwiML(response); } } var res = whatsappIMData.Save(Input); response.Message(res); return TwiML(response); }
- 修正后正确的TwiML格式示例:
<?xml version="1.0" encoding="utf-8"?> <Response> <Message> <Body>你请求的文件已为你准备好,请查收附件</Body> <Media>https://location.website.com/filename.pdf</Media> </Message> </Response>
调整完成后重新测试,WhatsApp就会自动将Media标签里的链接解析为PDF附件发送,不会再显示纯文本链接。
内容的提问来源于stack exchange,提问作者JianYA
相关产品推荐
相关产品推荐

