/// <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); }