Adding upstream version 0.8.9.
Signed-off-by: Daniel Baumann <daniel@debian.org>
7
docs/services/bark.md
Normal 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
|
@ -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.
|
||||

|
||||
|
||||
2. In the menu on the left, click on *Integrations*.
|
||||

|
||||
|
||||
3. In the menu on the right, click on *Create Webhook*.
|
||||

|
||||
|
||||
4. Set the name, channel, and icon to your liking and click the *Copy Webhook URL* button.
|
||||

|
||||
|
||||
5. Press the *Save Changes* button.
|
||||

|
||||
|
||||
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
|
||||
```
|
BIN
docs/services/discord/sc-1.png
Normal file
After Width: | Height: | Size: 107 KiB |
BIN
docs/services/discord/sc-2.png
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
docs/services/discord/sc-3.png
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
docs/services/discord/sc-4.png
Normal file
After Width: | Height: | Size: 85 KiB |
BIN
docs/services/discord/sc-5.png
Normal file
After Width: | Height: | Size: 94 KiB |
8
docs/services/email.md
Normal 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
|
@ -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"
|
37
docs/services/googlechat.md
Normal 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.
|
||||

|
||||
|
||||
2. Then click on *Configure webhooks*.
|
||||

|
||||
|
||||
3. Name the webhook and save.
|
||||

|
||||
|
||||
4. Copy the URL.
|
||||

|
||||
|
||||
|
||||
5. Format the service URL by replacing `https` with `googlechat`.
|
BIN
docs/services/googlechat/hangouts-1.png
Normal file
After Width: | Height: | Size: 101 KiB |
BIN
docs/services/googlechat/hangouts-2.png
Normal file
After Width: | Height: | Size: 150 KiB |
BIN
docs/services/googlechat/hangouts-3.png
Normal file
After Width: | Height: | Size: 123 KiB |
BIN
docs/services/googlechat/hangouts-4.png
Normal file
After Width: | Height: | Size: 135 KiB |
18
docs/services/gotify.md
Normal 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
|
||||
```
|
7
docs/services/hangouts.md
Normal 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
|
@ -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
|
@ -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
|
@ -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 bot’s 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
|
@ -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
|
@ -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.
|
69
docs/services/mattermost.md
Normal 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
|
||||

|
||||
|
||||
2. Click *Incoming Webhooks*
|
||||

|
||||
|
||||
3. Click *Add Incoming Webhook*
|
||||

|
||||
|
||||
4. Fill in the information for the webhook and click *Save*
|
||||

|
||||
|
||||
5. If you did everything correctly, MatterMost will give you the *URL* to your newly created webhook
|
||||

|
||||
|
||||
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.
|
BIN
docs/services/mattermost/1.PNG
Normal file
After Width: | Height: | Size: 71 KiB |
BIN
docs/services/mattermost/2.PNG
Normal file
After Width: | Height: | Size: 64 KiB |
BIN
docs/services/mattermost/3.PNG
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
docs/services/mattermost/4.PNG
Normal file
After Width: | Height: | Size: 67 KiB |
BIN
docs/services/mattermost/5.PNG
Normal file
After Width: | Height: | Size: 33 KiB |
7
docs/services/ntfy.md
Normal 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
|
@ -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
|
||||

|
||||
|
||||
2. Click *API => Add*
|
||||
|
||||
3. Make sure *Create and Update Access* and *Enabled* are checked and click *Save Integration*
|
||||

|
||||
|
||||
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¬e=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"
|
||||
```
|
||||
|
||||
|
BIN
docs/services/opsgenie/1.png
Normal file
After Width: | Height: | Size: 186 KiB |
BIN
docs/services/opsgenie/2.png
Normal file
After Width: | Height: | Size: 132 KiB |
32
docs/services/overview.md
Normal 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`|`@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 |
|
8
docs/services/pushbullet.md
Normal 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
|
@ -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.
|
||||

|
||||
|
||||
The `Name` column of the device list is what is used to refer to your devices (__`device1`__ etc.)
|
||||

|
||||
|
||||
At the bottom of the same page there are links your _applications_, where you can find your __`apiToken`__
|
||||

|
||||
|
||||
The __`apiToken`__ is displayed at the top of the application page.
|
||||

|
||||
|
||||
## 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.
|
BIN
docs/services/pushover/po-1.png
Normal file
After Width: | Height: | Size: 9.3 KiB |
BIN
docs/services/pushover/po-2.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
docs/services/pushover/po-3.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
docs/services/pushover/po-4.png
Normal file
After Width: | Height: | Size: 12 KiB |
66
docs/services/rocketchat.md
Normal file
|
@ -0,0 +1,66 @@
|
|||
# Rocket.chat
|
||||
|
||||
## URL Format
|
||||
|
||||
!!! info ""
|
||||
rocketchat://[__`username`__@]__`rocketchat-host`__/__`token`__[/__`channel`|`@recipient`__]*
|
||||
|
||||
--8<-- "docs/services/rocketchat/config.md"
|
||||
|
||||
## Creating a Webhook in Rocket.chat
|
||||
|
||||
1. Open up the chat Administration by clicking on *Administration* menu
|
||||

|
||||
|
||||
2. Open *Integrations* and then click *New*
|
||||

|
||||
|
||||
3. Fill in the information for the webhook and click *Save*. Please don't forget to Enable your integration.
|
||||

|
||||
|
||||
5. If you did everything correctly, Rocket.chat will give you the *URL* and *Token* to your newly created webhook.
|
||||

|
||||
|
||||
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).
|
BIN
docs/services/rocketchat/1.png
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
docs/services/rocketchat/2.png
Normal file
After Width: | Height: | Size: 147 KiB |
BIN
docs/services/rocketchat/3.png
Normal file
After Width: | Height: | Size: 185 KiB |
BIN
docs/services/rocketchat/4.png
Normal file
After Width: | Height: | Size: 126 KiB |
36
docs/services/slack.md
Normal 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
|
@ -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><organization></b>.webhook.office.com/webhookb2/<b><group></b>@<b><tenant></b>/IncomingWebhook/<b><altId></b>/<b><groupOwner></b>/<b><extraId></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
|
@ -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`__¬ification=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
|
@ -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, ¶ms)
|
||||
```
|
||||
|
||||
!!! example "Example service URL"
|
||||
zulip://my-bot%40zulipchat.com:correcthorsebatterystable@example.zulipchat.com?stream=foo&topic=bar
|