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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#6
0
        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);
        }
示例#9
0
        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);
        }
示例#14
0
        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);
示例#22
0
 /// <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));
 }