Exemplo n.º 1
0
        /// <summary>
        /// Creates AdaptiveCard from Notification.
        /// </summary>
        /// <param name="serviceNowNotification">ServiceNow Notification.</param>
        /// <returns>AdaptiveCard.</returns>
        public static AdaptiveCard ToAdaptiveCard(this ServiceNowNotification serviceNowNotification)
        {
            var card = new AdaptiveCard("1.0")
            {
                Body = new List <AdaptiveElement>
                {
                    new AdaptiveContainer
                    {
                        Items = new List <AdaptiveElement>
                        {
                            new AdaptiveColumnSet
                            {
                                Columns = new List <AdaptiveColumn>
                                {
                                    new AdaptiveColumn
                                    {
                                        Width = AdaptiveColumnWidth.Stretch,
                                        Items = new List <AdaptiveElement>
                                        {
                                            new AdaptiveTextBlock
                                            {
                                                Text    = $"Title: {serviceNowNotification.Title}",
                                                Wrap    = true,
                                                Spacing = AdaptiveSpacing.Small,
                                                Weight  = AdaptiveTextWeight.Bolder
                                            },
                                            new AdaptiveTextBlock
                                            {
                                                Text     = $"Urgency: {serviceNowNotification.Urgency}",
                                                Color    = AdaptiveTextColor.Good,
                                                MaxLines = 1,
                                                Weight   = AdaptiveTextWeight.Bolder,
                                                Size     = AdaptiveTextSize.Large
                                            },
                                            new AdaptiveTextBlock
                                            {
                                                Text    = $"Description: {serviceNowNotification.Description}",
                                                Wrap    = true,
                                                Spacing = AdaptiveSpacing.Small,
                                                Weight  = AdaptiveTextWeight.Bolder
                                            },
                                            new AdaptiveTextBlock
                                            {
                                                Text    = $"Impact: {serviceNowNotification.Impact}",
                                                Wrap    = true,
                                                Spacing = AdaptiveSpacing.Small,
                                                Weight  = AdaptiveTextWeight.Bolder
                                            },
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            };

            return(card);
        }
        protected async Task <IActionResult> Post(
            ServiceNowNotification request,
            CancellationToken cancellationToken)
        {
            ServiceResponse result = await this.MessageReceiver
                                     .Receive(request, cancellationToken);

            return(new ContentResult {
                StatusCode = (int)result.Code, Content = result.Message
            });
        }
        /// <summary>
        /// Continue the conversation callback.
        /// </summary>
        /// <param name="turnContext">Turn context.</param>
        /// <param name="notification">Activity text.</param>
        /// <returns>Bot Callback Handler.</returns>
        private BotCallbackHandler ContinueConversationCallback(ITurnContext turnContext, ServiceNowNotification notification, ConversationReference conversationReference)
        {
            // Update Conversation
            return(async(turnContext, cancellationToken) =>
            {
                var activity = turnContext.Activity.CreateReply();
                activity.Attachments = new List <Attachment>
                {
                    new Attachment
                    {
                        ContentType = AdaptiveCard.ContentType,
                        Content = notification.ToAdaptiveCard()
                    }
                };
                EnsureActivity(activity);

                if (turnContext.Activity.ChannelId == Microsoft.Bot.Connector.Channels.Msteams)
                {
                    // Get Activity ReferenceMap from Proactive State
                    ActivityReferenceMap activityReferenceMap = await _activityReferenceMapAccessor.GetAsync(
                        turnContext,
                        () => new ActivityReferenceMap(),
                        cancellationToken)
                                                                .ConfigureAwait(false);

                    // Return Added Incident Envelope
                    // Get saved Activity Reference mapping to conversation Id
                    activityReferenceMap.TryGetValue(conversationReference.Conversation.Id + notification.Id, out var activityReference);

                    // if there is no activity mapping to conversation reference
                    // then send a new activity and save activity to activityReferenceMap
                    if (activityReference == null)
                    {
                        var resourceResponse = await turnContext.SendActivityAsync(activity);

                        // Store Activity and Thread Id mapping to ConversationReference and TicketId from eventData
                        activityReferenceMap[conversationReference.Conversation.Id + notification.Id] = new ActivityReference
                        {
                            ActivityId = resourceResponse.Id,
                            ThreadId = conversationReference.Conversation.Id,
                        };
                    }
                    else
                    {
                        // Update Create Ticket Button with another Adaptive card to Update/Delete Ticket
                        await _teamsTicketUpdateActivity.UpdateTaskModuleActivityAsync(
                            turnContext,
                            activityReference,
                            notification.ToAdaptiveCard(),
                            cancellationToken);
                    }

                    // Save activity reference map state
                    await _activityReferenceMapAccessor.SetAsync(turnContext, activityReferenceMap).ConfigureAwait(false);

                    // Save Conversation State
                    await _proactiveState
                    .SaveChangesAsync(turnContext).ConfigureAwait(false);
                }
                else
                {
                    // Not a TeamsChannel just send a conversation update
                    await turnContext.SendActivityAsync(activity);
                }
            });
        }
 /// <summary>
 /// Continue the conversation callback.
 /// </summary>
 /// <param name="context">Turn context.</param>
 /// <param name="message">Activity text.</param>
 /// <returns>Bot Callback Handler.</returns>
 private BotCallbackHandler ContinueConversationCallback(ITurnContext context, ServiceNowNotification notification)
 {
     return(async(turnContext, cancellationToken) =>
     {
         var activity = context.Activity.CreateReply();
         activity.Attachments = new List <Attachment>
         {
             new Attachment
             {
                 ContentType = AdaptiveCard.ContentType,
                 Content = notification.ToAdaptiveCard()
             }
         };
         EnsureActivity(activity);
         await turnContext.SendActivityAsync(activity);
     });
 }
        /// <summary>
        /// Creates AdaptiveCard from Notification.
        /// </summary>
        /// <param name="serviceNowNotification">ServiceNow Notification.</param>
        /// <returns>AdaptiveCard.</returns>
        public static AdaptiveCard ToAdaptiveCard(this ServiceNowNotification serviceNowNotification)
        {
            var card = new AdaptiveCard("1.0")
            {
                Body = new List <AdaptiveElement>
                {
                    new AdaptiveContainer
                    {
                        Items = new List <AdaptiveElement>
                        {
                            new AdaptiveColumnSet
                            {
                                Columns = new List <AdaptiveColumn>
                                {
                                    new AdaptiveColumn
                                    {
                                        Width = AdaptiveColumnWidth.Stretch,
                                        Items = new List <AdaptiveElement>
                                        {
                                            new AdaptiveTextBlock
                                            {
                                                Text    = $"Incident Number: {serviceNowNotification.Id}",
                                                Wrap    = true,
                                                Spacing = AdaptiveSpacing.Small,
                                                Weight  = AdaptiveTextWeight.Bolder
                                            },
                                            new AdaptiveTextBlock
                                            {
                                                Text    = $"Title: {serviceNowNotification.Title}",
                                                Wrap    = true,
                                                Spacing = AdaptiveSpacing.Small,
                                                Weight  = AdaptiveTextWeight.Bolder
                                            },
                                            new AdaptiveTextBlock
                                            {
                                                Text     = $"Urgency: {serviceNowNotification.Urgency}",
                                                Color    = serviceNowNotification.Urgency.Equals("1") ? AdaptiveTextColor.Attention : serviceNowNotification.Urgency.Equals("2") ? AdaptiveTextColor.Warning : AdaptiveTextColor.Good,
                                                MaxLines = 1,
                                                Weight   = AdaptiveTextWeight.Bolder,
                                                Size     = AdaptiveTextSize.Large
                                            },
                                            new AdaptiveTextBlock
                                            {
                                                Text    = $"Description: {serviceNowNotification.Description}",
                                                Wrap    = true,
                                                Spacing = AdaptiveSpacing.Small,
                                                Weight  = AdaptiveTextWeight.Bolder
                                            },
                                            new AdaptiveTextBlock
                                            {
                                                Text    = $"Impact: {serviceNowNotification.Impact}",
                                                Wrap    = true,
                                                Spacing = AdaptiveSpacing.Small,
                                                Weight  = AdaptiveTextWeight.Bolder
                                            },
                                            new AdaptiveTextBlock
                                            {
                                                Text    = $"Updated By: {serviceNowNotification.UpdatedBy}",
                                                Wrap    = true,
                                                Spacing = AdaptiveSpacing.Small,
                                                Weight  = AdaptiveTextWeight.Bolder
                                            },
                                            new AdaptiveTextBlock
                                            {
                                                Text    = "Updated Time: " + string.Format("{0:HH:mm:ss tt}", DateTime.Now),
                                                Wrap    = true,
                                                Spacing = AdaptiveSpacing.Small,
                                                Weight  = AdaptiveTextWeight.Bolder
                                            },
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            };

            return(card);
        }