Teams Graph Spoke Post Message to Chat Links not Clickable
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-20-2026 10:37 AM
I am using the teams graph spoke to send a message to a user when a record reaches a particular state. I have tried the raw URL in the message, and this just produced the URL in plain text in the message. I instead used flow variables to construct the link in this format:
<a href="https://instance.service-now.com/now/sow/record/table_name/Sys_ID" target="_blank">Open ServiceNow</a>
I saw another post discussing this, but there was no solution. ☹️
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
a week ago
Your anchor syntax is fine — the problem is the message is being sent as plain text, so Teams shows the markup literally instead of rendering it.
In Microsoft Graph, a chat message body has a contentType, and only contentType "html" renders an <a> tag as a clickable link. With "text", the HTML is shown as-is, which is also why your raw URL stayed plain text. So the fix is not a different link format, it is the message format:
1. In your flow, check the Post Message to Chat action for a message format or content type input and set it to HTML rather than text, keeping your existing anchor: <a href="https://instance.service-now.com/now/sow/record/table_name/Sys_ID">Open ServiceNow</a>
2. If the spoke action only accepts a plain message and exposes no format option, send the message with a REST step or custom action instead, calling POST /v1.0/chats/{chat-id}/messages with a body like this:
{"body": {"contentType": "html", "content": "<a href=\"https://instance.service-now.com/now/sow/record/table_name/Sys_ID\">Open ServiceNow</a>"}}
Two small notes: target="_blank" has no effect inside Teams and can be dropped, since Teams opens links its own way. And to isolate the cause, test the Graph call once outside the flow — if that message renders as a link, the spoke sending it as plain text was the cause, not the URL itself.