Bot Composer и BotBuilder FacebookAdapter приводят к тому, что «Ссылка на объект не установлена для экземпляра объекта»

#botframework

#botframework

Вопрос:

Я использую MS Bot Composer в сочетании с адаптером BotBuilder Facebook, чтобы опубликовать моего бота в соответствии с «новыми» правилами Facebook Workplace — важно помнить, что я уже пытался использовать это непосредственно в Facebook Messenge, применяется та же ситуация.

Интеграция и подключение работают нормально, теперь проблема заключается в том, чтобы понять, как публиковать что-либо, кроме текста.

Ниже приведен пример попытки получить правильный шаблон

 # channelData
-```{
    "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"
          }
        ]
      }
    }
}```
 

введите описание изображения здесь

И затем ответ бота:

введите описание изображения здесь

Комментарии:

1. Связывание

2. Здесь много движущихся частей, поэтому вам нужно будет помочь нам воспроизвести это поведение. Когда вы упоминаете новые правила Facebook Workplace, имеете ли вы в виду, что ранее вы использовали соединитель Facebook, а теперь должны переключиться на адаптер Facebook? Интегрировали ли вы адаптер Facebook, используя извлеченную среду выполнения? Можете ли вы сослаться на документацию, которой вы следовали, о том, как заставить адаптер Facebook работать с Composer? Можете ли вы сослаться на документацию, касающуюся формата LG, который вы использовали для данных канала?

3. 1-й вопрос: Да. Workplace не допускает интеграции с использованием facebook.botframework.com и рекомендую использовать адаптер. 2-й: Да. Среда выполнения dotnet. 3-й: Официальных документов нет. Просто руководство разработчика-композитора к подобной ошибке. Ссылка . 4-й: Опять же, просто руководство. Ссылка . Это последний JSON, который я отправляю на Facebook: link .

4. Просто чтобы сообщить, что если я использую те же данные канала без адаптера, все работает нормально. Возможно, мне не хватает некоторых библиотек для адаптера… Если вам нужны дополнительные тесты, дайте мне знать.

Ответ №1:

Если вы идете по маршруту передачи данных канала, адаптер Facebook ожидает, что вы предоставите полный FacebookMessage объект в качестве данных канала. Это на один уровень выше предоставленного вами JSON, поэтому это будет выглядеть так:

 {
  "message":{
    "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"
          }
        ]
      }
    }
  }
}
 

Однако это не сработает, потому что в нем отсутствуют другие FacebookMessage необходимые свойства, например sender . Вместо того чтобы пытаться заполнить все сообщение Facebook, может быть проще просто перейти по маршруту вложения, а не по маршруту передачи данных канала. Вы можете увидеть, как это сделать в примере адаптера Facebook:

 private static Attachment CreateTemplateAttachment(string filePath)
{
    var templateAttachmentJson = File.ReadAllText(filePath);
    var templateAttachment = new Attachment()
    {
        ContentType = "template",
        Content = JsonConvert.DeserializeObject(templateAttachmentJson),
    };
    return templateAttachment;
}
 

В Composer вы можете установить вложения действия вместо данных его канала. Просто установите тип содержимого на «шаблон», а содержимое — на полезную нагрузку вложения, которое у вас есть сейчас, используя ресурсы примера адаптера Facebook в качестве руководства:

 # attachment
- ```
{
  "contentType": "template",
  "content": {
    "template_type": "button",
    "text": "What do you want to do next?",
    "buttons": [
      {
        "type": "web_url",
        "url": "https://www.messenger.com",
        "title": "Visit Messenger"
      }
    ]
  }
}
```
 

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

Комментарии:

1. Просто ответил на твой ответ, Кайл.

2. Извините, я не понимаю, что вы имеете в виду. Является ли мой ответ приемлемым?

3. К сожалению, нет… Мой ответ был удален здесь, у вас есть какой-нибудь контакт, чтобы связаться с вами?

4. Для меня лучше отвечать на ваши вопросы публично, чтобы мои ответы могли помочь большему количеству людей. Можете ли вы объяснить, почему мой ответ неприемлем?

5.Я использую функции Azure… Теперь в Composer у меня есть это, это JSON, который я отправляю на Workplace. В Startup.cs я вставил строку с AddTransient link, затем я создал Bot.cs файл, а затем это ответ от Workplace: link