2016-07-26 27 views
0

我的问题是关于这个片段javascript代码的执行了我的聊天机器人:凡落实在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)", 

我问这个问题的原因是因为我想有多个“面”和整个聊天“面料”按钮,但我想要的答案机器人吐出来对应这个问题最近问。谢谢你的帮助!

回答

0

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

this answer有一些关于如何使用smooch-bot-example项目(这是estherbot被分成的项目)做到这一点的建议。

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

0

安德鲁的回答以上随访:

检查smooch-bot-example项目,但也许通过寻找到的回传网络挂接实现文件启动(Heroku的/ index.js),而不是机器人逻辑/流程定义文件( script.js)文件:

在回购的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 
    } 
} 

希望有所帮助。