MS Bot Framework 4.x SDK.Как я могу отправить сырой JSON на канал мессенджера Facebook, используя C # - PullRequest
0 голосов
/ 16 ноября 2018

Вам действительно нужно иметь возможность отправлять сырые файлы json на Facebook, чтобы воспользоваться всеми функциями мессенджера Facebook, но я не вижу способа сделать это в MS Bot SDK.(версия 4).Вот то, что я думаю, должно работать, но не повезло.Если я установлю свойство Text действия ответа, оно будет отображаться как текст в мессенджере (как и ожидалось).Если я установлю свойство ChannelData со строкой, никакие исключения не выдаются, но мессенджер facebook не показывает ответное сообщение.Учитывая, что это огромная платформа FB Messenger, вы могли бы подумать, что это было приоритетом в SDK, но я ничего не вижу в этом.

if (turnContext.Activity.Type == ActivityTypes.Message)

        {
            try
            {
                if((turnContext.Activity.ChannelId == Channel.Channels.Facebook)|| (turnContext.Activity.ChannelId == Channel.Channels.Emulator))
                {
                    string rsp = "{\"attachment\":{\"type\":\"template\",\"payload\":{\"template_type\":\"button\",\"text\":\"What do you want to do next?\",\"buttons\":[" +
      "{\"type\":\"web_url\",\"url\":\"https://www.messenger.com\",\"title\":\"Visit Messenger\"}]}}}";

                    Activity reply = turnContext.Activity.CreateReply();
                    _logger.LogInformation(rsp);

                    //reply.Text = rsp;  // display message as actual message to messenger
                    // reply.ChannelData = rsp; // fails request finishes on the MS bot service side, but nothing at all shows on messenger

                    reply.ChannelData = JsonConvert.DeserializeObject(rsp); // WORKS!
                    await turnContext.SendActivityAsync(reply);

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

1 Ответ

0 голосов
/ 16 ноября 2018

Мой плохой в этом.В исходном сообщении была ошибка в строке rsp, но я также взглянул на источник sdk и понял, что им нужен объект в ChannelData, а не строка .... поэтому я десериализовал его и вставил объект в channeldata, и он начал работать,Мало сообщений об этом в SDK версии 4, так что надеюсь, что это кому-нибудь поможет.Моя стена нуждается в некотором ремонте после того, как я весь день стучу по ней головой.- Фред Кови только сейчас

...