Search code examples
c#.netmicrosoft-graph-apimicrosoft-teamsmicrosoft-graph-teams

Sending a chat message with Microsoft Teams


Is there anyway to send a teams message to a channel or chat that doesn't involve the end user of an app being asked to sign in? What I am trying to do is something like this:

  1. User does something on my web app
  2. Without user interaction, my web app sends a message to a chat or channel on Microsoft Teams

I tried to send it as myself for testing (planned on using a service account later), but after some reading, I've come to find out isn't possible using application API permissions, as documented here:

Here is the code I have that would work if I wasn't using application permissions:

var tenantId = "...";
var clientId = "...";
var clientSecret = "...";

var clientSecretCredential = new ClientSecretCredential(tenantId, clientId, clientSecret);                        

var graphClient = new GraphServiceClient(clientSecretCredential);

var chatMessage = new ChatMessage
{
    Body = new ItemBody
    {
        Content = "Hello World"
    }
};

await graphClient.Teams["..."].Channels["..."].Messages.Request().AddAsync(chatMessage);

It throws this exception:

Microsoft.Graph.ServiceException: 'Code: Unauthorized
Message: Message POST is allowed in application-only context only for import purposes. Refer to https://docs.microsoft.com/microsoftteams/platform/graph-api/import-messages/import-external-messages-to-teams for more details.
Inner error:
    AdditionalData:
    date: 2023-02-16T04:46:02
    request-id: 3cbd9dc8-a86a-43e9-a5fe-e9e9b3433566
    client-request-id: 3cbd9dc8-a86a-43e9-a5fe-e9e9b3433566
ClientRequestId: 3cbd9dc8-a86a-43e9-a5fe-e9e9b3433566

Is it possible to send a message to a teams chat/channel without user interaction?


Solution

  • As per the documentation, application permissions are supported only for migration purposes. For this, your team and channel both must be created in a migrated state. However, you can use this graph API in a delegated context (with signed-in user).

    Reference Document: https://learn.microsoft.com/en-us/graph/api/chatmessage-post?view=graph-rest-1.0&tabs=csharp

    Using proactive messages you can send a message to a teams chat/channel without user interaction. Reference Document: https://learn.microsoft.com/en-us/microsoftteams/platform/resources/bot-v3/bot-conversations/bots-conv-proactive