Как включить ожидание сна (миллисекунды) между двумя наборами сообщений в MS Bot Framework? - PullRequest
2 голосов
/ 09 марта 2020

Я разрабатываю бота, используя NodeJs, который должен задать пользователю набор вопросов, а затем после перерыва снова задать тот же вопрос. Я использую await sleep(milliseconds) между ними. Во время тестирования с помощью эмулятора я заметил, что вопросы из первого набора отправляются один за другим, сохраняя ответ пользователя. Второй набор отправляется все сразу, не позволяя пользователю ответить на каждый вопрос второго набора индивидуально.

 await turnContext.sendActivity(askFirstSetOfQuestions(question));
 await sleep(60000);
 await turnContext.sendActivity(askSecondSetOfQuestions(question));

 await next();

image - снимок экрана из эмулятора image - screen capture from emulator

Совершенно потерянный здесь ... любая помощь будет оценена.

1 Ответ

0 голосов
/ 13 марта 2020

Здесь нужно рассмотреть две вещи. Во-первых, если вам действительно нужна задержка, лучше дождаться обещания, чем использовать сон. Вы можете сделать это через await new Promise (resolve => setTimeout(resolve, DELAY_LENGTH);. Я часто использую это в сочетании с индикатором набора текста, чтобы дать боту более естественное чувство разговора, когда он отправляет два или более дискретных сообщения без ожидания ввода пользователя.

Однако, как упоминал Эри c, кажется, как вы могли бы хотеть диалог водопада вместо этого для своего случая использования. Этот пример из образцов Botbuilder является хорошим примером. Каждый шаг будет подсказкой, и он будет ждать ввода пользователя, прежде чем продолжить. Я не буду пытаться написать весь бот здесь, но один шаг вопрос-ответ будет выглядеть примерно так:

async firstQuestion(stepContext) {
    return await stepContext.prompt(TEXT_PROMPT, 'Question 1');
}

async secondQuestion(stepContext) {
    stepContext.values.firstAnswer = stepContext.result;
    return await stepContext.prompt(TEXT_PROMPT, 'Question 2');
}

и так далее. Не уверен, что вы делаете с ответами, но в приведенном выше примере я сохраняю его в stepContext.values, чтобы все ответы были доступны на последующих этапах как часть объекта контекста.

Если вы можете подробнее о вашем сценарии использования / ожидаемом поведении и расскажите, что такое askFirstSetOfQuestions, мы можем предоставить дополнительную помощь.

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