private async Task <DialogTurnResult> MessagePromptStepAsync( WaterfallStepContext stepContext, CancellationToken cancellationToken) { PromptOptions messagePrompt = new PromptOptions(); if (!stepContext.Values.TryGetValue(HandoffState, out HandoffContextState contextState)) { // Attempt to continue on from a previous context if (stepContext.Options is HandoffContextState passthoughContextState) { stepContext.Values.Add(HandoffState, passthoughContextState); } else { // Build our conversation callback ConversationReference conversationReference = stepContext.Context.Activity.GetConversationReference(); string proxyId = await _conversationProxy.RegisterConversationAsync(conversationReference, cancellationToken); // Net new connection, connect to the handoff agent string sessionId = await _matchmaker.NewSessionAsync(proxyId); HandoffContextState newContextState = new HandoffContextState { MatchmakerSessionId = sessionId, ProxyId = proxyId }; stepContext.Values.Add(HandoffState, newContextState); // Add message to the background info // TODO: Refactor IStatePropertyAccessor <List <string> > conversationStateAccessors = _conversationState.CreateProperty <List <string> >(MessageHistoryStateKey); List <string> conversationData = await conversationStateAccessors.GetAsync(stepContext.Context, () => new List <string>()); if (conversationData != null && conversationData.Count > 0) { await _matchmaker.AddSessionBackgroundAsync(sessionId, conversationData); // Clear the current history once it has been passed to the matchmaker await conversationStateAccessors.DeleteAsync(stepContext.Context); } _log.LogInformation("Set up new handoff session"); // Let the user know messagePrompt.Prompt = MessageFactory.Text("You are being connected to a support agent, please wait..."); } } return(await stepContext.PromptAsync(nameof(TextPrompt), messagePrompt)); }
private async Task <DialogTurnResult> MessagePromptStepAsync( WaterfallStepContext stepContext, CancellationToken cancellationToken) { PromptOptions messagePrompt = new PromptOptions(); if (!stepContext.Values.TryGetValue(HandoffState, out HandoffContextState contextState) || contextState == null) { // Attempt to continue on from a previous context if (stepContext.Options is HandoffContextState passthoughContextState) { stepContext.Values.Add(HandoffState, passthoughContextState); } else { // Build our conversation callback ConversationReference conversationReference = stepContext.Context.Activity.GetConversationReference(); string proxyId = await _conversationProxy.RegisterConversationAsync(conversationReference, cancellationToken); // Net new connection, connect to the handoff agent string sessionId = await _matchmaker.NewSessionAsync(proxyId); HandoffContextState newContextState = new HandoffContextState { MatchmakerSessionId = sessionId, ProxyId = proxyId }; stepContext.Values.Add(HandoffState, newContextState); _log.LogInformation("New handoff session created"); // Let the user know messagePrompt.Prompt = MessageFactory.Text("You have been put in the queue to be connected with a user, please wait..."); } } return(await stepContext.PromptAsync(nameof(TextPrompt), messagePrompt)); }
private async Task <DialogTurnResult> EndDialogWithCleanupAsync(WaterfallStepContext stepContext, HandoffContextState contextState, string message, CancellationToken cancellationToken) { if (contextState != null && !string.IsNullOrWhiteSpace(contextState.MatchmakerSessionId)) { await _matchmaker.EndSessionAsync(contextState.MatchmakerSessionId); } if (contextState != null && !string.IsNullOrWhiteSpace(contextState.ProxyId)) { await _conversationProxy.RemoveConversationAsync(contextState.ProxyId, cancellationToken); } if (!string.IsNullOrWhiteSpace(message)) { await stepContext.Context.SendActivityAsync(message, cancellationToken : cancellationToken); } return(await stepContext.EndDialogAsync(null, cancellationToken)); }