【发布时间】:2016-10-28 21:40:24
【问题描述】:
所以我正在构建一个带有 twilio 语音的应用程序,并且我已经让所有的电话功能都正常工作了。但是我在理解我的回调应该有哪些参数时遇到了一些麻烦。
我已按照文档中的说明注册了 URL:
options.From = formatPhoneNumber(callout.callback_number);
options.To = formatPhoneNumber(offer.employee_phone_number);
options.Url = TwilioCallBotController.TwilioCalloutScriptURL;
options.StatusCallback = TwilioCallBotController.StatusCallbackURL;
options.StatusCallbackEvents = new []{"initiated", "ringing", "answered", "completed" };
options.StatusCallbackMethod = "POST";
我也在这里创建了一个回调方法,但我没有找到参数应该如何与他们的 API 一起工作的运气。我有点不知道这个不工作的原因可能是什么:
[HttpPost]
public ActionResult TwilioStatusCallback()
{
var twiml = new Twilio.TwiML.TwilioResponse();
twiml.Say("This is a test");
string CallSid = Request.Form["CallSid"];
string CallStatus = Request.Form["CallStatus"];
Debug.WriteLine("Status Callback Delivered");
Shift_Offer shoffer = db.Shift_Offers.Where(s => s.twillio_sid == CallSid).ToList()[0];
shoffer.status = CallStatus.ToString();// + DateTime.Now.ToString();
return TwiML(twiml);
}
编辑: 所以事实证明,API 对方法签名非常敏感(该调用之前在许多微软 DLL 中抛出了方法未找到异常,包括 System.Web 和 System.Web.Mvc。
所以我实际上已经让软件通过使用空方法签名(无参数)来调用该方法。
但是我仍然无法从 HTTPPOST 获取参数
编辑:因此,经过进一步调查,我设法检查了请求。我追求的值存在于 Request.Form["foo"] 中,但它们似乎没有被放入我声明的两个字符串中。我已删除 ["HttpPost"] 属性以尝试解决问题,但我真的不知道为什么我可以在调试器中看到这些值,但它们并没有转换到内存中。
public ActionResult TwilioStatusCallback()
{
var twiml = new Twilio.TwiML.TwilioResponse();
string sid = Request.Form["CallSid"];
string status = Request.Form["CallStatus"];
Shift_Offer shoffer = db.Shift_Offers.Where(s => s.twillio_sid == sid).ToList()[0];
shoffer.status = status;// + DateTime.Now.ToString();
return TwiML(twiml);
}
【问题讨论】:
标签: c# asp.net rest twilio-api