Проактивный запрос сообщения канала Skype получает 500 (Внутренняя ошибка сервера) через некоторое время - PullRequest
0 голосов
/ 24 мая 2019

Я занимаюсь разработкой бота для канала Skype, который может отправлять проактивные сообщения.

Я последовал примеру проекта https://github.com/Microsoft/BotBuilder-Samples/tree/master/samples/csharp_dotnetcore/16.proactive-messages, и это работает для моих нужд.

Iразмещать моего бота на сервисе общего хостинга, а не в Azure.

Я зарегистрировал своего бота в Azure Channel Registration, протестированном в скайпе.Бот отвечает мне, и когда я отправляю запрос в проактивную конечную точку, я получаю проактивное сообщение.Все хорошо.

Тогда я понял, что через некоторое время превентивный запрос получает 500 (Внутренняя ошибка сервера).После этого я набрал что-то для бота из скайпа, затем снова отправил проактивный запрос, бот отправил проактивное сообщение.

Я исследовал эту проблему и обнаружил две вещи.Сначала включите AlwaysOn в IIS, но я на виртуальном хостинге, я не могу этого сделать.Во-вторых, регулярно посылайте запросы к боту, чтобы он оставался в живых.

Чем я заметил, я могу сделать это с каналом DirectLine.Я установил свой код, чтобы начать разговор, отправить какое-то сообщение и получить его, прежде чем отправлять проактивное уведомление.Начать разговор с DirectLine было легко, я отправил сообщение и получил ответ.Так как это запрос бота, я думаю, что это может решить мой 500 (Внутренняя ошибка сервера) статус ответа с проактивным.Но это не так.

Я могу получать проактивные сообщения только в Skype, только если я наберу что-то для бота из скайпа за короткий промежуток времени.В противном случае превентивный запрос сообщения Skype получает ошибку 500.

Я не знаю, как это сделать.

1 Ответ

1 голос
/ 24 мая 2019

Обратите внимание, что я также работаю с этим пользователем в их дублирующем выпуске GitHub .

Похоже, это TrustServiceUrl Issue (несмотря на сообщение об ошибке 500 против 401).

Вы можете исправить это, добавив Skype в список доверенных URL-адресов:

var serviceUrl = <GetThisFrom Activity.ServiceUrl>;

MicrosoftAppCredentials.TrustServiceUrl(serviceUrl);

Вот ссылка на библиотеку, если это поможет. В противном случае просмотр этих проблем должен помочь.

Примечание для других:

Эта «проблема URL службы доверия» не распространяется только на Skype. Это происходит для многих других URL-адресов при попытке использовать Проактивные сообщения. Просто замените serviceUrl на любой подходящий для вашего случая использования. И да, если вы используете несколько каналов, вы можете добавить несколько URL-адресов при использовании MicrosoftAppCredentials.TrustServiceUrl(), вызывая его несколько раз.

Вот определение метода . Примечание: для этого вы также можете добавить срок действия.

Я отправил PR для этого , что до сих пор привело к некоторым обновленным документам

...