протокол передачи сообщений мессенджера facebook take_thread_control - PullRequest
0 голосов
/ 28 апреля 2018

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

Первый подход: Передать управление потоком в PAGE INBOX
я настроил намерение в диалоговом потоке с помощью действия «input.handover», а затем, когда я набираю хэндовер, я вызываю свой webhook и вызываю fb api с помощью pass_thread_control, и я передаю управление в папку входящих сообщений, я получаю ответ об успешном завершении и разговор перейти от BOT к PAGE INBOX . Но здесь застряли на PAGE INBOX , и я не могу взять take_thread_control на BOT , потому что PAGE INBOX не связан с диалоговым потоком или любым другим webhook.

Второй подход: Передать управление потоком в другое приложение
с той же настройкой первого подхода, но на этот раз я передаю управление потоком в Facebook APP , который я создал и связал с помощью веб-крюка (с nodejs, размещенным на heroku), я получаю ответ об успешном выполнении, но на этот раз нет сообщения Заходите в эту APP папку «Входящие» и на консоли heroku я вижу сообщение, которое приходит в webhook, но не APP Входящие.

А теперь я просто застрял здесь. Если у кого-то есть идея, как реализовать протокол передачи обслуживания с помощью диалогового потока или какой-либо помощи, я ценю это.

Спасибо.

1 Ответ

0 голосов
/ 06 мая 2018

хорошо, я просто нахожу обходной путь, смешав два подхода

шаг 1 : со вторым приложением подпишите ваш webhook на странице бота
page_subscribe

шаг 2 : второй веб-крючок приложения предназначен только для возврата управления потоками в основное приложение, когда пользователь вводит специальное ключевое слово, например (выход или назад ...)

app.post('/webhook', (request, response) => {
    const webhook_events = request.body.entry[0];
    // console.log('webhook_events : ', webhook_events);

    // Secondary Receiver is in control - listen on standby channel
    if (webhook_events.standby) {

        // iterate webhook events from standby channel
        webhook_events.standby.forEach(event => {

            const psid = event.sender.id;
            const message = event.message;

            // check if the user want back to the bot
            if (message && (message.text == 'exit' || message.text == 'back')) {

                // HandoverProtocol.takeThreadControl is just call the facebook api to takeThreadControl
                HandoverProtocol.takeThreadControl(psid).then(reps => {

                    // replay.sendMessage also call facebook api to send a message to the user to let him know he is back chat with the bot 
                    replay.sendMessage(psid, 'Hi, your are back to the BOT');

                }).catch(err => console.log(err));
            }

        });   
    }

    // respond to all webhook events with 200 OK
    response.sendStatus(200);
})

теперь все пользовательские сообщения передаются из второго веб-крючка приложения, и когда он набирает «назад», например, веб-крючок возвращает элемент управления к основному приложению (в данном случае боту)

...