再次寻求帮助;让我解释一下:我一直在整合WhatsApp for Business,为我们的客户提供一种向我们发送图片的方式,这样我们就可以使用Azure AI处理它们。
到目前为止完成了我是使Web API服务端点为什么Twilio webhook和信息流动的很好,我唯一的问题是:为什么Twilio将连接到我的Web API通过Web钩和POST
application/x-www-form-urlencoded
格式,在所有Request
参数我需要访问的文件列表消息的一部分(Ref: https://www.twilio.com/docs/messaging/guides/webhook-request # media-related-parameters)。
文档提到,如果有超过1个附加文件的消息,它将使用一个基于零的索引来命名每个文件,所以基本上它是一个动态的url列表,我需要映射到一个不能动态的对象。
WhatsAppMessage
模型:
public class WhatsAppMessage
{
public string MessageSid { get; set; }
public string AccountSid { get; set; }
public string MessagingServiceSid { get; set; }
public string From { get; set; }
public string To { get; set; }
public string Body { get; set; }
public string NumMedia { get; set; }
public List<string> MediaList { get; set; } //from Twilio as MediaUrl{n}
}
这是我用来处理这些帖子的代码:
[HttpPost("webhook")]
public IActionResult WebhookInterface([FromForm]WhatsAppMessage whatsAppMessage)
{
StringBuilder stringBuilder = new();
stringBuilder.Append($"Hola, dijiste '{whatsAppMessage.Body}', desde el número {whatsAppMessage.From} n");
int numAdjuntos = int.Parse(whatsAppMessage.NumMedia);
stringBuilder.Append($"Hay {numAdjuntos} archivos adjuntos al mensaje. n");
if (numAdjuntos > 0)
{
// How do I access each MediaUrl{n} which are part of the Form?
// Will be good to have a List<string> to save this urls
}
stringBuilder.Append($"URL de imagen: {whatsAppMessage.MediaUrl0}");
return Ok(stringBuilder.ToString());
}
我知道这听起来并不像一件很难做的事情,但我正在努力做到这一点!任何帮助都是有价值的!
根据文档,您的Web API可能需要多个MediaUrl和MediaContentType参数。一种解决方案是使用dynamic
类型,然后如果存在任何媒体,则手动迭代循环。
HTTP请求示例:
POST / HTTP/2.0
Host: foo.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 296
NumMedia=2&MessageSid=SMXX&SmsSid=SMXX&MediaContentType0=image/jpeg&MediaUrl0=bla.com&MediaContentType1=image/png&MediaUrl1=starwars.com
API端点:
[HttpPost("webhook")]
public IActionResult WebhookInterface([FromForm] dynamic whatsAppMessage)
{
int numAdjuntos = whatsAppMessage.NumMedia;
// 1st iteration: extract MediaUrl0 & MediaContentType0
// 2nd iteration: extract MediaUrl1 & MediaContentType1 ...
for (int i = 0; i < numAdjuntos; i++)
{
string mediaUrl = whatsAppMessage[$"MediaUrl{i}"];
string mediaContentType = whatsAppMessage[$"MediaContentType{i}"];
// ...
}
}