sac*_*tav 0 c# twilio twilio-api asp.net-core-webapi
以下是我对这两种方法的代码 -
GatherCall正在返回 Twiml 仍然我得到 HTTP 415 和相同的StatusCallback方法。有人可以在这里帮忙吗?我什至无法使用 ngrok 对此进行测试,因为隧道工具在我的组织网络中不起作用。我正在使用 Azure 通过记录所有内容来测试这个。
public TwiMLResult GatherCall([FromRoute] string id, [FromBody] VoiceRequest voiceRequest )
{
_logger.LogInformation("*****************GatherCall - Start****************");
var response = new VoiceResponse();
try
{
_logger.LogInformation("Gather call back for -" + id);
_logger.LogInformation("VoiceRequest parameters-------------------------");
_logger.LogInformation("CallSid : " + voiceRequest.CallSid);
_logger.LogInformation("CallStatus : " + voiceRequest.CallStatus);
_logger.LogInformation("AccountSid : " + voiceRequest.AccountSid);
_logger.LogInformation("From : " + voiceRequest.From);
_logger.LogInformation("To : " + voiceRequest.To);
_logger.LogInformation("Digits : " + voiceRequest.Digits);
_logger.LogInformation("Direction : " + voiceRequest.Direction);
_logger.LogInformation("TranscriptionText : " + voiceRequest.TranscriptionText);
if (voiceRequest.Digits == "1234")
{
response.Say("Your response has been recorded. Thank you.", voice: "alice");
response.Hangup();
//acctepted response
//update call status to db
//acknowledge incident
}
else
{
response.Say("Incorrect code enterted. Please enter correct code to accespt this incident", voice: "alice");
response.Pause(3);
response.Hangup();
}
_logger.LogInformation("*****************GatherCall - EndTry****************");
}
catch (Exception ex)
{
_logger.LogError(ex.Message);
_logger.LogInformation("*****************GatherCall - EndCatch****************");
}
return TwiML(response);
// return TwiML(response.ToString(), "application/xml");
}
Run Code Online (Sandbox Code Playgroud)
public IActionResult StatusCallBack([FromRoute] string id, [FromBody] StatusCallbackRequest statusCallbackRequest)
{
_logger.LogInformation("*****************StatusCallBack - Start****************");
try
{
_logger.LogInformation("Status call back called for -" + id );
_logger.LogInformation("StatusCallbackRequest parameters-------------------------");
_logger.LogInformation("CallSid : " + statusCallbackRequest.CallSid);
_logger.LogInformation("CallStatus : " + statusCallbackRequest.CallStatus);
_logger.LogInformation("AccountSid : " + statusCallbackRequest.AccountSid);
_logger.LogInformation("From : " + statusCallbackRequest.From);
_logger.LogInformation("To : " + statusCallbackRequest.To);
_logger.LogInformation("Digits : " + statusCallbackRequest.Digits);
_logger.LogInformation("Direction : " + statusCallbackRequest.Direction);
_logger.LogInformation("TranscriptionText : " + statusCallbackRequest.TranscriptionText);
_logger.LogInformation("*****************StatusCallBack - EndTry****************");
return Ok("Handled");
}
catch (Exception ex)
{
_logger.LogError(ex.Message);
_logger.LogInformation("*****************StatusCallBack - EndCatch****************");
return Ok("Handled in catch");
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
Twilio Evangelist 在这里...抱歉,您遇到了困难。看起来您的代码正在尝试将voiceRequest参数绑定到来自 Twilio 的传入 POST 请求的正文(使用[FromBody])。如果 Twilio 正在发送 POST 请求,您需要绑定到表单 ( using [FromForm])。否则,ASP.NET Core 将返回 415 错误代码。
尝试换出[FromBody]了[FromForm]。这应该在 POST 请求上解决这个问题。我还建议验证 Twilio 实际上发送的是 POST 请求,而不是 GET 请求。
如果您遇到更多问题,请通过电子邮件向 corey@twilio.com 发送说明。希望这可以帮助。