使用Azure Bot Framework(Nodejs)中的session.send向对话发送Webhook响应

时间:2018-10-11 07:24:52

标签: node.js azure botframework direct-line-botframework

当前正在尝试将Azure Bot Framework与诸如Integromat之类的外部平台集成。我正在使用下面的代码段发送用户提交的名字和手机号码。用户输入被发送到一个integromat Webhook,后者发送一个Webhook响应。

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作为一种选择,获取了会话ID并遵循了文档。 我使用了此链接:  https://directline.botframework.com/v3/directline/conversations/ {{1.convoID}} /活动 并发送以下请求内容作为json负载以及授权密钥作为标头:

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

尽管如此,我却收到404错误,并出现“ BadArgument”和“未知对话”错误。

感谢任何能帮助我朝正确方向发展的帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

我不确定100%希望在此函数中对数据做些什么:

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

但是session.send(data)在此之后不起作用的原因应该是由于data being an object rather than a string。在这种情况下,您可以执行任何操作来使参数成为字符串,从简单的JSON.stringify(data)到使用字段格式化输出。

如果直接在机器人内部进行了直接调用,则它可能会成功触发,因为您可以通过该API在机器人之间进行通讯;但是如果conversationID在当前正在使用的漫游器中解析为一个(或根本不存在),则可能会出现错误。