golang多平台消息通知服务集成插件库shoutrrr的使用
Golang多平台消息通知服务集成插件库Shoutrrr的使用
Shoutrrr是一个为Gopher及其毛茸茸的朋友们设计的通知库,灵感来源于caronc/apprise。
安装
使用Snap安装
$ sudo snap install shoutrrr
使用Go CLI安装
$ go install github.com/containrrr/shoutrrr/shoutrrr@latest
从源码构建
$ go build -o shoutrrr ./shoutrrr
快速开始
作为包使用
使用直接发送命令
url := "slack://token-a/token-b/token-c"
err := shoutrrr.Send(url, "Hello world (or slack channel) !")
使用发送器
url := "slack://token-a/token-b/token-c"
sender, err := shoutrrr.CreateSender(url)
sender.Send("Hello world (or slack channel) !", map[string]string { /* ... */ })
使用带有多个URL的发送器
urls := []string {
"slack://token-a/token-b/token-c"
"discord://token@channel"
}
sender, err := shoutrrr.CreateSender(urls...)
sender.Send("Hello world (or slack channel) !", map[string]string { /* ... */ })
通过CLI使用
首先运行build.sh
脚本,然后可以使用shoutrrr可执行文件发送通知:
$ shoutrrr send [OPTIONS] <URL> <Message [...]>
从GitHub Actions工作流使用
你也可以在GitHub Actions工作流中使用Shoutrrr。
示例:
name: Deploy
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Some other steps needed for deploying
run: ...
- name: Shoutrrr
uses: containrrr/shoutrrr-action@v1
with:
url: ${{ secrets.SHOUTRRR_URL }}
title: Deployed ${{ github.sha }}
message: See changes at ${{ github.event.compare }}.
文档
更多详情,请访问完整文档。
贡献者
感谢这些优秀的人们的贡献。
相关项目
- watchtower - 自动化Docker容器基础镜像更新的进程,使用shoutrrr进行通知
- kured - Kubernetes重启守护进程从1.7.0版本开始采用shoutrrr作为统一的通知方法
- Green Orb - 一个多功能的"观察和报告"工具,用于你的应用程序日志
更多关于golang多平台消息通知服务集成插件库shoutrrr的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang多平台消息通知服务集成插件库shoutrrr的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Shoutrrr - Golang多平台消息通知服务集成库
Shoutrrr是一个强大的Golang库,用于集成多种消息通知服务。它支持超过30种通知服务,包括Slack、Discord、Telegram、Email等,允许开发者通过统一的API发送通知到不同平台。
安装
go get github.com/containrrr/shoutrrr
基本使用
1. 初始化通知发送器
package main
import (
"fmt"
"github.com/containrrr/shoutrrr"
)
func main() {
// 创建通知URL (格式: service://token@host/path?param=value)
discordURL := "discord://token@channel-id"
slackURL := "slack://token-a/token-b/token-c"
telegramURL := "telegram://shoutrrr:bot-token@telegram?channels=channel-name"
// 创建发送器
sender, err := shoutrrr.CreateSender(discordURL, slackURL, telegramURL)
if err != nil {
panic(err)
}
}
2. 发送简单消息
err := sender.Send("Hello from Shoutrrr!", nil)
if err != nil {
fmt.Println("发送失败:", err)
}
3. 发送带选项的消息
params := map[string]string{
"title": "重要通知",
"color": "green",
"pretext": "系统警报",
}
err := sender.Send("服务器CPU使用率超过90%!", &shoutrrr.SendOptions{
Params: params,
})
支持的平台示例
Discord
discordURL := "discord://token@channel-id"
sender, _ := shoutrrr.CreateSender(discordURL)
sender.Send("Discord通知测试", nil)
Slack
slackURL := "slack://token-a/token-b/token-c"
sender, _ := shoutrrr.CreateSender(slackURL)
sender.Send("Slack通知测试", nil)
Telegram
telegramURL := "telegram://shoutrrr:bot-token@telegram?channels=channel-name"
sender, _ := shoutrrr.CreateSender(telegramURL)
sender.Send("Telegram通知测试", nil)
Email (SMTP)
emailURL := "smtp://username:password@smtp.example.com:587/?from=from@example.com&to=to@example.com"
sender, _ := shoutrrr.CreateSender(emailURL)
sender.Send("邮件通知测试", nil)
高级功能
批量发送
urls := []string{
"discord://token@channel-id",
"slack://token-a/token-b/token-c",
"telegram://shoutrrr:bot-token@telegram?channels=channel-name",
}
sender, _ := shoutrrr.CreateSender(urls...)
sender.Send("批量发送测试", nil)
错误处理
results := sender.Send("测试消息", nil)
for _, result := range results {
if result.Err != nil {
fmt.Printf("发送到 %s 失败: %v\n", result.Service, result.Err)
} else {
fmt.Printf("发送到 %s 成功\n", result.Service)
}
}
自定义参数
params := map[string]string{
"title": "自定义标题",
"color": "warning",
"icon": ":fire:",
"thread": "true",
}
sender.Send("带参数的消息", &shoutrrr.SendOptions{
Params: params,
})
最佳实践
- URL安全存储:将通知URL存储在环境变量或配置文件中,不要硬编码在代码中
- 错误重试:对于重要通知,实现简单的重试机制
- 速率限制:注意各平台的API调用限制
- 异步发送:对于非关键通知,考虑使用goroutine异步发送
完整示例
package main
import (
"fmt"
"log"
"os"
"github.com/containrrr/shoutrrr"
)
func main() {
// 从环境变量获取配置
discordURL := os.Getenv("DISCORD_NOTIFICATION_URL")
slackURL := os.Getenv("SLACK_NOTIFICATION_URL")
if discordURL == "" || slackURL == "" {
log.Fatal("请设置通知URL环境变量")
}
// 初始化发送器
sender, err := shoutrrr.CreateSender(discordURL, slackURL)
if err != nil {
log.Fatalf("初始化通知发送器失败: %v", err)
}
// 发送消息
message := "服务器监控警报: CPU使用率超过95%"
params := map[string]string{
"title": "服务器警报",
"color": "danger",
}
results := sender.Send(message, &shoutrrr.SendOptions{
Params: params,
})
// 处理结果
for _, result := range results {
if result.Err != nil {
log.Printf("发送到 %s 失败: %v", result.Service, result.Err)
} else {
log.Printf("发送到 %s 成功", result.Service)
}
}
}
Shoutrrr的强大之处在于其统一接口和广泛的服务支持,使得在Golang应用中集成多种通知服务变得非常简单。