jtprogru/notiflow — Telegram CI Notifier

Send a Telegram message when a workflow job completes. Customizable message format, retry on rate limits.

View on GitHub

Trust Signals

Scorecard Score
not yet scored
Maintenance Recency
Activelast commit May 27, 2026
License
MIT

Pinned Snippet

workflow.ymlSHA-pinned
uses: jtprogru/notiflow@3dd643071e3c951142bfb356712596b11465c70d # v1.6.1

tags can be moved; commit SHAs can't. why a SHA?

namedescriptionrequireddefault
bot_tokenTelegram bot token (use a repository secret).yes
chat_idTarget chat ID (integer, possibly negative) or @channel_username.yes
statusJob 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_modeTelegram parse_mode: MarkdownV2 (default), HTML, Markdown, or none.noMarkdownV2
notify_onComma-separated list of statuses that should trigger a notification.nosuccess,failure,cancelled
messageVerbatim message text. Overrides every template. No placeholder substitution applied.no""
message_templateTemplate string with {{.Field}} placeholders, used for all statuses not overridden by template_<status>.no""
template_successTemplate used when status=success. Overrides message_template.no""
template_failureTemplate used when status=failure. Overrides message_template.no""
template_cancelledTemplate used when status=cancelled. Overrides message_template.no""
template_skippedTemplate used when status=skipped. Overrides message_template.no""
disable_web_page_previewSuppress link previews in the Telegram message.notrue
disable_notificationSend the message silently (no sound for recipients).nofalse
message_thread_idForum-chat thread (topic) ID. Integer.no""
fail_on_errorIf true, the action exits non-zero when the Telegram request ultimately fails. Default false keeps the job result intact.nofalse
edit_message_idIf 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""
namedescription
oktrue when the message was delivered, false otherwise.
message_idTelegram message_id on success, empty otherwise.
http_statusLast HTTP status received from Telegram (0 for skipped/network error).
errorError description on failure — Telegram .description when available, otherwise a synthesized reason (HTTP code, network error, exhausted retries). Empty on success and on skip.