public async Task TeamsAPI_FetchTeamDetailsAsync() { Microsoft.Rest.ServiceClientTracing.IsEnabled = true; TeamDetails teamDetails = new TeamDetails { Id = "TeamId", AadGroupId = "GroupId", Name = "TeamName", }; TestDelegatingHandler testHandler = new TestDelegatingHandler((request) => { StringContent stringContent = new StringContent(JsonConvert.SerializeObject(teamDetails)); var response = new HttpResponseMessage(HttpStatusCode.OK); response.Content = stringContent; return(Task.FromResult(response)); }); TeamsConnectorClient teamsConnectorClient = new TeamsConnectorClient( new Uri("https://smba.trafficmanager.net/amer-client-ss.msg/"), new MicrosoftAppCredentials("Test", "Test"), testHandler); TeamDetails teamDetailsResult = await teamsConnectorClient.Teams.FetchTeamDetailsAsync("TestTeamId").ConfigureAwait(false); Assert.IsNotNull(teamDetailsResult); Assert.IsNotNull(teamDetailsResult.Id); Assert.IsNotNull(teamDetailsResult.Name); Assert.IsNotNull(teamDetailsResult.AadGroupId); Assert.AreEqual(teamDetailsResult.Id, teamDetails.Id); Assert.AreEqual(teamDetailsResult.Name, teamDetails.Name); Assert.AreEqual(teamDetailsResult.AadGroupId, teamDetails.AadGroupId); }
/// <summary> /// Creates the teams connector client. /// </summary> /// <param name="serviceUrl">The service URL.</param> /// <param name="appCredentials">The application credentials for the bot.</param> /// <returns>Connector client instance.</returns> private ITeamsConnectorClient CreateTeamsConnectorClient(string serviceUrl, MicrosoftAppCredentials appCredentials = null) { TeamsConnectorClient connectorClient; if (appCredentials == null) { appCredentials = new MicrosoftAppCredentials(appId: null, password: null); } if (this.delegatingHandler == null) { connectorClient = new TeamsConnectorClient(new Uri(serviceUrl), appCredentials); } else { connectorClient = new TeamsConnectorClient(new Uri(serviceUrl), appCredentials, this.delegatingHandler); } if (this.connectorClientRetryPolicy != null) { connectorClient.SetRetryPolicy(this.connectorClientRetryPolicy); } return(connectorClient); }
private async Task <string> GetTeamNameAsync(ConnectorClient connectorClient, string teamId) { TeamsConnectorClient teamsConnectorClient = new TeamsConnectorClient(connectorClient.BaseUri, connectorClient.Credentials);//connectorClient.GetTeamsConnectorClient(); var teamDetailsResult = await teamsConnectorClient.Teams.FetchTeamDetailsAsync(teamId); return(teamDetailsResult.Name); }
public static async Task EchoMessage(ConnectorClient connector, Activity activity) { if (activity is IMessageActivity) { if (activity.GetTextWithoutMentions() != "") { string token = await GetToken(); GraphServiceClient graph = GetAuthenticatedClient(token); TeamsConnectorClient teamsConnector = connector.GetTeamsConnectorClient(); string fakeTeamId = activity.GetChannelData <TeamsChannelData>().Team.Id; string teamId = (await teamsConnector.Teams.FetchTeamDetailsAsync(fakeTeamId)).AadGroupId; string channelId = activity.GetChannelData <TeamsChannelData>().Channel.Id; string messages = await new HttpHelpers(token).HttpGetJson($"/teams/{teamId}/channels/{channelId}/messages"); string msgs = await GetAllMessages(graph, teamId, channelId); var response = activity.CreateReply("Here you go:\n" + messages); //var response = activity.CreateReply("Bob Smith said:\n" + "See you in Dallas!"); //await connector.Conversations.ReplyToActivityWithRetriesAsync(response); } //var reply = activity.CreateReply("You said!: " + activity.GetTextWithoutMentions()); //await connector.Conversations.ReplyToActivityWithRetriesAsync(reply); } }
private async Task ShowMembers(ITurnContext <IMessageActivity> turnContext, TeamsConnectorClient teamsConnectorClient, string conversationId, CancellationToken cancellationToken) { var channelData = turnContext.Activity.GetChannelData <TeamsChannelData>(); var teamMembers = await turnContext.TurnState.Get <IConnectorClient>().Conversations.GetConversationMembersAsync(conversationId); var mention = new Mention { Mentioned = turnContext.Activity.From, Text = $"<at>{turnContext.Activity.From.Name}</at>", }; var replyActivity1 = MessageFactory.Text($"{mention.Text} there are {teamMembers.Count} people in this team."); replyActivity1.Entities = new List <Entity> { mention }; await turnContext.SendActivityAsync(replyActivity1); var messages = teamMembers .Select(channelAccount => JObject.FromObject(channelAccount).ToObject <TeamsChannelAccount>()) .Select(teamsChannelAccount => $"{teamsChannelAccount.AadObjectId} --> {teamsChannelAccount.Name} --> {teamsChannelAccount.UserPrincipalName}"); await SendInBatches(turnContext, messages, cancellationToken); }
public async Task TeamsAPI_FetchChannelListAsyncWithHttpMessagesTest() { Microsoft.Rest.ServiceClientTracing.IsEnabled = true; ConversationList conversationList = new ConversationList { Conversations = new List <ChannelInfo> { new ChannelInfo { Id = "ChannelId", Name = "ChannelName" } } }; TestDelegatingHandler testHandler = new TestDelegatingHandler((request) => { StringContent stringContent = new StringContent(JsonConvert.SerializeObject(conversationList)); var response = new HttpResponseMessage(HttpStatusCode.OK); response.Content = stringContent; Assert.IsNotNull(request.Headers.GetValues("Authorization")); Assert.AreEqual(request.Headers.GetValues("Authorization").Count(), 1); Assert.AreEqual(request.Headers.GetValues("Authorization").ToList()[0], "CustomValue"); return(Task.FromResult(response)); }); ConnectorClient connectorClient = new ConnectorClient( new Uri("https://smba.trafficmanager.net/amer-client-ss.msg/"), ConfigurationManager.AppSettings["MicrosoftAppId"], ConfigurationManager.AppSettings["MicrosoftAppPassword"], testHandler); TeamsConnectorClient teamsConnectorClient = connectorClient.GetTeamsConnectorClient(); ConversationList conversationListResponse = (await teamsConnectorClient.Teams.FetchChannelListWithHttpMessagesAsync( "TestTeamId", new Dictionary <string, List <string> >() { { "Authorization", new List <string>() { "CustomValue" } } })).Body; Assert.IsNotNull(conversationListResponse); Assert.IsNotNull(conversationListResponse.Conversations); Assert.AreEqual(conversationListResponse.Conversations.Count, 1); Assert.AreEqual(conversationListResponse.Conversations[0].Id, conversationList.Conversations[0].Id); Assert.AreEqual(conversationListResponse.Conversations[0].Name, conversationList.Conversations[0].Name); }
public async Task TeamsAPI_FetchChannelListTestInvalidHttpCodeWithoutResponseContentAsync() { Microsoft.Rest.ServiceClientTracing.IsEnabled = true; TestDelegatingHandler testHandler = new TestDelegatingHandler((request) => { var response = new HttpResponseMessage(HttpStatusCode.NotFound); return(Task.FromResult(response)); }); TeamsConnectorClient teamsConnectorClient = new TeamsConnectorClient( new Uri("https://smba.trafficmanager.net/amer-client-ss.msg/"), new MicrosoftAppCredentials("Test", "Test"), testHandler); ConversationList conversationListResponse = await teamsConnectorClient.Teams.FetchChannelListAsync("TestTeamId").ConfigureAwait(false); }
public async Task TeamsAPI_FetchTeamDetailsTestInvalidTeamIdAsync() { Microsoft.Rest.ServiceClientTracing.IsEnabled = true; TestDelegatingHandler testHandler = new TestDelegatingHandler((request) => { StringContent stringContent = new StringContent("RandomRandomRandom"); var response = new HttpResponseMessage(HttpStatusCode.OK); response.Content = stringContent; return(Task.FromResult(response)); }); TeamsConnectorClient teamsConnectorClient = new TeamsConnectorClient( new Uri("https://smba.trafficmanager.net/amer-client-ss.msg/"), new MicrosoftAppCredentials("Test", "Test"), testHandler); await teamsConnectorClient.Teams.FetchTeamDetailsAsync(null).ConfigureAwait(false); }
public void TeamsAPI_FetchChannelListTestInvalidHttpCodeWithoutResponseContent() { Microsoft.Rest.ServiceClientTracing.IsEnabled = true; TestDelegatingHandler testHandler = new TestDelegatingHandler((request) => { var response = new HttpResponseMessage(HttpStatusCode.NotFound); return(Task.FromResult(response)); }); ConnectorClient connectorClient = new ConnectorClient( new Uri("https://smba.trafficmanager.net/amer-client-ss.msg/"), ConfigurationManager.AppSettings["MicrosoftAppId"], ConfigurationManager.AppSettings["MicrosoftAppPassword"], testHandler); TeamsConnectorClient teamsConnectorClient = connectorClient.GetTeamsConnectorClient(); ConversationList conversationListResponse = teamsConnectorClient.Teams.FetchChannelList("TestTeamId"); }
public async Task TeamsAPI_FetchTeamDetailsAsyncWithHttpMessagesTestAsync() { Microsoft.Rest.ServiceClientTracing.IsEnabled = true; TeamDetails teamDetails = new TeamDetails { Id = "TeamId", AadGroupId = "GroupId", Name = "TeamName", }; TestDelegatingHandler testHandler = new TestDelegatingHandler((request) => { StringContent stringContent = new StringContent(JsonConvert.SerializeObject(teamDetails)); var response = new HttpResponseMessage(HttpStatusCode.OK); response.Content = stringContent; Assert.IsNotNull(request.Headers.GetValues("Authorization")); Assert.AreEqual(request.Headers.GetValues("Authorization").Count(), 1); Assert.AreEqual(request.Headers.GetValues("Authorization").ToList()[0], "CustomValue"); return(Task.FromResult(response)); }); TeamsConnectorClient teamsConnectorClient = new TeamsConnectorClient( new Uri("https://smba.trafficmanager.net/amer-client-ss.msg/"), new MicrosoftAppCredentials("Test", "Test"), testHandler); TeamDetails teamDetailsResult = (await teamsConnectorClient.Teams.FetchTeamDetailsWithHttpMessagesAsync( "TestTeamId", new Dictionary <string, List <string> >() { { "Authorization", new List <string>() { "CustomValue" } } }).ConfigureAwait(false)).Body; Assert.IsNotNull(teamDetailsResult); Assert.IsNotNull(teamDetailsResult.Id); Assert.IsNotNull(teamDetailsResult.Name); Assert.IsNotNull(teamDetailsResult.AadGroupId); Assert.AreEqual(teamDetailsResult.Id, teamDetails.Id); Assert.AreEqual(teamDetailsResult.Name, teamDetails.Name); Assert.AreEqual(teamDetailsResult.AadGroupId, teamDetails.AadGroupId); }
protected override async Task OnMessageActivityAsync(ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken) { await turnContext.SendActivityAsync(MessageFactory.Text($"Echo: {turnContext.Activity.Text}"), cancellationToken); var connectorClient = turnContext.TurnState.Get <IConnectorClient>(); var teamsConnectorClient = new TeamsConnectorClient(connectorClient.Credentials); teamsConnectorClient.BaseUri = new Uri(turnContext.Activity.ServiceUrl); turnContext.Activity.RemoveRecipientMention(); switch (turnContext.Activity.Text) { case "show team members": await ShowTeamMembers(turnContext, teamsConnectorClient, cancellationToken); break; case "show group chat members": await ShowGroupChatMembers(turnContext, teamsConnectorClient, cancellationToken); break; case "showchannels": case "show channels": await ShowChannels(turnContext, teamsConnectorClient, cancellationToken); break; case "show team details": await ShowTeamDetails(turnContext, teamsConnectorClient, cancellationToken); break; default: await turnContext.SendActivityAsync("Invalid command. Type \"Show channels\" to see a channel list. Type \"Show members\" to see a list of members in a team. " + "Type \"show group chat members\" to see members in a group chat."); break; } }
/// Get the coordinates of a user when they install the app personally. private Task HandleUserConversationUpdateAsync(ITurnContext<IConversationUpdateActivity> turnContext) { var tenantId = turnContext.Activity.Conversation?.TenantId; var serviceUrl = turnContext.Activity.ServiceUrl; var conversationId = turnContext.Activity.Conversation?.Id; var isPersonalConversation = turnContext.Activity.Conversation.ConversationType == "personal"; var isInstallEvent = turnContext.Activity.MembersAdded?.Any(member => member.Id == $"28:{this.appCredentials.MicrosoftAppId}") == true; if (!isPersonalConversation || !isInstallEvent) { return Task.CompletedTask; } var teamsConnectorClient = new TeamsConnectorClient(new Uri(serviceUrl), this.appCredentials); var teamsChannelData = turnContext.Activity.GetChannelData<TeamsChannelData>(); this.LogConversationCoordinates("User", serviceUrl, conversationId); return Task.CompletedTask; }
public void TeamsAPI_FetchTeamDetailsTestInvalidTeamId() { Microsoft.Rest.ServiceClientTracing.IsEnabled = true; TestDelegatingHandler testHandler = new TestDelegatingHandler((request) => { StringContent stringContent = new StringContent("RandomRandomRandom"); var response = new HttpResponseMessage(HttpStatusCode.OK); response.Content = stringContent; return(Task.FromResult(response)); }); ConnectorClient connectorClient = new ConnectorClient( new Uri("https://smba.trafficmanager.net/amer-client-ss.msg/"), ConfigurationManager.AppSettings["MicrosoftAppId"], ConfigurationManager.AppSettings["MicrosoftAppPassword"], testHandler); TeamsConnectorClient teamsConnectorClient = connectorClient.GetTeamsConnectorClient(); teamsConnectorClient.Teams.FetchTeamDetails(null); }
public void TeamsAPI_FetchChannelListTest() { Microsoft.Rest.ServiceClientTracing.IsEnabled = true; ConversationList conversationList = new ConversationList { Conversations = new List <ChannelInfo> { new ChannelInfo { Id = "ChannelId", Name = "ChannelName" } } }; TestDelegatingHandler testHandler = new TestDelegatingHandler((request) => { StringContent stringContent = new StringContent(JsonConvert.SerializeObject(conversationList)); var response = new HttpResponseMessage(HttpStatusCode.OK); response.Content = stringContent; return(Task.FromResult(response)); }); ConnectorClient connectorClient = new ConnectorClient( new Uri("https://smba.trafficmanager.net/amer-client-ss.msg/"), ConfigurationManager.AppSettings["MicrosoftAppId"], ConfigurationManager.AppSettings["MicrosoftAppPassword"], testHandler); TeamsConnectorClient teamsConnectorClient = connectorClient.GetTeamsConnectorClient(); ConversationList conversationListResponse = teamsConnectorClient.Teams.FetchChannelList("TestTeamId"); Assert.IsNotNull(conversationListResponse); Assert.IsNotNull(conversationListResponse.Conversations); Assert.AreEqual(conversationListResponse.Conversations.Count, 1); Assert.AreEqual(conversationListResponse.Conversations[0].Id, conversationList.Conversations[0].Id); Assert.AreEqual(conversationListResponse.Conversations[0].Name, conversationList.Conversations[0].Name); }
private async Task ShowChannels(ITurnContext <IMessageActivity> turnContext, TeamsConnectorClient teamsConnectorClient, CancellationToken cancellationToken) { var channelList = await teamsConnectorClient.Teams.FetchChannelListAsync(turnContext.Activity.GetChannelData <TeamsChannelData>().Team.Id); var replyActivity = MessageFactory.Text($"<at>{turnContext.Activity.From.Name}</at> Total of {channelList.Conversations.Count} channels are currently in team"); var mention = new Mention { Mentioned = turnContext.Activity.From, Text = $"<at>{turnContext.Activity.From.Name}</at>", }; replyActivity.Entities = new List <Entity> { mention }; await turnContext.SendActivityAsync(replyActivity); var messages = channelList.Conversations.Select(channel => $"{channel.Id} --> {channel.Name}"); await SendInBatches(turnContext, messages, cancellationToken); }
/// Create a conversation in each channel & get the coordinates to that channel thread. private async Task HandleChannelThreadCoordinatesAsync(ITurnContext<IConversationUpdateActivity> turnContext) { var tenantId = turnContext.Activity.Conversation?.TenantId; var serviceUrl = turnContext.Activity.ServiceUrl; var conversationId = turnContext.Activity.Conversation?.Id; var isChannelConversationType = turnContext.Activity.Conversation.ConversationType == "channel"; var isInstallEvent = turnContext.Activity.MembersAdded?.Any(member => member.Id == $"28:{this.appCredentials.MicrosoftAppId}") == true; if (!isChannelConversationType) { return; } var teamsConnectorClient = new TeamsConnectorClient(new Uri(serviceUrl), this.appCredentials); var teamsChannelData = turnContext.Activity.GetChannelData<TeamsChannelData>(); var channelList = await teamsConnectorClient.Teams.FetchChannelListAsync(teamsChannelData.Team.Id); foreach (var channel in channelList.Conversations) { await this.CreateConversationForChannelAsync(tenantId, channel.Id, serviceUrl); } }
public async Task TeamsAPI_FetchChannelListTestAsync() { Microsoft.Rest.ServiceClientTracing.IsEnabled = true; ConversationList conversationList = new ConversationList { Conversations = new List <ChannelInfo> { new ChannelInfo { Id = "ChannelId", Name = "ChannelName", }, }, }; TestDelegatingHandler testHandler = new TestDelegatingHandler((request) => { StringContent stringContent = new StringContent(JsonConvert.SerializeObject(conversationList)); var response = new HttpResponseMessage(HttpStatusCode.OK); response.Content = stringContent; return(Task.FromResult(response)); }); TeamsConnectorClient teamsConnectorClient = new TeamsConnectorClient( new Uri("https://smba.trafficmanager.net/amer-client-ss.msg/"), new MicrosoftAppCredentials("Test", "Test"), testHandler); ConversationList conversationListResponse = await teamsConnectorClient.Teams.FetchChannelListAsync("TestTeamId").ConfigureAwait(false); Assert.IsNotNull(conversationListResponse); Assert.IsNotNull(conversationListResponse.Conversations); Assert.AreEqual(conversationListResponse.Conversations.Count, 1); Assert.AreEqual(conversationListResponse.Conversations[0].Id, conversationList.Conversations[0].Id); Assert.AreEqual(conversationListResponse.Conversations[0].Name, conversationList.Conversations[0].Name); }
public void TeamsAPI_FetchTeamDetails() { Microsoft.Rest.ServiceClientTracing.IsEnabled = true; TeamDetails teamDetails = new TeamDetails { Id = "TeamId", AadGroupId = "GroupId", Name = "TeamName" }; TestDelegatingHandler testHandler = new TestDelegatingHandler((request) => { StringContent stringContent = new StringContent(JsonConvert.SerializeObject(teamDetails)); var response = new HttpResponseMessage(HttpStatusCode.OK); response.Content = stringContent; return(Task.FromResult(response)); }); ConnectorClient connectorClient = new ConnectorClient( new Uri("https://smba.trafficmanager.net/amer-client-ss.msg/"), ConfigurationManager.AppSettings["MicrosoftAppId"], ConfigurationManager.AppSettings["MicrosoftAppPassword"], testHandler); TeamsConnectorClient teamsConnectorClient = connectorClient.GetTeamsConnectorClient(); TeamDetails teamDetailsResult = teamsConnectorClient.Teams.FetchTeamDetails("TestTeamId"); Assert.IsNotNull(teamDetailsResult); Assert.IsNotNull(teamDetailsResult.Id); Assert.IsNotNull(teamDetailsResult.Name); Assert.IsNotNull(teamDetailsResult.AadGroupId); Assert.AreEqual(teamDetailsResult.Id, teamDetails.Id); Assert.AreEqual(teamDetailsResult.Name, teamDetails.Name); Assert.AreEqual(teamDetailsResult.AadGroupId, teamDetails.AadGroupId); }
private async Task ShowTeamDetails(ITurnContext <IMessageActivity> turnContext, TeamsConnectorClient teamsConnectorClient, CancellationToken cancellationToken) { var teamsDetails = await teamsConnectorClient.Teams.FetchTeamDetailsAsync(turnContext.Activity.GetChannelData <TeamsChannelData>().Team.Id); var replyActivity = MessageFactory.Text($"The team name is {teamsDetails.Name}. The team ID is {teamsDetails.Id}. The ADDGroupID is {teamsDetails.AadGroupId}."); await turnContext.SendActivityAsync(replyActivity, cancellationToken); }
private Task ShowTeamMembers(ITurnContext <IMessageActivity> turnContext, TeamsConnectorClient teamsConnectorClient, CancellationToken cancellationToken) => ShowMembers(turnContext, teamsConnectorClient, turnContext.Activity.GetChannelData <TeamsChannelData>().Team.Id, cancellationToken);
private Task ShowGroupChatMembers(ITurnContext <IMessageActivity> turnContext, TeamsConnectorClient teamsConnectorClient, CancellationToken cancellationToken) => ShowMembers(turnContext, teamsConnectorClient, turnContext.Activity.Conversation.Id, cancellationToken);
/// <summary> /// Gets the teams connector client. /// </summary> /// <param name="connectorClient">The connector client.</param> /// <returns>Teams connector client.</returns> public static TeamsConnectorClient GetTeamsConnectorClient(this IConnectorClient connectorClient) { return(TeamsConnectorClient.Initialize(connectorClient)); }