// Get incident review card send from messaging extension. public static Attachment GetIncidentReviewCard(IncidentDetails incidentDetail) { string[] paths = { ".", "Resources", "reviewCard.json" }; var adaptiveCardJson = File.ReadAllText(Path.Combine(paths)); AdaptiveCardTemplate template = new AdaptiveCardTemplate(adaptiveCardJson); var payloadData = new { incidentTitle = incidentDetail.IncidentTitle, assignedTo = incidentDetail.AssignedToName, category = incidentDetail.Category, subCategory = incidentDetail.SubCategory, createdBy = incidentDetail.CreatedBy, assignedToName = incidentDetail.AssignedToName, userMRI = incidentDetail.AssignedToMRI, incidentId = incidentDetail.IncidentId }; var cardJsonString = template.Expand(payloadData); var adaptiveCardAttachment = new Attachment() { ContentType = AdaptiveCard.ContentType, Content = JsonConvert.DeserializeObject(cardJsonString), }; return(adaptiveCardAttachment); }
protected override async Task <InvokeResponse> OnInvokeActivityAsync(ITurnContext <IInvokeActivity> turnContext, CancellationToken cancellationToken) { List <IncidentDetails> currentIncidentList = new List <IncidentDetails>(); incidentDetailsList.TryGetValue("incidentList", out currentIncidentList); if (turnContext.Activity.Name == "composeExtension/submitAction") { var asJobject = JObject.FromObject(turnContext.Activity.Value); var data = (object)asJobject.ToObject <CardTaskFetchValue <object> >()?.Data; var botInstalled = (object)JObject.Parse(data.ToString()).ToObject <CardTaskFetchValue <object> >()?.MsTeams; if (botInstalled != null) { return(GetIncientListFromMEAction(currentIncidentList)); } else { var incidentId = (string)JObject.Parse(data.ToString()).ToObject <CardTaskFetchValue <string> >()?.IncidentId; var incidentDetail = currentIncidentList.FirstOrDefault(incident => incident.IncidentId.ToString() == incidentId); await turnContext.SendActivityAsync(MessageFactory.Attachment(CardHelper.GetIncidentReviewCard(incidentDetail))); return(CreateInvokeResponse()); } } if (turnContext.Activity.Name == "composeExtension/fetchTask") { try { // Check if your app is installed by fetching member information. var member = await TeamsInfo.GetMemberAsync(turnContext, turnContext.Activity.From.Id, cancellationToken); return(GetIncientListFromMEAction(currentIncidentList)); } catch (ErrorResponseException ex) { if (ex.Body.Error.Code == "BotNotInConversationRoster") { string[] paths = { ".", "Resources", "justInTimeInstall.json" }; var adaptiveCardJson = File.ReadAllText(Path.Combine(paths)); var adaptiveCardAttachment = new Attachment() { ContentType = AdaptiveCard.ContentType, Content = JsonConvert.DeserializeObject(adaptiveCardJson), }; return(CreateInvokeResponse(new MessagingExtensionActionResponse { Task = new TaskModuleContinueResponse { Value = new TaskModuleTaskInfo { Card = adaptiveCardAttachment, Height = 200, Width = 400, Title = "Bot is not installed", }, }, })); } } } if (turnContext.Activity.Name == "adaptiveCard/action") { var data = JsonConvert.DeserializeObject <InitialSequentialCard>(turnContext.Activity.Value.ToString()); string verb = data.action.verb; AdaptiveCardInvokeResponse adaptiveCardResponse; string cardJson; JObject response; switch (verb) { case "initialRefresh": string[] initialCard = { ".", "Resources", "firstCard.json" }; var members = new List <TeamsChannelAccount>(); string continuationToken = null; do { var currentPage = await TeamsInfo.GetPagedMembersAsync(turnContext, 100, continuationToken, cancellationToken); continuationToken = currentPage.ContinuationToken; members.AddRange(currentPage.Members); }while (continuationToken != null); foreach (var member in members) { if (member.AadObjectId != turnContext.Activity.From.AadObjectId) { var newMemberInfo = new Info { value = member.AadObjectId, title = member.Name }; memberDetails.Add(newMemberInfo); } } adaptiveCardResponse = GetNextActionCard(initialCard, data); return(CreateInvokeResponse(adaptiveCardResponse)); case "firstCard": string[] firstCard = { ".", "Resources", "secondCard.json" }; var assigneeInfo = await TeamsInfo.GetMemberAsync(turnContext, data.action.data.AssignedTo, cancellationToken); data.action.data.UserMRI = assigneeInfo.Id; adaptiveCardResponse = GetNextActionCard(firstCard, data); return(CreateInvokeResponse(adaptiveCardResponse)); case "secondCard": string[] secondCard = { ".", "Resources", "thirdCard.json" }; if (data.action.data.Category == "Software") { adaptiveCardResponse = GetNextActionCard(secondCard, data, Constants.Software); } else { adaptiveCardResponse = GetNextActionCard(secondCard, data, Constants.Hardware); } return(CreateInvokeResponse(adaptiveCardResponse)); case "thirdCard": var initiator = await TeamsInfo.GetMemberAsync(turnContext, data.action.data.AssignedTo, cancellationToken); data.action.data.AssignedToName = initiator.Name; var incidentDetail = new IncidentDetails { IncidentId = Guid.NewGuid(), CreatedBy = turnContext.Activity.From.Name, AssignedToMRI = data.action.data.UserMRI, AssignedToName = data.action.data.AssignedToName, Category = data.action.data.Category, IncidentTitle = data.action.data.IncidentTitle, SubCategory = data.action.data.SubCategory }; data.action.data.IncidentId = incidentDetail.IncidentId; string[] thirdCard = { ".", "Resources", "reviewCard.json" }; var responseAttachment = CardHelper.GetResponseAttachment(thirdCard, data, out cardJson); Activity pendingActivity = new Activity(); pendingActivity.Type = "message"; pendingActivity.Id = turnContext.Activity.ReplyToId; pendingActivity.Attachments = new List <Attachment> { responseAttachment }; await turnContext.UpdateActivityAsync(pendingActivity); response = JObject.Parse(cardJson); adaptiveCardResponse = new AdaptiveCardInvokeResponse() { StatusCode = 200, Type = AdaptiveCard.ContentType, Value = response }; if (currentIncidentList == null) { currentIncidentList = new List <IncidentDetails> { incidentDetail }; } else { List <IncidentDetails> incidentList = new List <IncidentDetails>(); incidentList = currentIncidentList; incidentList.Add(incidentDetail); currentIncidentList = incidentList; } incidentDetailsList.AddOrUpdate("incidentList", currentIncidentList, (key, value) => currentIncidentList); return(CreateInvokeResponse(adaptiveCardResponse)); case "refresh": string[] assignedToCard = { ".", "Resources", "assignedToCard.json" }; adaptiveCardResponse = GetNextActionCard(assignedToCard, data); return(CreateInvokeResponse(adaptiveCardResponse)); case "approved": string[] approvedCard = { ".", "Resources", "approvedCard.json" }; var approvedAttachment = CardHelper.GetResponseAttachment(approvedCard, data, out cardJson); Activity approvedActivity = new Activity(); approvedActivity.Type = "message"; approvedActivity.Id = turnContext.Activity.ReplyToId; approvedActivity.Attachments = new List <Attachment> { approvedAttachment }; await turnContext.UpdateActivityAsync(approvedActivity); response = JObject.Parse(cardJson); adaptiveCardResponse = new AdaptiveCardInvokeResponse() { StatusCode = 200, Type = AdaptiveCard.ContentType, Value = response }; return(CreateInvokeResponse(adaptiveCardResponse)); case "rejected": string[] rejectedCard = { ".", "Resources", "rejectedCard.json" }; var rejectedAttachment = CardHelper.GetResponseAttachment(rejectedCard, data, out cardJson); Activity rejectedActivity = new Activity(); rejectedActivity.Type = "message"; rejectedActivity.Id = turnContext.Activity.ReplyToId; rejectedActivity.Attachments = new List <Attachment> { rejectedAttachment }; await turnContext.UpdateActivityAsync(rejectedActivity); response = JObject.Parse(cardJson); adaptiveCardResponse = new AdaptiveCardInvokeResponse() { StatusCode = 200, Type = AdaptiveCard.ContentType, Value = response }; return(CreateInvokeResponse(adaptiveCardResponse)); } } return(null); }