private async Task <List <Person> > ResolvePerson(string name, ITurnContext turnContext, CancellationToken cancellationToken) { List <Person> result = null; IEnumerable <TeamsChannelAccount> members = await TeamsInfo.GetMembersAsync(turnContext, cancellationToken); result = members.Where((w) => w.Name.ToLower().Contains(name.ToLower())) .Select((w) => new Person { name = w.Name, email = w.Email }) .ToList(); result.Sort((p, q) => string.Compare(p.name, q.name)); if (result == null || result.Count == 0) { result = new List <Person> { new Person { name = name, email = "" } }; } return(result); }
// Called when the task module is fetched for an action public async Task <MessagingExtensionActionResponse> HandleMessagingExtensionFetchTaskAsync(ITurnContext turnContext, MessagingExtensionAction query) { var emptyRequest = new ConsultingRequestDetails(); ConsultingDataService dataService = new ConsultingDataService(); emptyRequest.possibleProjects = await dataService.GetProjects(""); IEnumerable <TeamsChannelAccount> members = await TeamsInfo.GetMembersAsync(turnContext); emptyRequest.possiblePersons = members.Select((w) => new Person { name = w.Name, email = w.Email }) .ToList(); var card = await AddToProjectCard.GetCardAsync(turnContext, emptyRequest); var response = new Microsoft.Bot.Schema.Teams.TaskModuleContinueResponse() { Type = "continue", Value = new TaskModuleTaskInfo() { Title = "Select a sample", Card = card.ToAttachment() } }; return(new MessagingExtensionActionResponse { Task = response }); }
public async Task StartNewGame(ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken) { var game = _gameFactory.CreateNewGame(); var members = await TeamsInfo.GetMembersAsync(turnContext, cancellationToken).ConfigureAwait(false); foreach (var member in members) { if (member.Id == turnContext.Activity.Recipient.Id) { continue; } var player = game.AddNewPlayer(member.Name, member.Id); var gameCard = _cardsFactory.CreateGameCardAttachment(member.Name, game.GameId); var activity = MessageFactory.Attachment(gameCard); await MessageMembersAsync(turnContext, player, member, activity, cancellationToken).ConfigureAwait(false); } await turnContext.SendActivityAsync(MessageFactory.Text(InvitationSent), cancellationToken).ConfigureAwait(false); }
private async Task HydrateTeamsData(List <AzureDevOpsWorkItem> workItems, ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken) { // Get the roster one time in the current team and look up people inside it as needed var members = await TeamsInfo.GetMembersAsync(turnContext, cancellationToken); foreach (var wi in workItems) { // Plug the Team user-id for assigned-to if (wi.Fields.AssignedTo != null) { wi.Fields.AssignedTo.TeamsUserId = members.Where(m => m.UserPrincipalName.Equals(wi.Fields.AssignedTo.Uniquename, StringComparison.InvariantCultureIgnoreCase)) .FirstOrDefault()?.Id ?? turnContext.Activity.From.Id; } // Plug the Team user-id for EM owner if (wi.Fields.EMOwner != null) { wi.Fields.EMOwner.TeamsUserId = members.Where(m => m.UserPrincipalName.Equals(wi.Fields.EMOwner.Uniquename, StringComparison.InvariantCultureIgnoreCase)) .FirstOrDefault()?.Id ?? turnContext.Activity.From.Id; } // Plug the Team user-id for PM owner if (wi.Fields.PMOwner != null) { wi.Fields.PMOwner.TeamsUserId = members.Where(m => m.UserPrincipalName.Equals(wi.Fields.PMOwner.Uniquename, StringComparison.InvariantCultureIgnoreCase)) .FirstOrDefault()?.Id ?? turnContext.Activity.From.Id; } } }
private async Task <List <Entity> > GetPeopleToMention(ITurnContext turnContext, CancellationToken cancellationToken) { IEnumerable <TeamsChannelAccount> members = await TeamsInfo.GetMembersAsync(turnContext, cancellationToken); List <Entity> entities = new List <Entity>(); foreach (TeamsChannelAccount member in members) { foreach (string upn in dataFromRequest.Mentions) { if (String.Compare(member.UserPrincipalName, upn, true) == 0) { // Construct a ChannelAccount Object. ChannelAccount mentionedUser = new ChannelAccount(member.Id, member.Name, member.Role, member.AadObjectId); // Construct a Mention object. var mentionObject = new Mention { Mentioned = mentionedUser, Text = $"<at>{XmlConvert.EncodeName(member.Name)}</at>", }; entities.Add(mentionObject); } } } return(entities); }
private async Task PairingProgrammingAsync(ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken) { var teamsChannelId = turnContext.Activity.TeamsGetChannelId(); if (teamsChannelId != _MMDTeamGenaralChannelID) { await turnContext.SendActivityAsync("No permission for this command"); return; } var members = await TeamsInfo.GetMembersAsync(turnContext, cancellationToken); var membersList = members.ToList(); var mentionText = "Hello every, here is weekly pairing programing. Next is God's choice: \n\r"; var mentionList = new List <Entity> { }; Random rd = new Random(); while (membersList.Count > 1) { var firstIndex = rd.Next(membersList.Count); var firstMember = membersList[firstIndex]; var firstMention = new Mention { Mentioned = firstMember, Text = $"<at>{XmlConvert.EncodeName(firstMember.Name)}</at>", }; membersList.RemoveAt(firstIndex); var secondIndex = rd.Next(membersList.Count); var secondMember = membersList[secondIndex]; var secondMention = new Mention { Mentioned = secondMember, Text = $"<at>{XmlConvert.EncodeName(secondMember.Name)}</at>", }; membersList.RemoveAt(secondIndex); mentionText += firstMention.Text + " & " + secondMention.Text + "\n\r"; mentionList.Add(firstMention); mentionList.Add(secondMention); } if (membersList.Count == 1) { var lastMember = membersList[0]; var lastMention = new Mention { Mentioned = lastMember, Text = $"<at>{XmlConvert.EncodeName(lastMember.Name)}</at>", }; mentionText += "And " + lastMention.Text + ", feel free to join each group of them."; mentionList.Add(lastMention); } var replyActivity = MessageFactory.Text(mentionText); replyActivity.Entities = mentionList; await turnContext.SendActivityAsync(replyActivity, cancellationToken); }
protected override async Task OnMessageActivityAsync(ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken) { var text = turnContext.Activity.Text; // add conversation reference var members = await TeamsInfo.GetMembersAsync(turnContext, cancellationToken); var upn = members.FirstOrDefault(x => x.Id == turnContext.Activity.From.Id).UserPrincipalName; AddConversationReference(turnContext.Activity as Activity, upn); // handle regular messages with an echo if (turnContext?.Activity?.Value == null) { await turnContext.SendActivityAsync(MessageFactory.Text($"You sent '{turnContext.Activity.Text}'"), cancellationToken); return; } // handle approval or rejection card actions var value = JObject.Parse(turnContext.Activity?.Value?.ToString()); var pto = value.ToObject <PtoApproval>(); if (value?["action"].ToString() == "approve") { var approvalSuccessful = await _dysilService.SendApprovalAsync(pto, ApprovalType.Approved); if (!approvalSuccessful) { await turnContext.SendActivityAsync(MessageFactory.Text($"Error occurred while approving the request"), cancellationToken); return; } await turnContext.SendActivityAsync(MessageFactory.Text($"You have approved the request"), cancellationToken); // TODO: update card return; } else if (value?["action"].ToString() == "reject") { var rejectionSuccessful = await _dysilService.SendApprovalAsync(pto, ApprovalType.Rejected); if (!rejectionSuccessful) { await turnContext.SendActivityAsync(MessageFactory.Text($"Error occurred while rejecting the request"), cancellationToken); return; } await turnContext.SendActivityAsync(MessageFactory.Text($"You have rejected the request"), cancellationToken); // TODO: update card return; } }
protected override async Task OnMessageActivityAsync(ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken) { // 读取当前群聊中的用户列表 var members = await TeamsInfo.GetMembersAsync(turnContext); // 准备用来访问Microsoft Graph的本地代理 GraphServiceClient graphClient = new GraphServiceClient(new SimpleAuth(_configuration)); // 为每个用户发送一个通知,这里解析得到他们的AadObjectId,用来发送 members.Select(_ => _.AadObjectId).AsParallel().ForAll(async(_) => { // 以下代码,其实你可以在官网找到,并且简单地做些修改即可 // https://docs.microsoft.com/zh-cn/graph/api/chat-sendactivitynotification?view=graph-rest-1.0&tabs=http#example-1-notify-a-user-about-a-task-created-in-a-chat var topic = new TeamworkActivityTopic { Source = TeamworkActivityTopicSource.EntityUrl, Value = $"https://graph.microsoft.com/beta/me/chats/{turnContext.Activity.Conversation.Id}/messages/{turnContext.Activity.Id}" }; // 这个是通知的自定义模板(在manifest.json文件中要定义) var activityType = "metionall"; // 预览文字 var previewText = new ItemBody { Content = "有人在群聊中提到你了,请点击查看" }; // 收件人的id var recipient = new AadUserNotificationRecipient { UserId = _ }; // 替换掉模板中的值 var templateParameters = new List <Microsoft.Graph.KeyValuePair>() { new Microsoft.Graph.KeyValuePair { Name = "from", Value = turnContext.Activity.From.Name }, new Microsoft.Graph.KeyValuePair { Name = "message", Value = turnContext.Activity.RemoveMentionText(turnContext.Activity.Recipient.Id) } }; // 调用接口发送通知 await graphClient.Chats[turnContext.Activity.Conversation.Id] .SendActivityNotification(topic, activityType, null, previewText, templateParameters, recipient) .Request() .PostAsync(); }); }
private async Task BotCallback(ITurnContext turnContext, CancellationToken cancellationToken) { var members = await TeamsInfo.GetMembersAsync(turnContext, cancellationToken); var ordersResultJson = JsonConvert.SerializeObject(_OrderDetailServices.GetOrderResults(_OrderId, members)); var Order = _OrderService.GetOrder(_OrderId); var attachment = new CreateCardService2().GetResultTotal(_OrderId, Order.StoreName, ordersResultJson, DateTime.Now.ToString("HH:mm")); await turnContext.SendActivityAsync(MessageFactory.Attachment(attachment)); // await turnContext.SendActivityAsync(_Message); var memberId = turnContext.Activity.From.Id; var card = new CreateCardService2().ReplyPayment(_paymentService, turnContext); await turnContext.SendActivityAsync(MessageFactory.Attachment(card), cancellationToken); }
private async Task CallGroupChatGetMembersAsync(ITurnContext turnContext) { var members = (await TeamsInfo.GetMembersAsync(turnContext)).ToArray(); Assert.AreEqual("id-3", members[0].Id); Assert.AreEqual("name-3", members[0].Name); Assert.AreEqual("givenName-3", members[0].GivenName); Assert.AreEqual("surname-3", members[0].Surname); Assert.AreEqual("userPrincipalName-3", members[0].UserPrincipalName); Assert.AreEqual("id-4", members[1].Id); Assert.AreEqual("name-4", members[1].Name); Assert.AreEqual("givenName-4", members[1].GivenName); Assert.AreEqual("surname-4", members[1].Surname); Assert.AreEqual("userPrincipalName-4", members[1].UserPrincipalName); }
// If you encounter permission-related errors when sending this message, see // https://aka.ms/BotTrustServiceUrl private async Task MessageAllMembersAsync(ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken) { var teamsChannelId = turnContext.Activity.TeamsGetChannelId(); var serviceUrl = turnContext.Activity.ServiceUrl; var credentials = new MicrosoftAppCredentials(_appId, _appPassword); ConversationReference conversationReference = null; var members = await TeamsInfo.GetMembersAsync(turnContext, cancellationToken); foreach (var teamMember in members) { var card = CreateAdaptiveCardAttachment("statusCard.json", ""); var proactiveMessage = CreateResponse(turnContext.Activity, card); var conversationParameters = new ConversationParameters { IsGroup = false, Bot = turnContext.Activity.Recipient, Members = new ChannelAccount[] { teamMember }, TenantId = turnContext.Activity.Conversation.TenantId, }; await((BotFrameworkAdapter)turnContext.Adapter).CreateConversationAsync( teamsChannelId, serviceUrl, credentials, conversationParameters, async(t1, c1) => { conversationReference = t1.Activity.GetConversationReference(); await((BotFrameworkAdapter)turnContext.Adapter).ContinueConversationAsync( _appId, conversationReference, async(t2, c2) => { await t2.SendActivityAsync(proactiveMessage, c2); }, cancellationToken); }, cancellationToken); } await turnContext.SendActivityAsync(MessageFactory.Text("All messages have been sent."), cancellationToken); }
private async Task MentionNextMemberAsync(ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken) { var members = await TeamsInfo.GetMembersAsync(turnContext, cancellationToken); var iterator = members.GetEnumerator(); var operatorName = turnContext.Activity.From.Name; // nextMember is the preview element in iterator var preMember = iterator.Current; while (iterator.MoveNext()) { TeamsChannelAccount current = iterator.Current; if (current.Name == operatorName) { break; } preMember = iterator.Current; } // If preMember is null, that means operator is the first element in iterator. So we need return the last element if (preMember == null) { preMember = iterator.Current; while (iterator.MoveNext()) { preMember = iterator.Current; } } var mention = new Mention { Mentioned = preMember, Text = $"<at>{XmlConvert.EncodeName(preMember.Name)}</at>", }; var replyActivity = MessageFactory.Text($"It's your turn {mention.Text}."); replyActivity.Entities = new List <Entity> { mention }; await turnContext.SendActivityAsync(replyActivity, cancellationToken); }
protected override async Task OnMembersAddedAsync(IList <ChannelAccount> membersAdded, ITurnContext <IConversationUpdateActivity> turnContext, CancellationToken cancellationToken) { var members = await TeamsInfo.GetMembersAsync(turnContext, cancellationToken); var upn = members.FirstOrDefault(x => x.Id == turnContext.Activity.From.Id).UserPrincipalName; var conversationReference = turnContext.Activity.GetConversationReference(); conversationReference.User.Properties["upn"] = upn; _conversationReferences.AddOrUpdate(conversationReference.User.Id, conversationReference, (key, newValue) => conversationReference); var welcomeText = "Welcome to the PTO Bot!"; foreach (var member in membersAdded) { if (member.Id != turnContext.Activity.Recipient.Id) { await turnContext.SendActivityAsync(MessageFactory.Text(welcomeText, welcomeText), cancellationToken); } } }
public async Task <IActionResult> Data([FromBody] MessageList notifyMessages) { var i = 0; if (notifyMessages.MessageType == "2") { foreach (var conversationReference in _conversationReferences.Values) { await((BotAdapter)_adapter).ContinueConversationAsync(_appId, conversationReference, async(ITurnContext turnContext, CancellationToken cancellationToken) => { IEnumerable <TeamsChannelAccount> members = TeamsInfo.GetMembersAsync(turnContext, cancellationToken).Result; foreach (var member in members) { foreach (var notifyMessage in notifyMessages.messages) { if (notifyMessage.AssignedTo == member.UserPrincipalName) { i++; SecondMessageType message = new SecondMessageType(); message.AssignedTo = notifyMessage.AssignedTo; message.MessageType = notifyMessage.MessageType; message.InProgressTasks = notifyMessage.InProgressTasks; message.Link = notifyMessage.Link; message.TerminateTasks = notifyMessage.TerminateTasks; message.NewTasks = notifyMessage.NewTasks; var cardAttachment = AdaptiveCardFactory.CreateAdaptiveCardSecondTypeAttachment(member.Name, message); await turnContext.SendActivityAsync(MessageFactory.Attachment(cardAttachment), cancellationToken); } } } }, default(CancellationToken)); } } return(new ContentResult() { Content = "<html><body><h1>Proactive messages have been sent:" + i + "users" + "</h1></body></html>", ContentType = "text/html", StatusCode = (int)HttpStatusCode.OK, }); }
private async Task <List <UserDetails> > InitUserList(WaterfallStepContext stepContext, CancellationToken cancellationToken) { if (_settingProvider.UseTeams) { var members = await TeamsInfo.GetMembersAsync(stepContext.Context, cancellationToken); return(members.Select(x => new UserDetails() { Id = x.Id, FirstName = x.GivenName, Lastname = x.Surname, Email = x.Email, TeamsUserInfo = x }).ToList()); } else { var users = await _issueTrackingIntegrationService.GetUsers(); return(users.ToList()); } }
private async Task BotCallback(ITurnContext turnContext, CancellationToken cancellationToken) { // await turnContext.SendActivityAsync(Message); var members = new List <TeamsChannelAccount>(); try { var data = await TeamsInfo.GetMembersAsync(turnContext, cancellationToken); members = data.ToList(); } catch (Exception e) { throw e; } string str = string.Empty; str += (Message + "\r\n"); var mentions = new List <Entity>(); foreach (var member in members) { var mention = new Mention { Mentioned = member, Text = $"<at>{XmlConvert.EncodeName(member.Name)}</at>", }; str += (mention.Text + "\r\n"); mentions.Add(mention); } var replyActivity = MessageFactory.Text(str); replyActivity.Entities = mentions; await turnContext.SendActivityAsync(replyActivity, cancellationToken); }
private async Task MentionRollActivityAsync(ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken) { var members = await TeamsInfo.GetMembersAsync(turnContext, cancellationToken); Random rd = new Random(); var membersArray = members.ToArray(); var tt = rd.Next(membersArray.Length); var randomMember = membersArray[tt]; var mention = new Mention { Mentioned = randomMember, Text = $"<at>{XmlConvert.EncodeName(randomMember.Name)}</at>", }; var replyActivity = MessageFactory.Text($"就决定是你了,去吧 {mention.Text}."); replyActivity.Entities = new List <Entity> { mention }; await turnContext.SendActivityAsync(replyActivity, cancellationToken); }
private async Task ShowMembersAsync(ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken) { await ShowMembersAsync(turnContext, await TeamsInfo.GetMembersAsync(turnContext, cancellationToken), cancellationToken); }
private async Task SendInfoToAllMemberAsync(ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken, string sendInfo) { var teamsChannelId = turnContext.Activity.TeamsGetChannelId(); if (teamsChannelId is null) { await turnContext.SendActivityAsync(MessageFactory.Text("This feature can only used in team."), cancellationToken); return; } var teamInfo = turnContext.Activity.TeamsGetTeamInfo(); var userName = turnContext.Activity.From.Name; var serviceUrl = turnContext.Activity.ServiceUrl; var credentials = new MicrosoftAppCredentials(_appId, _appPassword); ConversationReference conversationReference = null; var members = await TeamsInfo.GetMembersAsync(turnContext, cancellationToken); foreach (var teamMember in members) { var memberName = teamMember.UserPrincipalName; var proactiveCard = new HeroCard { Title = "Message from " + userName + " in team " + teamInfo.Name, Text = sendInfo, Buttons = new List <CardAction> { new CardAction { Type = ActionTypes.OpenUrl, Title = "Chat with " + userName, Value = "https://teams.microsoft.com/l/chat/0/0?users=" + _authorPrincipalName + "&message=Hi%20there%20" }, new CardAction { Type = ActionTypes.OpenUrl, Title = "Contact the developer", Text = "Any suggestions, feel free to contact with developer >^<", Value = "https://teams.microsoft.com/l/chat/0/0?users=" + _authorPrincipalName + "&message=Hi%20there%20" }, } }; var conversationParameters = new ConversationParameters { IsGroup = false, Bot = turnContext.Activity.Recipient, Members = new ChannelAccount[] { teamMember }, TenantId = turnContext.Activity.Conversation.TenantId, }; await((BotFrameworkAdapter)turnContext.Adapter).CreateConversationAsync( teamsChannelId, serviceUrl, credentials, conversationParameters, async(t1, c1) => { conversationReference = t1.Activity.GetConversationReference(); await((BotFrameworkAdapter)turnContext.Adapter).ContinueConversationAsync( _appId, conversationReference, async(t2, c2) => { await t2.SendActivityAsync(MessageFactory.Attachment(proactiveCard.ToAttachment()), c2); }, cancellationToken); }, cancellationToken); } await turnContext.SendActivityAsync(MessageFactory.Text("All messages have been sent."), cancellationToken); }
// 1. Will be called when user triggers messaging extension which then calls CreateTaskModuleCommand protected override async Task <MessagingExtensionActionResponse> OnTeamsMessagingExtensionFetchTaskAsync(ITurnContext <IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken) { // Check if the bot has been installed in the team by getting the team rooster try { var teamsMembers = await TeamsInfo.GetMembersAsync(turnContext); } catch { // if not installed we will send out the card instructing the user to install the bot string jitCardPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Cards", "jitCard.json"); var jitCard = File.ReadAllText(jitCardPath, Encoding.UTF8); string jitCardJson = jitCard; var jitCardTeams = AdaptiveCard.FromJson(jitCardJson); return(await Task.FromResult(new MessagingExtensionActionResponse { Task = new TaskModuleContinueResponse { Value = new TaskModuleTaskInfo { Card = new Attachment { Content = jitCardTeams.Card, ContentType = AdaptiveCard.ContentType, }, Height = 300, Width = 600, Title = "Install bot", }, }, })); } var magicCode = string.Empty; var state = (turnContext.Activity.Value as Newtonsoft.Json.Linq.JObject).Value <string>("state"); if (!string.IsNullOrEmpty(state)) { int parsed = 0; if (int.TryParse(state, out parsed)) { magicCode = parsed.ToString(); } } var tokenResponse = await(turnContext.Adapter as IUserTokenProvider).GetUserTokenAsync(turnContext, _connectionName, magicCode, cancellationToken: cancellationToken); if (tokenResponse == null || string.IsNullOrEmpty(tokenResponse.Token)) { // There is no token, so the user has not signed in yet. // Retrieve the OAuth Sign in Link to use in the MessagingExtensionResult Suggested Actions var signInLink = await(turnContext.Adapter as IUserTokenProvider).GetOauthSignInLinkAsync(turnContext, _connectionName, cancellationToken); return(new MessagingExtensionActionResponse { ComposeExtension = new MessagingExtensionResult { Type = "auth", SuggestedActions = new MessagingExtensionSuggestedAction { Actions = new List <CardAction> { new CardAction { Type = ActionTypes.OpenUrl, Value = signInLink, Title = "Sign in Please", }, }, }, }, }); } var accessToken = tokenResponse.Token; if (accessToken != null || !string.IsNullOrEmpty(accessToken)) { // Create Graph Client var client = new SimpleGraphClient(accessToken); // Get Group details var channel = turnContext.Activity.TeamsGetChannelId(); if (channel != null) { var members = new List <TeamsChannelAccount>(); string continuationToken = null; do { var currentPage = await TeamsInfo.GetPagedMembersAsync(turnContext, 100, continuationToken, cancellationToken); continuationToken = currentPage.ContinuationToken; members = members.Concat(currentPage.Members).ToList(); }while (continuationToken != null); TeamDetails teamDetails = await TeamsInfo.GetTeamDetailsAsync(turnContext, turnContext.Activity.TeamsGetTeamInfo().Id, cancellationToken); if (teamDetails != null) { var groupId = teamDetails.AadGroupId; plannerGroupId = groupId; //Get Plans var currentGroupPlan = await client.GetCurrentPlan(groupId); var favoritePlans = await client.GetFavoritePlans(); // Fill Adaptive Card data var exampleData = new ExampleData(); exampleData.MultiSelect = "false"; if (currentGroupPlan.CurrentPage.Count == 0) { exampleData.Option1 = favoritePlans.CurrentPage[4].Title; exampleData.Option1Value = favoritePlans.CurrentPage[4].Id; } else { exampleData.Option1 = currentGroupPlan.CurrentPage[0].Title; exampleData.Option1Value = currentGroupPlan.CurrentPage[0].Id; } exampleData.Option2 = favoritePlans.CurrentPage[0].Title; exampleData.Option3 = favoritePlans.CurrentPage[1].Title; exampleData.Option4 = favoritePlans.CurrentPage[2].Title; exampleData.Option2Value = favoritePlans.CurrentPage[0].Id; exampleData.Option3Value = favoritePlans.CurrentPage[1].Id; exampleData.Option4Value = favoritePlans.CurrentPage[2].Id; // Create and return card var adaptiveCardEditor = AdaptiveCardHelper.CreateAdaptiveCardEditor(exampleData); //var adaptiveCardEditor = CreateAdaptiveCard(); return(await Task.FromResult(new MessagingExtensionActionResponse { Task = new TaskModuleContinueResponse { Value = new TaskModuleTaskInfo { Card = new Microsoft.Bot.Schema.Attachment { Content = adaptiveCardEditor, ContentType = AdaptiveCard.ContentType, }, Height = 600, Width = 600, Title = "Task creation", }, }, })); } } else { // Return only favorite plans without current plan as in 1:1 or group chat var favoritePlans = await client.GetFavoritePlans(); // Fill Adaptive Card data var exampleData = new ExampleData(); exampleData.MultiSelect = "false"; exampleData.Option1 = favoritePlans.CurrentPage[0].Title; exampleData.Option2 = favoritePlans.CurrentPage[1].Title; exampleData.Option3 = favoritePlans.CurrentPage[2].Title; exampleData.Option1Value = favoritePlans.CurrentPage[0].Id; exampleData.Option3Value = favoritePlans.CurrentPage[1].Id; exampleData.Option4Value = favoritePlans.CurrentPage[2].Id; // Create and return card var adaptiveCardEditor = AdaptiveCardHelper.CreateAdaptiveCardEditor(exampleData); //var adaptiveCardEditor = CreateAdaptiveCard(); return(await Task.FromResult(new MessagingExtensionActionResponse { Task = new TaskModuleContinueResponse { Value = new TaskModuleTaskInfo { Card = new Microsoft.Bot.Schema.Attachment { Content = adaptiveCardEditor, ContentType = AdaptiveCard.ContentType, }, Height = 600, Width = 600, Title = "Task creation", }, }, })); } } //Needs to be replaced with OAuth Prompt return(null); }
public async Task <IActionResult> Post(string userid, [FromBody] NotifyMessage notifyMessage) { var sb = new StringBuilder(); bool flag = false; if (!string.IsNullOrEmpty(userid)) { foreach (var conversationReference in _conversationReferences.Values) { await((BotAdapter)_adapter).ContinueConversationAsync(_appId, conversationReference, async(ITurnContext turnContext, CancellationToken cancellationToken) => { IEnumerable <TeamsChannelAccount> members = TeamsInfo.GetMembersAsync(turnContext, cancellationToken).Result; //var connector = new ConnectorClient(new Uri(turnContext.Activity.ServiceUrl)); // members = connector.Conversations.GetConversationMembersAsync(conversationReference.Conversation.Id).Result; //// Concatenate information about all the members into a string foreach (var member in members) { sb.AppendLine($"GivenName = {member.Name}, Email = {member.Email}, User Principal Name {member.UserPrincipalName}, TeamsMemberId = {member.Id}, members = {members.ToList().Count},{_conversationReferences.Values.Count}"); if (userid == member.UserPrincipalName) { switch (notifyMessage.MessageType) { case "1": case "3": { flag = true; ThirdMessageType message = new ThirdMessageType(); message.AssignedTo = notifyMessage.AssignedTo; message.MessageType = notifyMessage.MessageType; message.IDCard = notifyMessage.IDCard; message.IDTask = notifyMessage.IDTask; message.LibDispName = notifyMessage.LibDispName; message.TitleTask = notifyMessage.TitleTask; message.Link = notifyMessage.Link; message.TaskType = notifyMessage.TaskType; if (message.TaskType == "LSTaskAppruve" || message.TaskType == "LSTaskExecute") { var cardAttachment = AdaptiveCardFactory.CreateAdaptiveCardForSubmitAttachment(message); var req = await turnContext.SendActivityAsync(MessageFactory.Attachment(cardAttachment), cancellationToken); message.Key = req.Id; var cardWithId = AdaptiveCardFactory.CreateAdaptiveCardForSubmitAttachment(message); var requestWithId = MessageFactory.Attachment(cardWithId); requestWithId.Id = req.Id; await turnContext.UpdateActivityAsync(requestWithId, cancellationToken); } else { var cardAttachment = AdaptiveCardFactory.CreateAdaptiveCardThirdTypeAttachment(message);; if (message.MessageType == "3") { cardAttachment = AdaptiveCardFactory.CreateAdaptiveCardThirdTypeAttachment(message); } else { cardAttachment = AdaptiveCardFactory.CreateAdaptiveCardFirstTypeAttachment(message); } await turnContext.SendActivityAsync(MessageFactory.Attachment(cardAttachment), cancellationToken); } break; } case "2": { flag = true; SecondMessageType message = new SecondMessageType(); message.AssignedTo = notifyMessage.AssignedTo; message.MessageType = notifyMessage.MessageType; message.InProgressTasks = notifyMessage.InProgressTasks; message.Link = notifyMessage.Link; message.TerminateTasks = notifyMessage.TerminateTasks; message.NewTasks = notifyMessage.NewTasks; var cardAttachment = AdaptiveCardFactory.CreateAdaptiveCardSecondTypeAttachment(member.Name, message); await turnContext.SendActivityAsync(MessageFactory.Attachment(cardAttachment), cancellationToken); break; } } } } }, default(CancellationToken)); } } else { foreach (var conversationReference in _conversationReferences.Values) { await((BotAdapter)_adapter).ContinueConversationAsync(_appId, conversationReference, (ITurnContext turnContext, CancellationToken cancellationToken) => turnContext.SendActivityAsync("withoutUser"), default(CancellationToken)); } } // Let the caller know proactive messages have been sent return(new ContentResult() { Content = "<html><body><h1>Proactive messages have been sent:" + userid + "status = " + flag + "data = " + sb.ToString() + "</h1></body></html>", ContentType = "text/html", StatusCode = (int)HttpStatusCode.OK, }); }
protected override async Task OnMessageActivityAsync(ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken) { turnContext.Activity.RemoveRecipientMention(); switch (turnContext.Activity.Text.Trim()) { case "connect": var endPointReply = new StringBuilder("Please connect your flow to: "); var hostingURL = _config["BotHostingURL"]; endPointReply.Append(hostingURL); endPointReply.Append("/flow/messages/"); // encrypt the channelID. var protector = _dataProtectionProvider.CreateProtector(_encryptionKey); TeamsChannelData channelData = turnContext.Activity.GetChannelData <TeamsChannelData>(); string channelID = channelData.Team.Id; string protectedChannelID = protector.Protect(channelID); endPointReply.Append(protectedChannelID); var endpointReplyActivity = MessageFactory.Text(endPointReply.ToString()); // I can tag people on the card. await turnContext.SendActivityAsync(endpointReplyActivity, cancellationToken); break; case "test": MockData fakePayload = new MockData("1234", "This is Test", 3, "Active"); // the below commented code is not needed for the actual // case as the information will come as json object. //string fakepayloadjson = jsonconvert.serializeobject(fakepayload); // if it comes as json, deserializing the json object is needed. //var deserializedjsonobject = jsonconvert.deserializeobject(fakepayloadjson); var attachmentCard = CreateAdpativeCardAttachment(fakePayload); var cardReply = MessageFactory.Attachment(attachmentCard); await turnContext.SendActivityAsync(cardReply); IEnumerable <TeamsChannelAccount> members = await TeamsInfo.GetMembersAsync(turnContext, cancellationToken); List <Entity> entities = new List <Entity>(); foreach (TeamsChannelAccount member in members) { foreach (string upn in fakePayload.Mentions) { if (String.Compare(member.UserPrincipalName, upn, true) == 0) { // Construct a ChannelAccount Object. ChannelAccount mentionedUser = new ChannelAccount(member.Id, member.Name, member.Role, member.AadObjectId); // Construct a Mention object. var mentionObject = new Mention { Mentioned = mentionedUser, Text = $"<at>{XmlConvert.EncodeName(member.Name)}</at>", }; entities.Add(mentionObject); } } } // We need to mention everyone in the entities. // Construct a string that is going to be passed to a replyActivity. var replyActivityTextStingBuilder = new StringBuilder(); foreach (Mention mentioned in entities) { replyActivityTextStingBuilder.AppendFormat("{0} ", mentioned.Text); } replyActivityTextStingBuilder.Append("Please take a look"); var replyActivity = MessageFactory.Text(replyActivityTextStingBuilder.ToString()); // I can tag people on the card. replyActivity.Entities = entities; await turnContext.SendActivityAsync(replyActivity, cancellationToken); // updated version MockData fakePayLoadForUpdate = new MockData("1234", "This is a test for Update", 3, "Closed"); Attachment updatedAttachmentCard = CreateAdpativeCardAttachment(fakePayLoadForUpdate); var newActivity = MessageFactory.Attachment(updatedAttachmentCard); newActivity.Id = cardReply.Id; await turnContext.UpdateActivityAsync(newActivity, cancellationToken); break; case "setup": await AddConversationReference(turnContext.Activity as Activity); break; } }
protected override async Task OnMessageActivityAsync(ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken) { AddConversationReference(turnContext.Activity as Activity); if (turnContext.Activity.Value != null) { JObject jObject = JObject.Parse(Newtonsoft.Json.JsonConvert.SerializeObject(turnContext.Activity.Value)); bool isCommented = false; var json = JsonConvert.SerializeObject(turnContext.Activity.Value); var desc = 0; var key = jObject["Key"].ToString(); ThirdMessageType message = new ThirdMessageType(); message.Type = jObject["Type"].ToString(); var approve = jObject["Approved"].ToString(); message.IDCard = jObject["IDCard"].ToString(); message.IDTask = jObject["IDTask"].ToString(); message.TaskType = jObject["TaskType"].ToString(); message.Key = jObject["Key"].ToString(); message.AssignedTo = jObject["AssignedTo"].ToString(); message.MessageType = jObject["MessageType"].ToString(); message.LibDispName = jObject["LibDispName"].ToString(); message.TitleTask = jObject["TitleTask"].ToString(); message.Link = jObject["Link"].ToString(); message.Comment = ""; message.TaskType = jObject["TitleTask"].ToString(); if (approve == "Rejected") { message.Comment = jObject["Comment"].ToString(); } else { message.Comment = jObject["ApproveComment"].ToString(); } message.CardType = "submitted"; var myUpdatedCard = AdaptiveCardFactory.CreateAdaptiveCardAfterSubmitAttachment(message, approve, message.Comment); if (approve == "Rejected" && string.IsNullOrEmpty(message.Comment.Trim())) { desc = 1; message.CardType = "comment"; isCommented = true; myUpdatedCard = AdaptiveCardFactory.CreateAdaptiveCardCommentRequiredAttachment(message); } else { var data = new StringContent(json, Encoding.UTF8, "application/json"); var url = "https://prod-67.westeurope.logic.azure.com:443/workflows/5ac4ad090e0e442887e67aa2319ae3ea/triggers/manual/paths/invoke?api-version=2016-06-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=q1Uz83atZhsoR5aR3eb742pv9tqrhWmAsL5Gj2q2Lv8"; myUpdatedCard = AdaptiveCardFactory.CreateAdaptiveCardWaitingAttachment(message); var newActivityForWait = MessageFactory.Attachment(myUpdatedCard); newActivityForWait.Id = key; switch (message.Type) { case "message": { UpdateMessage(turnContext, cancellationToken, newActivityForWait); break; } case "carousel": { message.CardType = "wait"; await UpdateCarousel(turnContext, cancellationToken, myUpdatedCard, message, 1); break; } } var response = await client.PostAsync(url, data); var contents = await response.Content.ReadAsStringAsync(); JObject jObjectResponse = JObject.Parse(contents); var succesfullApprove = jObjectResponse["Approved"].ToString(); var status = jObjectResponse["Status"].ToString().Trim(); status = status == "Done" ? "Approved" : status == "Back" ? "Rejected" : "Error"; message.Approved = status; switch (succesfullApprove) { case "0": { myUpdatedCard = AdaptiveCardFactory.CreateAdaptiveCardAfterSubmitAttachment(message, status, message.Comment); break; } case "1": { myUpdatedCard = AdaptiveCardFactory.CreateAdaptiveCardAlreadySubmitAttachment(message, status); break; } } } var newActivity = MessageFactory.Attachment(myUpdatedCard); newActivity.Id = key; // var connector = new ConnectorClient(new Uri(turnContext.Activity.ServiceUrl)); //await connector.Conversations.DeleteActivityAsync(turnContext.Activity.Conversation.Id, key, cancellationToken); switch (message.Type) { case "message": { UpdateMessage(turnContext, cancellationToken, newActivity); break; } case "carousel": { if (!isCommented) { message.CardType = "submitted"; } await UpdateCarousel(turnContext, cancellationToken, myUpdatedCard, message, 1); break; } } await Task.Delay(500); switch (message.Type) { case "message": { UpdateMessage(turnContext, cancellationToken, newActivity); break; } case "carousel": { if (!isCommented) { message.CardType = "submitted"; } await UpdateCarousel(turnContext, cancellationToken, myUpdatedCard, message, desc); break; } } //string approved = jObject["approved"].ToString(); } else { var userStateAccessors = _userState.CreateProperty <UserProfile>(nameof(UserProfile)); var userProfile = await userStateAccessors.GetAsync(turnContext, () => new UserProfile()); if (userProfile.IsSend == true) { turnContext.Activity.RemoveRecipientMention(); switch (turnContext.Activity.Text.Trim()) { case "Help": await turnContext.SendActivityAsync(MessageFactory.Text($"Я бот для роботи з LSDocs. Мої основні функції: \n\n" + $"- отримання 10 останніх завдань, які можна затвердити (просто напишіть мені 'TopTen'); \n\n " + $"- можливість виконання завдань безпосередньо у боті (Lazy approvals); \n\n" + $"- сповіщення про призначення нової задачі; \n\n" + $"- щоденні сповіщення про поточний статус особистих задач; \n\n" + $"- сповіщення за 24 години про протермінування задач. \n\n" + $"А також я постійно навчаюсь, тому можливостей буде більше.🙂 \n\n" + $" \n\n " + $"Якщо у Вас є питання чи пропозиції щодо моєї роботи зв'яжіться з моєю службою підтримки почтою [email protected] чи за телефоном +38 044 232 95 09. "), cancellationToken); break; case "TopTen": { userProfile.IsSend = false; var credentials = new MicrosoftAppCredentials("4e2e9e85-b2ba-4557-9082-706d081a64e0", "f+#o^wOr%9SPfaJXrow26^]{"); var connector = new ConnectorClient(new Uri(turnContext.Activity.ServiceUrl), credentials); var conversationId = turnContext.Activity.Conversation.Id; var conversationStateAccessors = _conversationState.CreateProperty <ConversationData>(nameof(ConversationData)); var conversationData = await conversationStateAccessors.GetAsync(turnContext, () => new ConversationData()); IEnumerable <TeamsChannelAccount> members = TeamsInfo.GetMembersAsync(turnContext, cancellationToken).Result; var user = new RequestBody(); foreach (var member in members) { user = new RequestBody() { AssignedTo = member.UserPrincipalName }; if (string.IsNullOrEmpty(user.AssignedTo)) { throw new Exception("no user"); } if (!string.IsNullOrEmpty(userProfile.CarouselId) && userProfile.Count == 1) { userProfile.Count--; await _conversationState.SaveChangesAsync(turnContext, false, cancellationToken); await _userState.SaveChangesAsync(turnContext, false, cancellationToken); await turnContext.DeleteActivityAsync(userProfile.CarouselId, cancellationToken); conversationData.PromptedUserCarousel = false; userProfile.CarouselId = ""; userProfile.messagesCarousel.Clear(); } List <Attachment> attachments = new List <Attachment>(); IMessageActivity carousel = MessageFactory.Carousel(attachments); List <ThirdMessageType> messages = new List <ThirdMessageType>(); var json = JsonConvert.SerializeObject(user); var waitReq = await turnContext.SendActivityAsync(MessageFactory.Text($"Зачекайте! Вигружаємо задачі з LSDOCS..."), cancellationToken); const string link = "https://prod-10.westeurope.logic.azure.com/workflows/87b2e250b3624ef79777ecfdb37ea0bb/triggers/manual/paths/invoke?api-version=2016-06-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=jSY4t__HFAn16knFTcmEEqWJl2HZYH4rLHu6rDzdf8U"; var data = new StringContent(json, Encoding.UTF8, "application/json"); var response = await client.PostAsync(link, data); var contents = await response.Content.ReadAsStringAsync(); JArray array; JObject jObjectResponse = JObject.Parse(contents); try { array = JArray.Parse(jObjectResponse["messages"].ToString()); } catch (Exception ex) { throw (new Exception("Flow return bad top ten")); } if (array.Count == 0) { await turnContext.SendActivityAsync(MessageFactory.Text($"Всі задачі виконані 🙂"), cancellationToken); await turnContext.DeleteActivityAsync(waitReq.Id, cancellationToken); return; } //if (messages.Count != 0) //{ // await turnContext.DeleteActivityAsync(carousel.Id, cancellationToken); // carousel.Attachments.Clear(); // attachments.Clear(); // messages.Clear(); //} foreach (JObject cards in array.Children <JObject>()) { var parameters = new Dictionary <string, string>(); foreach (JProperty prop in cards.Properties()) { parameters.Add(prop.Name, prop.Value.ToString()); } ThirdMessageType message = new ThirdMessageType(); message.AssignedTo = parameters["AssignedTo"].ToString(); message.MessageType = parameters["MessageType"].ToString(); message.IDCard = parameters["IDCard"].ToString(); message.IDTask = parameters["IDTask"].ToString(); message.LibDispName = parameters["LibDispName"].ToString(); //message.TaskType = parameters["TaskType"].ToString(); message.TaskType = ""; message.TitleTask = parameters["TitleTask"].ToString(); message.Link = parameters["Link"].ToString(); message.Approved = ""; message.Key = "carousel"; messages.Add(message); var adaptiveCardAttachment = AdaptiveCardFactory.CreateAdaptiveCardForSubmitAttachment(message); carousel.Attachments.Add(adaptiveCardAttachment); } await turnContext.DeleteActivityAsync(waitReq.Id, cancellationToken); if (string.IsNullOrEmpty(userProfile.CarouselId) && userProfile.Count < 1) { userProfile.Count++; await _conversationState.SaveChangesAsync(turnContext, false, cancellationToken); await _userState.SaveChangesAsync(turnContext, false, cancellationToken); var req = await turnContext.SendActivityAsync(carousel, cancellationToken); var newAttachments = new List <Attachment>(); newAttachments.AddRange(carousel.Attachments); carousel.Attachments.Clear(); attachments.Clear(); var newCarousel = MessageFactory.Carousel(attachments); foreach (var message in messages) { message.Key = req.Id; message.Type = "carousel"; var adaptiveCardAttachment = AdaptiveCardFactory.CreateAdaptiveCardForSubmitAttachment(message); newCarousel.Attachments.Add(adaptiveCardAttachment); } newCarousel.Id = req.Id; userProfile.messagesCarousel = messages; userProfile.CarouselId = req.Id; conversationData.PromptedUserCarousel = true; await turnContext.UpdateActivityAsync(newCarousel, cancellationToken); userProfile.IsSend = true; await _conversationState.SaveChangesAsync(turnContext, false, cancellationToken); await _userState.SaveChangesAsync(turnContext, false, cancellationToken); return; } break; } break; } default: // Echo back what the user said await turnContext.SendActivityAsync(MessageFactory.Text($"Ви ввели комманду, якої я ще не знаю. Спробуйте написати 'Help'"), cancellationToken); break; } } else { return; } } }