1
0
Fork 0

Adding upstream version 0.8.9.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-05-22 10:16:14 +02:00
parent 3b2c48b5e4
commit c0c4addb85
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
285 changed files with 25880 additions and 0 deletions

7
docs/services/bark.md Normal file
View file

@ -0,0 +1,7 @@
# Bark
Upstream docs: https://github.com/Finb/Bark
## URL Format
--8<-- "docs/services/bark/config.md"

52
docs/services/discord.md Normal file
View file

@ -0,0 +1,52 @@
# Discord
## URL Format
Your Discord Webhook-URL will look like this:
!!! info ""
https://discord.com/api/webhooks/__`webhookid`__/__`token`__
The shoutrrr service URL should look like this:
!!! info ""
discord://__`token`__@__`webhookid`__[?thread_id=__`threadid`__]
### Thread Support
To send messages to a specific thread in a Discord channel, include the `thread_id` query parameter in the service URL with the ID of the target thread. For example:
!!! info ""
discord://__`token`__@__`webhookid`__?thread_id=123456789
You can obtain the `thread_id` by right-clicking a thread in Discord and selecting "Copy ID" (requires Developer Mode to be enabled in Discord settings).
--8<-- "docs/services/discord/config.md"
## Creating a webhook in Discord
1. Open your channel settings by first clicking on the gear icon next to the name of the channel.
![Screenshot 1](discord/sc-1.png)
2. In the menu on the left, click on *Integrations*.
![Screenshot 2](discord/sc-2.png)
3. In the menu on the right, click on *Create Webhook*.
![Screenshot 3](discord/sc-3.png)
4. Set the name, channel, and icon to your liking and click the *Copy Webhook URL* button.
![Screenshot 4](discord/sc-4.png)
5. Press the *Save Changes* button.
![Screenshot 5](discord/sc-5.png)
6. Format the service URL:
```
https://discord.com/api/webhooks/693853386302554172/W3dE2OZz4C13_4z_uHfDOoC7BqTW288s-z1ykqI0iJnY_HjRqMGO8Sc7YDqvf_KVKjhJ
└────────────────┘ └──────────────────────────────────────────────────────────────────┘
webhook id token
discord://W3dE2OZz4C13_4z_uHfDOoC7BqTW288s-z1ykqI0iJnY_HjRqMGO8Sc7YDqvf_KVKjhJ@693853386302554172?thread_id=123456789
└──────────────────────────────────────────────────────────────────┘ └────────────────┘ └─────────────────┘
token webhook id thread id
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

8
docs/services/email.md Normal file
View file

@ -0,0 +1,8 @@
# Email
## URL Format
!!! info ""
smtp://__`username`__:__`password`__@__`host`__:__`port`__/?from=__`fromAddress`__&to=__`recipient1`__[,__`recipient2`__,...]
--8<-- "docs/services/smtp/config.md"

76
docs/services/generic.md Normal file
View file

@ -0,0 +1,76 @@
# Generic
The Generic service can be used for any target that is not explicitly supported by Shoutrrr, as long as it
supports receiving the message via a POST request.
Usually, this requires customization on the receiving end to interpret the payload that it receives, and might
not be a viable approach.
Common examples for use with service providers can be found under [examples](../examples/generic.md).
## Custom headers
You can add additional HTTP headers to your request by adding query variables prefixed with `@` (`@key=value`).
Using
```url
generic://example.com?@acceptLanguage=tlh-Piqd
```
would result in the additional header being added:
```http
Accept-Language: tlh-Piqd
```
## JSON template
By using the built in `JSON` template (`template=json`) you can create a generic JSON payload. The keys used for `title` and `message` can be overriden
by supplying the params/query values `titleKey` and `messageKey`.
!!! example
```json
{
"title": "Oh no!",
"message": "The thing happened and now there is stuff all over the area!"
}
```
### Custom data fields
When using the JSON template, you can add additional key/value pairs to the JSON object by adding query variables prefixed with `$` (`$key=value`).
!!! example
Using `generic://example.com?$projection=retroazimuthal` would yield:
```json
{
"title": "Amazing opportunities!",
"message": "New map book available for purchase.",
"projection": "retroazimuthal"
}
```
## Shortcut URL
You can just add `generic+` as a prefix to your target URL to use it with the generic service, so
```url
https://example.com/api/v1/postStuff
```
would become
```url
generic+https://example.com/api/v1/postStuff
```
!!! note
Any query variables added to the URL will be escaped so that they can be forwarded to the remote server. That means that you cannot use `?template=json` with the `generic+https://`, just use `generic://` instead!
## Forwarded query variables
All query variables that are not listed in the [Query/Param Props](#queryparam_props) section will be
forwarded to the target endpoint.
If you need to pass a query variable that _is_ reserved, you can prefix it with an underscore (`_`).
!!! example
The URL `generic+https://example.com/api/v1/postStuff?contenttype=text/plain` would send a POST message
to `https://example.com/api/v1/postStuff` using the `Content-Type: text/plain` header.
If instead escaped, `generic+https://example.com/api/v1/postStuff?_contenttype=text/plain` would send a POST message
to `https://example.com/api/v1/postStuff?contenttype=text/plain` using the `Content-Type: application/json` header (as it's the default).
## URL Format
--8<-- "docs/services/generic/config.md"

View file

@ -0,0 +1,37 @@
# Google Chat
## URL Format
Your Google Chat Incoming Webhook URL will look like this:
!!! info ""
https://chat.googleapis.com/v1/spaces/__`FOO`__/messages?key=__`bar`__&token=__`baz`__
The shoutrrr service URL should look like this:
!!! info ""
googlechat://chat.googleapis.com/v1/spaces/__`FOO`__/messages?key=__`bar`__&token=__`baz`__
In other words the incoming webhook URL with `https` replaced by `googlechat`.
Google Chat was previously known as Hangouts Chat. Using `hangouts` in
the service URL instead `googlechat` is still supported, although
deprecated.
## Creating an incoming webhook in Google Chat
1. Open the room you would like to add Shoutrrr to and open the chat
room menu.
![Screenshot 1](googlechat/hangouts-1.png)
2. Then click on *Configure webhooks*.
![Screenshot 2](googlechat/hangouts-2.png)
3. Name the webhook and save.
![Screenshot 3](googlechat/hangouts-3.png)
4. Copy the URL.
![Screenshot 4](googlechat/hangouts-4.png)
5. Format the service URL by replacing `https` with `googlechat`.

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

18
docs/services/gotify.md Normal file
View file

@ -0,0 +1,18 @@
# Gotify
## URL Format
--8<-- "docs/services/gotify/config.md"
## Examples
!!! example "Common usage"
```uri
gotify://gotify.example.com:443/AzyoeNS.D4iJLVa/?title=Great+News&priority=1
```
!!! example "With subpath"
```uri
gotify://example.com:443/path/to/gotify/AzyoeNS.D4iJLVa/?title=Great+News&priority=1
```

View file

@ -0,0 +1,7 @@
# Hangouts Chat
Google Chat was previously known as *Hangouts Chat*. See [Google
Chat](googlechat.md).
Using `hangouts` in the service URL instead `googlechat` is still
supported, although deprecated.

8
docs/services/ifttt.md Normal file
View file

@ -0,0 +1,8 @@
# IFTTT
## URL Format
!!! info ""
ifttt://__`key`__/?events=__`event1`__[,__`event2`__,...]&value1=__`value1`__&value2=__`value2`__&value3=__`value3`__
--8<-- "docs/services/ifttt/config.md"

21
docs/services/join.md Normal file
View file

@ -0,0 +1,21 @@
# Join
## URL Format
!!! info ""
join://shoutrrr:__`api-key`__@join/?devices=__`device1`__[,__`device2`__, ...][&icon=__`icon`__][&title=__`title`__]
--8<-- "docs/services/join/config.md"
## Guide
1. Go to the [Join Webapp](https://joinjoaomgcd.appspot.com/)
2. Select your device
3. Click **Join API**
4. Your `deviceId` is shown in the top
5. Click **Show** next to `API Key` to see your key
6. Your Shoutrrr URL will then be:
`join://shoutrrr:`__`api-key`__`@join/?devices=`__`deviceId`__
!!! note ""
Multiple `deviceId`s can be combined with a `,` (repeat steps 2-4).

46
docs/services/lark.md Normal file
View file

@ -0,0 +1,46 @@
# Lark
Send notifications to Lark using a custom bot webhook.
## URL Format
!!! info ""
lark://__`host`__/__`token`__?secret=__`secret`__&title=__`title`__&link=__`url`__
--8<-- "docs/services/lark/config.md"
- `host`: The bot API host (`open.larksuite.com` for Lark, `open.feishu.cn` for Feishu).
- `token`: The bot webhook token (required).
- `secret`: Optional bot secret for signed requests.
- `title`: Optional message title (switches to post format if set).
- `link`: Optional URL to include as a clickable link in the message.
### Example URL
```url
lark://open.larksuite.com/abc123?secret=xyz789&title=Alert&link=https://example.com
```
## Create a Custom Bot in Lark
Official Documentation: [Custom Bot Guide](https://open.larksuite.com/document/client-docs/bot-v3/add-custom-bot)
1. __Invite the Custom Bot to a Group__:
a. Open the target group, click `More` in the upper-right corner, and then select `Settings`.
b. In the `Settings` panel, click `Group Bot`.
c. Click `Add a Bot` under `Group Bot`.
d. In the `Add Bot` dialog, locate `Custom Bot` and select it.
e. Set the bots name and description, then click `Add`.
f. Copy the webhook address and click `Finish`.
2. __Get Host and Token__:
- For __Lark__: Use `host = open.larksuite.com`.
- For __Feishu__: Use `host = open.feishu.cn`.
- The `token` is the last segment of the webhook URL.
For example, in `https://open.larksuite.com/open-apis/bot/v2/hook/xxxxxxxxxxxxxxxxx`, the token is `xxxxxxxxxxxxxxxxx`.
3. __Get Secret (Optional)__:
a. In group settings, open the bot list, find your custom bot, and select it to access its configuration.
b. Under `Security Settings`, enable `Signature Verification`.
c. Click `Copy` to save the secret.
d. Click `Save` to apply the changes.

6
docs/services/logger.md Normal file
View file

@ -0,0 +1,6 @@
# Logger
No configuration options are available for this service.
It simply emits notifications to the Shoutrrr log which is
configured by the consumer.

44
docs/services/matrix.md Normal file
View file

@ -0,0 +1,44 @@
# Matrix
!!! note Usage of the `title` parameter
Do note that Matrix will discard any information put in the `title` parameter as the service has no analogue to a
a title. Instead, use a custom message format to supply your wanted title as part of the message.
## URL Format
*matrix://__`user`__:__`password`__@__`host`__:__`port`__/[?rooms=__`!roomID1`__[,__`roomAlias2`__]][&disableTLS=yes]*
--8<-- "docs/services/matrix/config.md"
## Authentication
If no `user` is specified, the `password` is treated as the authentication token. This means that no matter what login
flow your server uses, if you can manually retrieve a token, then Shoutrrr can use it.
### Password Login Flow
If a `user` and `password` is supplied, the `m.login.password` login flow is attempted if the server supports it.
## Rooms
If `rooms` are *not* specified, the service will send the message to all the rooms that the user has currently joined.
Otherwise, the service will only send the message to the specified rooms. If the user is *not* in any of those rooms,
but have been invited to it, it will automatically accept that invite.
**Note**: The service will **not** join any rooms unless they are explicitly specified in `rooms`. If you need the user
to join those rooms, you can send a notification with `rooms` explicitly set once.
### Room Lookup
Rooms specified in `rooms` will be treated as room IDs if the start with a `!` and used directly to identify rooms. If
they have no such prefix (or use a *correctly escaped* `#`) they will instead be treated as aliases, and a directory
lookup will be used to resolve their corresponding IDs.
**Note**: Don't use unescaped `#` for the channel aliases as that will be treated as the `fragment` part of the URL.
Either omit them or URL encode them, I.E. `rooms=%23alias:server` or `rooms=alias:server`
### TLS
If you do not have TLS enabled on the server you can disable it by providing `disableTLS=yes`. This will effectively
use `http` intead of `https` for the API calls.

View file

@ -0,0 +1,69 @@
# MatterMost
## URL Format
!!! info ""
mattermost://[__`username`__@]__`mattermost-host`__/__`token`__[/__`channel`__][?icon=__`smiley`__&disabletls=__`yes`__]
--8<-- "docs/services/mattermost/config.md"
## Creating a Webhook in MatterMost
1. Open up the Integrations page by clicking on *Integrations* within the menu
![Screenshot 1](mattermost/1.PNG)
2. Click *Incoming Webhooks*
![Screenshot 2](mattermost/2.PNG)
3. Click *Add Incoming Webhook*
![Screenshot 3](mattermost/3.PNG)
4. Fill in the information for the webhook and click *Save*
![Screenshot 4](mattermost/4.PNG)
5. If you did everything correctly, MatterMost will give you the *URL* to your newly created webhook
![Screenshot 5](mattermost/5.PNG)
6. Format the service URL
```
https://your-domain.com/hooks/bywsw8zt5jgpte3nm65qjiru6h
└────────────────────────┘
token
mattermost://your-domain.com/bywsw8zt5jgpte3nm65qjiru6h
└────────────────────────┘
token
```
## Additional URL configuration
Mattermost provides functionality to post as another user or to another channel, compared to the webhook configuration.
<br/>
To do this, you can add a *user* and/or *channel* to the service URL.
```
mattermost://shoutrrrUser@your-domain.com/bywsw8zt5jgpte3nm65qjiru6h/shoutrrrChannel
└──────────┘ └────────────────────────┘ └─────────────┘
user token channel
```
## Passing parameters via code
If you want to, you also have the possibility to pass parameters to the `send` function.
<br/>
The following example contains all parameters that are currently supported.
```gotemplate
params := (*types.Params)(
&map[string]string{
"username": "overwriteUserName",
"channel": "overwriteChannel",
"icon": "overwriteIcon",
},
)
service.Send("this is a message", params)
```
This will overwrite any options, that you passed via URL.

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

7
docs/services/ntfy.md Normal file
View file

@ -0,0 +1,7 @@
# Ntfy
Upstream docs: https://docs.ntfy.sh/publish/
## URL Format
--8<-- "docs/services/ntfy/config.md"

66
docs/services/opsgenie.md Normal file
View file

@ -0,0 +1,66 @@
# OpsGenie
## URL Format
--8<-- "docs/services/opsgenie/config.md"
## Creating a REST API endpoint in OpsGenie
1. Open up the Integration List page by clicking on *Settings => Integration List* within the menu
![Screenshot 1](opsgenie/1.png)
2. Click *API => Add*
3. Make sure *Create and Update Access* and *Enabled* are checked and click *Save Integration*
![Screenshot 2](opsgenie/2.png)
4. Copy the *API Key*
5. Format the service URL
The host can be either api.opsgenie.com or api.eu.opsgenie.com depending on the location of your instance. See
the [OpsGenie documentation](https://docs.opsgenie.com/docs/alert-api) for details.
```
opsgenie://api.opsgenie.com/eb243592-faa2-4ba2-a551q-1afdf565c889
└───────────────────────────────────┘
token
```
## Passing parameters via code
If you want to, you can pass additional parameters to the `send` function.
<br/>
The following example contains all parameters that are currently supported.
```go
service.Send("An example alert message", &types.Params{
"alias": "Life is too short for no alias",
"description": "Every alert needs a description",
"responders": `[{"id":"4513b7ea-3b91-438f-b7e4-e3e54af9147c","type":"team"},{"name":"NOC","type":"team"}]`,
"visibleTo": `[{"id":"4513b7ea-3b91-438f-b7e4-e3e54af9147c","type":"team"},{"name":"rocket_team","type":"team"}]`,
"actions": "An action",
"tags": "tag1 tag2",
"details": `{"key1": "value1", "key2": "value2"}`,
"entity": "An example entity",
"source": "The source",
"priority": "P1",
"user": "Dracula",
"note": "Here is a note",
})
```
## Optional parameters
You can optionally specify the parameters in the URL:
!!! info ""
opsgenie://api.opsgenie.com/eb243592-faa2-4ba2-a551q-1afdf565c889?alias=Life+is+too+short+for+no+alias&description=Every+alert+needs+a+description&actions=An+action&tags=["tag1","tag2"]&entity=An+example+entity&source=The+source&priority=P1&user=Dracula&note=Here+is+a+note
Example using the command line:
```shell
shoutrrr send -u 'opsgenie://api.eu.opsgenie.com/token?tags=["tag1","tag2"]&description=testing&responders=[{"username":"superuser", "type": "user"}]&entity=Example Entity&source=Example Source&actions=["asdf", "bcde"]' -m "Hello World6"
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

32
docs/services/overview.md Normal file
View file

@ -0,0 +1,32 @@
# Services overview
Click on the service for a more thorough explanation. <!-- @formatter:off -->
| Service | URL format |
| --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| [Bark](./bark.md) | *bark://__`devicekey`__@__`host`__* |
| [Discord](./discord.md) | *discord://__`token`__@__`id`__[?thread_id=__`threadid`__]* |
| [Email](./email.md) | *smtp://__`username`__:__`password`__@__`host`__:__`port`__/?from=__`fromAddress`__&to=__`recipient1`__[,__`recipient2`__,...]* |
| [Gotify](./gotify.md) | *gotify://__`gotify-host`__/__`token`__* |
| [Google Chat](./googlechat.md) | *googlechat://chat.googleapis.com/v1/spaces/FOO/messages?key=bar&token=baz* |
| [IFTTT](./ifttt.md) | *ifttt://__`key`__/?events=__`event1`__[,__`event2`__,...]&value1=__`value1`__&value2=__`value2`__&value3=__`value3`__* |
| [Join](./join.md) | *join://shoutrrr:__`api-key`__@join/?devices=__`device1`__[,__`device2`__, ...][&icon=__`icon`__][&title=__`title`__]* |
| [Mattermost](./mattermost.md) | *mattermost://[__`username`__@]__`mattermost-host`__/__`token`__[/__`channel`__]* |
| [Matrix](./matrix.md) | *matrix://__`username`__:__`password`__@__`host`__:__`port`__/[?rooms=__`!roomID1`__[,__`roomAlias2`__]]* |
| [Ntfy](./ntfy.md) | *ntfy://__`username`__:__`password`__@ntfy.sh/__`topic`__* |
| [OpsGenie](./opsgenie.md) | *opsgenie://__`host`__/token?responders=__`responder1`__[,__`responder2`__]* |
| [Pushbullet](./pushbullet.md) | *pushbullet://__`api-token`__[/__`device`__/#__`channel`__/__`email`__]* |
| [Pushover](./pushover.md) | *pushover://shoutrrr:__`apiToken`__@__`userKey`__/?devices=__`device1`__[,__`device2`__, ...]* |
| [Rocketchat](./rocketchat.md) | *rocketchat://[__`username`__@]__`rocketchat-host`__/__`token`__[/__`channel`&#124;`@recipient`__]* |
| [Slack](./slack.md) | *slack://[__`botname`__@]__`token-a`__/__`token-b`__/__`token-c`__* |
| [Teams](./teams.md) | *teams://__`group`__@__`tenant`__/__`altId`__/__`groupOwner`__?host=__`organization`__.webhook.office.com* |
| [Telegram](./telegram.md) | *telegram://__`token`__@telegram?chats=__`@channel-1`__[,__`chat-id-1`__,...]* |
| [Zulip Chat](./zulip.md) | *zulip://__`bot-mail`__:__`bot-key`__@__`zulip-domain`__/?stream=__`name-or-id`__&topic=__`name`__* |
| [Lark](./lark.md) | *lark://__`host`__/__`token`__?secret=__`secret`__&title=__`title`__&link=__`url`__* |
## Specialized services
| Service | Description |
| --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| [Logger](./logger.md) | Writes notification to a configured go `log.Logger` |
| [Generic Webhook](./generic.md) | Sends notifications directly to a webhook |

View file

@ -0,0 +1,8 @@
# Pushbullet
## URL Format
!!! info ""
pushbullet://__`api-token`__[/__`device`__/#__`channel`__/__`email`__]
--8<-- "docs/services/pushbullet/config.md"

32
docs/services/pushover.md Normal file
View file

@ -0,0 +1,32 @@
# Pushover
## URL Format
!!! info ""
pushover://shoutrrr:__`apiToken`__@__`userKey`__/?devices=__`device1`__[,__`device2`__, ...]
--8<-- "docs/services/pushover/config.md"
## Getting the keys from Pushover
At your [Pushover dashboard](https://pushover.net/) you can view your __`userKey`__ in the top right.
![Screenshot 1](pushover/po-1.png)
The `Name` column of the device list is what is used to refer to your devices (__`device1`__ etc.)
![Screenshot 4](pushover/po-4.png)
At the bottom of the same page there are links your _applications_, where you can find your __`apiToken`__
![Screenshot 2](pushover/po-2.png)
The __`apiToken`__ is displayed at the top of the application page.
![Screenshot 3](pushover/po-3.png)
## Optional parameters
You can optionally specify the __`title`__ and __`priority`__ parameters in the URL:
*pushover://shoutrrr:__`token`__@__`userKey`__/?devices=__`device`__&title=Custom+Title&priority=1*
!!! note
Only supply priority values between -1 and 1, since 2 requires additional parameters that are not supported yet.
Please refer to the [Pushover API documentation](https://pushover.net/api#messages) for more information.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -0,0 +1,66 @@
# Rocket.chat
## URL Format
!!! info ""
rocketchat://[__`username`__@]__`rocketchat-host`__/__`token`__[/__`channel`&#124;`@recipient`__]*
--8<-- "docs/services/rocketchat/config.md"
## Creating a Webhook in Rocket.chat
1. Open up the chat Administration by clicking on *Administration* menu
![Screenshot 1](rocketchat/1.png)
2. Open *Integrations* and then click *New*
![Screenshot 2](rocketchat/2.png)
3. Fill in the information for the webhook and click *Save*. Please don't forget to Enable your integration.
![Screenshot 3](rocketchat/3.png)
5. If you did everything correctly, Rocket.chat will give you the *URL* and *Token* to your newly created webhook.
![Screenshot 4](rocketchat/4.png)
6. Format the service URL
```
rocketchat://your-domain.com/8eGdRzc9r4YYNyvge/2XYQcX9NBwJBKfQnphpebPcnXZcPEi32Nt4NKJfrnbhsbRfX
└────────────────────────────────────────────────────────────────┘
token
```
## Additional URL configuration
Rocket.chat provides functionality to post as another user or to another channel / user, compared to the webhook configuration.
<br/>
To do this, you can add a *sender* and/or *channel* / *receiver* to the service URL.
```
rocketchat://shoutrrrUser@your-domain.com/8eGdRzc9r4YYNyvge/2XYQcX9NBwJBKfQnphpebPcnXZcPEi32Nt4NKJfrnbhsbRfX/shoutrrrChannel
└──────────┘ └────────────────────────────────────────────────────────────────┘ └─────────────┘
sender token channel
rocketchat://shoutrrrUser@your-domain.com/8eGdRzc9r4YYNyvge/2XYQcX9NBwJBKfQnphpebPcnXZcPEi32Nt4NKJfrnbhsbRfX/@shoutrrrReceiver
└──────────┘ └────────────────────────────────────────────────────────────────┘ └───────────────┘
sender token receiver
```
## Passing parameters via code
If you want to, you also have the possibility to pass parameters to the `send` function.
<br/>
The following example contains all parameters that are currently supported.
```gotemplate
params := (*types.Params)(
&map[string]string{
"username": "overwriteUserName",
"channel": "overwriteChannel",
},
)
service.Send("this is a message", params)
```
This will overwrite any options, that you passed via URL.
For more Rocket.chat Webhooks options see [official guide](https://docs.rocket.chat/guides/administrator-guides/integrations).

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

36
docs/services/slack.md Normal file
View file

@ -0,0 +1,36 @@
# Slack
!!! attention "New URL format"
The URL format for Slack has been changed to allow for API- as well as webhook tokens.
Using the old format (`slack://xxxx/yyyy/zzzz`) will still work as before and will automatically be upgraded to
the new format when used.
The Slack notification service uses either [Slack Webhooks](https://api.slack.com/messaging/webhooks) or the
[Bot API](https://api.slack.com/methods/chat.postMessage) to send messages.
See the [guides](../guides/slack/index.md) for information on how to get your *token* and *channel*.
## URL Format
!!! note ""
Note that the token uses a prefix to determine the type, usually either `hook` (for webhooks) or `xoxb` (for bot API).
--8<-- "docs/services/slack/config.md"
!!! info "Color format"
The format for the `Color` prop follows the [slack docs](https://api.slack.com/reference/messaging/attachments#fields)
but `#` needs to be escaped as `%23` when passed in a URL.
So <span style="background:#ff8000;width:.9em;height:.9em;display:inline-block;vertical-align:middle"></span><code>#ff8000</code> would be `%23ff8000` etc.
## Examples
!!! example "Bot API"
```uri
slack://xoxb:123456789012-1234567890123-4mt0t4l1YL3g1T5L4cK70k3N@C001CH4NN3L?color=good&title=Great+News&icon=man-scientist&botname=Shoutrrrbot
```
!!! example "Webhook"
```uri
slack://hook:WNA3PBYV6-F20DUQND3RQ-Webc4MAvoacrpPakR8phF0zi@webhook?color=good&title=Great+News&icon=man-scientist&botname=Shoutrrrbot
```

69
docs/services/teams.md Normal file
View file

@ -0,0 +1,69 @@
# Teams
!!! attention "New webhook URL format only"
Shoutrrr now only supports the new Teams webhook URL format with an
organization-specific domain.
You must specify your organization domain using:
```text
?host=example.webhook.office.com
```
Where `example` is your organization's short name.
Legacy webhook formats (e.g., `outlook.office.com`) are no longer supported.
## URL Format
```
teams://group@tenant/altId/groupOwner/extraId?host=organization.webhook.office.com[&color=color][&title=title]
```
Where:
- `group`: The first UUID component from the webhook URL.
- `tenant`: The second UUID component from the webhook URL.
- `altId`: The third component (hex string) from the webhook URL.
- `groupOwner`: The fourth UUID component from the webhook URL.
- `extraId`: The fifth component at the end of the webhook URL.
- `organization`: Your organization name for the webhook domain (required).
- `color`: Optional hex color code for the message card (e.g., `FF0000` for red).
- `title`: Optional title for the message card.
--8<-- "docs/services/teams/config.md"
## Setting up a webhook
To use the Microsoft Teams notification service, you need to set up a custom
incoming webhook. Follow the instructions in [this Microsoft guide](https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook#create-an-incoming-webhook).
## Extracting the token
The token is extracted from your webhook URL:
<pre><code>https://<b>&lt;organization&gt;</b>.webhook.office.com/webhookb2/<b>&lt;group&gt;</b>@<b>&lt;tenant&gt;</b>/IncomingWebhook/<b>&lt;altId&gt;</b>/<b>&lt;groupOwner&gt;</b>/<b>&lt;extraId&gt;</b></code></pre>
!!! note "Important components"
All parts of the webhook URL are required:
- `organization`: Your organization name (e.g., `contoso`).
- `group`: First UUID component.
- `tenant`: Second UUID component.
- `altId`: Third component (hex string).
- `groupOwner`: Fourth UUID component.
- `extraId`: Fifth component.
## Example
```
# Original webhook URL:
https://contoso.webhook.office.com/webhookb2/11111111-4444-4444-8444-cccccccccccc@22222222-4444-4444-8444-cccccccccccc/IncomingWebhook/33333333012222222222333333333344/44444444-4444-4444-8444-cccccccccccc/V2ESyij_gAljSoUQHvZoZYzlpAoAXExyOl26dlf1xHEx05
# Shoutrrr URL:
teams://11111111-4444-4444-8444-cccccccccccc@22222222-4444-4444-8444-cccccccccccc/33333333012222222222333333333344/44444444-4444-4444-8444-cccccccccccc/V2ESyij_gAljSoUQHvZoZYzlpAoAXExyOl26dlf1xHEx05?host=contoso.webhook.office.com&color=FF0000&title=Alert
```
In this example:
- `color=FF0000` sets a red theme.
- `title=Alert` adds a custom title to the message card.

73
docs/services/telegram.md Normal file
View file

@ -0,0 +1,73 @@
# Telegram
## URL Format
!!! info ""
telegram://__`token`__@telegram?chats=__`channel-1`__[,__`chat-id-1`__,...]
--8<-- "docs/services/telegram/config.md"
## Getting a token for Telegram
Talk to [the botfather](https://core.telegram.org/bots#6-botfather).
## Identifying the target chats/channels
The `chats` param consists of one or more `Chat ID`s or `channel name`s.
### Public Channels
The channel names can be retrieved in the telegram client in the `Channel info` section for public channels.
Replace the `t.me/` prefix from the link with a `@`.
!!! note
Channels names need to be prefixed by `@` to identify them as such.
!!! note
If your channel only has an invite link (starting with `t.me/+`), you have to use it's Chat ID (see below)
!!! note
A `message_thread_id` param ([reference](https://core.telegram.org/bots/api#sendmessage)) can be added, with the format of `$chat_id:$message_thread_id`. [More info](https://stackoverflow.com/questions/74773675/how-to-get-topic-id-for-telegram-group-chat/75178418#75178418) on how to obtain the `message_thread_id`.
### Chats
Private channels, Group chats and private chats are identified by `Chat ID`s. Unfortunatly, they are generally not visible in the
telegram clients.
The easiest way to retrieve them is by using the `shoutrrr generate telegram` command which will guide you through
creating a URL with your target chats.
!!! tip
You can use the `nickfedor/shoutrrr` image in docker to run it without download/installing the `shoutrrr` CLI using:
```
docker run --rm -it nickfedor/shoutrrr generate telegram
```
### Asking @shoutrrrbot
Another way of retrieving the Chat IDs, is by forwarding a message from the target chat to the [@shoutrrrbot](https://t.me/shoutrrrbot).
It will reply with the Chat ID for the chat where the forwarded message was originally posted.
Note that it will not work correctly for Group chats, as those messages are just seen as being posted by a user, not in a specific chat.
Instead you can use the second method, which is to invite the @shoutrrrbot into your group chat and address a message to it (start the message with @shoutrrrbot). You can then safely kick the bot from the group.
The bot should be constantly online, unless it's usage exceeds the free tier on GCP. It's source is available at [github.com/nicholas-fedor/shoutrrrbot](https://github.com/nicholas-fedor/shoutrrrbot).
## Optional parameters
You can optionally specify the __`notification`__, __`parseMode`__ and __`preview`__ parameters in the URL:
!!! info ""
<pre>telegram://__`token`__@__`telegram`__/?channels=__`channel`__&notification=no&preview=false&parseMode=html</pre>
See [the telegram documentation](https://core.telegram.org/bots/api#sendmessage) for more information.
!!! note
`preview` and `notification` are inverted in regards to their API counterparts (`disable_web_page_preview` and `disable_notification`)
### Parse Mode and Title
If a parse mode is specified, the message needs to be escaped as per the corresponding sections in
[Formatting options](https://core.telegram.org/bots/api#formatting-options).
When a title has been specified, it will be prepended to the message, but this is only supported for
the `HTML` parse mode. Note that, if no parse mode is specified, the message will be escaped and sent using `HTML`.
Since the markdown modes are really hard to escape correctly, it's recommended to stick to `HTML` parse mode.

29
docs/services/zulip.md Normal file
View file

@ -0,0 +1,29 @@
# Zulip Chat
## URL Format
The shoutrrr service URL should look like this:
!!! info ""
zulip://__`botmail`__:__`botkey`__@__`host`__/?stream=__`stream`__&topic=__`topic`__
--8<-- "docs/services/zulip/config.md"
!!! note
Since __`botmail`__ is a mail address you need to URL escape the `@` in it to `%40`.
### Examples
Stream and topic are both optional and can be given as parameters to the Send method:
```go
sender, _ := shoutrrr.CreateSender(url)
params := make(types.Params)
params["stream"] = "mystream"
params["topic"] = "This is my topic"
sender.Send(message, &params)
```
!!! example "Example service URL"
zulip://my-bot%40zulipchat.com:correcthorsebatterystable@example.zulipchat.com?stream=foo&topic=bar