{"id":13582046,"url":"https://github.com/schlauerlauer/alertmanager-webhook-signal","last_synced_at":"2026-02-01T18:05:11.842Z","repository":{"id":162993219,"uuid":"328942908","full_name":"schlauerlauer/alertmanager-webhook-signal","owner":"schlauerlauer","description":"This project creates a little (dockerized) REST API Endpoint for an Alertmanager and Grafana webhook receiver and maps it to the dockerized signal-cli.","archived":false,"fork":false,"pushed_at":"2024-04-29T07:30:32.000Z","size":12277,"stargazers_count":22,"open_issues_count":2,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-10-13T17:43:20.148Z","etag":null,"topics":["alertmanager","alertmanager-webhook","alertmanager-webhook-receiver","grafana","grafana-webhook","monitoring","prometheus","prometheus-alertmanager","signal","signal-cli"],"latest_commit_sha":null,"homepage":"","language":"Go","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/schlauerlauer.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":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2021-01-12T09:58:16.000Z","updated_at":"2025-06-21T18:19:38.000Z","dependencies_parsed_at":"2024-04-15T10:59:55.364Z","dependency_job_id":null,"html_url":"https://github.com/schlauerlauer/alertmanager-webhook-signal","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/schlauerlauer/alertmanager-webhook-signal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schlauerlauer%2Falertmanager-webhook-signal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schlauerlauer%2Falertmanager-webhook-signal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schlauerlauer%2Falertmanager-webhook-signal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schlauerlauer%2Falertmanager-webhook-signal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/schlauerlauer","download_url":"https://codeload.github.com/schlauerlauer/alertmanager-webhook-signal/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schlauerlauer%2Falertmanager-webhook-signal/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28984882,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-01T17:52:09.146Z","status":"ssl_error","status_checked_at":"2026-02-01T17:49:53.529Z","response_time":56,"last_error":"SSL_read: 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":["alertmanager","alertmanager-webhook","alertmanager-webhook-receiver","grafana","grafana-webhook","monitoring","prometheus","prometheus-alertmanager","signal","signal-cli"],"created_at":"2024-08-01T15:02:24.136Z","updated_at":"2026-02-01T18:05:11.828Z","avatar_url":"https://github.com/schlauerlauer.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# Alertmanager Webhook Signal\n\n\u003e Note: The default config path is now /config.yaml\n\u003e\n\u003e If you want to override the config location, set the CONFIG_PATH environment variable\n\nThis project creates a containerized http endpoint which listens for requests by an [alertmanager webhook receiver](https://prometheus.io/docs/alerting/latest/configuration/#webhook_config)\nand maps it to the [signal-cli by bbernhard](https://github.com/bbernhard/signal-cli-rest-api).\n\nThis is useful if you already have the signal-cli running for example as a [home-assistant notifier](https://www.home-assistant.io/integrations/signal_messenger/).\n\nUse a prometheus label `recipients` to specify where you want the signal message to be send.\n\nIt now supports alert webhooks from Grafana aswell, including a preview graph image!\n\n![grafana](media/grafana.png)\n\n![alertmanager](media/alertmanager.png)\n\n## Run container\n\n```bash\ndocker run -d --name alertmanager-signal \\\n  -p 10000:10000 \\\n  -v $(pwd)/config.yaml:/config.yaml \\\n  docker.io/schlauerlauer/alertmanager-webhook-signal:1.1.1\n```\n\n## Configuration\n\nA `config.yaml` file is needed for configuration.\n\nExample configuration:\n\n```yaml\n# Alertmanager webhook url: /api/v3/alertmanager\n# Grafana webhook url: /api/v3/grafana\nserver:\n  port: 10000 # port this program listens on; required\n  debug: false\nsignal:\n  number: \"+4923456\" # the number you are sending messages from; required\n  recipients: # default recipient(s), if the recipients label is not set in alert; required\n  - \"+49123123123\"\n  send: http://127.0.0.1:10001/v2/send # http endpoint of the signal-cli; required\nalertmanager:\n  ignoreLabels: # filter labels in the message; optional\n  - \"alertname\"\n  ignoreAnnotations: [] # filter annotations in the message; optional\n  generatorURL: true # include generator URL in the message; optional (default: false)\n  matchLabel: \"recipients\"\nrecipients: # optional list of recipient names and numbers for label matching\n  alice: \"+49123123123\"\n  bob: \"+49234234234\"\ntemplates:\n  grafana: |-\n    {{ if eq .State \"alerting\" }}❗{{ else }}✅{{ end }} {{ .Title}}\n    {{ .RuleName }}\n    {{ .Message }}\n    {{ .RuleUrl }}\n  alertmanager: |-\n    {{ if eq .Alert.Status \"firing\" }}❗{{ else }}✅{{ end }} Alert {{ .Alertname }} is {{ .Alert.Status }}\n\n    {{- if gt (len (.Alert.Labels)) 0 }}\n\n    Labels:\n    {{- range $key, $value := .Alert.Labels }}\n      - {{ $key }}: {{ $value }}\n    {{- end }}\n    {{- end }}\n\n    {{- if gt (len (.Alert.Annotations)) 0 }}\n\n    Annotations:\n    {{- range $key, $value := .Alert.Annotations }}\n      - {{ $key }}: {{ $value }}\n    {{- end }}\n    {{- end }}\n\n    {{ if .Config.GeneratorURL -}}\n    {{ .Alert.GeneratorURL}}\n    {{ end -}}\n```\n\nExample PrometheusRule:\n\n```yaml\ngroups:\n  - name: \"test.rules\"\n    rules:\n      - alert: \"Watchdog default recipient\"\n        annotations:\n          message: \"Testalert default recipient\"\n        expr: 'vector(1)'\n        for: \"1m\"\n\n      - alert: \"Watchdog named recipient\"\n        annotations:\n          message: \"Testalert named recipient\"\n        labels:\n          recipients: \"alice\"\n        expr: 'vector(1)'\n        for: \"1m\"\n```\n\nExample Alertmanager config.yml:\n\n```yaml\nglobal:\n\nroute:\n  receiver: \"signal\"\n  group_by: [\"alertname\"]\n  group_wait: \"5s\"\n  group_interval: \"5m\"\n  repeat_interval: \"3h\"\nreceivers:\n  - name: \"signal\"\n    webhook_configs:\n      - url: \"http://127.0.0.1:10000/api/v3/alertmanager\"\n        send_resolved: true\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschlauerlauer%2Falertmanager-webhook-signal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fschlauerlauer%2Falertmanager-webhook-signal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschlauerlauer%2Falertmanager-webhook-signal/lists"}