public async Task <ResourceResponse> SendEndConversationAsync(IEndOfConversationActivity activity)
        {
            if (activity == null)
            {
                _logger.LogError("The activity is null");
                return(null);
            }

            ResourceResponse resourceResponse = null;

            try
            {
                resourceResponse = await _botClient.Conversations.SendToConversationAsync((Activity)activity);
            }
            catch (UnauthorizedAccessException e)
            {
                _logger.LogError($"Failed to send message: {e.Message}");
            }
            catch (Exception e)
            {
                _logger.LogError($"Failed to send message: {e.Message}");
            }

            return(resourceResponse);
        }
        public IEndOfConversationActivity CreateEndOfConversationActivity(ConversationReference conversation)
        {
            IEndOfConversationActivity endActivity = Activity.CreateEndOfConversationActivity();

            if (conversation != null)
            {
                if (conversation.Conversation != null)
                {
                    endActivity.Conversation = conversation.Conversation;
                }

                if (conversation.User != null)
                {
                    endActivity.Recipient = conversation.User;
                }

                if (conversation.Bot != null)
                {
                    endActivity.From = conversation.Bot;
                }
            }

            endActivity.Text = string.Empty;
            return(endActivity);
        }
Esempio n. 3
0
        static async Task EndConversationAsync(Conversation conversation, DirectLineClient client)
        {
            IEndOfConversationActivity activity = Activity.CreateEndOfConversationActivity();

            activity.From = new ChannelAccount(Message.ClientID);

            await client.Conversations.PostActivityAsync(
                conversation.ConversationId, activity as Activity);
        }
        public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken)
        {
            if (turnContext.Activity.Type == ActivityTypes.ConversationUpdate && turnContext.Activity.MembersAdded != null)
            {
                var replyActivity = MessageFactory.Text($"{conversation.WelcomeMessage}");
                await turnContext.SendActivityAsync(replyActivity, cancellationToken);
            }
            else if (turnContext.Activity.Type == ActivityTypes.Message)
            {
                if (turnContext.Activity.Text.Contains("agent") | conversation.EscalationDictionary.ContainsKey(turnContext.Activity.Text))
                {
                    Dictionary <string, string> endConversationContext = new Dictionary <string, string>();
                    if (conversation.EscalationDictionary.ContainsKey(turnContext.Activity.Text))
                    {
                        endConversationContext = conversation.EscalationDictionary[turnContext.Activity.Text];
                    }

                    await turnContext.SendActivityAsync("Transferring  to an agent, who can help you with this. Please remain online…");

                    Dictionary <string, object> handOffContext = new Dictionary <string, object>()
                    {
                        { "BotHandoffContext", "Specialist request" },
                        { "skill", "service" }
                    };

                    var handoffevent = EventFactory.CreateHandoffInitiation(turnContext, new
                    {
                        MessageToAgent = "Issue Summary: billing question",
                        Context        = handOffContext
                    }); // Transcript is persisted by Omnichannel

                    await turnContext.SendActivityAsync(handoffevent);
                }
                else if (turnContext.Activity.Text.ToLower().Contains("end"))
                {
                    await turnContext.SendActivityAsync("Thanks for talking with me. Have a good day. Bye.");

                    IEndOfConversationActivity endOfConversationActivity = Activity.CreateEndOfConversationActivity();
                    await turnContext.SendActivityAsync(endOfConversationActivity);
                }
                else
                {
                    await HandleConversation(turnContext, cancellationToken);
                }
            }
        }
Esempio n. 5
0
 protected virtual Task ReceiveEndOfConversation(IBotContext context, IEndOfConversationActivity endOfConversationActivity)
 {
     return(Task.CompletedTask);
 }