【问题标题】:Sending a Webhook Response to a Conversation using session.send in Azure Bot Framework (Nodejs)在 Azure Bot Framework (Nodejs) 中使用 session.send 向对话发送 Webhook 响应
【发布时间】:2019-03-16 05:01:36
【问题描述】:

目前正在尝试将 Azure Bot Framework 与 Integromat 等外部平台集成。我正在使用下面的代码 sn-p 发送用户提交的名字和手机号码。用户输入被发送到一个 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}}/activities 并将以下请求内容作为 json 有效负载连同作为标头的授权密钥一起发送:

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

虽然为此,我收到了 404 错误,带有“BadArgument”和“未知对话”错误。

任何能让我朝着正确方向前进的帮助都将不胜感激,谢谢!

【问题讨论】:

  • 为了清楚起见,您有一个应用程序正在获取 webhook 响应并处理它以发送到机器人(可能通过直接连接)。在这种情况下,您没有从机器人本身连接到 webhook。

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


【解决方案1】:

我不是 100% 确定您希望在此函数中对您的数据具体做什么:

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

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

如果直接调用是从机器人内部进行的,它很可能会在没有失败的情况下启动,因为您可以通过该 API 在机器人之间进行通信;但如果conversationID 解析为当前正在使用的机器人中的一个(或根本不存在),则预计会出现错误。

【讨论】:

  • 谢谢!实际上最终使用了一些不同的东西,它用var parseData = JSON.parse(data);解析响应并用session.send(parseData.text);显示回来
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多