Диалоги Botbuilder не поддерживают устранение дребезга или отдельные циклы.

Как добиться следующего? В botframework есть два типа прослушивателей: один для корневого диалога, к которому прикреплен обработчик luis. другой - Подсказки, где запрашивается ввод данных от пользователя.

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

как подсказки в botbuilder могут собираться в шаблоне устранения отказов, особенно когда они ищут входные данные от пользователя? и как их можно направить Луису в середине диалога?

e.g. 1.

bot: please enter your name
user: 1 sec
user: ok, it is Smith.

2.

bot: fetching the details from server... ( 5 sec pause makes user lose patience)
user: u there?
// This should not break the current dialog ( i.e. dialogue handler is preparing a response).
bot: yes, I am there.still waiting for a response from server. pls hold on. (after few secs...)
bot: got the details. here you go..
  1. третий пример.

    бот: каков был ваш опыт?

    пользователь: ну с чего мне начать?

    пользователь: вроде ничего, но...

    пользователь: не очень хорошо..

    пользователь: но я бы порекомендовал

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


person ubreddy    schedule 06.03.2017    source источник
comment
Я собираюсь попробовать сделать это на своем боте, отпишусь, если у меня получится   -  person Nicolas    schedule 30.11.2017


Ответы (1)


Вот что я делаю: используя библиотеку debounce-queue, я ставлю сообщения пользователя в очередь в промежуточном программном обеспечении bot.use({receive}). Когда массив событий отвергается, я продолжаю объединять события (текст, вложения и т. д.). После этого я приступаю к выполнению обратного вызова промежуточного программного обеспечения next(). Вот некоторый код (также с использованием lodash _), возможно, вам придется адаптировать его к своему:

var debounces = {};
bot.use({
  receive: (event, next) => {
    if (event.type === 'message') {
      if (!debounces[event.address.user.id]) {
        debounces[event.address.user.id] = debounce(events => {
            var last = events[events.length-1];
            var event = last.event;
            _.reverse(events.splice(0, events.length - 1)).forEach(debounced => {
              event.text = debounced.event.text + ' ' + event.text;
              event.attachments = _.concat(event.attachments, debounced.event.attachments);
            })
            last.next()
          })
        }, 2000)
      }
      debounces[event.address.user.id]({ event, next });
    } else {
      next()
    }
  }
})
person Nicolas    schedule 01.12.2017