Продолжить диалог с тишиной в качестве входа - PullRequest
0 голосов
/ 27 февраля 2020

Я написал диалог, который должен продолжаться, если от пользователя нет ввода, 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;
                    }
         }
}

При этой установке повторно запускается предыдущий шаг диалога несколько раз. Однако я хотел бы перейти к следующему этапу диалога.

...