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.

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

Top comments (0)

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

๐Ÿ‘‹ Kindness is contagious

Discover a treasure trove of wisdom within this insightful piece, highly respected in the nurturing DEV Community enviroment. Developers, whether novice or expert, are encouraged to participate and add to our shared knowledge basin.

A simple "thank you" can illuminate someone's day. Express your appreciation in the comments section!

On DEV, sharing ideas smoothens our journey and strengthens our community ties. Learn something useful? Offering a quick thanks to the author is deeply appreciated.

Okay