在javascript聊天机器人中实现回发操作代码的位置

Where to implement the postback action code in a javascript chatbot

本文关键字:操作 代码 位置 实现 javascript 聊天 机器人      更新时间:2023-09-26

我的问题是关于在我的聊天机器人中实现这段javascript代码:

smooch.conversations.sendMessage('app_5790dca8cab9a256005c0148', {
    text: 'Fabric',
    role: 'appMaker',
    actions: [
      {
        type: 'postback',
        text: 'fabric instructions',
        payload: 'egg_fabric'
      }
    ]
}).then(() => {
    // async code
});

这是我的script.json文件,对应于这个特定的回发:

"HOW CAN I REMOVE AN EGG STAIN?": "%[Fabric](postback:egg_fabric) %[Surface](postback:egg_surface)",

我之所以问这个问题,是因为我想在整个聊天过程中有多个"表面"answers"织物"按钮,但我希望机器人吐出的答案与最近问的问题相对应。谢谢你的帮助!

您想要的是script.json无法实现的,您必须在script.js中定义自己的状态函数,以及自己的回发事件处理。

在这个答案中,有一些关于如何使用smoch bot示例项目(estherbot就是从这个项目派生而来的)的建议。

为了给你一些上下文,script.js是实际的机器人逻辑所在的地方。您正在查看的script.json是estherbot引入的一个快捷方式,它可以更容易地定义基于关键字的机器人。当你的机器人运行时,JSON实际上会被编译成状态,就像最初在script.js中定义的一样。您试图构建的内容需要的不仅仅是script.json所限制的静态关键字-->行为映射。

跟进Andrew的回答:

检查smoch-bot示例项目,但可能首先查看回发的webhook实现文件(heroku/index.js),而不是bot逻辑/流定义文件(script.js):

在repo的heroku文件夹中,检查index.js文件。函数handlePostback(req, res)(应该在第109行附近)应该可以帮助您入门。例如,将其更改为以下内容:

发件人:

function handlePostback(req, res) {
    const postback = req.body.postbacks[0];
    if (!postback || !postback.action) {
        res.end();
    }
    createBot(req.body.appUser).say(`You said: ${postback.action.text} (payload was: ${postback.action.payload})`)
    .then(() => res.end());
}

类似于:

function handlePostback(req, res) {
    const postback = req.body.postbacks[0];
    if (!postback || !postback.action) {
        res.end();
    }
    const sAction = postback.action.text;
    const sPayload = postback.action.payload;
    switch (sAction) {
     case "egg_fabric":
        //something something
        break;
     case "egg_surface":
        //something something
        break;        
     default:
        //something something
    }
}

希望能有所帮助。