Отправка ответа Webhook на разговор с помощью session.send в Azure Bot Framework (Nodejs)

В настоящее время пытаюсь интегрировать Azure Bot Framework с внешними платформами, такими как Integromat. Я использую приведенный ниже фрагмент кода, чтобы отправить имя и номер мобильного телефона, представленные пользователем. Пользовательский ввод отправляется на веб-перехватчик integromat, который отправляет ответ веб-перехватчика.

bot.dialog('WebTest', function (session) {
    session.send('conversation.id: ' + session.message.address.conversation.id);
    session.userData.convoID = session.message.address.conversation.id;
   // var request = require('request');         
   // var url = "https://hook.integromat.com/y6d18ahnsfanbkwqfdmygkwd2ft93vr2"
        request.post({   
            headers: { 'content-type': 'application/x-www-form-urlencoded' },
          url: 'https://hook.integromat.com/ynwbud77o7up7rrhl3m8tvdriquhtess',
                body: 'first=' + session.userData.first + '&mobile=' + session.userData.mobile + '&convoID=' +session.userData.convoID
        }).on('response', function (response) {
            //session.send(response);
            response.on('data', function (data) {
                console.log('data: ' + data);
            })
           // session.send(data)
        });    
   // session.send(data);
   //session.send(response);
    session.send("This service is still under construction");
}).triggerAction({ matches: /^webby/i })

Ответ правильно регистрируется в консоли https://i.stack.imgur.com/XQC8u.png

Однако я не уверен, как я смогу отправить его обратно боту и отобразить его пользователю.

Я изучил Directline API как вариант, получив идентификатор разговора и следуя документации. Я использовал эту ссылку: https://directline.botframework.com/v3/directline/conversations/ {{1.convoID}} / activity И отправил следующее содержимое запроса в виде полезных данных json вместе с ключом авторизации в качестве заголовка:

{
    "type": "message",
    "from": {
        "id": "user1"
    },
    "text": "hello"
}

Хотя для этого я получаю ошибку 404 с ошибкой «BadArgument» и «Неизвестный разговор».

Любая помощь, которая направит меня в правильное русло, будет принята с благодарностью, спасибо!


person Add    schedule 11.10.2018    source источник
comment
Чтобы быть ясным, у вас есть приложение, которое получает ответ веб-перехватчика и обрабатывает его для отправки боту (возможно, через прямое соединение). В этом случае вы не подключаетесь к веб-перехватчику из самого бота.   -  person Mark B    schedule 11.10.2018


Ответы (1)


Я не уверен на 100 процентов, что конкретно вы хотели бы делать со своими данными в этой функции:

response.on('data', function (data) {
    console.log('data: ' + data);
})

Но причина того, что session.send(data) не работает после этого, должна быть связана с data является объектом, а не строкой. В этом случае вы можете сделать что угодно, чтобы аргумент превратился в строку, от чего-то столь же простого, как JSON.stringify(data), до форматирования вывода с помощью полей.

Если прямой вызов был сделан изнутри бота, он, скорее всего, сработал без сбоев, потому что вы можете общаться от бота к боту через этот API; но если conversationID преобразуется в бота, который используется в данный момент (или просто еще не существует), то ожидается ошибка.

person Mark B    schedule 11.10.2018
comment
Спасибо! На самом деле в итоге я использовал что-то немного другое, которое анализировало ответ с помощью var parseData = JSON.parse(data); и отображало его обратно с помощью session.send(parseData.text); - person Add; 16.10.2018