Я предполагаю, что вы работаете с одним из образцов. Я основываю свой ответ на CoreBot .
. Вы должны думать о диалоге, вызываемом Dialog.RunAsync()
, как о "root" или "родительском" диалоге, из которого все другие диалоги ветвь и поток от. Чтобы изменить, какой диалог вызывается этим, посмотрите в Startup.cs
строку, которая выглядит следующим образом :
// Create the bot as a transient. In this case the ASP Controller is expecting an IBot.
services.AddTransient<IBot, DialogAndWelcomeBot<MainDialog>>();
Чтобы изменить это на диалог, отличный от MainDialog
, вы просто замените его соответствующим диалогом.
Как только вы войдете в root или родительский диалог, вы вызовете другой диалог с BeginDialogAsync()
:
stepContext.BeginDialogAsync(nameof(BookingDialog), new BookingDetails(), cancellationToken);
К вашему сведению:
В Node это работает немного по-другому. В CoreBot MainDialog передается боту в index.js
:
const dialog = new MainDialog(luisRecognizer, bookingDialog);
const bot = new DialogAndWelcomeBot(conversationState, userState, dialog);
[...]
// Listen for incoming activities and route them to your bot main dialog.
server.post('/api/messages', (req, res) => {
// Route received a request to adapter for processing
adapter.processActivity(req, res, async (turnContext) => {
// route to bot activity handler.
await bot.run(turnContext);
Вы можете видеть, что он вызывает DialogAndWelcomeBot
, что расширяет DialogBot , , который вызывает MainDialog
для каждого сообщения :
this.onMessage(async (context, next) => {
console.log('Running dialog with Message Activity.');
// Run the Dialog with the new message Activity.
await this.dialog.run(context, this.dialogState);
// By calling next() you ensure that the next BotHandler is run.
await next();
});
У вас нет для настройки вашего бота таким образом, но это рекомендуемый в настоящее время дизайн, и вам будет проще реализовать наши документы и образцы, если вы будете следовать этому.