Следующий код Twilio не работает. Это мой обработчик веб-перехватчиков в приложении ASP.NET (Core) 6.0.
[AllowAnonymous]
[HttpPost]
[Route("webhook-url")]
public IActionResult PostTwilioMessageReceived([FromForm] TwilioMessageReceivedFormModel formModel)
{
// logging code etc.
var response = new Twilio.TwiML.MessagingResponse();
response.AddText($"You sent '{formModel.Body}' but our systems are dumb and can't process this yet.");
return new TwiMLResult(response);
}
Ошибок нет. Я не получаю сообщение, и мой веб-перехватчик статуса доставки не вызывается.
Вышеупомянутый метод называется так, как я вижу в своих журналах.
Примечание. Адреса «кому» нет. Я адаптировал пример кода из документации Twilio, который также ничего не делает ни для чтения адреса отправителя, ни для настройки ответа с помощью получателя или другого идентификатора корреляции.
Я изменил свой журнал, чтобы вдвойне убедиться, что мой веб-хук вызывается. Это. И в журнале Twilio нет подтверждения ответа, который пытается создать мой веб-перехватчик.
Чтобы было ясно, приведенный выше код использует библиотеки Twilio.
У меня есть еще один веб-хук, который Twilio вызывает всякий раз, когда я отправляю сообщение. Это не вызывается (ничего в журналах), что может подтвердить, что Twilio сбрасывается или не может обработать мой ответ.





Трудно сказать, что вызвало это, не видя журнал ошибок или сообщений. Вы должны что-то увидеть в «Мониторе» в консоли (подробнее здесь).
В прошлом у меня были подобные проблемы с Node.js, и проблема заключалась в том, что я забыл установить тип содержимого ответа на text/xml. Но я не уверен, что это требуется в вашем коде С#.
Спасибо, там ничего нет. Как будто я ничего не вернул. Я не ожидаю, что мне придется устанавливать тип контента, так как я использую библиотеку Twilio для создания MessagingResponse и возврата TwiMLResult. Я ожидаю, что это просто сработает или зарегистрирует ошибку. На самом деле, мне нужно перепроверить свои собственные журналы, чтобы убедиться, что хук действительно вызывается.
Похоже, что ни один из образцов не готовит ответ с адресом «Кому». Я предполагаю, что библиотека Twilio автоматически считывает эту информацию из запроса.
Да, «кому» является необязательным, и он использует адрес отправителя, если не указано иное.
Вывод TwiML вашего приложения будет таким:
<Response>You sent '...' but our systems are dumb and can't process this yet.</Response>
К сожалению, это недопустимый TwiML, вместо этого он должен выглядеть так:
<Response>
<Message>You sent '...' but our systems are dumb and can't process this yet.</Message>
</Response>
Это ответит сообщением отправителю. Для этого используйте метод .Message вместо .AddText:
response.Message($"You sent '{formModel.Body}' but our systems are dumb and can't process this yet.");
Все остальное выглядит нормально в вашем коде AFAIK.
Кроме того: если все, что вам нужно сделать, это ответить текущему отправителю одним сообщением, вы также можете ответить обычным текстом и типом контента text/plain.
Я также изменил строку возврата на:
return this.TwiML(response);
Это был совет поддержки Twilio. Я не пробовал это своим первоначальным способом, но предположил, что если есть какая-то магия, которая предварительно адресует ответ или каким-то образом коррелирует его, то это может быть использование вспомогательной функции на базовом контроллере. Спасибо.
.TwiML(response) — это то же самое, что и new TwiMLResult(response), поэтому это не имеет значения, но нам больше нравится использовать этот метод, поскольку он более точно соответствует стилю кода MVC. Вы можете найти исходный код на GitHub: github.com/twilio-labs/twilio-aspnet
«Мой веб-хук статуса доставки, похоже, не вызывается» - что именно вы имеете в виду? тем более, что "метод выше называется"?