private Activity HandleSystemMessage(Activity message)
        {
            if (message.Type == ActivityTypes.DeleteUserData)
            {
                // Implement user deletion here
                // If we handle user deletion, return a real message
            }
            else if (message.Type == ActivityTypes.ConversationUpdate)
            {
                // Handle conversation state changes, like members being added and removed
                // Use Activity.MembersAdded and Activity.MembersRemoved and Activity.Action for info
                // Not available in all channels
                // This method gets invoked when somebody establishes a conversation with your bot
                // You can add an introduction here or just say Hello World!
                IConversationUpdateActivity update = message;
                var client = new ConnectorClient(new Uri(message.ServiceUrl), new MicrosoftAppCredentials());
                foreach (var newMember in update.MembersAdded)
                {
                    if (newMember.Id != message.Recipient.Id)
                    {
                        var reply = message.CreateReply();
                        reply.Text = $"Hello World!";
                        client.Conversations.ReplyToActivityAsync(reply);
                    }
                }
            }
            else if (message.Type == ActivityTypes.ContactRelationUpdate)
            {
                // Handle add/remove from contact lists
                // Activity.From + Activity.Action represent what happened
            }
            else if (message.Type == ActivityTypes.Typing)
            {
                // Handle knowing that the user is typing
            }
            else if (message.Type == ActivityTypes.Ping)
            {
            }

            return(null);
        }
Beispiel #2
0
        /// <summary>
        /// Invoke when a conversation update activity is received from the channel.
        /// </summary>
        /// <param name="turnContext">Context object containing information cached for a single turn of conversation with a user.</param>
        /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
        /// <returns>A task that represents the work queued to execute.</returns>
        /// <remarks>
        /// Reference link: https://docs.microsoft.com/en-us/dotnet/api/microsoft.bot.builder.teams.teamsactivityhandler.onconversationupdateactivityasync?view=botbuilder-dotnet-stable.
        /// </remarks>
        protected override async Task OnConversationUpdateActivityAsync(
            ITurnContext <IConversationUpdateActivity> turnContext,
            CancellationToken cancellationToken)
        {
            try
            {
                turnContext = turnContext ?? throw new ArgumentNullException(nameof(turnContext));
                this.RecordEvent(nameof(this.OnConversationUpdateActivityAsync), turnContext);
                IConversationUpdateActivity activity = turnContext.Activity;

                this.logger.LogInformation("Received conversationUpdate activity.");
                this.logger.LogInformation($"conversationType: {activity.Conversation.ConversationType}, membersAdded: {activity.MembersAdded?.Count}, membersRemoved: {activity.MembersRemoved?.Count}");

                if (activity.MembersAdded?.Count == 0)
                {
                    this.logger.LogInformation("Ignoring conversationUpdate that was not a membersAdded event.");
                    return;
                }

                switch (activity.Conversation.ConversationType)
                {
                case PersonalConversationType:
                    await ActivityHelper.OnMembersAddedToPersonalChatAsync(membersAdded : activity.MembersAdded, turnContext : turnContext, logger : this.logger, appBaseUrl : this.appBaseUrl, this.localizer);

                    return;

                case ChannelConversationType:
                    await ActivityHelper.OnMembersAddedToTeamAsync(membersAdded : activity.MembersAdded, turnContext : turnContext, microsoftAppCredentials : this.microsoftAppCredentials, logger : this.logger, appBaseUrl : this.appBaseUrl, localizer : this.localizer, cancellationToken : cancellationToken);

                    return;

                default:
                    throw new InvalidOperationException("Unexpected operation. Expected conversation type.");
                }
            }
            catch (Exception ex)
            {
                this.logger.LogError(ex, $"Error processing conversationUpdate: {ex.Message}", SeverityLevel.Error);
                throw;
            }
        }
Beispiel #3
0
        private UserDataEntity ParseData(IConversationUpdateActivity activity, string partitionKey)
        {
            var rowKey = activity?.From?.AadObjectId;

            if (rowKey == null)
            {
                throw new ArgumentNullException(nameof(activity));
            }

            return(new UserDataEntity
            {
                PartitionKey = partitionKey,
                RowKey = activity?.From?.AadObjectId,
                AadId = activity?.From?.AadObjectId,
                UserId = activity?.From?.Id,
                ConversationId = partitionKey.Equals(UserDataTableNames.UserDataPartition) ? activity?.Conversation?.Id : null,
                ServiceUrl = activity?.ServiceUrl,
                TenantId = activity?.Conversation?.TenantId,
                Email = "Email1: " + activity?.From?.Name,
            });
        }
Beispiel #4
0
        /// <summary>
        /// User(s) join or left a conversation
        /// </summary>
        /// <param name="connector"></param>
        /// <param name="activity"></param>
        /// <returns></returns>
        async Task HandleConversationUpdateAsync(ConnectorClient connector, IConversationUpdateActivity activity)
        {
            const string welcomeMessage =
                "Welcome to the Rock, Paper, Scissors game! " +
                "To begin, type \"rock\", \"paper\", or \"scissors\". ";

            Func <ChannelAccount, bool> isChatbot = channelAcct => channelAcct.Id == activity.Recipient.Id;

            //It works only when user join conversation
            if (activity.MembersAdded.Any(isChatbot))
            {
                Activity reply = (activity as Activity).CreateReply(welcomeMessage);
                await connector.Conversations.ReplyToActivityAsync(reply);
            }

            //It works only when user left conversation
            if (activity.MembersRemoved.Any(isChatbot))
            {
                //To be determined.
            }
        }
        private static TeamDataEntity ParseTeamData(IConversationUpdateActivity activity)
        {
            var channelData = activity.GetChannelData <TeamsChannelData>();

            if (channelData != null)
            {
                var teamsDataEntity = new TeamDataEntity
                {
                    PartitionKey = PartitionKeyNames.TeamDataTable.TeamDataPartition,
                    RowKey       = channelData.Team.Id,
                    TeamId       = channelData.Team.Id,
                    Name         = channelData.Team.Name,
                    ServiceUrl   = activity.ServiceUrl,
                    TenantId     = channelData.Tenant.Id,
                };

                return(teamsDataEntity);
            }

            return(null);
        }
Beispiel #6
0
        private Activity HandleSystemMessage(Activity message)
        {
            if (message.Type == ActivityTypes.DeleteUserData)
            {
                // Implement user deletion here
                // If we handle user deletion, return a real message
            }
            else if (message.Type == ActivityTypes.ConversationUpdate)
            {
                var             reply     = message.CreateReply("Hello! I am JobBot.\nHere to assist you find the job you desire.");
                ConnectorClient connector = new ConnectorClient(new Uri(message.ServiceUrl));

                IConversationUpdateActivity iConversationUpdated = message as IConversationUpdateActivity;
                if (iConversationUpdated != null)
                {
                    foreach (var member in iConversationUpdated.MembersAdded ?? System.Array.Empty <ChannelAccount>())
                    {
                        // when the bot is added, then
                        if (member.Id == iConversationUpdated.Recipient.Id)
                        {
                            connector.Conversations.ReplyToActivityAsync(reply);   //sends async message
                        }
                    }
                }
            }
            else if (message.Type == ActivityTypes.ContactRelationUpdate)
            {
                // Handle add/remove from contact lists
                // Activity.From + Activity.Action represent what happened
            }
            else if (message.Type == ActivityTypes.Typing)
            {
                // Handle knowing tha the user is typing
            }
            else if (message.Type == ActivityTypes.Ping)
            {
            }

            return(null);
        }
        /// <summary>
        /// POST: api/Messages
        /// Receive a message from a user and reply to it
        /// </summary>
        public async Task <HttpResponseMessage> Post([FromBody] Activity activity)
        {
            if (activity.Type == ActivityTypes.Message)
            {
                if (activity.Text.Contains("speaker") || activity.Text.Contains("whois"))
                {
                    var client = new ConnectorClient(new Uri(activity.ServiceUrl), new MicrosoftAppCredentials());
                    await client.Conversations.SendToConversationAsync(await new UserInfoCard().GetUserInfoCardAsync(activity));
                }
                else
                {
                    await Conversation.SendAsync(activity, () => new Dialogs.RootDialog());
                }
            }
            else if (activity.Type == ActivityTypes.ConversationUpdate)
            {
                IConversationUpdateActivity conversationUpdate = activity;
                var client = new ConnectorClient(new Uri(activity.ServiceUrl), new MicrosoftAppCredentials());
                if (activity.MembersAdded != null)
                {
                    activity
                    .MembersAdded
                    .Where(newMember => newMember.Id != activity.Recipient.Id)
                    .ToList()
                    .ForEach(newMember =>
                    {
                        var reply  = activity.CreateReply();
                        reply.Text = $"Welcome {newMember.Name}!. I'm CodeEurope Bot.  \n How can I help you?";
                        client.Conversations.ReplyToActivityAsync(reply);
                    });
                }
            }
            else
            {
                HandleSystemMessage(activity);
            }
            var response = Request.CreateResponse(HttpStatusCode.OK);

            return(response);
        }
        private Activity HandleSystemMessage(Activity message)
        {
            if (message.Type == ActivityTypes.DeleteUserData)
            {
                // Implement user deletion here
                // If we handle user deletion, return a real message
            }
            else if (message.Type == ActivityTypes.ConversationUpdate)
            {
                IConversationUpdateActivity update = message;
                var cliente = new ConnectorClient(new Uri(message.ServiceUrl), new MicrosoftAppCredentials());
                if (update.MembersAdded != null && update.MembersAdded.Any())
                {
                    foreach (var nuevo in update.MembersAdded)
                    {
                        if (nuevo.Id != message.Recipient.Id)
                        {
                            var reply = message.CreateReply();
                            reply.Text = "Hola " + nuevo.Name + ". Aquí econtraras muchas peliculas, puedo ayudarte a encontralas.";
                            cliente.Conversations.ReplyToActivityAsync(reply);
                        }
                    }
                }
            }
            else if (message.Type == ActivityTypes.ContactRelationUpdate)
            {
                // Handle add/remove from contact lists
                // Activity.From + Activity.Action represent what happened
            }
            else if (message.Type == ActivityTypes.Typing)
            {
                // Handle knowing tha the user is typing
            }
            else if (message.Type == ActivityTypes.Ping)
            {
            }

            return(null);
        }
 private async Task HandleSystemMessage(Activity message)
 {
     if (message.Type == ActivityTypes.DeleteUserData)
     {
         // Implement user deletion here
         // If we handle user deletion, return a real message
     }
     else if (message.Type == ActivityTypes.ConversationUpdate)
     {
         // Handle conversation state changes, like members being added and removed
         // Use Activity.MembersAdded and Activity.MembersRemoved and Activity.Action for info
         // Not available in all channels
         IConversationUpdateActivity update = message;
         if (update.MembersAdded.Any())
         {
             foreach (var newMember in update.MembersAdded)
             {
                 // the bot is always added as a user of the conversation, since we don't
                 // want to display the message twice ignore the conversation update triggered by the bot
                 if (newMember.Id == message.Recipient.Id)
                 {
                     await SendGreetingMessage(message);
                 }
             }
         }
     }
     else if (message.Type == ActivityTypes.ContactRelationUpdate)
     {
         // Handle add/remove from contact lists
         // Activity.From + Activity.Action represent what happened
     }
     else if (message.Type == ActivityTypes.Typing)
     {
         // Handle knowing tha the user is typing
     }
     else if (message.Type == ActivityTypes.Ping)
     {
     }
 }
        private static UserDataEntity ParseUserData(IConversationUpdateActivity activity)
        {
            var rowKey = activity?.From?.AadObjectId;

            if (rowKey != null)
            {
                var userDataEntity = new UserDataEntity
                {
                    PartitionKey   = UserDataTableNames.UserDataPartition,
                    RowKey         = activity?.From?.AadObjectId,
                    AadId          = activity?.From?.AadObjectId,
                    UserId         = activity?.From?.Id,
                    ConversationId = activity?.Conversation?.Id,
                    ServiceUrl     = activity?.ServiceUrl,
                    TenantId       = activity?.Conversation?.TenantId,
                };

                return(userDataEntity);
            }

            return(null);
        }
Beispiel #11
0
        private Activity HandleSystemMessage(Activity message)
        {
            if (message.Type == ActivityTypes.DeleteUserData)
            {
                // Implement user deletion here
                // If we handle user deletion, return a real message
            }
            else if (message.Type == ActivityTypes.ConversationUpdate)
            {
                IConversationUpdateActivity iConversationUpdated = message as IConversationUpdateActivity;
                if (iConversationUpdated != null)
                {
                    ConnectorClient connector = new ConnectorClient(new Uri(message.ServiceUrl));

                    foreach (var member in iConversationUpdated.MembersAdded ?? Array.Empty <ChannelAccount>())
                    {
                        if (member.Id == iConversationUpdated.Recipient.Id)
                        {
                            var reply = ((Activity)iConversationUpdated).CreateReply($"Hallo! \n\nWie kann ich behilflich sein? \n\n \n\nGeben Sie jederzeit 'Hilfe' ein, um weitere Hinweise zu bekommen.");
                            connector.Conversations.ReplyToActivityAsync(reply);
                        }
                    }
                }
            }
            else if (message.Type == ActivityTypes.ContactRelationUpdate)
            {
                // Handle add/remove from contact lists
                // Activity.From + Activity.Action represent what happened
            }
            else if (message.Type == ActivityTypes.Typing)
            {
                // Handle knowing tha the user is typing
            }
            else if (message.Type == ActivityTypes.Ping)
            {
            }

            return(null);
        }
Beispiel #12
0
        private Activity HandleSystemMessage(Activity message)
        {
            if (message.Type == ActivityTypes.DeleteUserData)
            {
                // Implement user deletion here
                // If we handle user deletion, return a real message
            }
            else if (message.Type == ActivityTypes.ConversationUpdate)
            {
                IConversationUpdateActivity iConversationUpdated = message as IConversationUpdateActivity;
                if (iConversationUpdated != null)
                {
                    ConnectorClient connector = new ConnectorClient(new Uri(message.ServiceUrl));

                    foreach (var member in iConversationUpdated.MembersAdded ?? Array.Empty <ChannelAccount>())
                    {
                        if (member.Id == iConversationUpdated.Recipient.Id)
                        {
                            var reply = ((Activity)iConversationUpdated).CreateReply($"**Hallo und herzlich willkommen** beim digitalen Assistenten der Stadt Dorsten! \n\nBitte schreiben Sie mir eine Nachricht, um den Chat zu beginnen!");
                            connector.Conversations.ReplyToActivityAsync(reply);
                        }
                    }
                }
            }
            else if (message.Type == ActivityTypes.ContactRelationUpdate)
            {
                // Handle add/remove from contact lists
                // Activity.From + Activity.Action represent what happened
            }
            else if (message.Type == ActivityTypes.Typing)
            {
                // Handle knowing tha the user is typing
            }
            else if (message.Type == ActivityTypes.Ping)
            {
            }

            return(null);
        }
Beispiel #13
0
        protected override async Task OnMembersAddedAsync(IList <ChannelAccount> membersAdded, ITurnContext <IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
        {
            IConversationUpdateActivity iConversationUpdated = turnContext.Activity as IConversationUpdateActivity;

            foreach (var member in membersAdded)
            {
                if (member.Id != turnContext.Activity.Recipient.Id)
                {
                    var card = new HeroCard
                    {
                        Title  = "Welcome to WeatherBot",
                        Text   = @"Type the city name for get the weather report",
                        Images = new List <CardImage>()
                        {
                            new CardImage(ImageToBase64(_images[0]))
                        },
                    };

                    await turnContext.SendActivityAsync(MessageFactory.Attachment(card.ToAttachment()), cancellationToken);
                }
            }
        }
Beispiel #14
0
        private Activity HandleSystemMessage(Activity message)
        {
            if (message.Type == ActivityTypes.DeleteUserData)
            {
                // Implement user deletion here
                // If we handle user deletion, return a real message
            }
            else if (message.Type == ActivityTypes.ConversationUpdate)
            {
                IConversationUpdateActivity update = message;
                var client = new ConnectorClient(new Uri(message.ServiceUrl), new MicrosoftAppCredentials());
                if (update.MembersAdded != null && update.MembersAdded.Any())
                {
                    foreach (var newMember in update.MembersAdded)
                    {
                        if (newMember.Id != message.Recipient.Id)
                        {
                            var reply = message.CreateReply();
                            reply.Text = $"Bienvenue {newMember.Name}! Je suis Boby, un chatbot démonstrateur. Tu peux me parler de tout et de rien, mais n'oublie pas que je suis nouveau ici :) ";
                            client.Conversations.ReplyToActivityAsync(reply);
                        }
                    }
                }
            }
            else if (message.Type == ActivityTypes.ContactRelationUpdate)
            {
                // Handle add/remove from contact lists
                // Activity.From + Activity.Action represent what happened
            }
            else if (message.Type == ActivityTypes.Typing)
            {
                // Handle knowing tha the user is typing
            }
            else if (message.Type == ActivityTypes.Ping)
            {
            }

            return(null);
        }
Beispiel #15
0
        private Activity HandleSystemMessage(Activity message)
        {
            if (message.Type == ActivityTypes.DeleteUserData)
            {
                // Implement user deletion here
                // If we handle user deletion, return a real message
            }
            else if (message.Type == ActivityTypes.ConversationUpdate)
            {
                // Handle conversation state changes, like members being added and removed
                // Use Activity.MembersAdded and Activity.MembersRemoved and Activity.Action for info
                // Not available in all channels

                IConversationUpdateActivity update = message;

                if (update.MembersAdded != null &&
                    update.MembersAdded.Any(m => m.Id != update.Recipient.Id))
                {
                    var member    = update.MembersAdded.First();
                    var connector = new ConnectorClient(new Uri(update.ServiceUrl));
                    var reply     = message.CreateReply($"Hello World Bot Framework {member.Name}!");
                    connector.Conversations.ReplyToActivityAsync(reply);
                }
            }
            else if (message.Type == ActivityTypes.ContactRelationUpdate)
            {
                // Handle add/remove from contact lists
                // Activity.From + Activity.Action represent what happened
            }
            else if (message.Type == ActivityTypes.Typing)
            {
                // Handle knowing tha the user is typing
            }
            else if (message.Type == ActivityTypes.Ping)
            {
            }

            return(null);
        }
Beispiel #16
0
        private async Task <Activity> HandleSystemMessage(Activity message)
        {
            if (message.Type == ActivityTypes.DeleteUserData)
            {
                // Implement user deletion here
                // If we handle user deletion, return a real message
            }
            else if (message.Type == ActivityTypes.ConversationUpdate)
            {
                IConversationUpdateActivity iConversationUpdated = message as IConversationUpdateActivity;
                if (iConversationUpdated != null)
                {
                    ConnectorClient connector = new ConnectorClient(new System.Uri(message.ServiceUrl));

                    foreach (var member in iConversationUpdated.MembersAdded ?? System.Array.Empty <ChannelAccount>())
                    {
                        if (member.Id == iConversationUpdated.Recipient.Id)
                        {
                            var reply = message.CreateReply("I'm an IBotDataStore<BotData> example.  I'll increment a number, stored in Private Conversation Data, every time you send me a message.");
                            await connector.Conversations.ReplyToActivityAsync(reply);
                        }
                    }
                }
            }
            else if (message.Type == ActivityTypes.ContactRelationUpdate)
            {
                // Handle add/remove from contact lists
                // Activity.From + Activity.Action represent what happened
            }
            else if (message.Type == ActivityTypes.Typing)
            {
                // Handle knowing tha the user is typing
            }
            else if (message.Type == ActivityTypes.Ping)
            {
            }

            return(null);
        }
        private async Task <Activity> HandleSystemMessage(Activity message)

        {
            if (message.Type == ActivityTypes.ConversationUpdate)
            {
                IConversationUpdateActivity iConversationUpdated = message as IConversationUpdateActivity;
                if (iConversationUpdated != null)
                {
                    ConnectorClient connector = new ConnectorClient(new System.Uri(message.ServiceUrl));
                    foreach (var member in iConversationUpdated.MembersAdded ?? System.Array.Empty <ChannelAccount>())
                    {
                        // if the bot is added, then
                        if (member.Id == iConversationUpdated.Recipient.Id)
                        {
                            var reply = ((Activity)iConversationUpdated).CreateReply($"Hi! I'm Cosmo , your astronomy geek.");
                            await connector.Conversations.ReplyToActivityAsync(reply);
                        }
                    }
                }
            }
            return(null);
        }
Beispiel #18
0
        public override async Task OnConversationUpdate(IConversationUpdateActivity updateActivity)
        {
            var connector = updateActivity.CreateConnectorClient();
            var activity  = ((Activity)updateActivity);

            if (updateActivity.AreMembersAdded())
            {
                var username = activity.MembersAdded[0].Name;
                var greeting = username != "You" ? $"Cześć, {username}! :)" : "Cześć! :)";

                await connector.Conversations.ReplyToActivityAsync(activity.CreateReply(greeting));

                await connector.Conversations.ReplyToActivityAsync(activity.CreateReply("Jestem botem, który pomoże Ci monitorować poziom zanieczyszczenia powietrza. 🏭"));

                if (activity.From.Name != null)
                {
                    await _accessor.EnsureUser(activity.ChannelId, activity.From.Id, activity.From.Name, activity.Conversation.Id);

                    await OnMessage(activity);
                }
            }
        }
        /// <summary>
        /// POST: api/Messages
        /// Receive a message from a user and reply to it
        /// </summary>
        public async Task <HttpResponseMessage> Post([FromBody] Activity activity)
        {
            switch (activity.Type)
            {
            case ActivityTypes.Message:
                await Conversation.SendAsync(activity, () => new Dialogs.RootLuisDialog());

                break;

            case ActivityTypes.ConversationUpdate:
                IConversationUpdateActivity update = activity;
                using (var scope = Microsoft.Bot.Builder.Dialogs.Internals.DialogModule.BeginLifetimeScope(Conversation.Container, activity))
                {
                    var client = scope.Resolve <IConnectorClient>();
                    if (update.MembersAdded.Any())
                    {
                        foreach (var newMember in update.MembersAdded)
                        {
                            if (newMember.Id != activity.Recipient.Id)
                            {
                                var reply = activity.CreateReply();
                                reply.Text = $"Olá {newMember.Name}! \n Qual produto você está interessado em comprar?";
                                await client.Conversations.ReplyToActivityAsync(reply);
                            }
                        }
                    }
                }

                break;

            default:
                break;
            }

            var response = Request.CreateResponse(HttpStatusCode.OK);

            return(response);
        }
Beispiel #20
0
        private async Task HandleSystemMessage(Activity message)
        {
            if (message.Type == ActivityTypes.DeleteUserData)
            {
                // Implement user deletion here
                // If we handle user deletion, return a real message
            }
            else if (message.Type == ActivityTypes.ConversationUpdate)
            {
                IConversationUpdateActivity iConversationUpdated = message as IConversationUpdateActivity;
                if (iConversationUpdated != null)
                {
                    ConnectorClient connector = new ConnectorClient(new System.Uri(message.ServiceUrl));

                    foreach (var member in iConversationUpdated.MembersAdded ?? System.Array.Empty <ChannelAccount>())
                    {
                        // if the bot is added, then
                        if (member.Id == iConversationUpdated.Recipient.Id)
                        {
                            var reply = ((Activity)iConversationUpdated).CreateReply($"Hi! I'm a Weather Bot Example.  Ask me about the weather in a city.");
                            await connector.Conversations.ReplyToActivityAsync(reply);
                        }
                    }
                }
            }
            else if (message.Type == ActivityTypes.ContactRelationUpdate)
            {
                // Handle add/remove from contact lists
                // Activity.From + Activity.Action represent what happened
            }
            else if (message.Type == ActivityTypes.Typing)
            {
                // Handle knowing tha the user is typing
            }
            else if (message.Type == ActivityTypes.Ping)
            {
            }
        }
        async Task HandleConversationUpdateAsync(
            ConnectorClient connector, IConversationUpdateActivity activity)
        {
            const string WelcomeMessage =
                "Welcome to the Rock, Paper, Scissors game! " +
                "To begin, type \"rock\", \"paper\", or \"scissors\". " +
                "Also, \"score\" will show scores and " +
                "delete will \"remove\" all your info.";

            Func <ChannelAccount, bool> isChatbot =
                channelAcct => channelAcct.Id == activity.Recipient.Id;

            if (activity.MembersAdded?.Any(isChatbot) ?? false)
            {
                Activity reply = (activity as Activity).CreateReply(WelcomeMessage);
                await connector.Conversations.ReplyToActivityAsync(reply);
            }

            if (activity.MembersRemoved?.Any(isChatbot) ?? false)
            {
                // to be determined
            }
        }
        public async Task PostWelcomeMessage(IDialogContext Context, IMessageActivity Message)
        {
            IConversationUpdateActivity iConversationUpdated = Message as IConversationUpdateActivity;

            if (iConversationUpdated != null)
            {
                foreach (var Member in iConversationUpdated.MembersAdded ?? Array.Empty <ChannelAccount>())
                {
                    // This means the bot is being added.
                    if (Member.Id == iConversationUpdated.Recipient.Id)
                    {
                        // Tell users what the bot does.
                        var Hero = new HeroCard
                        {
                            Title    = "Library Chat Bot",
                            Subtitle = "",
                            Text     = "Hello! I am a bot designed to give you information on authors and books.  Wyatt Fraley made me.  Ask me anything you like!"
                        };
                        await PostCard(Context, Hero);
                    }
                }
            }
        }
Beispiel #23
0
        async Task HandleConversationUpdateAsync(
            ConnectorClient connector, IConversationUpdateActivity activity)
        {
            const string WelcomeMessage =
                "Welcome to Meeting Scheduler! " +
                "Type \"register\" to get started. " +
                "After that, you can type \"appointment\" to add a new appointment, " +
                "\"venue\" to add a new venue, or \"schedule\" to schedule a new meeting.";

            Func <ChannelAccount, bool> isChatbot =
                channelAcct => channelAcct.Id == activity.Recipient.Id;

            if (activity.MembersAdded?.Any(isChatbot) ?? false)
            {
                Activity reply = (activity as Activity).CreateReply(WelcomeMessage);
                await connector.Conversations.ReplyToActivityAsync(reply);
            }

            if (activity.MembersRemoved?.Any(isChatbot) ?? false)
            {
                // to be determined
            }
        }
Beispiel #24
0
        private UserDataEntity ParseData(IConversationUpdateActivity activity, string partitionKey)
        {
            var rowKey = activity?.From?.AadObjectId;

            if (rowKey == null)
            {
                throw new ArgumentNullException(nameof(activity));
            }

            return(new UserDataEntity
            {
                PartitionKey = partitionKey,
                RowKey = activity?.From?.AadObjectId,
                AadId = activity?.From?.AadObjectId,
                UserId = activity?.From?.Id,
                ConversationId = partitionKey.Equals(UserDataTableNames.UserDataPartition) ? activity?.Conversation?.Id : null,
                ServiceUrl = activity?.ServiceUrl,
                TenantId = activity?.Conversation?.TenantId,

                // Setting this userType value as Member, since the guest userType is skipped.
                UserType = UserType.Member,
            });
        }
        /// <summary>
        /// Creates a response to welcoem new users
        /// </summary>
        /// <param name="message">Incoming text</param>
        /// <returns>A response to the new user, with their name</returns>
        private static async Task WelcomeNewUser(Activity message)
        {
            var client = new ConnectorClient(new Uri(message.ServiceUrl));
            IConversationUpdateActivity update = message;

            if (update.MembersAdded.Any())
            {
                var createReply = message.CreateReply();
                var newMembers  = update.MembersAdded?.Where(t => t.Id != message.Recipient.Id);

                // Welcome each new member
                foreach (var newMember in newMembers)
                {
                    createReply.Text = "Welcome";
                    if (!string.IsNullOrEmpty(newMember.Name))
                    {
                        createReply.Text += $" {newMember.Name}";
                    }
                    createReply.Text += "!";
                    await client.Conversations.ReplyToActivityAsync(createReply);
                }
            }
        }
        private Activity HandleSystemMessage(Activity message)
        {
            if (message.Type == ActivityTypes.DeleteUserData)
            {
                // Implement user deletion here
                // If we handle user deletion, return a real message
            }
            else if (message.Type == ActivityTypes.ConversationUpdate)
            {
                // Handle conversation state changes, like members being added and removed
                // Use Activity.MembersAdded and Activity.MembersRemoved and Activity.Action for info
                // Not available in all channels
                IConversationUpdateActivity conversationupdate = message;

                if (conversationupdate.MembersAdded.Any() && message.MembersAdded.Any(o => o.Id == "UserId")) // != ConfigurationManager.AppSettings["BotId"])))
                {
                    ConnectorClient connector = new ConnectorClient(new System.Uri(message.ServiceUrl));
                    Activity        reply     = message.CreateReply("Welcome.  I'm a sample Themed Bot. " + YouCanAskMeMessage);
                    connector.Conversations.ReplyToActivityAsync(reply);
                    message.Type = ActivityTypes.Message;
                }
            }
            else if (message.Type == ActivityTypes.ContactRelationUpdate)
            {
                // Handle add/remove from contact lists
                // Activity.From + Activity.Action represent what happened
            }
            else if (message.Type == ActivityTypes.Typing)
            {
                // Handle knowing tha the user is typing
            }
            else if (message.Type == ActivityTypes.Ping)
            {
            }

            return(null);
        }
Beispiel #27
0
        private Activity HandleSystemMessage(Activity message)
        {
            if (message.Type == ActivityTypes.DeleteUserData)
            {
                // Implement user deletion here
                // If we handle user deletion, return a real message
            }
            else if (message.Type == ActivityTypes.ConversationUpdate)
            {
                var client = new ConnectorClient(new Uri(message.ServiceUrl));
                IConversationUpdateActivity update = message;
                if (update.MembersAdded.Any())
                {
                    var reply      = message.CreateReply();
                    var newMembers = update.MembersAdded?.Where(t => t.Id != message.Recipient.Id);
                    foreach (var newMember in newMembers)
                    {
                        reply.Text = "Hey! I'm the NewsyBot, and can show you news from around the world.  Don't worry if you don't speak the language, I'll translate it for you as well.";
                        client.Conversations.ReplyToActivityAsync(reply);
                    }
                }
            }
            else if (message.Type == ActivityTypes.ContactRelationUpdate)
            {
                // Handle add/remove from contact lists
                // Activity.From + Activity.Action represent what happened
            }
            else if (message.Type == ActivityTypes.Typing)
            {
                // Handle knowing tha the user is typing
            }
            else if (message.Type == ActivityTypes.Ping)
            {
            }

            return(null);
        }
Beispiel #28
0
        public virtual async Task <HttpResponseMessage> Post([FromBody] Activity activity)
        {
            var client = new ConnectorClient(new Uri(activity.ServiceUrl), new MicrosoftAppCredentials());

            if (activity.Type == ActivityTypes.Message)
            {
                var typingActivity = activity.CreateReply();
                typingActivity.Type = ActivityTypes.Typing;
                await client.Conversations.ReplyToActivityAsync(typingActivity);


                await Conversation.SendAsync(activity, () => new LuisDialog());
            }
            else if (activity.Type == ActivityTypes.ConversationUpdate)
            {
                IConversationUpdateActivity update = activity;
                if (update.MembersAdded != null && update.MembersAdded.Any())
                {
                    foreach (var newMember in update.MembersAdded)
                    {
                        if (newMember.Id != activity.Recipient.Id)
                        {
                            var reply = activity.CreateReply();
                            reply.Text =
                                $@"Hey there {newMember.Name}. Nice to meet you.";
                            await client.Conversations.ReplyToActivityAsync(reply);
                        }
                    }
                }
            }
            else
            {
                HandleSystemMessage(activity);
            }
            return(new HttpResponseMessage(System.Net.HttpStatusCode.Accepted));
        }
        private void HandleSystemMessage(Activity message)
        {
            if (message.Type != ActivityTypes.ConversationUpdate)
            {
                return;
            }
            IConversationUpdateActivity update = message;
            var client = new ConnectorClient(new Uri(message.ServiceUrl), new MicrosoftAppCredentials());

            if (update.MembersAdded == null || !update.MembersAdded.Any())
            {
                return;
            }
            foreach (var newMember in update.MembersAdded)
            {
                if (newMember.Id == message.Recipient.Id)
                {
                    continue;
                }
                var reply = message.CreateReply();
                reply.Text = $"Welcome {newMember.Name}! Enter a station name to get next 10 departures board.";
                client.Conversations.ReplyToActivityAsync(reply);
            }
        }
Beispiel #30
0
        private Activity HandleSystemMessage(Activity message)
        {
            if (message.Type == ActivityTypes.DeleteUserData)
            {
                // Implement user deletion here
                // If we handle user deletion, return a real message
            }
            else if (message.Type == ActivityTypes.ConversationUpdate)
            {
                IConversationUpdateActivity update = message;
                using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, message))
                {
                    var client = scope.Resolve <IConnectorClient>();
                    if (update.MembersAdded.Any())
                    {
                        var reply = message.CreateReply();

                        reply.Text = $"Welcome, I am a account assistant bot, type help to get more information";

                        client.Conversations.ReplyToActivityAsync(reply);
                    }
                }
            }
            else if (message.Type == ActivityTypes.ContactRelationUpdate)
            {
            }
            else if (message.Type == ActivityTypes.Typing)
            {
                // Handle knowing tha the user is typing
            }
            else if (message.Type == ActivityTypes.Ping)
            {
            }

            return(null);
        }