Как добавить задержку при наборе сообщений в боткитах с помощью адаптера facebook - PullRequest
0 голосов
/ 08 января 2020

Мы создаем бот-мессенджер на Facebook с Botkit версии 4.

Мы пробовали разные способы добавить задержку при наборе сообщений, но ни один из них не работает должным образом.

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

bot.reply(message, { type: "typing" });

Поэтому мы используем что-то вроде следующего:

Решение 1

controller.middleware.send.use(async function (bot, message, next) {
    if (bot._config && bot._config.activity && bot._config.activity.conversation && bot._config.activity.conversation.id) {
        await typingIndicator(bot,bot._config.activity.conversation.id)
        setTimeout(async () => { next(); }, 2000);
    } else {
        next();
    }
});

async function typingIndicator(bot, id) {
    await bot.api.callAPI('/me/messages', 'post', {
        recipient: { id: id }, sender_action: 'typing_on'
    })
}

Но эта реализация не работает должным образом.

У меня около 200 - 300 потоков, поэтому я попытался добавить задержку, используя convo.before () Но даже это разрыв между

Решение 2

let dialog = new BotkitConversation('dialog', controller);

dialog.addMessage({text: 'Message 1', action: 'thread_2'}, 'thread_1');
dialog.addMessage({text: 'Message 2', action: 'thread_3'}, 'thread_2');
dialog.addMessage({text: 'Message 3', action: 'thread_4'}, 'thread_3');
dialog.addMessage({text: 'Message 4'}, 'thread_4');

for (let key in dialog.script) {
    dialog.before(`${key}`, async (convo, bot) => {
        return new Promise((resolve, reject) => {
            setTimeout(resolve, 2000);
        });
    });
}

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 13 января 2020

Я решил это следующим образом:

async function middlewareTest(bot, message, next) {
  if(message.text.length > 0){
    let time = message.text.length * 30;
    await setTimeout(async ()=> {await next();}, time);
  } else {
    await next();
  } 
}

controller.middleware.send.use(middlewareTest);

Я проверяю, содержит ли текст сообщений, которые будут отправлены, больше 0 символов. Если это так, я делаю тайм-аут.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...