Метод Twilio StatusCallBack & Gather POST в .NET Core API возвращает HTTP 415 — неподдерживаемый тип носителя

Ниже мой код для обоих методов -

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");
}

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");
    }
}

person sachinbsatav    schedule 26.11.2019    source источник
comment
twilio.com/docs/sip-trunking/troubleshooting#problem8   -  person HariHaran    schedule 26.11.2019


Ответы (1)


Twilio Евангелист здесь... Извините, что у вас тяжелые времена. Похоже, ваш код пытается связать параметр voiceRequest с телом входящего запроса POST от Twilio (используя [FromBody]). Если Twilio отправляет запрос POST, вам нужно выполнить привязку к форме (using [FromForm]). В противном случае ASP.NET Core вернет код ошибки 415.

Попробуйте поменять местами [FromBody] на [FromForm]. Это должно исправить это в запросе POST. Я бы также предложил проверить, действительно ли Twilio отправляет запрос POST, а не GET.

Если у вас возникнут дополнительные проблемы, отправьте сообщение по электронной почте на адрес [email protected]. Надеюсь это поможет.

person Corey Weathers    schedule 27.11.2019
comment
Это сработало. Я думал, что пробовал FromForm. Большое спасибо. Можем ли мы также убедиться, что мы задокументировали это где-нибудь в документации Twilio. - person sachinbsatav; 29.11.2019
comment
Абсолютно. Спасибо за предложение @sachinbsatav. Рад, что это помогло - person Corey Weathers; 05.12.2019