2016-11-07 15 views
0

Я создал ботовую чату с потоком, используя FB messenger, Wit.ai и node.js. Он работает хорошо, но для того, чтобы взаимодействие выглядело более естественным, я хочу, чтобы мой бот остановился на короткое время и, кажется, печатал каждый из своих ответов.Добавление пузырька действия «typing_on» перед каждым откликом от Wit.ai chatbot

Я хочу, чтобы пузырь «набрав» был отображен ненадолго перед каждым ответом, который посылает мой бот, в идеале, чтобы определить время видимости пузыря до отправки ответа. На данный момент есть разделы моего разговора, где бот отправляет последовательные сообщения, и все они отправляются слишком быстро сразу.

FB Messenger Send API сообщает, что either the 'message' or 'sender_action' property must be set. Я попытался установить, как например, так:

const fbMessage = (id, text) => { 

if(fruits.apples.indexOf(text) >= 0 || fruits.oranges.indexOf(text) >= 0) { 

    var body = JSON.stringify({ 
     recipient: { id }, 
     "sender_action":"typing_on", 
     message: { 
      attachment: { 
        "type": "image", 
        "payload": { 
         "url": text 
        } 
       } 
      }, 
    }); 


} else { 
    var body = JSON.stringify({ 
     recipient: { id }, 
     "sender_action":"typing_on", 
     message: { text }, 
    }); 
} 

const qs = 'access_token=' + encodeURIComponent(FB_PAGE_TOKEN); 
return fetch('https://graph.facebook.com/me/messages?' + qs, { 
    method: 'POST', 
    headers: {'Content-Type': 'application/json'}, 
    body, 
}) 
.then(rsp => rsp.json()) 
.then(json => { 
    if (json.error && json.error.message) { 
    throw new Error(json.error.message); 
    } 
    return json; 
}); 
}; 

Но я получаю следующее сообщение об ошибке:

enter image description here

я не уверен, что мне нужно сделать, - я предполагаю, что я имею получил настройку бот-ответа 'sender_action', которая срабатывала перед каждым диалоговым ответом, но я не знаю, как это сделать.

ответ

0

Понял работает, не может работать, как контролировать сроки пузыря, но это нормально сейчас. В приведенном ниже коде мы покажем, как набирать пузырьки на дисплее перед каждым ответом моего бота, не опуская поток моего разговора.

FB Коммуникатор Код:

const typingBubble = (id, text) => { 

    var body = JSON.stringify({ 
     recipient: { id }, 
     "sender_action":"typing_on" 
    }); 

    const qs = 'access_token=' + encodeURIComponent(FB_PAGE_TOKEN); 
    return fetch('https://graph.facebook.com/me/messages?' + qs, { 
    method: 'POST', 
    headers: {'Content-Type': 'application/json'}, 
    body, 
    }) 
    .then(rsp => rsp.json()) 
    .then(json => { 
    if (json.error && json.error.message) { 
     throw new Error(json.error.message); 
    } 
    return json; 
    }); 
}; 

const fbMessage = (id, text) => { 

    if(scenarioCombos.trends.indexOf(text) >= 0 || scenarioCombos.disruptions.indexOf(text) >= 0) { 

    var body = JSON.stringify({ 
     recipient: { id }, 
     message: { 
      attachment: { 
        "type": "image", 
        "payload": { 
         "url": text 
        } 
       } 
      }, 
    }); 


    } else { 
    var body = JSON.stringify({ 
     recipient: { id }, 
     message: { text }, 
    }); 
    } 

    const qs = 'access_token=' + encodeURIComponent(FB_PAGE_TOKEN); 
    return fetch('https://graph.facebook.com/me/messages?' + qs, { 
    method: 'POST', 
    headers: {'Content-Type': 'application/json'}, 
    body, 
    }) 
    .then(rsp => rsp.json()) 
    .then(json => { 
    if (json.error && json.error.message) { 
     throw new Error(json.error.message); 
    } 
    return json; 
    }); 
}; 

Wit.ai отправить код действия (в пределах 'действия'):

send({sessionId}, {text}) { 
    const recipientId = sessions[sessionId].fbid; 
    if (recipientId) { 
     return typingBubble(recipientId, text), fbMessage(recipientId, text) 
    .then(() => null) 
    .catch((err) => { 
     console.error(
     'Oops! An error occurred while forwarding the response to', 
     recipientId, 
     ':', 
     err.stack || err 
     ); 
    }); 
    } else { 
    console.error('Oops! Couldn\'t find user for session:', sessionId); 
    return Promise.resolve() 
    } 
}, 
0

Чтобы отобразить печатный пузырь, вы просто отправляете действие отправителя typing_on. Это отображает индикатор ввода в течение 20 секунд, в течение которого вы будете отправлять фактическое сообщение, которое хотите отправить.

JSON для этого было бы:

{ 
    "recipient":{ 
    "id":"USER_ID" 
    }, 
    "sender_action":"typing_on" 
} 

Вызов документированы here

 Смежные вопросы

  • Нет связанных вопросов^_^