{"id":18030843,"url":"https://github.com/atc0005/send2teams","last_synced_at":"2026-03-06T23:01:58.305Z","repository":{"id":38843016,"uuid":"228604251","full_name":"atc0005/send2teams","owner":"atc0005","description":"Small CLI tool used to submit messages to Microsoft Teams.","archived":false,"fork":false,"pushed_at":"2026-01-19T18:37:27.000Z","size":1161,"stargazers_count":29,"open_issues_count":6,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-19T21:58:24.392Z","etag":null,"topics":["cli","go","golang","microsoft-teams","nagios"],"latest_commit_sha":null,"homepage":"","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/atc0005.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-12-17T11:43:36.000Z","updated_at":"2026-01-19T18:36:46.000Z","dependencies_parsed_at":"2023-02-09T22:45:36.558Z","dependency_job_id":"6481d5ee-40d4-4fd1-8343-28bc5e9ff589","html_url":"https://github.com/atc0005/send2teams","commit_stats":null,"previous_names":[],"tags_count":123,"template":false,"template_full_name":null,"purl":"pkg:github/atc0005/send2teams","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atc0005%2Fsend2teams","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atc0005%2Fsend2teams/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atc0005%2Fsend2teams/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atc0005%2Fsend2teams/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/atc0005","download_url":"https://codeload.github.com/atc0005/send2teams/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atc0005%2Fsend2teams/sbom","scorecard":{"id":214290,"data":{"date":"2025-08-11","repo":{"name":"github.com/atc0005/send2teams","commit":"81c93e0e2c7eec971c5c5ca803a38a4d9cdedda0"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.2,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":1,"reason":"2 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/7 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql.yml:38","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:39","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/release-build.yml:18","Warn: no topLevel permission defined: .github/workflows/codeql.yml:1","Warn: no topLevel permission defined: .github/workflows/lint-and-build.yml:1","Warn: no topLevel permission defined: .github/workflows/project-analysis.yml:1","Warn: no topLevel permission defined: .github/workflows/release-build.yml:1","Warn: no topLevel permission defined: .github/workflows/scheduled-monthly.yml:1","Warn: no topLevel permission defined: .github/workflows/scheduled-weekly.yml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/atc0005/send2teams/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:68: update your workflow using https://app.stepsecurity.io/secureworkflow/atc0005/send2teams/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:79: update your workflow using https://app.stepsecurity.io/secureworkflow/atc0005/send2teams/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:93: update your workflow using https://app.stepsecurity.io/secureworkflow/atc0005/send2teams/codeql.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint-and-build.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/atc0005/send2teams/lint-and-build.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint-and-build.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/atc0005/send2teams/lint-and-build.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/project-analysis.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/atc0005/send2teams/project-analysis.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/project-analysis.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/atc0005/send2teams/project-analysis.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/project-analysis.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/atc0005/send2teams/project-analysis.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/project-analysis.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/atc0005/send2teams/project-analysis.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release-build.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/atc0005/send2teams/release-build.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/scheduled-monthly.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/atc0005/send2teams/scheduled-monthly.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/scheduled-weekly.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/atc0005/send2teams/scheduled-weekly.yml/master?enable=pin","Warn: containerImage not pinned by hash: dependabot/docker/builds/Dockerfile:16: pin your Docker image by updating ghcr.io/atc0005/go-ci:go-ci-oldstable-build-v0.22.10 to ghcr.io/atc0005/go-ci:go-ci-oldstable-build-v0.22.10@sha256:cd88761c1bad73286c3adc8f492bbc6b31017cd54503b649e26780f64e5ca886","Warn: containerImage not pinned by hash: dependabot/docker/go/Dockerfile:18: pin your Docker image by updating golang:1.23.9 to golang:1.23.9@sha256:1cc01afde44821895ea712b5b4b802ef3c3ddeb7a7bb3f2e69c19bbc5877dace","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   9 third-party GitHubAction dependencies pinned","Info:   0 out of   2 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.13.11 not signed: https://api.github.com/repos/atc0005/send2teams/releases/219082241","Warn: release artifact v0.13.11-alpha.1 not signed: https://api.github.com/repos/atc0005/send2teams/releases/217582267","Warn: release artifact v0.13.10 not signed: https://api.github.com/repos/atc0005/send2teams/releases/211275764","Warn: release artifact v0.13.10-alpha.2 not signed: https://api.github.com/repos/atc0005/send2teams/releases/211274608","Warn: release artifact v0.13.10-alpha.1 not signed: https://api.github.com/repos/atc0005/send2teams/releases/210068677","Warn: release artifact v0.13.11 does not have provenance: https://api.github.com/repos/atc0005/send2teams/releases/219082241","Warn: release artifact v0.13.11-alpha.1 does not have provenance: https://api.github.com/repos/atc0005/send2teams/releases/217582267","Warn: release artifact v0.13.10 does not have provenance: https://api.github.com/repos/atc0005/send2teams/releases/211275764","Warn: release artifact v0.13.10-alpha.2 does not have provenance: https://api.github.com/repos/atc0005/send2teams/releases/211274608","Warn: release artifact v0.13.10-alpha.1 does not have provenance: https://api.github.com/repos/atc0005/send2teams/releases/210068677"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: SAST configuration detected: CodeQL","Info: all commits (30) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-17T01:22:38.793Z","repository_id":38843016,"created_at":"2025-08-17T01:22:38.793Z","updated_at":"2025-08-17T01:22:38.793Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30202507,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-06T19:07:06.838Z","status":"ssl_error","status_checked_at":"2026-03-06T18:57:34.882Z","response_time":250,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","go","golang","microsoft-teams","nagios"],"created_at":"2024-10-30T09:15:19.844Z","updated_at":"2026-03-06T23:01:58.260Z","avatar_url":"https://github.com/atc0005.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- omit in toc --\u003e\n# send2teams\n\nSmall CLI tool used to submit messages to Microsoft Teams.\n\n[![Latest Release](https://img.shields.io/github/release/atc0005/send2teams.svg?style=flat-square)](https://github.com/atc0005/send2teams/releases/latest)\n[![Go Reference](https://pkg.go.dev/badge/github.com/atc0005/send2teams.svg)](https://pkg.go.dev/github.com/atc0005/send2teams)\n[![go.mod Go version](https://img.shields.io/github/go-mod/go-version/atc0005/send2teams)](https://github.com/atc0005/send2teams)\n[![Lint and Build](https://github.com/atc0005/send2teams/actions/workflows/lint-and-build.yml/badge.svg)](https://github.com/atc0005/send2teams/actions/workflows/lint-and-build.yml)\n[![Project Analysis](https://github.com/atc0005/send2teams/actions/workflows/project-analysis.yml/badge.svg)](https://github.com/atc0005/send2teams/actions/workflows/project-analysis.yml)\n\n\u003c!-- omit in toc --\u003e\n## Table of contents\n\n- [Project home](#project-home)\n- [Overview](#overview)\n- [Features](#features)\n- [Changelog](#changelog)\n- [Requirements](#requirements)\n  - [Building source code](#building-source-code)\n  - [Running](#running)\n- [How to install it](#how-to-install-it)\n  - [From source](#from-source)\n  - [Using release binaries](#using-release-binaries)\n- [Configuration Options](#configuration-options)\n  - [Setup a connection to Microsoft Teams](#setup-a-connection-to-microsoft-teams)\n    - [Overview](#overview-1)\n    - [Workflow connectors](#workflow-connectors)\n      - [Workflow webhook URL format](#workflow-webhook-url-format)\n      - [How to create a Workflow connector webhook URL](#how-to-create-a-workflow-connector-webhook-url)\n        - [Using Teams client Workflows context option](#using-teams-client-workflows-context-option)\n        - [Using Teams client app](#using-teams-client-app)\n        - [Using Power Automate web UI](#using-power-automate-web-ui)\n    - [O365 connectors](#o365-connectors)\n      - [O365 webhook URL format](#o365-webhook-url-format)\n      - [How to create an O365 connector webhook URL](#how-to-create-an-o365-connector-webhook-url)\n  - [Command-line](#command-line)\n- [Limitations](#limitations)\n  - [message size](#message-size)\n- [Examples](#examples)\n  - [One-off](#one-off)\n  - [Using an invalid flag](#using-an-invalid-flag)\n  - [Specifying url, description pairs](#specifying-url-description-pairs)\n  - [User mentions](#user-mentions)\n    - [One mention](#one-mention)\n    - [Multiple mentions](#multiple-mentions)\n- [License](#license)\n- [References](#references)\n\n## Project home\n\nSee [our GitHub repo][repo-url] for the latest code, to file an issue or\nsubmit improvements for review and potential inclusion into the project.\n\n## Overview\n\nFirst of all, many thanks to the developer/contributors of the original\n`dasrick/go-teams-notify` package. While this project now uses a fork of that\noriginal project, this project would likely not have been possible without the\nefforts of the original developer.\n\nThis project provides:\n\n- `send2teams`\n  - Small CLI tool used to submit messages to Microsoft Teams. `send2teams` is\n    intended for use by Nagios, scripts or other actions that may need to\n    submit pass/fail results to a MS Teams channel.\n\nPrior to `v0.4.7` this project also provided a `teams` subpackage. All of that\nfunctionality has since been migrated to the `atc0005/go-teams-notify`\nproject. All client code for that package has been updated to use\n`atc0005/go-teams-notify` in place of the previous `teams` subpackage of this\nproject.\n\n## Features\n\n- single binary, no outside dependencies\n- minimal configuration\n- very few build dependencies\n- optional conversion of messages with Windows, Mac or Linux newlines to\n  increase compatibility with Teams formatting\n- message delivery retry support with retry and retry delay values\n  configurable via flag\n- support for user mentions\n- optional support for noting a sending application as the source of the\n  message\n- optional support for specifying target `url`, `description` comma-separated\n  pairs for use as labelled \"buttons\" within a Microsoft Teams message\n- optional support for omitting the \"branding\" trailer from generated messages\n\n## Changelog\n\nSee the [`CHANGELOG.md`](CHANGELOG.md) file for the changes associated with\neach release of this application. Changes that have been merged to `master`,\nbut not yet an official release may also be noted in the file under the\n`Unreleased` section. A helpful link to the Git commit history since the last\nofficial release is also provided for further review.\n\n## Requirements\n\nThe following is a loose guideline. Other combinations of Go and operating\nsystems for building and running tools from this repo may work, but have not\nbeen tested.\n\n### Building source code\n\n- Go\n  - see this project's `go.mod` file for *preferred* version\n  - this project tests against [officially supported Go\n    releases][go-supported-releases]\n    - the most recent stable release (aka, \"stable\")\n    - the prior, but still supported release (aka, \"oldstable\")\n- GCC\n  - if building with custom options (as the provided `Makefile` does)\n- `make`\n  - if using the provided `Makefile`\n\n### Running\n\n- Windows 10\n- Ubuntu Linux 18.04+\n\n## How to install it\n\n### From source\n\n1. [Download][go-docs-download] Go\n1. [Install][go-docs-install] Go\n   - NOTE: Pay special attention to the remarks about `$HOME/.profile`\n1. Clone the repo\n   1. `cd /tmp`\n   1. `git clone https://github.com/atc0005/send2teams`\n   1. `cd send2teams`\n1. Install dependencies (optional)\n   - for Ubuntu Linux\n     - `sudo apt-get install make gcc`\n   - for CentOS Linux\n     1. `sudo yum install make gcc`\n1. Build\n   - for current operating system\n     - `go build -mod=vendor ./cmd/send2teams/`\n       - *forces build to use bundled dependencies in top-level `vendor`\n         folder*\n   - for all supported platforms (where `make` is installed)\n      - `make all`\n   - for Windows\n      - `make windows`\n   - for Linux\n     - `make linux`\n1. Copy the applicable binary to whatever systems needs to run it\n   - if using `Makefile`: look in `/tmp/release_assets/send2teams/`\n   - if using `go build`: look in `/tmp/send2teams/`\n\n**NOTE**: Depending on which `Makefile` recipe you use the generated binary\nmay be compressed and have an `xz` extension. If so, you should decompress the\nbinary first before deploying it (e.g., `xz -d send2teams-linux-amd64.xz`).\n\n### Using release binaries\n\n1. Download the [latest\n   release](https://github.com/atc0005/send2teams/releases/latest) binaries\n1. Decompress binaries\n   - e.g., `xz -d send2teams-linux-amd64.xz`\n1. Deploy\n   - Place `send2teams` in a location of your choice\n     - e.g., `/usr/local/bin/send2teams`\n\n**NOTE**:\n\nDEB and RPM packages are provided as an alternative to manually deploying\nbinaries.\n\n## Configuration Options\n\n### Setup a connection to Microsoft Teams\n\n#### Overview\n\n\u003e [!WARNING]\n\u003e\n\u003e Microsoft announced July 3rd, 2024 that Office 365 (O365) connectors within\nMicrosoft Teams would be [retired in 3\nmonths][o365-connector-retirement-announcement] and replaced by Power Automate\nworkflows (or just \"Workflows\" for short).\n\nQuoting from the microsoft365dev blog:\n\n\u003e We will gradually roll out this change in waves:\n\u003e\n\u003e - Wave 1 - effective August 15th, 2024: All new Connector creation will be\n\u003e   blocked within all clouds\n\u003e - Wave 2 - effective October 1st, 2024: All connectors within all clouds\n\u003e   will stop working\n\n[Microsoft later changed some of the\ndetails][o365-connector-retirement-announcement] regarding the retirement\ntimeline of O365 connectors:\n\n\u003e Update 07/23/2024: We understand and appreciate the feedback that customers\n\u003e have shared with us regarding the timeline provided for the migration from\n\u003e Office 365 connectors. We have extended the retirement timeline through\n\u003e December 2025 to provide ample time to migrate to another solution such as\n\u003e Power Automate, an app within Microsoft Teams, or Microsoft Graph. Please\n\u003e see below for more information about the extension:\n\u003e\n\u003e - All existing connectors within all clouds will continue to work until\n\u003e   December 2025, however using connectors beyond December 31, 2024 will\n\u003e   require additional action.\n\u003e   - Connector owners will be required to update the respective URL to post\n\u003e     by December 31st, 2024. At least 90 days prior to the December 31, 2024\n\u003e     deadline, we will send further guidance about making this URL update. If\n\u003e     the URL is not updated by December 31, 2024 the connector will stop\n\u003e     working. This is due to further service hardening updates being\n\u003e     implemented for Office 365 connectors in alignment with Microsoft's\n\u003e     [Secure Future\n\u003e     Initiative](https://blogs.microsoft.com/blog/2024/05/03/prioritizing-security-above-all-else/)\n\u003e - Starting August 15th, 2024 all new creations should be created using the\n\u003e   Workflows app in Microsoft Teams\n\nSince O365 connectors will likely persist in many environments until the very\nend of the deprecation period this project will continue to support them until\nthen alongside Power Automate workflows.\n\n#### Workflow connectors\n\n##### Workflow webhook URL format\n\nValid Power Automate Workflow URLs used to submit messages to Microsoft Teams\nuse this format:\n\n- `https://*.logic.azure.com:443/workflows/GUID_HERE/triggers/manual/paths/invoke?api-version=YYYY-MM-DD\u0026sp=%2Ftriggers%2Fmanual%2Frun\u0026sv=1.0\u0026sig=SIGNATURE_HERE`\n\nExample URL from the LinkedIn [Bring Microsoft Teams incoming webhook security to\nthe next level with Azure Logic App][linkedin-teams-webhook-security-article]\narticle:\n\n- `https://webhook-jenkins.azure-api.net/manual/paths/invoke?api-version=2016-10-01\u0026sp=%2Ftriggers%2Fmanual%2Frun\u0026sv=1.0\u0026sig=f2QjZY50uoRnX6PIpyPT3xk`\n\n##### How to create a Workflow connector webhook URL\n\n\u003e [!TIP]\n\u003e\n\u003e Use a dedicated \"service\" account not tied to a specific team member to help\nensure that the Workflow connector is long lived.\n\nThe [initial O365 retirement blog\npost][o365-connector-retirement-announcement] provides a list of templates\nwhich guide you through the process of creating a Power Automate Workflow\nwebhook URL.\n\n###### Using Teams client Workflows context option\n\n1. Navigate to a channel or chat\n1. Select the ellipsis on the channel or chat\n1. Select `Workflows`\n1. Type `when a webhook request`\n1. Select the appropriate template\n   - `Post to a channel when a webhook request is received`\n   - `Post to a chat when a webhook request is received`\n1. Verify that `Microsoft Teams` is successfully enabled\n1. Select `Next`\n1. Select an appropriate value from the `Microsoft Teams Team` drop-down list.\n1. Select an appropriate `Microsoft Teams Channel` drop-down list.\n1. Select `Create flow`\n1. Copy the new workflow URL\n1. Select `Done`\n\n###### Using Teams client app\n\n1. Open `Workflows` application in teams\n1. Select `Create` across the top of the UI\n1. Choose `Notifications` at the left\n1. Select `Post to a channel when a webhook request is received`\n1. Verify that `Microsoft Teams` is successfully enabled\n1. Select `Next`\n1. Select an appropriate value from the `Microsoft Teams Team` drop-down list.\n1. Select an appropriate `Microsoft Teams Channel` drop-down list.\n1. Select `Create flow`\n1. Copy the new workflow URL\n1. Select `Done`\n\n###### Using Power Automate web UI\n\n[This][workflow-channel-post-from-webhook-request] template walks you through\nthe steps of creating a new Workflow using the\n\u003chttps://make.powerautomate.com/\u003e web UI:\n\n1. Select or create a new connection (e.g., \u003cuser@example.com\u003e) to Microsoft\n   Teams\n1. Select `Create`\n1. Select an appropriate value from the `Microsoft Teams Team` drop-down list.\n1. Select an appropriate `Microsoft Teams Channel` drop-down list.\n1. Select `Create`\n1. If prompted, read the info message (e.g., \"Your flow is ready to go\") and\n   dismiss it.\n1. Select `Edit` from the menu across the top\n   - alternatively, select `My flows` from the side menu, then select `Edit`\n     from the \"More commands\" ellipsis\n1. Select `When a Teams webhook request is received` (e.g., left click)\n1. Copy the `HTTP POST URL` value\n   - this is your *private* custom Workflow connector URL\n   - by default anyone can `POST` a request to this Workflow connector URL\n     - while this access setting can be changed it will prevent this library\n       from being used to submit webhook requests\n\n#### O365 connectors\n\n##### O365 webhook URL format\n\n\u003e [!WARNING]\n\u003e\n\u003e O365 connector webhook URLs are deprecated and [scheduled to be\nretired][o365-connector-retirement-announcement] on 2024-10-01.\n\nValid (***deprecated***) O365 webhook URLs for Microsoft Teams use one of several\n(confirmed) FQDNs patterns:\n\n- `outlook.office.com`\n- `outlook.office365.com`\n- `*.webhook.office.com`\n  - e.g., `example.webhook.office.com`\n\nUsing an O365 webhook URL with any of these FQDN patterns appears to give\nidentical results.\n\nHere are complete, equivalent example webhook URLs from Microsoft's\ndocumentation using the FQDNs above:\n\n- \u003chttps://outlook.office.com/webhook/a1269812-6d10-44b1-abc5-b84f93580ba0@9e7b80c7-d1eb-4b52-8582-76f921e416d9/IncomingWebhook/3fdd6767bae44ac58e5995547d66a4e4/f332c8d9-3397-4ac5-957b-b8e3fc465a8c\u003e\n- \u003chttps://outlook.office365.com/webhook/a1269812-6d10-44b1-abc5-b84f93580ba0@9e7b80c7-d1eb-4b52-8582-76f921e416d9/IncomingWebhook/3fdd6767bae44ac58e5995547d66a4e4/f332c8d9-3397-4ac5-957b-b8e3fc465a8c\u003e\n- \u003chttps://example.webhook.office.com/webhookb2/a1269812-6d10-44b1-abc5-b84f93580ba0@9e7b80c7-d1eb-4b52-8582-76f921e416d9/IncomingWebhook/3fdd6767bae44ac58e5995547d66a4e4/f332c8d9-3397-4ac5-957b-b8e3fc465a8c\u003e\n  - note the `webhookb2` sub-URI specific to this FQDN pattern\n\nAll of these patterns when provided to this library should pass the default\nvalidation applied. See the example further down for the option of disabling\nwebhook URL validation entirely.\n\n##### How to create an O365 connector webhook URL\n\n\u003e [!WARNING]\n\u003e\n\u003e O365 connector webhook URLs are deprecated and [scheduled to be\nretired][o365-connector-retirement-announcement] on 2024-10-01.\n\n1. Open Microsoft Teams\n1. Navigate to the channel where you wish to receive incoming messages from\n   this application\n1. Select `⋯` next to the channel name and then choose Connectors.\n1. Scroll through the list of Connectors to Incoming Webhook, and choose Add.\n1. Enter a name for the webhook, upload an image to associate with data from\n   the webhook, and choose Create.\n1. Copy the webhook URL to the clipboard and save it. You'll need the webhook\n   URL for sending information to Microsoft Teams.\n   - NOTE: While you can create another easily enough, you should treat this\n     webhook URL as sensitive information as anyone with this unique URL is\n     able to send messages (without authentication) into the associated\n     channel.\n1. Choose Done.\n\nCredit:\n[docs.microsoft.com](https://docs.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/connectors-using#setting-up-a-custom-incoming-webhook),\n[gist comment from\nshadabacc3934](https://gist.github.com/chusiang/895f6406fbf9285c58ad0a3ace13d025#gistcomment-3562501)\n\n### Command-line\n\nCurrently `send2teams` only supports command-line configuration flags.\nRequests for other configuration sources will be considered.\n\n| Flag                       | Required | Default       | Possible                                                      | Description                                                                                                                                       |\n| -------------------------- | -------- | ------------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `h`, `help`                | No       | N/A           | N/A                                                           | Display Help; show available flags.                                                                                                               |\n| `v`, `version`             | No       | `false`       | `true`, `false`                                               | Whether to display application version and then immediately exit application.                                                                     |\n| `channel`                  | No       | `unspecified` | *valid Microsoft Teams channel name*                          | The target channel where we will send a message. If not specified, defaults to `unspecified`.                                                     |\n| `color`                    | No       | `NotUsed`     | N/A                                                           | NOOP; this setting is no longer used. Values specified for this flag are ignored.                                                                 |\n| `message`                  | Yes      |               | *valid message string*                                        | The (optionally) Markdown-formatted message to submit.                                                                                            |\n| `team`                     | No       | `unspecified` | *valid Microsoft Teams team name*                             | The name of the Team containing our target channel. If not specified, defaults to `unspecified`.                                                  |\n| `title`                    | No       |               | *valid title string*                                          | The (optional) title for the message to submit.                                                                                                   |\n| `sender`                   | No       |               | *valid application or script name*                            | The (optional) sending application name or generator of the message this app will attempt to deliver.                                             |\n| `url`                      | Yes      |               | [*valid Webhook URL*](#setup-a-connection-to-microsoft-teams) | The Webhook URL provided by a pre-configured Connector.                                                                                           |\n| `target-url`               | No       |               | *valid comma-separated `url`, `description` pair*             | The target URL and label (specified as comma separated pair) usually visible as a button towards the bottom of the Microsoft Teams message.       |\n| `verbose`                  | No       | `false`       | `true`, `false`                                               | Whether detailed output should be shown after message submission success or failure                                                               |\n| `silent`                   | No       | `false`       | `true`, `false`                                               | Whether ANY output should be shown after message submission success or failure                                                                    |\n| `convert-eol`              | No       | `false`       | `true`, `false`                                               | Whether messages with Windows, Mac and Linux newlines are updated to use break statements before message submission                               |\n| `disable-url-validation`   | No       | `false`       | `true`, `false`                                               | Whether webhook URL validation should be disabled. Useful when submitting generated JSON payloads to a service like \u003chttps://httpbin.org/\u003e.       |\n| `disable-branding-trailer` | No       | `false`       | `true`, `false`                                               | Whether the branding trailer should be omitted from all messages generated by this application.                                                   |\n| `ignore-invalid-response`  | No       | `false`       | `true`, `false`                                               | Whether an invalid response from remote endpoint should be ignored. This is expected if submitting a message to a non-standard webhook URL.       |\n| `retries`                  | No       | `2`           | *positive whole number*                                       | The number of attempts that this application will make to deliver messages before giving up.                                                      |\n| `retries-delay`            | No       | `2`           | *positive whole number*                                       | The number of seconds that this application will wait before making another delivery attempt.                                                     |\n| `user-mention`             | No       |               | *one or more valid comma-separated `name`, `id` pairs*        | The DisplayName and ID of the recipient (specified as comma separated pair) for a user mention. May be repeated to create multiple user mentions. |\n\n## Limitations\n\n### message size\n\nPer official documentation (see [references](#references)), each message sent\nto Microsoft Teams can be approximately 28 KB. This includes the message\nitself (text, image links, etc.), @-mentions, and reactions.\n\n## Examples\n\n### One-off\n\nThis example illustrates the basics of using the application to submit a\nsingle message. This can serve as a starting point for use with Nagios,\nscripts or any other tool that calls out to others in order to perform its\ntasks.\n\nThe same example, shown split over multiple lines for readability (e.g., shell\nscript):\n\n```console\nsend2teams \\\n  --silent \\\n  --channel \"Alerts\" \\\n  --team \"Support\" \\\n  --message \"System XYZ is down!\" \\\n  --title \"System outage alert\" \\\n  --sender \"Nagios\" \\\n  --url \"https://outlook.office.com/webhook/www@xxx/IncomingWebhook/yyy/zzz\"\n```\n\nand on a single line (e.g., one-off via terminal or batch file):\n\n```console\nsend2teams.exe --silent --channel \"Alerts\" --team \"Support\" --message \"System XYZ is down!\" --title \"System outage alert\" --sender \"Nagios\" --url \"https://outlook.office.com/webhook/www@xxx/IncomingWebhook/yyy/zzz\"\n```\n\nNote:\n\n- remove the `-silent` flag in order to see pass or failure output\n- use the `-verbose` flag to see the JSON payload submitted to Microsoft Teams\n- check the exit code (`$?`) to determine overall success/failure result\n\n### Using an invalid flag\n\nAccidentally typing the wrong flag results in a message like this one:\n\n```ShellSession\nflag provided but not defined: -fake-flag\n```\n\n### Specifying url, description pairs\n\n```console\nsend2teams \\\n  --silent \\\n  --channel \"Alerts\" \\\n  --team \"Support\" \\\n  --message \"Useful starting points\" \\\n  --title \"Learn more about Go\" \\\n  --sender \"Nagios\" \\\n  --url \"https://outlook.office.com/webhook/www@xxx/IncomingWebhook/yyy/zzz\" \\\n  --target-url \"https://go.dev/, Go Homepage\" \\\n  --target-url \"https://github.com/dariubs/GoBooks, Awesome Go Books\"\n```\n\nand on a single line (e.g., one-off via terminal or batch file):\n\n```console\nsend2teams.exe --silent --channel \"Alerts\" --team \"Support\" --message \"Useful starting points\" --title \"Learn more about Go\" --sender \"Nagios\" --url \"https://outlook.office.com/webhook/www@xxx/IncomingWebhook/yyy/zzz\" --target-url \"https://go.dev/, Go Homepage\" --target-url \"https://github.com/dariubs/GoBooks, Awesome Go Books\"\n```\n\n### User mentions\n\n#### One mention\n\nThis example illustrates mentioning a user along with providing a brief\nmessage.\n\nThe example, shown split over multiple lines for readability (e.g., shell\nscript):\n\n```console\nsend2teams \\\n  --silent \\\n  --channel \"Alerts\" \\\n  --team \"Support\" \\\n  --message \"System XYZ is down!\" \\\n  --user-mention \"John Doe,john.doe@example.com\" \\\n  --sender \"Nagios\" \\\n  --url \"https://outlook.office.com/webhook/www@xxx/IncomingWebhook/yyy/zzz\"\n```\n\nand on a single line (e.g., one-off via terminal or batch file):\n\n```console\nsend2teams --silent --channel \"Alerts\" --team \"Support\" --message \"System XYZ is down!\" --user-mention \"John Doe,john.doe@example.com\" --sender \"Nagios\" --url \"https://outlook.office.com/webhook/www@xxx/IncomingWebhook/yyy/zzz\"\n```\n\nNote:\n\n- remove the `-silent` flag in order to see pass or failure output\n- use the `-verbose` flag to see the JSON payload submitted to Microsoft Teams\n- check the exit code (`$?`) to determine overall success/failure result\n\n#### Multiple mentions\n\nThis example illustrates mentioning multiple users along with providing a\nbrief message. The `--user-mention` flag is repeated for each user mention.\n\nThough valid syntax, repeating the same user mention does not increase the\nnumber of times the same user is notified of a user mention.\n\nThe example, shown split over multiple lines for readability (e.g., shell\nscript):\n\n```console\nsend2teams \\\n  --silent \\\n  --channel \"Alerts\" \\\n  --team \"Support\" \\\n  --message \"System XYZ is down!\" \\\n  --user-mention \"John Doe,john.doe@example.com\" \\\n  --user-mention \"Jane Doe,jane.doe@example.com\" \\\n  --sender \"Nagios\" \\\n  --url \"https://outlook.office.com/webhook/www@xxx/IncomingWebhook/yyy/zzz\"\n```\n\nand on a single line (e.g., one-off via terminal or batch file):\n\n```console\nsend2teams --silent --channel \"Alerts\" --team \"Support\" --message \"System XYZ is down!\" --user-mention \"John Doe,john.doe@example.com\" --user-mention \"Jane Doe,jane.doe@example.com\" --sender \"Nagios\" --url \"https://outlook.office.com/webhook/www@xxx/IncomingWebhook/yyy/zzz\"\n```\n\nNote:\n\n- remove the `-silent` flag in order to see pass or failure output\n- use the `-verbose` flag to see the JSON payload submitted to Microsoft Teams\n- check the exit code (`$?`) to determine overall success/failure result\n\n## License\n\nFrom the [LICENSE](LICENSE) file:\n\n```license\nMIT License\n\nCopyright 2021 Adam Chalkley\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n```\n\n## References\n\n- Related projects\n  - \u003chttps://github.com/atc0005/go-teams-notify/\u003e\n\n\u003c!--\n  TODO: Refresh/replace these ref links after 2024-10-01 when O365 connectors are scheduled to be retired.\n--\u003e\n- Webhook / Office 365\n  - \u003chttps://sankalpit.com/how-to-get-channel-webhook-url/\u003e\n  - \u003chttps://docs.microsoft.com/en-us/outlook/actionable-messages/message-card-reference\u003e\n  - \u003chttps://docs.microsoft.com/en-us/microsoftteams/platform/concepts/outgoingwebhook\u003e\n  - \u003chttps://docs.microsoft.com/en-us/outlook/actionable-messages/send-via-connectors\u003e\n  - \u003chttps://docs.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/connectors-using\u003e\n    - \u003chttps://gist.github.com/chusiang/895f6406fbf9285c58ad0a3ace13d025#gistcomment-3562510\u003e\n  - \u003chttps://messagecardplayground.azurewebsites.net/\u003e\n  - \u003chttps://docs.microsoft.com/en-us/microsoftteams/limits-specifications-teams\u003e\n\n- General Go topics of interest\n  - \u003chttps://stackoverflow.com/questions/38807903/how-do-i-handle-plain-text-http-get-response-in-golang\u003e\n  - \u003chttps://stackoverflow.com/questions/32042989/go-lang-differentiate-n-and-line-break\u003e\n    - \u003chttps://stackoverflow.com/a/42793954/903870\u003e\n\n\u003c!-- Footnotes here  --\u003e\n\n[repo-url]: \u003chttps://github.com/atc0005/send2teams\u003e  \"This project's GitHub repo\"\n\n[go-docs-download]: \u003chttps://golang.org/dl\u003e  \"Download Go\"\n\n[go-docs-install]: \u003chttps://golang.org/doc/install\u003e  \"Install Go\"\n\n[go-supported-releases]: \u003chttps://go.dev/doc/devel/release#policy\u003e \"Go Release Policy\"\n\n[o365-connector-retirement-announcement]: \u003chttps://devblogs.microsoft.com/microsoft365dev/retirement-of-office-365-connectors-within-microsoft-teams/\u003e \"Retirement of Office 365 connectors within Microsoft Teams\"\n[workflow-channel-post-from-webhook-request]: \u003chttps://make.preview.powerautomate.com/galleries/public/templates/d271a6f01c2545a28348d8f2cddf4c8f/post-to-a-channel-when-a-webhook-request-is-received\u003e \"Post to a channel when a webhook request is received\"\n[linkedin-teams-webhook-security-article]: \u003chttps://www.linkedin.com/pulse/bring-microsoft-teams-incoming-webhook-security-next-level-kinzelin\u003e \"Bring Microsoft Teams incoming webhook security to the next level with Azure Logic App\"\n\n\u003c!-- []: PLACEHOLDER \"DESCRIPTION_HERE\" --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatc0005%2Fsend2teams","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fatc0005%2Fsend2teams","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatc0005%2Fsend2teams/lists"}