2016-07-26 5 views
0

мой вопрос о реализации этого фрагмента кода из яваскрипта в мой Chatbot:Где реализовать код постбэка действий в яваскрипте Chatbot

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 - это то, где живет настоящая логика бота. Script.json, на который вы смотрите, - это ярлык, который был введен с помощью estherbot, чтобы было проще определить ботов на основе ключевых слов. Когда ваш бот работает, JSON фактически скомпилируется в состояния, как если бы они были определены в script.js в первую очередь. То, что вы пытаетесь построить, потребует больше, чем статическое сопоставление по ключевым словам ->, к которому ограничивается script.json.

0

Вслед за ответом Эндрю выше:

Проверьте проект smooch-bot-example, но, возможно, начать смотреть в файл реализации webhook для постбэков (Heroku/index.js) вместо файла определения бот логики/потока (script.js) file:

В папке 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 
    } 
} 

Надежда, что помогает.