【发布时间】:2018-02-02 20:55:16
【问题描述】:
我正在为我的 facebook messenger 机器人使用 Microsoft Bot Framework。我想从 json 文件中加载对话数据,而不是在 js 文件中进行硬编码。我想根据“当前”步骤的结果配置对话框中的下一步,这是 json 文件配置的一部分,类似于这样。
{
"name": "welcome",
"type": "waterfall",
"steps": [
{
"id": 0,
"data": [
{
"type": "text",
"value": "Hey, It's nice to meet you."
},
{
"type": "quickReplies",
"value": "What do you want to do next?",
"options": [
{
"text": "some option 1",
"value": "option1"
},
{
"text": "some option 2",
"value": "option2"
}
]
}
],
"next": [
{
"result": "option1",
"action": "goto step 2"
},
{
"result": "option2",
"action": "goto step 5"
}
]
}
]
}
我想处理所有传入的消息,并在对话框中为用户提供正确的对话框或正确的步骤。
我正在尝试这样的事情;
handleMessage = function (session) {
var step = session.dialogData["BotBuilder.Data.WaterfallStep"] || 0;
// check response data from previou step and identify the next step.
// set the waterfall step id
session.dialogData["BotBuilder.Data.WaterfallStep"] = 2;
session.send("Hello");
}
var bot = new builder.UniversalBot(connector, function (session) {
handleMessage(session);
})
.set('storage',tableStorage);
使用此代码,即使将其设置为不同的数字,我也总是将 session.dialogData["BotBuilder.Data.WaterfallStep"] 的步长设为零。
此外,一旦我设置了瀑布步数,存储在我的表存储中用于此对话的所有其他状态数据都将消失。
在设置瀑布步骤之前存储数据:
{
"BotBuilder.Data.SessionState": {
"callstack": [
{
"id": "*:/",
"state": {
"BotBuilder.Data.WaterfallStep": 0
}
},
{
"id": "*:welcome",
"state": {
"BotBuilder.Data.WaterfallStep": 1
}
},
{
"id": "BotBuilder:prompt-text",
"state": {
"options": {
"prompt": {
"type": "message",
"agent": "botbuilder",
"source": "facebook",
"address": {
"id": "mid.$cAAAlr-0LRH9niO21L1hV6hs83GuJ",
"channelId": "facebook",
"user": {
"id": "XXXX",
"name": "XXXX"
},
"conversation": {
"isGroup": false,
"id": "XX"
},
"bot": {
"id": "XXX",
"name": "XXX"
},
"serviceUrl": "https://facebook.botframework.com"
},
"text": "what do you want to next"
//ignored for simplicity
},
"promptAfterAction": true,
"libraryNamespace": "*"
},
"turns": 0,
"lastTurn": 1517594116372,
"isReprompt": false
}
}
],
"lastAccess": 1517594112740,
"version": 0
}
}
设置瀑布步后:
{
"BotBuilder.Data.SessionState": {
"callstack": [
{
"id": "*:/",
"state": {
"BotBuilder.Data.WaterfallStep": 2
}
}
],
"lastAccess": 1517602122416,
"version": 0
}
}
有趣的是,步骤号被保存到数据库中(但处于会话状态),但我的“会话”变量在任何地方都没有这个值。另外,即使在配置了自定义状态服务之后,serviceUrl 仍然是https://facebook.botframework.com,如果没有为机器人设置状态服务,我认为这是使用的默认状态服务。
【问题讨论】:
-
你是说你想根据你得到的 json 创建瀑布对话框。或者您只是想知道如何构建瀑布对话框并同时管理流程?
标签: json node.js botframework