我正在尝试根据 Smooch 回发有效负载将脚本从一种状态转换为另一种状态;但收到错误代码 H12。
考虑这个例子https://github.com/smooch/smooch-bot-example
假设我修改了脚本https://github.com/smooch/smooch-bot-example/blob/master/script.js如下
start: {
receive: (bot) => {
return bot.say('Hi! I\'m Smooch Bot! Continue? %[Yes](postback:askName) %[No](postback:bye) );
}
},
bye: {
prompt: (bot) => bot.say('Pleasure meeting you'),
receive: () => 'processing'
},
目的是机器人的状态将根据回发有效负载进行转换。
问题是,我该如何实现这一点?
我的方法是添加
stateMachine.setState(postback.action.payload)
到 github.com/smooch/smooch-bot-example/blob/master/heroku/index.js 的handlePostback方法
然而,这引发了错误代码 H12。我也尝试过
stateMachine.transition(postback.action,postback.action.payload)
无济于事。
我对 [object Object] 而不是字符串也遇到了同样的问题。这是因为state
您使用函数获取或设置包含在对象中,而不是字符串中...我用里面的代码修复了它index.js
,替换现有的handlePostback
函数在接吻机器人示例GitHub 仓库:
function handlePostback(req, res) {
const stateMachine = new StateMachine({
script,
bot: createBot(req.body.appUser)
});
const postback = req.body.postbacks[0];
if (!postback || !postback.action) {
res.end();
};
const smoochPayload = postback.action.payload;
// Change conversation state according to postback clicked
switch (smoochPayload) {
case "POSTBACK-PAYLOAD":
Promise.all([
stateMachine.bot.releaseLock(),
stateMachine.setState(smoochPayload), // set new state
stateMachine.prompt(smoochPayload) // call state prompt() if any
]);
res.end();
break;
default:
stateMachine.bot.say("POSTBACK ISN'T RECOGNIZED") // for testing purposes
.then(() => res.end());
};
}
然后里面script.js
您需要做的就是定义与确切的回发负载相对应的状态。如果您有多个回发应该将用户带到其他状态,只需将它们添加到case
像这样列出:
case "POSTBACK-PAYLOAD-1":
case "POSTBACK-PAYLOAD-2":
case "POSTBACK-PAYLOAD-3":
case "POSTBACK-PAYLOAD-4":
Promise.all([
stateMachine.bot.releaseLock(),
stateMachine.setState(smoochPayload), // set new state
stateMachine.prompt(smoochPayload) // call state prompt() if any
]);
res.end();
break;
请注意,您不应该写break;
在每个的末尾case
如果你想要的结果是一样的(这里:设置状态并提示相应的消息)。
如果您想以不同的方式处理其他回发,您可以在break;
声明并做其他事情。
希望这可以帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)