Я написал диалог, который должен продолжаться, если от пользователя нет ввода, ie, после запроса пользователь ничего не вводит. Для проверки бездействия я использую механизм обратного канала, чтобы передать событие в бот 'n' секунд, чтобы перейти к следующему шагу в диалоге. Я перехватываю это событие как в OnContinueDialogAsyn c (), так и в OnEventActivityAsyn c (), но не могу заставить бота продолжить разговор. Мой код в OnContinueDialogAsyn c () выглядит следующим образом:
if (innerDc.Context.Activity.Type == ActivityTypes.Event)
{
if (innerDc.ActiveDialog != null && innerDc.ActiveDialog.Id.Equals("DailyBriefDialog", StringComparison.InvariantCultureIgnoreCase))
{
innerDc.Context.Activity.Type = ActivityTypes.Message;
//innerDc.Context.Activity.Text = "continue";
}
await _stateAccessor.GetAsync(innerDc.Context,()=> new SkillState());
return await base.OnContinueDialogAsync(innerDc, cancellationToken);
}
My OnEventActivityAsyn c () выглядит следующим образом:
protected override async Task OnEventActivityAsync(DialogContext innerDc, CancellationToken cancellationToken = default)
{
var ev = innerDc.Context.Activity.AsEventActivity();
var value = ev.Value?.ToString();
switch (ev.Name)
{
case TokenEvents.TokenResponseEventName:
{
// Forward the token response activity to the dialog waiting on the stack.
await innerDc.ContinueDialogAsync();
break;
}
case StateProperties.Inactive:
{
if (innerDc.ActiveDialog != null && innerDc.ActiveDialog.Id.Equals("DailyBriefDialog", StringComparison.InvariantCultureIgnoreCase))
await innerDc.ContinueDialogAsync();
break;
}
default:
{
await innerDc.Context.SendActivityAsync(new Activity(type: ActivityTypes.Trace, text: $"Unknown Event '{ev.Name ?? "undefined"}' was received but not processed."));
break;
}
}
}
При этой установке повторно запускается предыдущий шаг диалога несколько раз. Однако я хотел бы перейти к следующему этапу диалога.