2016-07-26 31 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 
    } 
} 

希望有所幫助。