在Twilio发送SMS时添加请求头,接收回复时获取头信息的方法
在Twilio发送SMS并在回复时获取自定义元数据的正确方法
问题分析
你用X-Twilio-Additional-Metadata请求头传递元数据的方式不对——这个头只会被Twilio记录在请求日志里,不会自动关联到用户回复的Webhook请求中,所以你拿不到对应的头信息。
正确实现步骤
1. 发送短信时绑定自定义元数据
推荐用Twilio官方SDK发送,能直接给消息绑定自定义元数据(存在Attributes字段,支持JSON格式):
using Twilio; using Twilio.Rest.Api.V2010.Account; using Twilio.Types; // 初始化客户端 TwilioClient.Init(accountSid, authToken); // 自定义元数据,转成JSON字符串 var customMetadata = "{\"tag\":\"test\", \"user_id\":\"123\"}"; // 发送短信并绑定元数据 var message = MessageResource.Create( body: "Hello, world!", from: new PhoneNumber("+15077087284"), to: new PhoneNumber("+14243089011"), attributes: customMetadata ); // 可选:把消息Sid和元数据存到你的数据库,方便后续快速查询 // SaveToDb(message.Sid, customMetadata);
如果一定要用HttpClient发送,要在表单参数里加Attributes字段,而不是自定义请求头:
var parameters = new Dictionary<string, string>() { { "Body", "Hello, world!" }, { "From", "+15077087284" }, { "To", "+14243089011" }, { "Attributes", "{\"tag\":\"test\"}" } // 这里放自定义元数据 }; request.Content = new FormUrlEncodedContent(parameters); // 不需要X-Twilio-Additional-Metadata这个头
2. 接收用户回复时获取元数据
当用户回复短信,Twilio会向你配置的Webhook URL发POST请求,请求里带OriginalMessageSid(就是你之前发的那条短信的Sid)。你有两种方式拿元数据:
- 调用Twilio API查询
在你的Webhook处理代码里,用OriginalMessageSid查原消息的Attributes:using Twilio.Rest.Api.V2010.Account; // 从请求表单里取OriginalMessageSid var originalSid = Request.Form["OriginalMessageSid"]; // 查询原消息 var originalMessage = MessageResource.Fetch(pathSid: originalSid); // 拿到自定义元数据 var metadata = originalMessage.Attributes; - 查本地数据库
发送短信时把MessageSid和元数据存到你的数据库,回复时用OriginalMessageSid直接查库,不用调用Twilio API,速度更快。
注意点
Attributes字段最多支持1024字符的JSON,别超限制。- 你的Webhook URL必须是公网能访问的,调试可以用ngrok之类的工具内网穿透。
- 配置Webhook时选POST方法,请求格式选
application/x-www-form-urlencoded。
内容的提问来源于stack exchange,提问作者Ramakrishna Reddy
相关产品推荐
相关产品推荐

