EDIT:
Проходя по исходному коду, я нашел следующее в botbuilder.d.ts
. Казалось бы, в водопадах вам не нужно называть endDialog
явно?
/* You can terminate a waterfall early by either falling through every step of the waterfall using
* calls to `skip()` or simply not starting another prompt or dialog.
*
* __note:__ Waterfalls have a hidden last step which will automatically end the current dialog if
* if you call a prompt or dialog from the last step. This is useful where you have a deep stack of
* dialogs and want a call to [session.endDialog()](/en-us/node/builder/chat-reference/classes/_botbuilder_d_.session.html#enddialog)
* from the last child on the stack to end the entire stack. The close of the last child will trigger
* all of its parents to move to this hidden step which will cascade the close all the way up the stack.
* This is typically a desired behavior but if you want to avoid it or stop it somewhere in the
* middle you'll need to add a step to the end of your waterfall that either does nothing or calls
* something like [session.send()](/en-us/node/builder/chat-reference/classes/_botbuilder_d_.session.html#send)
* which isn't going to advance the waterfall forward.
* @example
* <pre><code>
* var bot = new builder.BotConnectorBot();
* bot.add('/', [
* function (session) {
* builder.Prompts.text(session, "Hi! What's your name?");
* },
* function (session, results) {
* if (results && results.response) {
* // User answered question.
* session.send("Hello %s.", results.response);
* } else {
* // User said never mind.
* session.send("OK. Goodbye.");
* }
* }
* ]);
*
* /
Я изучаю MS Bot Framework версии 3 - это версияони работают здесь.
Я следую концепции работы водопадов (https://docs.microsoft.com/en-us/azure/bot-service/nodejs/bot-builder-nodejs-dialog-manage-conversation-flow?view=azure-bot-service-3.0),, но я не понимаю, какую роль играет endDialog
.
Например, в коде, который мыработают, есть несколько отдельных диалогов, которые имеют форму
module.exports = function showTickets() {
this.bot.dialog('/showAllTickets', [
async function showAllTicketsFn(session, args, next) {
this.beginDialog.bind(this, '/showTickets')(session, args, next);
}.bind(this)
]);
};
В основном одно диалоговое окно загружает другое (с некоторым другим промежуточным кодом, таким как установка данных в хранилище данных). 1020 *. Но в примере из учебного пособия по MS каждый водопад оканчивается некой формой endDialog
(endDialog
или endDialogWithResults
и т. Д.).
Каждый диалог «открывается» с помощью beginDialog
автоматически «закрывает» себя, когда его водопад завершен, то есть когда функции, которые передаются в массиве в bot.dialog
, выполняются через? (в приведенном выше коде водопад - только один шаг).
Когда нужно явно позвонить endDialog
?
Спасибо за любую помощь!