Где реализовать код действия обратной передачи в чат-боте 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)",

Причина, по которой я задаю этот вопрос, заключается в том, что я хочу иметь несколько кнопок «поверхность» и «ткань» в чате, но я хочу, чтобы ответ, который выдает бот, соответствовал последнему заданному вопросу. Спасибо за вашу помощь!


person Sydney Perotti    schedule 26.07.2016    source источник


Ответы (2)


То, что вы ищете, не может быть сделано с помощью script.json, вам нужно будет определить свои собственные функции состояния в script.js и собственную обработку событий обратной передачи.

В этом ответе есть несколько предложений о том, как вы можете сделайте это с проектом smooch-bot-example (это то, что estherbot был разветвлен).

Чтобы дать вам некоторый контекст, script.js — это место, где живет реальная логика бота. Сценарий script.json, на который вы смотрите, представляет собой ярлык, который был представлен вместе с estherbot, чтобы упростить определить ботов на основе ключевых слов. Когда ваш бот запускается, JSON фактически компилируется в состояния, как если бы они были определены в script.js в первую очередь. То, что вы пытаетесь построить, потребует большего, чем статическое ключевое слово --> сопоставление поведения, которым ограничен script.json.

person Andrew Lavers    schedule 28.07.2016

В продолжение ответа Эндрю выше:

Проверьте проект 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
    }
}

Надеюсь, это поможет.

person 54chi    schedule 30.07.2016