我已经使用Microsoft Bot Framework(V.4-node.js)已有一段时间了,并且我开始了解很多东西。但是,我目前正在尝试找出在多个对话框中使用变量的方法。 在这些对话框之一中,我向REST API发出JSON请求以获取一些数据。我可以在对话框中的任何位置使用此数据,但我想在另一个对话框中使用此数据。有容易做到的吗?
我也知道结束这样的对话框时可以发送数据:
return await step.endDialog(#YourDataHere);
但是在启动新对话框时没有找到发送数据的选项。
我研究了以下示例:https://github.com/microsoft/BotBuilder-Samples/tree/master/samples/javascript_nodejs/05.multi-turn-prompt 但这仅使用1个对话框。
我还研究了V3中提供的代码: https://docs.microsoft.com/en-us/azure/bot-service/nodejs/bot-builder-nodejs-dialog-manage-conversation-flow?view=azure-bot-service-3.0 单击此链接将显示空白页,其中没有V 4的任何帮助文档。
关于如何进行设置以便我可以在所有对话框中使用数据的任何建议吗?
答案 0 :(得分:2)
您可以使用第二个选项将数据传递给新对话框
await dc.beginDialog(DIALOG_NAME, your_data);
对于我来说,我通常在此插槽中传递LUIS RecognitorResult,但是在某些情况下,我不需要参考捕获的意图和实体,而我已经传递了一个简单变量。
然后您可以在对话框中作为上下文的一部分进行访问。我使用“ step”作为上下文变量名称,因此您可以在step._info.options
中找到此值(不确定是否需要下划线)。
如果要传递一个简单值,则可以直接使用它(即yourData = step._info.options
)。如果是JSON对象,则只需照常引用您要查找的值即可。例如,要获得一个实体,我正在使用myEntity = step._info.options.entities.myEntityName[0]
。
请注意您的变量范围,以防您可能需要多次重用此值。最好将其保存在对话状态中,尤其是当您没有立即从一个对话框进入另一个对话框时。