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:

  • Platform: Public client/native (Mobile & Desktop)
  • Value: http://localhost

This is needed when authenticating using an interactive browser.

Step-by-step guide

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

Navigate to the newly created project folder:

cd TeamsSelfMessage

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

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",
}

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;

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" };

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

private const string SELF_CHAT_ID = "48:notes";

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;
}

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);
}

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();
}

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

dotnet run

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);
        }
    }
}

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

Leave a reply:

Your email address will not be published.

Site Footer