0

我的问题是关于在我的聊天机器人中实现这段 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)",

我问这个问题的原因是因为我希望在整个聊天过程中有多个“表面”和“织物”按钮,但我希​​望机器人吐出的答案与最近提出的问题相对应。谢谢你的帮助!

4

2 回答 2

0

跟进安德鲁的上述回答:

检查smooch-bot-example项目,但可能从查看回发 (heroku/index.js) 的 webhook 实现文件而不是机器人逻辑/流定义文件 (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
    }
}

希望有帮助。

于 2016-07-30T23:01:00.460 回答
0

你正在寻找的东西不能用 script.json 来完成,你必须在 script.js 中定义你自己的状态函数,以及你自己的回发事件处理。

这个答案中,有一些关于如何使用smooch-bot-example项目(这是estherbot的分支)来做到这一点的建议。

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

于 2016-07-28T01:01:13.940 回答