All-in-one notification solution for GitHub Actions workflows. Get instant alerts via Email, Discord, Slack, and Telegram when your workflows complete.
Email - SMTP support for any email provider
Discord - Rich embeds with status colors
Telegram - Markdown-formatted messages with your bot
Slack - Beautiful attachments with action buttons
Status-aware styling - Automatic colors and emojis based on workflow status
Secure - Use GitHub secrets for sensitive credentials
Parallel delivery - Send to multiple channels simultaneously
Fault-tolerant - One channel failure won't block others
Customizable - Override titles and messages
name : CI Pipeline
on : [push, pull_request]
jobs :
build :
runs-on : ubuntu-latest
steps :
- uses : actions/checkout@v4
# Your build steps here
- name : Build
run : npm run build
# Send notification on completion
- name : Notify
if : always() # Run even if previous steps fail
uses : michaelikoko/workflow-blabber@v1
with :
channels : ' telegram,discord'
status : ${{ job.status }}
telegram_bot_token : ${{ secrets.TELEGRAM_BOT_TOKEN }}
telegram_chat_id : ${{ secrets.TELEGRAM_CHAT_ID }}
discord_webhook_url : ${{ secrets.DISCORD_WEBHOOK }}
Channel
Features
Email
SMTP support, HTML templates, Fallback
Discord
Rich embeds, Status colors, Clickable links
Telegram
Markdown formatting, Bot messages
Slack
Attachments, Action buttons, Colors
Supported Providers: Gmail, SendGrid, Mailgun, Amazon SES, or any SMTP server.
Enable 2-Factor Authentication on your Google account
Generate an App Password:
Add secrets to your repository:
Go to your repo → Settings → Secrets and variables → Actions
Click "New repository secret"
Add the following:
Name: SMTP_USER
Value: your.email@gmail.com
Name: SMTP_PASSWORD
Value: [your-app-password]
Name: RECIPIENT_EMAIL
Value: recipient@example.com
Use in workflow:
- name : Email Notification
uses : michaelikoko/workflow-blabber@v1
with :
channels : ' email'
status : ${{ job.status }}
smtp_host : ' smtp.gmail.com'
smtp_port : ' 587'
smtp_user : ${{ secrets.SMTP_USER }}
smtp_password : ${{ secrets.SMTP_PASSWORD }}
recipient_email : ${{ secrets.RECIPIENT_EMAIL }}
smtp_secure : ' false'
Open Discord and go to the channel where you want notifications
Click the gear icon (Edit Channel) next to the channel name
Go to Integrations → Webhooks → New Webhook
Customize your webhook:
Name it (e.g., "GitHub Notifications")
Choose an avatar (optional)
Copy the Webhook URL
Add to GitHub Secrets:
Name: DISCORD_WEBHOOK
Value: https://discord.com/api/webhooks/123456789/abcdefgh...
Use in workflow:
- name : Discord Notification
uses : michaelikoko/workflow-blabber@v1
with :
channels : ' discord'
status : ${{ job.status }}
discord_webhook_url : ${{ secrets.DISCORD_WEBHOOK }}
Security Note: Never commit webhook URLs to your repository. Always use secrets.
Go to your Slack workspace
Visit: api.slack.com/apps
Click "Create New App" → "From scratch"
Name your app (e.g., "Workflow Blabber") and select your workspace
Navigate to "Incoming Webhooks" in the sidebar
Toggle "Activate Incoming Webhooks" to On
Click "Add New Webhook to Workspace"
Select the channel where notifications should appear
Copy the Webhook URL
Add to GitHub Secrets:
Name: SLACK_WEBHOOK
Value: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXX
Use in workflow:
- name : Slack Notification
uses : michaelikoko/workflow-blabber@v1
with :
channels : ' slack'
status : ${{ job.status }}
slack_webhook_url : ${{ secrets.SLACK_WEBHOOK }}
Open Telegram and search for @BotFather
Send: /newbot
Follow the prompts:
Choose a name (e.g., "Workflow Notifier")
Choose a username (e.g., "my_workflow_bot")
Save the bot token (looks like 123456789:ABCdefGHIjklMNOpqrsTUVwxyz)
Option A: Message your bot directly
Search for your bot in Telegram
Click "Start" or send any message
Visit: https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates
Look for "chat":{"id":123456789} in the response
That number is your chat ID
Option B: Add bot to a group
Create a Telegram group
Add your bot to the group
Send a message in the group
Visit: https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates
Look for the group's chat ID (negative number, like -987654321)
Step 3: Add to GitHub Secrets
Name: TELEGRAM_BOT_TOKEN
Value: 123456789:ABCdefGHIjklMNOpqrsTUVwxyz
Name: TELEGRAM_CHAT_ID
Value: 123456789
- name : Telegram Notification
uses : michaelikoko/workflow-blabber@v1
with :
channels : ' telegram'
status : ${{ job.status }}
telegram_bot_token : ${{ secrets.TELEGRAM_BOT_TOKEN }}
telegram_chat_id : ${{ secrets.TELEGRAM_CHAT_ID }}
- name : Notify on Discord
if : always()
uses : michaelikoko/workflow-blabber@v1
with :
channels : ' discord'
status : ${{ job.status }}
discord_webhook_url : ${{ secrets.DISCORD_WEBHOOK }}
- name : Notify everywhere
if : always()
uses : michaelikoko/workflow-blabber@v1
with :
channels : ' email,discord,slack,telegram'
status : ${{ job.status }}
# Email
smtp_host : ' smtp.gmail.com'
smtp_port : ' 587'
smtp_user : ${{ secrets.SMTP_USER }}
smtp_password : ${{ secrets.SMTP_PASSWORD }}
recipient_email : ${{ secrets.RECIPIENT_EMAIL }}
# Discord
discord_webhook_url : ${{ secrets.DISCORD_WEBHOOK }}
# Slack
slack_webhook_url : ${{ secrets.SLACK_WEBHOOK }}
# Telegram
telegram_bot_token : ${{ secrets.TELEGRAM_BOT_TOKEN }}
telegram_chat_id : ${{ secrets.TELEGRAM_CHAT_ID }}
- name : Custom notification
if : always()
uses : michaelikoko/workflow-blabber@v1
with :
channels : ' telegram'
status : ${{ job.status }}
custom_title : ' Deployment Update'
custom_message : ' Production deployment completed successfully!'
telegram_bot_token : ${{ secrets.TELEGRAM_BOT_TOKEN }}
telegram_chat_id : ${{ secrets.TELEGRAM_CHAT_ID }}
- name : Alert on failure
if : failure()
uses : michaelikoko/workflow-blabber@v1
with :
channels : ' discord,telegram'
status : ' failure'
custom_message : ' Build failed! Immediate attention required.'
discord_webhook_url : ${{ secrets.DISCORD_WEBHOOK }}
telegram_bot_token : ${{ secrets.TELEGRAM_BOT_TOKEN }}
telegram_chat_id : ${{ secrets.TELEGRAM_CHAT_ID }}
Multiple Jobs, Single Notification
jobs :
build :
runs-on : ubuntu-latest
steps :
- name : Build
run : npm run build
test :
runs-on : ubuntu-latest
needs : build
steps :
- name : Test
run : npm test
notify :
runs-on : ubuntu-latest
needs : [build, test]
if : always()
steps :
- name : Send notification
uses : michaelikoko/workflow-blabber@v1
with :
channels : ' slack'
status : ${{ needs.test.result }}
slack_webhook_url : ${{ secrets.SLACK_WEBHOOK }}
Fail Action on Notification Error
- name : Critical notification
uses : michaelikoko/workflow-blabber@v1
with :
channels : ' email'
status : ${{ job.status }}
fail_on_error : ' true' # Action fails if email doesn't send
smtp_host : ' smtp.gmail.com'
smtp_port : ' 587'
smtp_user : ${{ secrets.SMTP_USER }}
smtp_password : ${{ secrets.SMTP_PASSWORD }}
recipient_email : ${{ secrets.RECIPIENT_EMAIL }}
Input
Description
Example
channels
Comma-separated list of channels
'email,discord,slack,telegram'
status
Workflow status
${{ job.status }} or 'success', 'failure', 'cancelled'
Input
Description
Default
Required
custom_title
Custom notification title
Auto-generated
No
custom_message
Custom notification message
Auto-generated
No
fail_on_error
Fail action if notification fails
'false'
No
Input
Description
Required for Email
smtp_host
SMTP server hostname
Yes
smtp_port
SMTP server port
Yes
smtp_user
SMTP username
Yes
smtp_password
SMTP password
Yes
recipient_email
Recipient email address
Yes
smtp_secure
Use TLS/SSL
No (default: 'false')
email_subject
Email subject line
No
Input
Description
Required for Discord
discord_webhook_url
Discord webhook URL
Yes
Input
Description
Required for Slack
slack_webhook_url
Slack webhook URL
Yes
Input
Description
Required for Telegram
telegram_bot_token
Bot token from @BotFather
Yes
telegram_chat_id
Chat or group ID
Yes
If this action helped you, please consider:
Starring the repository
Reporting bugs
Suggesting new features
Sharing with others