我试图基于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)
无济于事 .
3 回答
我在[object Object]而不是字符串中遇到了同样的问题 . 这是因为你使用函数获取或设置的
state
包含在一个对象中,而不是一个字符串......我用index.js
中的代码修复了它,替换了smooch-bot-example GitHub repo中现有的handlePostback
函数:然后在
script.js
内,您需要做的就是定义与确切的回发有效负载相对应的状态 . 如果您有多个应该将用户带到其他状态的回发,只需将它们添加到case
列表中,如下所示:请注意,如果您想要的结果相同(此处:设置状态并提示相应的消息),则不应在每个
case
的末尾写入break;
.如果您想以不同的方式处理其他回发,可以在
break;
语句之后添加案例并改为执行其他操作 .希望这可以帮助!
回发不会自动将您的会话从一个状态转换到下一个状态,您必须自己编写该逻辑 . 幸运的是,你正在使用的smooch-bot-example已经在这里定义了一个回发处理程序:
https://github.com/smooch/smooch-bot-example/blob/30d2fc6/heroku/index.js#L115
所以无论你想要什么过渡逻辑都应该进入那里 . 您可以通过创建stateMachine并以与handleMessages()already works相同的方式在其上调用
receiveMessage()
来完成此操作 . 例如:或者,如果您希望回发的行为与常规文本响应不同,您可以单独调用
handlePostback
实现调用stateMachine.setState(state)
和stateMachine.prompt(state)
.如果你想根据回发推进对话'll have to first output the buttons from the bot'的提示(所以你可以在接收中处理按钮点击),修改
index.js
中的handlePostback
函数,然后在你的接收方法中处理用户的"reply" - 试试这个 - 修改script.js
像这样:然后修改
index.js
中的handlePostback
函数,使其像常规消息一样处理回发:现在,当用户点击您的按钮时,它将被推送到stateMachine并像回复一样处理 .