URL-based notification library for Elixir — send notifications to 18 services with a single URL string. An Elixir port of shoutrrr.
Add holler to your dependencies in mix.exs:
def deps do
[
{:holler, "~> 0.2"}
]
endHoller.send("gotify://example.com/AqEtoken123456", "Hello from Holler!")
# => :okurls = [
"gotify://example.com/AqEtoken123456",
"slack://hook:TXXXXXXXX/BXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX",
"telegram://123456789:AABBccdd@telegram?chats=-100123456789"
]
{:ok, sender} = Holler.create_sender(urls)
Holler.Sender.send(sender, "Deploy complete!")
# => [:ok, :ok, :ok]Holler.send(
"ntfy://ntfy.sh/my-topic",
"Disk usage at 95%",
%{title: "Warning", priority: "high"}
)| Service | URL scheme | Example URL |
|---|---|---|
| Bark | bark |
bark://:devicekey@api.day.app |
| Discord | discord |
discord://token@webhook_id |
| Generic | generic |
generic://example.com/webhook |
| Google Chat | googlechat |
googlechat://chat.googleapis.com/v1/spaces/FOO/messages?key=bar&token=baz |
| Gotify | gotify |
gotify://example.com/AqEtoken123456 |
| IFTTT | ifttt |
ifttt://webhookkey/?events=myevent |
| Join | join |
join://shoutrrr:apikey@join/?devices=device1 |
| Matrix | matrix |
matrix://:accesstoken@matrix.example.com/ |
| Mattermost | mattermost |
mattermost://example.com/webhooktoken |
| Ntfy | ntfy |
ntfy://ntfy.sh/my-topic |
| OpsGenie | opsgenie |
opsgenie://api.opsgenie.com/myapikey |
| Pushbullet | pushbullet |
pushbullet://myapitoken |
| Pushover | pushover |
pushover://shoutrrr:token@userkey/ |
| Rocket.Chat | rocketchat |
rocketchat://example.com/tokenA/tokenB/general |
| Slack | slack |
slack://hook:TXXXXXXXX/BXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX |
| Teams | teams |
teams://group@tenant/altId/groupOwner?host=org.webhook.office.com |
| Telegram | telegram |
telegram://botid:token@telegram?chats=@mychannel |
| Zulip | zulip |
zulip://bot%40example.com:apikey@org.zulipchat.com/?stream=general |
| Mercure | mercure |
mercure://:jwt@example.com?topic=https://example.com/books/1 |
@spec send(url :: String.t(), message :: String.t(), params :: map()) ::
:ok | {:error, term()}Parses url, initialises the matching service, and sends message in one step.
params is merged into the config and can override per-call options like title
or priority.
@spec create_sender([String.t()]) :: {:ok, Holler.Sender.t()} | {:error, term()}Parses and initialises all URLs upfront. Returns a Holler.Sender struct that can
be reused to send to all configured services concurrently.
@spec send(Holler.Sender.t(), message :: String.t(), params :: map()) ::
[:ok | {:error, term()}]Sends message to all services in the sender concurrently using
Task.async_stream. Returns a list of results in the same order as the URLs
passed to create_sender/1.
MIT — see LICENSE.