gpt4 book ai didi

javascript - Smooch:如何进行回发依赖状态转换?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:00:56 26 4
gpt4 key购买 nike

我正在尝试根据 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 中的这段代码修复了它,替换smooch-bot-example 中现有的 handlePostback 函数GitHub repo :

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;

请注意,如果您想要的结果相同(此处:设置状态并提示相应的消息),则不应在每个 case 的末尾写 break; ).

如果您想以不同的方式处理其他回发,您可以在 break; 语句之后添加 case 并改为执行其他操作。

希望这对您有所帮助!

关于javascript - Smooch:如何进行回发依赖状态转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38558945/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com