A package to send messages to a Microsoft Teams channel.
- Project home
- Overview
- Features
- Project Status
- Supported Releases
- Changelog
- Usage
- Used by
- References
See our GitHub repo for the latest code, to file an issue or submit improvements for review and potential inclusion into the project.
The goteamsnotify
package (aka, go-teams-notify
) allows sending messages
to a Microsoft Teams channel. These messages can be composed of
🚫 deprecated legacy
MessageCard
or Adaptive Card
card
formats.
Simple messages can be created by specifying only a title and a text body.
More complex messages may be composed of multiple sections (🚫
deprecated MessageCard
) or
containers (Adaptive Card
), key/value pairs (aka, Facts
) and externally
hosted images. See the Features list for more information.
NOTE: Adaptive Card
support is currently limited. The goal is to expand
this support in future releases to include additional features supported by
Microsoft Teams.
- Submit simple or complex messages to Microsoft Teams
- simple messages consist of only a title and a text body (one or more strings)
- complex messages may consist of multiple sections (🚫
deprecated
MessageCard
), containers (Adaptive Card
) key/value pairs (aka,Facts
) and externally hosted images
- Support for Actions, allowing users to take quick actions within Microsoft Teams
- Support for user mentions (
Adaptive Card
format) - Configurable validation of webhook URLs
- enabled by default, attempts to match most common known webhook URL patterns
- option to disable validation entirely
- option to use custom validation patterns
- Configurable validation of 🚫
deprecated
MessageCard
type- default assertion that bare-minimum required fields are present
- support for providing a custom validation function to override default validation behavior
- Configurable validation of
Adaptive Card
type- default assertion that bare-minimum required fields are present
- support for providing a custom validation function to override default validation behavior
- Configurable timeouts
- Configurable retry support
In short:
- The upstream project is no longer being actively developed or maintained.
- This fork is now a standalone project, accepting contributions, bug reports
and feature requests.
- see Supported Releases for details
- Others have also taken an interest in maintaining their own forks of the original project. See those forks for other ideas/changes that you may find useful.
For more details, see the Releases section or our Changelog.
Series | Example | Status |
---|---|---|
v1.x.x |
v1.3.1 |
Not Supported (EOL) |
v2.x.x |
v2.6.0 |
Supported (until approximately 2026-01) |
v3.x.x |
v3.0.0-alpha.1 |
Planning (target 2026-01) |
v4.x.x |
v4.0.0-alpha.1 |
TBD |
Task | Start Date / Version | Status |
---|---|---|
support the v2 branch with bugfixes and minor changes | 2020-03-29 (v2.0.0) | Ongoing |
add support & documentation for Power Automate workflow URLs | v2.11.0-alpha.1 | Complete |
Early January 2026:
- Microsoft drops support for O365 connectors in December 2025
- we release a v3 branch
- drop support for the 🚫 deprecated O365 connectors
- drop support for the 🚫
deprecated
MessageCard
) format
- we drop support for the v2 branch
- the focus would be on maintaining the v3 branch with bugfixes and minor changes
Note
While the plan for the upcoming v3 series includes dropping support for the
🚫 deprecated MessageCard
format
and O365 connectors, the focus would not be on refactoring the overall code
structure; many of the rough edges currently present in the API would remain
in the v3 series and await a more focused cleanup effort made in preparation
for a future v4 series.
See the CHANGELOG.md
file for the changes associated with
each release of this application. Changes that have been merged to master
,
but not yet an official release may also be noted in the file under the
Unreleased
section. A helpful link to the Git commit history since the last
official release is also provided for further review.
See the Examples section for more details.
Warning
Microsoft announced July 3rd, 2024 that Office 365 (O365) connectors within Microsoft Teams would be retired in 3 months and replaced by Power Automate workflows (or just "Workflows" for short).
Quoting from the microsoft365dev blog:
We will gradually roll out this change in waves:
- Wave 1 - effective August 15th, 2024: All new Connector creation will be blocked within all clouds
- Wave 2 - effective October 1st, 2024: All connectors within all clouds will stop working
Microsoft later changed some of the details regarding the retirement timeline of O365 connectors:
Update 07/23/2024: We understand and appreciate the feedback that customers have shared with us regarding the timeline provided for the migration from Office 365 connectors. We have extended the retirement timeline through December 2025 to provide ample time to migrate to another solution such as Power Automate, an app within Microsoft Teams, or Microsoft Graph. Please see below for more information about the extension:
- All existing connectors within all clouds will continue to work until December 2025, however using connectors beyond December 31, 2024 will require additional action.
- Connector owners will be required to update the respective URL to post by December 31st, 2024. At least 90 days prior to the December 31, 2024 deadline, we will send further guidance about making this URL update. If the URL is not updated by December 31, 2024 the connector will stop working. This is due to further service hardening updates being implemented for Office 365 connectors in alignment with Microsoft’s Secure Future Initiative
- Starting August 15th, 2024 all new creations should be created using the Workflows app in Microsoft Teams
Since O365 connectors will likely persist in many environments until the very end of the deprecation period this project will continue to support them until then alongside Power Automate workflows.
Valid Power Automate Workflow URLs used to submit messages to Microsoft Teams use this format:
https://*.logic.azure.com:443/workflows/GUID_HERE/triggers/manual/paths/invoke?api-version=YYYY-MM-DD&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=SIGNATURE_HERE
Example URL from the LinkedIn Bring Microsoft Teams incoming webhook security to the next level with Azure Logic App article:
https://webhook-jenkins.azure-api.net/manual/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=f2QjZY50uoRnX6PIpyPT3xk
Tip
Use a dedicated "service" account not tied to a specific team member to help ensure that the Workflow connector is long lived.
The initial O365 retirement blog post provides a list of templates which guide you through the process of creating a Power Automate Workflow webhook URL.
- Navigate to a channel or chat
- Select the ellipsis on the channel or chat
- Select
Workflows
- Type
when a webhook request
- Select the appropriate template
Post to a channel when a webhook request is received
Post to a chat when a webhook request is received
- Verify that
Microsoft Teams
is successfully enabled - Select
Next
- Select an appropriate value from the
Microsoft Teams Team
drop-down list. - Select an appropriate
Microsoft Teams Channel
drop-down list. - Select
Create flow
- Copy the new workflow URL
- Select
Done
- Open
Workflows
application in teams - Select
Create
across the top of the UI - Choose
Notifications
at the left - Select
Post to a channel when a webhook request is received
- Verify that
Microsoft Teams
is successfully enabled - Select
Next
- Select an appropriate value from the
Microsoft Teams Team
drop-down list. - Select an appropriate
Microsoft Teams Channel
drop-down list. - Select
Create flow
- Copy the new workflow URL
- Select
Done
This template walks you through the steps of creating a new Workflow using the https://make.powerautomate.com/ web UI:
- Select or create a new connection (e.g., user@example.com) to Microsoft Teams
- Select
Create
- Select an appropriate value from the
Microsoft Teams Team
drop-down list. - Select an appropriate
Microsoft Teams Channel
drop-down list. - Select
Create
- If prompted, read the info message (e.g., "Your flow is ready to go") and dismiss it.
- Select
Edit
from the menu across the top- alternatively, select
My flows
from the side menu, then selectEdit
from the "More commands" ellipsis
- alternatively, select
- Select
When a Teams webhook request is received
(e.g., left click) - Copy the
HTTP POST URL
value- this is your private custom Workflow connector URL
- by default anyone can
POST
a request to this Workflow connector URL- while this access setting can be changed it will prevent this library from being used to submit webhook requests
Warning
O365 connector webhook URLs are deprecated and scheduled to be retired on 2024-10-01.
Valid (deprecated) O365 webhook URLs for Microsoft Teams use one of several (confirmed) FQDNs patterns:
outlook.office.com
outlook.office365.com
*.webhook.office.com
- e.g.,
example.webhook.office.com
- e.g.,
Using an O365 webhook URL with any of these FQDN patterns appears to give identical results.
Here are complete, equivalent example webhook URLs from Microsoft's documentation using the FQDNs above:
- https://outlook.office.com/webhook/a1269812-6d10-44b1-abc5-b84f93580ba0@9e7b80c7-d1eb-4b52-8582-76f921e416d9/IncomingWebhook/3fdd6767bae44ac58e5995547d66a4e4/f332c8d9-3397-4ac5-957b-b8e3fc465a8c
- https://outlook.office365.com/webhook/a1269812-6d10-44b1-abc5-b84f93580ba0@9e7b80c7-d1eb-4b52-8582-76f921e416d9/IncomingWebhook/3fdd6767bae44ac58e5995547d66a4e4/f332c8d9-3397-4ac5-957b-b8e3fc465a8c
- https://example.webhook.office.com/webhookb2/a1269812-6d10-44b1-abc5-b84f93580ba0@9e7b80c7-d1eb-4b52-8582-76f921e416d9/IncomingWebhook/3fdd6767bae44ac58e5995547d66a4e4/f332c8d9-3397-4ac5-957b-b8e3fc465a8c
- note the
webhookb2
sub-URI specific to this FQDN pattern
- note the
All of these patterns when provided to this library should pass the default validation applied. See the example further down for the option of disabling webhook URL validation entirely.
Warning
O365 connector webhook URLs are deprecated and scheduled to be retired on 2024-10-01.
- Open Microsoft Teams
- Navigate to the channel where you wish to receive incoming messages from this application
- Select
⋯
next to the channel name and then choose Connectors. - Scroll through the list of Connectors to Incoming Webhook, and choose Add.
- Enter a name for the webhook, upload an image to associate with data from the webhook, and choose Create.
- Copy the webhook URL to the clipboard and save it. You'll need the webhook
URL for sending information to Microsoft Teams.
- NOTE: While you can create another easily enough, you should treat this webhook URL as sensitive information as anyone with this unique URL is able to send messages (without authentication) into the associated channel.
- Choose Done.
Credit: docs.microsoft.com, gist comment from shadabacc3934
This is an example of a simple client application which uses this library.
Adaptive Card
- File: basic
- 🚫 deprecated
MessageCard
- File: basic
This is an example of a simple client application which uses this library to route a generated message through a specified proxy server.
Adaptive Card
- File: basic
- 🚫 deprecated
MessageCard
- File: basic
These examples illustrates the use of one or more user mentions. This feature
is not available in the legacy 🚫
deprecated MessageCard
card format.
- File: user-mention-single
- File: user-mention-multiple
- File: user-mention-verbose
- this example does not necessarily reflect an optimal implementation
This example illustrates the use of a CodeBlock
.
This feature is not available in the legacy 🚫
deprecated MessageCard
card format.
- File: codeblock
These examples illustrates the use of a Table
. This
feature is not available in the legacy 🚫
deprecated MessageCard
card format.
- File: table-manually-created
- File: table-unordered-grid
- File: table-with-headers
This example illustrates setting a custom user agent.
Adaptive Card
- File: custom-user-agent
- 🚫 deprecated
MessageCard
- File: custom-user-agent
This example illustrates adding an OpenUri
(🚫
deprecated MessageCard
) or
OpenUrl
Action. When used, this action triggers
opening a URL in a separate browser or application.
Adaptive Card
- File: actions
- 🚫 deprecated
MessageCard
- File: actions
These examples illustrates using
ToggleVisibility
Actions to control the
visibility of various Elements of an Adaptive Card
message.
- File: toggle-visibility-single-button
- File: toggle-visibility-multiple-buttons
- File: toggle-visibility-column-action
- File: toggle-visibility-container-action
This example disables the validation webhook URLs, including the validation of known prefixes so that custom/private webhook URL endpoints can be used (e.g., testing purposes).
Adaptive Card
- File: disable-validation
- 🚫 deprecated
MessageCard
- File: disable-validation
This example demonstrates how to enable custom validation patterns for webhook URLs.
Adaptive Card
- File: custom-validation
- 🚫 deprecated
MessageCard
- File: custom-validation
See the Known importers lists below for a dynamically updated list of projects using either this library or the original project.
- Microsoft Teams
- Adaptive Cards (de-de, en-us)
- O365 connectors
- adaptivecards.io
- Legacy actionable message card reference
- Workflow connectors