Comment gérer et stocker TurnState sans utiliser l'objet TurnContext
Dans le morceau de code suivant, l'objet TurnContext est requis pour récupérer l'état du bot sous-jacent à partir de Cosmos et le sauvegarder -
//Get the TurnContext from the Dictionary
TurnContextReferences.TryGetValue(sessionStateChangedEventData.SessionId, out ITurnContext turnContext);
if (turnContext != null)
{
var conversationData = await BotStateAccessors
.ConversationStateAccessor
.GetAsync(turnContext, () => new ConversationStateDataModel());
if (!conversationData.LiveAgentChatClosed)
{
conversationData.LiveAgentChatClosed = true;
await BotStateAccessors.ConversationStateAccessor.SetAsync(turnContext, conversationData);
await BotConversationState.SaveChangesAsync(turnContext);
}
}
Existe-t-il un moyen possible d'atteindre la même chose sans utiliser directement TurnContext?
Réponses
Toutes les informations dont vous avez besoin pour accéder à l'état du bot et envoyer des messages à un utilisateur se trouvent dans une référence de conversation. Vous pouvez créer un contexte de virage à partir d'une référence de conversation enregistrée à l'aide de la ContinueConversationAsyncméthode. Vous pouvez voir comment procéder dans l' exemple de messages proactifs :
await ((BotAdapter)_adapter).ContinueConversationAsync(_appId, conversationReference, BotCallback, default(CancellationToken));
Un contexte de tour n'est pas censé exister en dehors de son tour associé. Vous devriez enregistrer les références de conversation au lieu de tourner les contextes.