У меня есть чат-бот, созданный в C # с использованием SDK .net Core 2.2 Шаблон Virtual Assistant , который имеет 1 главное диалоговое окно и несколько диалоговых окон (диалоговое окно компонентов). Каждый диалог компонента вызывает другой диалог компонента.
Допустим, у меня есть MainDialog, 2-компонентный диалог с именем ComponentDialog1, ComponentDialog2.
Я использую DialogsTriggerState, чтобы узнать, какой диалог компонента должен запускаться для всего бота.
Код основного диалога: Я вызываю ComponentDialog1 в RouteAsync метод основного диалога.
protected override async Task RouteAsync(DialogContext dc, CancellationToken cancellationToken = default(CancellationToken))
{
var triggerState = await _triggerStateAccessor.GetAsync(dc.Context, () => new DialogsTriggerState());
await dc.BeginDialogAsync(nameof(ComponentDialog1), triggerState);
var turnResult = EndOfTurn;
if (turnResult != EndOfTurn)
{
await CompleteAsync(dc);
}
}
ComponentDialog1 Код:
У меня есть 3 этапа водопада, в которых 2-й шаг будет вызывать определенный «ComponentDialog» в зависимости от состояния бота. Предположим, я запускаю "ComponentDialog2".
private async Task<DialogTurnResult> TriggerToSpecificComponentDialogAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
var triggerState = await _DialogsTriggerStateAccessor.GetAsync(stepContext.Context, () => null);
if (triggerState.TriggerDialogId.ToString().ToLower() == "componentdialog2")
{
return await stepContext.BeginDialogAsync(nameof(ComponentDialog2), triggerState);
}
else if (triggerState.TriggerDialogId.ToString().ToLower() == "componentdialog3")
{
return await stepContext.BeginDialogAsync(nameof(ComponentDialog3), triggerState);
}
else
{
return await stepContext.NextAsync();
}
}
ComponentDialog2 Код:
У меня есть 2 шага водопада, который показывает адаптивные значения карты и выборки из карты и диалоговое окно завершения (ComponentDialog2)
private async Task<DialogTurnResult> DisplayCardAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
// Display the Adaptive Card
var cardPath = Path.Combine(".", "AdaptiveCard.json");
var cardJson = File.ReadAllText(cardPath);
var cardAttachment = new Attachment()
{
ContentType = "application/vnd.microsoft.card.adaptive",
Content = JsonConvert.DeserializeObject(cardJson),
};
var message = MessageFactory.Text("");
message.Attachments = new List<Attachment>() { cardAttachment };
await stepContext.Context.SendActivityAsync(message, cancellationToken);
// Create the text prompt
var opts = new PromptOptions
{
Prompt = new Activity
{
Type = ActivityTypes.Message,
Text = "waiting for user input...", // You can comment this out if you don't want to display any text. Still works.
}
};
// Display a Text Prompt and wait for input
return await stepContext.PromptAsync(nameof(TextPrompt), opts);
}
private async Task<DialogTurnResult> HandleResponseAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
await stepContext.Context.SendActivityAsync($"INPUT: {stepContext.Result}");
//I am doing some logic and may continue to next steps also from here, but as I am stuck here i am ending dialog.
return await stepContext.EndDialogAsync();
}
Проблема: После нажатия адаптивной карты, отправленной в «ComponentDialog2» 1-го шага, код (элемент управления) не указывает на 2-й шаг «HandleResponseAsync», который должен произойти, как я предоставил, «Запрос» и ожидание вход.
Фактический вывод: Я не получаю ни вывода, ни ошибок в боте.
Ожидаемый результат:
1) Отображение боту из ComponentDialog2: ВВОД: все, что я отправил
2) Поскольку я заканчиваю диалог в ComponentDialog2, элемент управления (код) должен вернуться обратно к ComponentDialog1 и перейти к третьему шагу водопада ComponentDialog1.
Пример адаптивной карты
{
"type": "AdaptiveCard",
"body": [
{
"type": "TextBlock",
"size": "Medium",
"weight": "Bolder",
"text": "Let us know your feedback"
}
],
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.0",
"actions": [
{
"type": "Action.Submit",
"title": "Good",
"data": "good"
},
{
"type": "Action.Submit",
"title": "Average",
"data": "avaerage"
}
,{
"type": "Action.Submit",
"title": "Bad",
"data": "bad"
}
]
}
Пожалуйста, помогите мне, как достичь