Возможный способ очистки состояния разговора в конце разговора для команд Microsoft - PullRequest
1 голос
/ 29 апреля 2020

Я создаю бота и каждый раз, когда заканчивается разговор, я очищаю состояние разговора. Для этого я отправляю активность с типом endOfConversation после последнего сообщения.

По методу OnMessageActivityAsync моего бота я добавил этот код.

turnContext.OnSendActivities(OnSendActivitiesHandlerAsync);

Ведьма должен выполнить этот код:

private async Task<ResourceResponse[]> OnSendActivitiesHandlerAsync(ITurnContext turnContext, List<Activity> activities, Func<Task<ResourceResponse[]>> next)
{
    foreach (Activity activity in activities)
    {
        if (activity.Type == ActivityTypes.EndOfConversation)
        {
            await _conversationState.ClearStateAsync(turnContext); // <-- `_conversationState` is a global variable type of `BotState`.
        }
    }

    return await next();
}

Он очень хорошо работает в эмуляторе Bot Framework, но при запуске в Microsoft Teams у меня были ошибки. При поиске этого сообщения я обнаружил следующее:

Этот конкретный тип не поддерживается в командах, извините.

https://github.com/microsoft/botframework-sdk/issues/3300

В журналах я вижу это, когда хочу отправить тип endOfConversation.

{
    "code": "BadArgument",
    "message": "Unknown activity type",
    "innerHttpError": null
}

Я хотел бы отправить тип окончания разговора, потому что на основании этого типа я мог очистить состояние разговора на стороне сервера бота. В этом состоянии я сохраняю некоторые объекты, которые больше не нужны, когда разговор заканчивается.

Так что мой вопрос теперь состоит в том, как я могу очистить состояние разговора в конце разговора, не используя endOfConversation тип

1 Ответ

2 голосов
/ 29 апреля 2020

«RichMoe» в предоставленной вами ссылке утверждает, что Команды не поддерживают эту операцию (2017), и я думаю, что то же самое по-прежнему верно - я не думаю, что Команды имеют концепцию «конца» разговора Таким образом, как, например, бот поддержки на веб-сайте - как и любой разговор, Команды будут пытаться сохранить всю историю чата навсегда.

Возможно, вы сможете объяснить, почему вам нужно "закончить" Разговор, если что-то связано, я могу попробовать помочь.

...