Microsoft Bot Framework v4: проактивное сообщение мессенджера Facebook не авторизовано после перезагрузки бота - PullRequest
0 голосов
/ 18 февраля 2019

Я написал бота, используя Microsoft Framework v4 SDK в C #.Бот развернут в Azure и подключен к веб-чату, прямой линии и каналам Facebook Messenger.Бот отлично работает для всех.

Пользователи могут подписаться на получение обновлений заблаговременно.Для этого я использую сохраненный ConversationReference, который затем используется для отправки проактивных сообщений.Опять же, все это прекрасно работает за исключением того, что бот wepApp перезапускается , что приводит к: -

Exception caught : Microsoft.Bot.Schema.ErrorResponseException: Operation returned an invalid status code 'Unauthorized' for the facebook channel.

Если я отправлю другое сообщение боту из мессенджера Facebook, тогда активные сообщения снова начнут работатьдаже для старых сохраненных ConversationReferences.

Первоначально я использовал MemoryStorage в соответствии с примерами, но я изменил его, чтобы использовать хранилище BLOB-объектов Azure для dialogState и userState.Это не имеет значения.Это как если бы он хранил токен авторизации facebook в памяти, поэтому, если приложение перезапускает токен, он теряется до тех пор, пока пользователь не отправит другое сообщение из мессенджера.

Есть ли способ исправить это, так как он подписываетсяПроактивные обновления бессмысленны, если он не может обработать перезапуск бота webApp?

Большое спасибо

1 Ответ

0 голосов
/ 19 февраля 2019

Это похоже на Проблема с URL-адресом службы доверия .

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

var serviceUrl = "https://facebook.botframework.com/";

var connector = new ConnectorClient(new Uri(serviceUrl), new MicrosoftAppCredentials("YourAPPID", "YourAppPassword"));

MicrosoftAppCredentials.TrustServiceUrl(serviceUrl);

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

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

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

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

По запросу, Я отправил PR для этого

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...