jtprogru/notiflow — Telegram CI Notifier
Send a Telegram message when a workflow job completes. Customizable message format, retry on rate limits.
View on GitHubTrust Signals
- Scorecard Score
- not yet scored
- Maintenance Recency
- Activelast commit May 27, 2026
- License
- MIT
Pinned Snippet
uses: jtprogru/notiflow@3dd643071e3c951142bfb356712596b11465c70d # v1.6.1tags can be moved; commit SHAs can't. why a SHA?
Inputs
| name | description | required | default |
|---|---|---|---|
| bot_token | Telegram bot token (use a repository secret). | yes | — |
| chat_id | Target chat ID (integer, possibly negative) or @channel_username. | yes | — |
| status | Job status to report. Must be passed explicitly from the workflow, typically from the job.status or needs.<job>.result expression. Allowed values: success, failure, cancelled, skipped. Cannot be defaulted from job.status here — composite-action input defaults do not have access to the job context. | yes | — |
| parse_mode | Telegram parse_mode: MarkdownV2 (default), HTML, Markdown, or none. | no | MarkdownV2 |
| notify_on | Comma-separated list of statuses that should trigger a notification. | no | success,failure,cancelled |
| message | Verbatim message text. Overrides every template. No placeholder substitution applied. | no | "" |
| message_template | Template string with {{.Field}} placeholders, used for all statuses not overridden by template_<status>. | no | "" |
| template_success | Template used when status=success. Overrides message_template. | no | "" |
| template_failure | Template used when status=failure. Overrides message_template. | no | "" |
| template_cancelled | Template used when status=cancelled. Overrides message_template. | no | "" |
| template_skipped | Template used when status=skipped. Overrides message_template. | no | "" |
| disable_web_page_preview | Suppress link previews in the Telegram message. | no | true |
| disable_notification | Send the message silently (no sound for recipients). | no | false |
| message_thread_id | Forum-chat thread (topic) ID. Integer. | no | "" |
| fail_on_error | If true, the action exits non-zero when the Telegram request ultimately fails. Default false keeps the job result intact. | no | false |
| edit_message_id | If set, the message is edited via editMessageText instead of sent fresh. Accepts an integer for single-chat, or a comma-separated list whose length must match chat_id for multi-chat (paired by index). Typically wired from the message_id output of a previous notiflow step — see the README for a worked example. disable_notification and message_thread_id are silently dropped when editing (Telegram rejects them on edit). | no | "" |
Outputs
| name | description |
|---|---|
| ok | true when the message was delivered, false otherwise. |
| message_id | Telegram message_id on success, empty otherwise. |
| http_status | Last HTTP status received from Telegram (0 for skipped/network error). |
| error | Error description on failure — Telegram .description when available, otherwise a synthesized reason (HTTP code, network error, exhausted retries). Empty on success and on skip. |