DEV Community

Cover image for How to: Send Microsoft Teams self-message using Graph SDK
thecodewrapper
thecodewrapper

Posted on

How to: Send Microsoft Teams self-message using Graph SDK

Introduction

Microsoft Teams has become an indispensable tool for businesses and organizations to communicate and collaborate. Sometimes, you might want to send a message to yourself as a reminder or to keep track of important information.In this tutorial, I will demonstrate how to send Microsoft Teams self-message using Graph SDK by creating a simple console application in .NET 6.

Requirements

For this you need the following:

  1. A Microsoft Teams account with a valid subscription.
  2. Microsoft Graph SDK installed in your development environment.
  3. A registered app in Azure Active Directory with required permissions.
  4. .NET Core installed on your development environment.

Note: When registering your application in Azure AD, you need to add a redirect URI with the following properties:

This is needed when authenticating using an interactive browser.

Step 1: Create a new .NET Core console application

Open a command prompt or terminal, and create a new .NET Core console application using the following command:

dotnet new console --name TeamsSelfMessage 
Enter fullscreen mode Exit fullscreen mode

Navigate to the newly created project folder:

cd TeamsSelfMessage 
Enter fullscreen mode Exit fullscreen mode

Step 2: Add necessary packages

To send a self-message on Microsoft Teams using the Graph SDK, first, install the necessary packages:

dotnet add package Microsoft.Graph dotnet add package Microsoft.Graph.Core dotnet add package Microsoft.Identity.Client dotnet add package Microsoft.Extensions.Configuration.Json dotnet add package Azure.Identity 
Enter fullscreen mode Exit fullscreen mode

Step 3: Configure the app settings

Add a new file to the project named appsettings.json. Make sure you configure the Build Action to Content and the Copy to Output Directory to Copy Always.

{ "appId": "YOUR_APP_ID", "tenantId": "YOUR_TENANT_ID", } 
Enter fullscreen mode Exit fullscreen mode

Replace YOUR_APP_ID and YOUR_TENANT_ID with your actual app registration details from Azure Active Directory.

Step 4: Set up the Graph SDK and authenticate

Open the Program.cs file and add the following using statements:

using System; using System.IO; using System.Threading.Tasks; using Azure.Identity; using Microsoft.Extensions.Configuration; using Microsoft.Graph; using Microsoft.Graph.Models; 
Enter fullscreen mode Exit fullscreen mode

Add the following field to hold the scopes for the authentication of the GraphServiceClient:

private static string[] _graphScopes = new[] { "User.Read", "ChatMessage.Send", "Chat.ReadWrite" }; 
Enter fullscreen mode Exit fullscreen mode

Also add the following field which denotes the chat with yourself:

private const string SELF_CHAT_ID = "48:notes"; 
Enter fullscreen mode Exit fullscreen mode

Add the following method to authenticate and initialize the Graph SDK:

private static async Task<GraphServiceClient> GetGraphClient(IConfiguration configuration) { var interactiveBrowserCredentialOptions = new InteractiveBrowserCredentialOptions { ClientId = configuration["appId"], TenantId = configuration["tenantId"] }; var tokenCredential = new InteractiveBrowserCredential(interactiveBrowserCredentialOptions); var graphClient = new GraphServiceClient(tokenCredential, _graphScopes); _ = await graphClient.Me.GetAsync(); //trigger login return graphClient; } 
Enter fullscreen mode Exit fullscreen mode

Step 5: Implement the self-message functionality

With the Graph SDK set up, we can now implement the functionality to send a self-message in Microsoft Teams. Add the following method to send a message to yourself:

private static async Task<ChatMessage> SendMessageAsync(GraphServiceClient graphClient, string messageContent) { var message = new ChatMessage { Body = new ItemBody { ContentType = BodyType.Html, Content = messageContent } }; return await graphClient.Me.Chats[SELF_CHAT_ID].Messages.PostAsync(message); } 
Enter fullscreen mode Exit fullscreen mode

Step 6: Call the self-message methods from Main

Modify the Main method to call the self-message method as follows:

public static async Task Main(string[] args) { var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .Build(); var graphClient = await GetGraphClient(configuration); string messageContent = "This is a message to myself!"; ChatMessage sentMessage = await SendMessageAsync(graphClient, messageContent); Console.WriteLine($"Message sent with ID: {sentMessage.Id}"); Console.WriteLine("Press any key to exit..."); Console.ReadKey(); } 
Enter fullscreen mode Exit fullscreen mode

Now, you can run the console application using the following command:

dotnet run 
Enter fullscreen mode Exit fullscreen mode

Conclusion

The console application will prompt you for authentication and send a message to yourself on Microsoft Teams. You can check your Teams client to see the message.

That’s it! You have successfully implemented self-messaging functionality in a .NET Core console application using the Microsoft Graph SDK.

For completeness, here is the full code for the Program.cs below:

using System; using System.IO; using System.Threading.Tasks; using Azure.Identity; using Microsoft.Extensions.Configuration; using Microsoft.Graph; using Microsoft.Graph.Models; namespace TeamsSelfMessage { class Program { private static string[] _graphScopes = new[] { "User.Read", "ChatMessage.Send", "Chat.ReadWrite" }; private const string SELF_CHAT_ID = "48:notes"; public static async Task Main(string[] args) { var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .Build(); var graphClient = await GetGraphClient(configuration); string messageContent = "This is a message to myself!"; ChatMessage sentMessage = await SendMessageAsync(graphClient, messageContent); Console.WriteLine($"Message sent with ID: {sentMessage.Id}"); Console.WriteLine("Press any key to exit..."); Console.ReadKey(); } private static async Task<GraphServiceClient> GetGraphClient(IConfiguration configuration) { var interactiveBrowserCredentialOptions = new InteractiveBrowserCredentialOptions { ClientId = configuration["appId"], TenantId = configuration["tenantId"] }; var tokenCredential = new InteractiveBrowserCredential(interactiveBrowserCredentialOptions); var graphClient = new GraphServiceClient(tokenCredential, _graphScopes); _ = await graphClient.Me.GetAsync(); //trigger login return graphClient; } private static async Task<ChatMessage> SendMessageAsync(GraphServiceClient graphClient, string messageContent) { var message = new ChatMessage { Body = new ItemBody { ContentType = BodyType.Html, Content = messageContent } }; return await graphClient.Me.Chats[SELF_CHAT_ID].Messages.PostAsync(message); } } } 
Enter fullscreen mode Exit fullscreen mode

You can also find the GitHub repository with the complete solution here.

Top comments (0)