Как отправить карты героев в мессенджер fb с помощью каркаса ботов Microsoft при использовании диалогов с водопадом (Node js) - PullRequest
1 голос
/ 05 марта 2020

Я пытаюсь создать мессенджер-бот, используя Microsoft Bot Framework

Я использую диалоговое окно водопада для создания потока структуры.

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

Я использовал ответ Стивена, Обработка ответов HeroCards В Microsoft Bot Framework v4 для NodeJS

Я отлично работаю при тестировании в эмуляторе бота и веб-чате, но выдает ошибку при тестировании в боте-мессенджере

Может кто-нибудь помочь мне исправить эту ошибку, Заранее спасибо

   async locationStep(step) {
        // WaterfallStep always finishes with the end of the Waterfall or with another dialog; here it is a Prompt Dialog.
        // Running a prompt here means the next WaterfallStep will be run when the user's response is received.
        await this.sendIntroCard(step)
        await step.context.sendActivity("How often do you use surface on the move?")
        let acard =CardFactory.heroCard(
            " ",
            [`https://scontent.fmaa1-4.fna.fbcdn.net/v/t1.0-9/89121134_2372258766207358_5255590702309441536_n.jpg?_nc_cat=109&_nc_sid=8024bb&_nc_ohc=1cHak5WO_yoAX-VdtfO&_nc_ht=scontent.fmaa1-4.fna&oh=fd002544bc74bf53ae0185f4c192efe6&oe=5E82E09B`],
            [{  type: ActionTypes.PostBack,
                title: 'Never',
                value: 'Never'}]
       );
        let bcard =CardFactory.heroCard(
            " ",
            ['https://i.imgur.com/m2DWB7m.jpg'],
            [{  type: ActionTypes.PostBack,
                title: 'Once in a while',
                value: 'Once in a while'}]
        );
        let ccard =CardFactory.heroCard(
            " ",
            ['https://i.imgur.com/Kwn0FBn.jpg'],
            [{  type: ActionTypes.PostBack,
                title: 'A few days a week',
                value: 'A few days a week'}]
        );
        let dcard =CardFactory.heroCard(
            " ",
            ['https://i.imgur.com/mAlW0Bv.jpg'],
            [{  type: ActionTypes.PostBack,
                title: 'Every day',
                value: 'Every day'}]
        );
        await step.context.sendActivity( {attachments:[acard,bcard,ccard,dcard],attachmentLayout: AttachmentLayoutTypes.Carousel
       });
       return await { status: DialogTurnStatus.waiting }; 
    }

1 Ответ

0 голосов
/ 10 марта 2020

Ваша проблема вызвана тем, что вы указали в качестве названия своих карт героев место: " ". Исправить вашу проблему просто. Вы можете использовать фактически пустую строку без пробела ("") или вообще пропустить заголовок.

РЕДАКТИРОВАТЬ: Как вы видели, Bot Framework добавит «Опции» в качестве заголовка карты, если вы не предоставили его, потому что он использует шаблон Facebook Messenger generi c , для которого требуется заголовок. Bot Framework ничего не может сделать, и вы ничего не можете сделать, чтобы обойти ограничения API Facebook. Однако, если вы действительно хотите отправить открытку с изображением и кнопками, вы можете использовать медиа шаблон . Это будет неудобно, потому что вам нужно будет заранее загрузить вложение изображения, чтобы вы могли получить идентификатор вложения с помощью этого API: https://developers.facebook.com/docs/messenger-platform/reference/attachment-upload-api

Вместо того, чтобы ваш бот загружал изображения каждый раз время, необходимое для их использования, вы сможете загрузить каждое изображение один раз, а затем передать идентификаторы своему боту. После того как вы загрузили свои вложения, вы можете отправить медиа-шаблон напрямую, используя Send API или используя данные канала активности Bot Framework в соответствии с этими инструкциями: https://blog.botframework.com/2017/03/28/custom-channel-data/

await step.context.sendActivity( {
    "channelData": {
        "attachment": {
            "type": "template",
            "payload": {
                "template_type": "media",
                "elements": [
                    {
                        "media_type": "image",
                        "attachment_id": "<YOUR_ATTACHMENT_ID>",
                        "buttons": [
                            {
                                "type": "postback",
                                "payload": "Never",
                                "title": "Never"
                            }
                        ]
                    },
                    // More media templates ...
                ]
            }
        }
    }
} );

Поскольку это может быть сложнее, чем вы хотели бы, вы могли бы рассмотреть альтернативный дизайн, как быстрые ответы Messenger .

...