我正在尝试建立一个到健康机器人的DirectLine连接,并选择了一个预设的场景。我计划用HealthBot设置几个场景,并希望能够按需触发它们。
我能找到的触发场景的唯一例子是我没有使用的WebChat,你可以在这里找到它:
https://github.com/microsoft/HealthBotContainerSample/blob/master/public/index.js。
我还找到了https://www.linkedin.com/pulse/microsoft-healthcare-bot-covid-19-triage-scenario-up-ravichander/,它推荐这样做:
dl.postActivity({
type: "invoke",
value: {
trigger: "covid19"
},
locale: 'en-US',
from: user,
name: "TriggerScenario"
})我试过这样做:
this.directLine.postActivity(
{
type: "event",
locale: "en-us",
textFormat: "plain",
from: { id: "server", name: "server", role: "user" },
name: "TriggerScenario",
value: {
trigger: "MyScenario",
args: {
myVar1: "{custom_arg_1}",
myVar2: "{custom_arg_2}"
}
}
}).subscribe(console.log,console.error);在DirectLineJS的文档中没有提到它可以像那样使用,但是它触发了正确的场景并正确地将参数传递给机器人。
我遇到的问题似乎更多地与HealthBot本身有关,因为它无法识别任何用户输入,并返回在Default reply for utterances that are not understood中定义的通用消息。有没有人有过这种程度的定制经验,可以建议如何使用postActivity通过DirectLineJS按需触发场景。
我触发场景的方式有什么问题吗?
发布于 2021-02-23 04:04:38
如果您使用的是WebChat V4,则示例代码https://github.com/microsoft/HealthBotContainerSample/blob/master/public/index.js具有正确的示例。只需取消对triggeredScenario对象的注释,并将触发器属性替换为您的场景id。
store.dispatch({
type: 'DIRECT_LINE/POST_ACTIVITY',
meta: {method: 'keyboard'},
payload: {
activity: {
type: "invoke",
name: "InitConversation",
locale: user.locale,
value: {
// must use for authenticated conversation.
jsonWebToken: jsonWebToken,
// Use the following activity to proactively invoke a bot scenario
/*
triggeredScenario: {
trigger: "{scenario_id}",
args: {
myVar1: "{custom_arg_1}",
myVar2: "{custom_arg_2}"
}
}
*/
}
}
}
});发布于 2021-02-26 22:02:40
我似乎已经解开了这个谜团。使用我的代码可以正确地触发这些场景。这个问题是由于Health Bot无法正确识别用户输入造成的。我已经解决了这个问题,在场景本身中添加了一些守卫。
https://stackoverflow.com/questions/66295403
复制相似问题