Определить, когда разговор заканчивается, чтобы я мог удалить сохраненные данные о состоянии разговора - PullRequest
2 голосов
/ 05 марта 2020

Я установил бота, у которого есть обычный стек диалога, в котором каждый диалог сохраняет данные о состоянии в базе данных Cosmos в Azure. Когда диалог заканчивается, я использую OnEndDialogAsyn c, чтобы удалить данные, указывающие c для этого диалога.

Мой вопрос: как мне определить, когда закончится весь разговор, чтобы я мог удалить весь предмет? Или разговор никогда не заканчивается?

Мой текущий код, который удаляет все данные диалога в конце:

    protected override async Task OnEndDialogAsync(ITurnContext context, DialogInstance instance, DialogReason reason, CancellationToken cancellationToken)
    {
        DialogStateDictionary dictionary = await Dependencies.StateAccessor.GetAsync(context, () => null);
        if (dictionary != null && dictionary.ContainsKey(DialogID) == true)
        {
            dictionary[DialogID] = null;
        }
        await Dependencies.StateAccessor.SetAsync(context, dictionary);
    }

Код для удаления всего объекта будет:

await Dependencies.StateAccessor.SetAsync(context, null);

Ответы [ 2 ]

1 голос
/ 07 марта 2020

Понятие "окончание" разговора будет зависеть от канала c. В веб-чате вы можете попросить своего клиента ответить на браузер, покидающий страницу, сообщив об этом своему боту. В таких каналах, как Команды, разговор фактически постоянен, но вы всегда можете произвольно определить любую точку разговора как «конец», если ваш бот сбросит свое состояние, как вы делаете. Возможно, вы могли бы получить запрос на подтверждение, который спрашивает пользователя "Это все?" и если пользователь говорит «да», то бот может сказать «до свидания» или что-то в этом роде.

0 голосов
/ 07 марта 2020

Не уверен, какой канал вы используете, рекомендуем посмотреть endofconversation тип активности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...