我正在开发一种短信服务,预计会发送短信。除此之外,我需要跟踪短信的状态。
我使用Twilio作为SMS提供程序,使用ServiceStack实现服务层。
我可以看到SMS已成功发送,但是,我没有收到有关已配置的回调网址的任何回复。
var message = MessageResource.Create(to: new PhoneNumber(sms.ToNumber),
from: new PhoneNumber(sms.FromNumber),
body: sms.MessageBody,
statusCallback: new Uri("http://8754622.ngrok.io/json/oneway/TwilioCallBack"));
我已经下载了Ngrok,并运行它来映射localhost网站以使其可以在外部访问。
以下是我试图处理来自Twilio的回调
public object Post(TwilioCallBack request)
{
return _notificationProviderManager.SaveCallBackEvent(request.MessageStatus);
}
[Route("/TwilioCallBack", "POST")]
public class TwilioCallBack : INotificationCallBack
{
public int id { get; set; }
public string MessageStatus { get; set; }
}
虽然我可以看到短信发送到目的地号码,但我看不到回拨级别发生的任何事情。
有人可以建议需要做什么吗?
对此的任何帮助将不胜感激。
由于
答案 0 :(得分:2)
如果回调是GET,我将离开路线并开启以接受任何 HTTP动词,例如:
public object Any(TwilioCallBack request) { ... }
[Route("/TwilioCallBack")]
public class TwilioCallBack { ... }
由于您已定义了自定义路由,因此您应该在回调中使用它(即代替预定义路由):
statusCallback: new Uri("http://8754622.ngrok.io/TwilioCallBack"));
答案 1 :(得分:0)
经过多次尝试,并参考各种帖子后,我才知道如果请求包含查询字符串,Twilio回调不能正常工作。
在这些情况下,Twilio会报告Failed to parse StatusCallback URL per RFC2396
错误,我们可以在Twilio的调试器中看到错误。
这篇文章简要介绍了这个问题 - https://github.com/twilio/twilio-node/issues/145这个问题在Github中被某个人标记为已解决,但我仍然面临同样的问题。希望有人能够调查那里。
不幸的是,我不得不从回调网址中删除查询字符串参数,之后我可以看到POST请求进入并点击服务。