所以我用twilio语音构建应用程序,并且我已经完成了所有电话呼叫工作。但是我在理解回调应该具有的参数方面有点麻烦。
我已按照文档中所述注册了网址:
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获取参数
编辑:因此,经过进一步调查,我设法检查了请求。我之后的值I' m存在于Request.Form [" foo"]中,但它们似乎没有被放入我声明的两个字符串中。我已经删除了[" HttpPost"]属性以尝试解决问题,但我真的不知道为什么我可以在调试器中看到这些值,但是他们&# 39;不要翻译成记忆。
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);
}
答案 0 :(得分:1)
最后一个问题是数据库没有被保存。
刚刚添加了一个db.SaveChanges(),我们很好。