Bot Framework Отсутствует From.Id & Conversation.Id с каналов Facebook - PullRequest
4 голосов
/ 12 марта 2019

Я поднял ошибку элемента в проекте C # Bot Builder на GitHub, но, честно говоря, я не могу до конца понять, является ли это ошибкой в ​​фреймворке или спорадической проблемойсозданный на стороне Facebook.

Мы строили бота в течение нескольких месяцев и активно использовали его в разработке и разработке окружения, и ни разу не сталкивались с этой проблемой.

Итак, мы идемжить с нашим первым клиентом и бум.Эта проблема начинает возникать.

Значение не может быть нулевым.Имя параметра: недопустимая активность - отсутствует From.Id

А также:

Значение не может быть нулевым.Имя параметра: недопустимая активность - отсутствует Conversation.Id

Чаты, создавшие эту проблему, были запущены пользователями, заходящими в бот через веб-страницу мессенджера и плагин веб-чата.

Пользователи в обоих случаях использовали кнопку «Приступить к работе», чтобы подключиться к чату.Этот выбор предоставляет боту доступ к основной информации профиля пользователя.

Понятно, что это довольно странно, и я не смог воспроизвести эту проблему в любом тестировании в любой из наших сред (у нас есть Dev, Stagingи Live).

Кто-нибудь еще видел подобную проблему?

Что вы сделали, чтобы обойти ее?

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

1 Ответ

1 голос
/ 11 апреля 2019

Если ваш бот спроектирован с Activity Handler , как показано в ветке Samples-work-in-progress , вы можете добавить некоторый код в контроллер для регистрации всего Request.Body :

  [Route("api/messages")]
    [ApiController]
    public class BotController : ControllerBase
    {
        private readonly IBotFrameworkHttpAdapter Adapter;
        private readonly IBot Bot;

        public BotController(IBotFrameworkHttpAdapter adapter, IBot bot)
        {
            Adapter = adapter;
            Bot = bot;
        }

        [HttpPost]
        public async Task PostAsync()
        {
            Request.EnableBuffering();

            using (var buffer = new MemoryStream())
            {
                await Request.Body.CopyToAsync(buffer);
                buffer.Position = 0L;
                using (var bodyReader = new JsonTextReader(new StreamReader(buffer, Encoding.UTF8)))
                {
                    Debug.Print(BotMessageSerializer.Deserialize(bodyReader).ToString());
                    buffer.Position = 0L;
                }
            }

            Request.Body.Position = 0;

          await Adapter.ProcessAsync(Request, Response, Bot);
        }
    }

Это должно предоставить больше информации о том, какой тип сообщения отправляется боту.Я предполагаю, что это как-то связано с веб-хуком Facebook Messenger, на который вы подписаны.Например, я не думаю, что «message_echoes» в настоящее время отправляются в бот с помощью .From или chat.Id.Однако недавно мы изменили нашу службу коннекторов, включив в нее следующее: выпуск должен быть в ближайшие несколько недель.

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