コード例 #1
0
        /// <summary>
        /// Create a new ticket from the input.
        /// </summary>
        /// <param name="currentLanguageCode">Current applicable language code.</param>
        /// <param name="message">A message in a conversation.</param>
        /// <param name="data">Represents the submit data associated with the Ask An Expert card.</param>
        /// <param name="member">Teams channel account detailing user Azure Active Directory details.</param>
        /// <param name="ticketsProvider">Tickets Provider.</param>
        /// <returns>TicketEntity object.</returns>
        private static async Task <TicketEntity> CreateTicketAsync(
            string currentLanguageCode,
            IMessageActivity message,
            AskAnExpertCardPayload data,
            TeamsChannelAccount member,
            ITicketsProvider ticketsProvider)
        {
            IList <TicketEntity> ticketList = await ticketsProvider.GetTicketCountAsync();

            TicketEntity ticketEntity = new TicketEntity
            {
                LanguageCode  = currentLanguageCode,
                TicketId      = (10000 + ticketList.Count).ToString(), // Guid.NewGuid().ToString(),
                Status        = (int)TicketState.UnAnswered,
                DateCreated   = DateTime.UtcNow,
                Title         = data.Title,
                Description   = data.Description,
                RequesterName = member.Name,
                RequesterUserPrincipalName = member.UserPrincipalName,
                RequesterGivenName         = member.GivenName,
                RequesterConversationId    = message.Conversation.Id,
                LastModifiedByName         = message.From.Name,
                LastModifiedByObjectId     = message.From.AadObjectId,
                UserQuestion          = data.UserQuestion,
                KnowledgeBaseAnswer   = data.KnowledgeBaseAnswer,
                KnowledgeBaseQuestion = data.KnowledgeBaseQuestion,
            };

            await ticketsProvider.UpsertTicketAsync(ticketEntity).ConfigureAwait(false);

            return(ticketEntity);
        }
        /// <summary>
        /// Create a new ticket from the input.
        /// </summary>
        /// <param name="message">A message in a conversation.</param>
        /// <param name="data">Represents the submit data associated with the Ask An Expert card.</param>
        /// <param name="member">Teams channel account detailing user Azure Active Directory details.</param>
        /// <param name="ticketsProvider">Tickets Provider.</param>
        /// <returns>TicketEntity object.</returns>
        private static async Task <TicketEntity> CreateTicketAsync(
            IMessageActivity message,
            AskAnExpertCardPayload data,
            TeamsChannelAccount member,
            ITicketsProvider ticketsProvider)
        {
            TicketEntity ticketEntity = new TicketEntity
            {
                TicketId      = Guid.NewGuid().ToString(),
                Status        = (int)TicketState.UnAssigned,
                DateCreated   = DateTime.Now,
                Title         = data.Title,
                Description   = data.Description,
                RequesterName = member.Name,
                RequesterUserPrincipalName = member.UserPrincipalName,
                RequesterGivenName         = member.GivenName,
                RequesterConversationId    = message.Conversation.Id,
                LastModifiedByName         = message.From.Name,
                LastModifiedByObjectId     = message.From.AadObjectId,
                UserQuestion        = data.UserQuestion,
                KnowledgeBaseAnswer = data.KnowledgeBaseAnswer,
                Subject             = data.Project,
            };

            await ticketsProvider.UpsertTicketAsync(ticketEntity).ConfigureAwait(false);

            return(ticketEntity);
        }
コード例 #3
0
        /// <summary>
        /// This method will construct the card for ask an expert, when invoked from the response card.
        /// </summary>
        /// <param name="payload">Payload from the response card.</param>
        /// <returns>Ask an expert card.</returns>
        public static Attachment GetCard(ResponseCardPayload payload)
        {
            var data = new AskAnExpertCardPayload
            {
                Title               = payload.UserQuestion, // Pre-populate the description with the user's question
                UserQuestion        = payload.UserQuestion,
                KnowledgeBaseAnswer = payload.KnowledgeBaseAnswer,
            };

            return(GetCard(false, data));
        }
コード例 #4
0
        /// <summary>
        /// This method will construct the card for ask an expert, when invoked from the response card.
        /// </summary>
        /// <param name="payload">Payload from the response card.</param>
        /// <returns>Ask an expert card.</returns>
        public static Attachment GetCard(ResponseCardPayload payload)
        {
            var cardPayload = new AskAnExpertCardPayload
            {
                Description         = payload.UserQuestion, // Pre-populate the description with the user's question.
                UserQuestion        = payload.UserQuestion,
                KnowledgeBaseAnswer = payload?.KnowledgeBaseAnswer,
            };

            return(GetCard(cardPayload, showValidationErrors: false));
        }
コード例 #5
0
        /// <summary>
        /// Create a new ticket from the input.
        /// </summary>
        /// <param name="message">A message in a conversation.</param>
        /// <param name="data">Represents the submit data associated with the Ask An Expert card.</param>
        /// <param name="member">Teams channel account detailing user Azure Active Directory details.</param>
        /// <param name="ticketsProvider">Tickets Provider.</param>
        /// <returns>TicketEntity object.</returns>
        private static async Task <TicketEntity> CreateTicketAsync(
            IMessageActivity message,
            AskAnExpertCardPayload data,
            TeamsChannelAccount member,
            ITicketsProvider ticketsProvider)
        {
            //AtBot Conceirge Support

            //Boolean as to whether this is the Teams channel.  If not, we assume bot is being interfaced as an AtBot Agent
            bool isTeamsChannel = message.ChannelId == "msteams";

            ChannelAccount agentUser = message.From;

            //When creating a ticket from the bot acting as an agent, the requestor information will be limited to the UPN.  Additional graph calls
            //will be needed to pull AAD GUID and display name.

            TicketEntity ticketEntity = new TicketEntity
            {
                TicketId      = Guid.NewGuid().ToString(),
                Status        = (int)TicketState.Open,
                DateCreated   = DateTime.UtcNow,
                Title         = data.Title,
                Description   = data.Description,
                RequesterName = isTeamsChannel ? member.Name : agentUser.Name,
                RequesterUserPrincipalName = isTeamsChannel ? member.UserPrincipalName : agentUser.Name,
                RequesterGivenName         = isTeamsChannel ? member.GivenName : agentUser.Name,
                RequesterConversationId    = message.Conversation.Id,
                LastModifiedByName         = message.From.Name,
                LastModifiedByObjectId     = message.From.AadObjectId,
                UserQuestion        = data.UserQuestion,
                KnowledgeBaseAnswer = data.KnowledgeBaseAnswer,
            };

            await ticketsProvider.UpsertTicketAsync(ticketEntity).ConfigureAwait(false);

            return(ticketEntity);
        }
コード例 #6
0
        /// <summary>
        /// This method will construct the card for ask an expert bot menu.
        /// </summary>
        /// <param name="showValidationErrors">Determines whether we show validation errors.</param>
        /// <param name="data">Data from the ask an expert card.</param>
        /// <returns>Ask an expert card.</returns>
        private static Attachment GetCard(bool showValidationErrors, AskAnExpertCardPayload data)
        {
            AdaptiveCard askAnExpertCard = new AdaptiveCard("1.0")
            {
                Body = new List <AdaptiveElement>
                {
                    new AdaptiveTextBlock
                    {
                        Weight = AdaptiveTextWeight.Bolder,
                        Text   = Resource.AskAnExpertText1,
                        Size   = AdaptiveTextSize.Large,
                        Wrap   = true
                    },
                    new AdaptiveTextBlock
                    {
                        Text = Resource.AskAnExpertSubheaderText,
                        Wrap = true
                    },
                    new AdaptiveColumnSet
                    {
                        Columns = new List <AdaptiveColumn>
                        {
                            new AdaptiveColumn
                            {
                                Width = AdaptiveColumnWidth.Auto,
                                Items = new List <AdaptiveElement>
                                {
                                    new AdaptiveTextBlock
                                    {
                                        Text = Resource.TitleRequiredText,
                                        Wrap = true
                                    }
                                }
                            },
                            new AdaptiveColumn
                            {
                                Items = new List <AdaptiveElement>
                                {
                                    new AdaptiveTextBlock
                                    {
                                        Text  = (showValidationErrors && string.IsNullOrWhiteSpace(data.Title)) ? Resource.MandatoryTitleFieldText : string.Empty,
                                        Color = AdaptiveTextColor.Attention,
                                        HorizontalAlignment = AdaptiveHorizontalAlignment.Right,
                                        Wrap = true
                                    }
                                }
                            }
                        },
                    },
                    new AdaptiveTextInput
                    {
                        Id          = nameof(AskAnExpertCardPayload.Title),
                        Placeholder = Resource.ShowCardTitleText,
                        IsMultiline = false,
                        Spacing     = AdaptiveSpacing.Small,
                        Value       = data.Title,
                    },
                    new AdaptiveTextBlock
                    {
                        Text = Resource.DescriptionText,
                        Wrap = true
                    },
                    new AdaptiveTextInput
                    {
                        Id          = nameof(AskAnExpertCardPayload.Description),
                        Placeholder = Resource.AskAnExpertPlaceholderText,
                        IsMultiline = true,
                        Spacing     = AdaptiveSpacing.Small,
                        Value       = data.Description,
                    }
                },
                Actions = new List <AdaptiveAction>
                {
                    new AdaptiveSubmitAction
                    {
                        Title = Resource.AskAnExpertButtonText,
                        Data  = new AskAnExpertCardPayload
                        {
                            MsTeams = new CardAction
                            {
                                Type        = ActionTypes.MessageBack,
                                DisplayText = Resource.AskAnExpertDisplayText,
                                Text        = AskAnExpertSubmitText,
                            },
                            UserQuestion        = data.UserQuestion,
                            KnowledgeBaseAnswer = data.KnowledgeBaseAnswer,
                        },
                    }
                }
            };

            return(new Attachment
            {
                ContentType = AdaptiveCard.ContentType,
                Content = askAnExpertCard,
            });
        }
コード例 #7
0
 /// <summary>
 /// This method will construct the card for ask an expert, when invoked from the ask an expert card submit.
 /// </summary>
 /// <param name="payload">Payload from the ask an expert card.</param>
 /// <returns>Ask an expert card.</returns>
 public static Attachment GetCard(AskAnExpertCardPayload payload)
 {
     return(GetCard(true, payload));
 }
コード例 #8
0
        /// <summary>
        /// This method will construct the card for ask an expert bot menu.
        /// </summary>
        /// <param name="cardPayload">Data from the ask an expert card.</param>
        /// <param name="showValidationErrors">Determines whether we show validation errors.</param>
        /// <returns>Ask an expert card.</returns>
        private static Attachment GetCard(AskAnExpertCardPayload cardPayload, bool showValidationErrors)
        {
            AdaptiveCard askAnExpertCard = new AdaptiveCard(new AdaptiveSchemaVersion(1, 0))
            {
                Body = new List <AdaptiveElement>
                {
                    new AdaptiveTextBlock
                    {
                        Weight = AdaptiveTextWeight.Bolder,
                        Text   = Strings.AskAnExpertTitleText,
                        Size   = AdaptiveTextSize.Large,
                        Wrap   = true,
                    },
                    new AdaptiveTextBlock
                    {
                        Text = Strings.AskAnExpertSubheaderText,
                        Wrap = true,
                    },
                    new AdaptiveColumnSet
                    {
                        Columns = new List <AdaptiveColumn>
                        {
                            new AdaptiveColumn
                            {
                                Width = AdaptiveColumnWidth.Auto,
                                Items = new List <AdaptiveElement>
                                {
                                    new AdaptiveTextBlock
                                    {
                                        Text = Strings.TitleRequiredText,
                                        Wrap = true,
                                    },
                                },
                            },
                            new AdaptiveColumn
                            {
                                Items = new List <AdaptiveElement>
                                {
                                    new AdaptiveTextBlock
                                    {
                                        Text  = (showValidationErrors && string.IsNullOrWhiteSpace(cardPayload?.Title)) ? Strings.MandatoryTitleFieldText : string.Empty,
                                        Color = AdaptiveTextColor.Attention,
                                        HorizontalAlignment = AdaptiveHorizontalAlignment.Right,
                                        Wrap = true,
                                    },
                                },
                            },
                        },
                    },
                    new AdaptiveTextInput
                    {
                        Id          = nameof(AskAnExpertCardPayload.Title),
                        Placeholder = Strings.ShowCardTitleText,
                        IsMultiline = false,
                        Spacing     = AdaptiveSpacing.Small,
                        Value       = cardPayload?.Title,
                    },
                    new AdaptiveColumnSet
                    {
                        Columns = new List <AdaptiveColumn>
                        {
                            new AdaptiveColumn
                            {
                                Width = AdaptiveColumnWidth.Auto,
                                Items = new List <AdaptiveElement>
                                {
                                    new AdaptiveTextBlock
                                    {
                                        Text = Strings.DescriptionText,
                                        Wrap = true,
                                    },
                                },
                            },
                            new AdaptiveColumn
                            {
                                Items = new List <AdaptiveElement>
                                {
                                    new AdaptiveTextBlock
                                    {
                                        Text  = (showValidationErrors && cardPayload?.Description.Length > 500) ? Strings.MaxCharactersText : string.Empty,
                                        Color = AdaptiveTextColor.Attention,
                                        HorizontalAlignment = AdaptiveHorizontalAlignment.Right,
                                        Wrap = true,
                                    },
                                },
                            },
                        },
                    },
                    new AdaptiveTextInput
                    {
                        Id          = nameof(AskAnExpertCardPayload.Description),
                        Placeholder = Strings.AskAnExpertPlaceholderText,
                        IsMultiline = true,
                        Spacing     = AdaptiveSpacing.Small,
                        Value       = cardPayload?.Description,
                    },
                },
                Actions = new List <AdaptiveAction>
                {
                    new AdaptiveSubmitAction
                    {
                        Data = new AskAnExpertCardPayload
                        {
                            MsTeams = new CardAction
                            {
                                Type        = ActionTypes.MessageBack,
                                DisplayText = Strings.AskAnExpertDisplayText,
                                Text        = AskAnExpertSubmitText,
                            },
                            UserQuestion        = cardPayload?.UserQuestion,
                            KnowledgeBaseAnswer = cardPayload?.KnowledgeBaseAnswer,
                            Project             = cardPayload?.Project,
                        },
                    },
                },
            };

            return(new Attachment
            {
                ContentType = AdaptiveCard.ContentType,
                Content = askAnExpertCard,
            });
        }
コード例 #9
0
 /// <summary>
 /// This method will construct the card for ask an expert, when invoked from the ask an expert card submit.
 /// </summary>
 /// <param name="payload">Payload from the ask an expert card.</param>
 /// <returns>Ask an expert card.</returns>
 public static Attachment GetCard(AskAnExpertCardPayload payload)
 {
     return(GetCard(payload, showValidationErrors: true));
 }
コード例 #10
0
ファイル: AskHRBot.cs プロジェクト: ahmedmahmoudR/NewBot
        // Create a new ticket from the input
        private async Task <TicketEntity> CreateTicketAsync(IMessageActivity message, AskAnExpertCardPayload data, TeamsChannelAccount member)
        {
            TicketEntity ticketEntity = new TicketEntity
            {
                TicketId      = Guid.NewGuid().ToString(),
                Status        = (int)TicketState.Open,
                DateCreated   = DateTime.UtcNow,
                Choices       = data.Choices,
                Title         = data.Title,
                Description   = data.Description,
                Location      = data.Location,
                PhoneNumber   = data.PhoneNumber,
                Mail          = data.Mail,
                RequesterName = member.Name,
                RequesterUserPrincipalName = member.UserPrincipalName,
                RequesterGivenName         = member.GivenName,
                RequesterConversationId    = message.Conversation.Id,
                LastModifiedByName         = message.From.Name,
                LastModifiedByObjectId     = message.From.AadObjectId,
                UserQuestion        = data.UserQuestion,
                KnowledgeBaseAnswer = data.KnowledgeBaseAnswer
            };

            await this.ticketsProvider.SaveOrUpdateTicketAsync(ticketEntity);

            return(ticketEntity);
        }
コード例 #11
0
        /// <summary>
        /// This method will construct the card for ask an expert bot menu.
        /// </summary>
        /// <param name="showValidationErrors">Determines whether we show validation errors.</param>
        /// <param name="data">Data from the ask an expert card.</param>
        /// <returns>Ask an expert card.</returns>
        private static Attachment GetCard(bool showValidationErrors, AskAnExpertCardPayload data)
        {
            AdaptiveCard askAnExpertCard = new AdaptiveCard("1.0")
            {
                Body = new List <AdaptiveElement>
                {
                    new AdaptiveTextBlock
                    {
                        Weight = AdaptiveTextWeight.Bolder,
                        Text   = Resource.AskAnExpertText1,
                        Size   = AdaptiveTextSize.Large,
                        Wrap   = true
                    },

                    new AdaptiveTextBlock
                    {
                        Text = Resource.AskAnExpertSubheaderText,
                        Wrap = true
                    },
                    new AdaptiveColumnSet
                    {
                        Columns = new List <AdaptiveColumn>
                        {
                            new AdaptiveColumn
                            {
                                Width = AdaptiveColumnWidth.Auto,
                                Items = new List <AdaptiveElement>
                                {
                                    new AdaptiveTextBlock
                                    {
                                        Text = Resource.TitleRequiredText,
                                        Wrap = true
                                    }
                                }
                            },
                            new AdaptiveColumn
                            {
                                Items = new List <AdaptiveElement>
                                {
                                    new AdaptiveTextBlock
                                    {
                                        Text  = (showValidationErrors && string.IsNullOrWhiteSpace(data.Title)) ? Resource.MandatoryTitleFieldText : string.Empty,
                                        Color = AdaptiveTextColor.Attention,
                                        HorizontalAlignment = AdaptiveHorizontalAlignment.Right,
                                        Wrap = true
                                    }
                                }
                            }
                        },
                    },
                    new AdaptiveTextInput
                    {
                        Id          = nameof(AskAnExpertCardPayload.Title),
                        Placeholder = Resource.ShowCardTitleText,
                        IsMultiline = false,
                        Spacing     = AdaptiveSpacing.Small,
                        Value       = data.Title,
                    },
                    new AdaptiveTextBlock
                    {
                        Text = "Issue description",
                        Wrap = true
                    },
                    new AdaptiveTextInput
                    {
                        Id          = nameof(AskAnExpertCardPayload.Description),
                        Placeholder = Resource.AskAnExpertPlaceholderText,
                        IsMultiline = true,
                        Spacing     = AdaptiveSpacing.Small,
                        Value       = data.Description,
                    },
                    new AdaptiveTextBlock
                    {
                        Text = "IP address/computer account ",
                        Wrap = true
                    },
                    new AdaptiveTextInput
                    {
                        Id          = nameof(AskAnExpertCardPayload.Location),
                        Placeholder = "Please Enter your IP Address ",
                        IsMultiline = false,
                        Spacing     = AdaptiveSpacing.Small,
                        Value       = data.Location,
                    },


                    new AdaptiveTextBlock
                    {
                        Text = "Location",
                        Wrap = true
                    },


                    new AdaptiveChoiceSetInput
                    {
                        Type          = AdaptiveChoiceSetInput.TypeName,
                        Id            = "Choices",
                        IsMultiSelect = false,
                        Style         = AdaptiveChoiceInputStyle.Compact,
                        Value         = "Choose a plan",

                        Choices = new List <AdaptiveChoice>
                        {
                            new AdaptiveChoice()
                            {
                                Title = "العباسية ", Value = "العباسية"
                            },
                            new AdaptiveChoice()
                            {
                                Title = "اسيوط & منيا ", Value = "اسيوط & منيا"
                            },
                            new AdaptiveChoice()
                            {
                                Title = "بني سويف ", Value = "بني سويف"
                            },
                            new AdaptiveChoice()
                            {
                                Title = "بنها", Value = "بنها"
                            },
                            new AdaptiveChoice()
                            {
                                Title = "كول سنتر ", Value = "كول سنتر "
                            },
                            new AdaptiveChoice()
                            {
                                Title = "هليوپوليس ", Value = "هليوپوليس "
                            },
                            new AdaptiveChoice()
                            {
                                Title = "Showroom ", Value = "Showroom "
                            },
                            new AdaptiveChoice()
                            {
                                Title = "Small Branches & Service Center ", Value = "Small Branches & Service Center "
                            },
                            new AdaptiveChoice()
                            {
                                Title = "بورسعيد -الاسكندرية-طنطا - المنصوره ", Value = "بورسعيد -الاسكندرية-طنطا - المنصوره"
                            },
                            new AdaptiveChoice()
                            {
                                Title = "قليوبية", Value = "قليوبية"
                            },
                            new AdaptiveChoice()
                            {
                                Title = "قويسنا ", Value = "قويسنا"
                            },
                        },
                    },
                    new AdaptiveTextBlock
                    {
                        Text = "Mail ",
                        Wrap = true
                    },
                    new AdaptiveTextInput
                    {
                        Id          = nameof(AskAnExpertCardPayload.Mail),
                        Placeholder = "Please Enter your Mail ",
                        IsMultiline = false,
                        Spacing     = AdaptiveSpacing.Small,
                        Value       = data.Mail,
                    },
                    new AdaptiveTextBlock
                    {
                        Text = "Phone Number ",
                        Wrap = true
                    },

                    new AdaptiveTextInput
                    {
                        Id          = nameof(AskAnExpertCardPayload.PhoneNumber),
                        Placeholder = "Please Enter your Phone Number ",
                        IsMultiline = false,
                        Spacing     = AdaptiveSpacing.Small,
                        Value       = data.PhoneNumber,
                    },
                },

                Actions = new List <AdaptiveAction>
                {
                    new AdaptiveSubmitAction
                    {
                        Title = Resource.AskAnExpertButtonText,
                        Data  = new AskAnExpertCardPayload
                        {
                            MsTeams = new CardAction
                            {
                                Type        = ActionTypes.MessageBack,
                                DisplayText = Resource.AskAnExpertDisplayText,
                                Text        = AskAnExpertSubmitText,
                            },
                            UserQuestion        = data.UserQuestion,
                            KnowledgeBaseAnswer = data.KnowledgeBaseAnswer,
                        },
                    }
                }
            };

            return(new Attachment
            {
                ContentType = AdaptiveCard.ContentType,
                Content = askAnExpertCard,
            });
        }