Monitor websites and keywords, get Telegram notifications — effortless, reliable, and lightweight. [Live Project](https://t.me/ezynotify_bot)
EzyNotify is a free Telegram bot built in two parts; Vercel Serverless Webhook with Node.js and the bot itself with python (hosted in another repo for github actions. Check here) that lets users set up two types of monitors:
- Update Monitor — Track an entire page for content changes and receive summaries.
- Keyword Check — Watch for specific keywords on a webpage and get alerted when they appear/disappear.
It uses Supabase for storage and the Telegram API (webhook style) for interactions. Built to be simple to deploy (Vercel) and easy to extend.
- Add / edit / delete monitoring requests via Telegram commands.
- Persist requests and state in Supabase (
ezynotifytable). - Multi-step conversational flows for creating and editing monitors.
- Rich, user-friendly Telegram messages and instructions.
- Lightweight — single API route handles incoming Telegram updates.
/new_update_monitor - Start a new site update monitor (multi-step)
/new_keyword_check - Start monitoring a keyword on a site (multi-step)
/list_update_requests - List your update monitors
/list_keyword_requests - List your keyword monitors
/editupdate<id> - Edit an update monitor (sent as a private command link)
//deleteupdate<id> - Delete an update monitor
/editkeyword<id> - Edit a keyword monitor
/deletekeyword<id> - Delete a keyword monitor
/help - Show help and available commands
The bot replies with user-friendly prompts and validates inputs (e.g., URLs, yes/no answers).
ezynotify-bot/
├─ api/
│ └─ telegram.js # Main webhook handler that processes Telegram updates
├─ package.json
├─ package-lock.json
└─ README.md (this file)
- Node.js (v16+ recommended)
- A Supabase project (for DB)
- Telegram bot token and webhook URL (you will set webhook to your deployed endpoint)
Create a .env (or configure via platform UI) with:
SUPABASE_URL=your_supabase_url
SUPABASE_KEY=your_supabase_service_key
TELEGRAM_BOT_TOKEN=123456:ABC-DEF...
WEBHOOK_SECRET=optional_secret_string
SUPABASE_KEYshould be a service_role or API key with read/write access to theezynotifytable depending on how you use row-level security.
EzyNotify's handler is meant to be deployed as a serverless function (Vercel/Netlify). To test locally:
- Install deps
npm install- Start a small local server that forwards Telegram updates to the handler (example using
vercel devor simple express wrapper). For a quick test, usevercel devin the project root if using Vercel.
Note: Telegram requires a public HTTPS webhook. Use
ngrokto expose local server during development:
npx ngrok http 3000
# set webhook to https://<your-ngrok>.ngrok.io/api/telegram- Push the repo to GitHub.
- Go to Vercel → New Project → Import GitHub repo.
- Set Environment Variables in Vercel dashboard (same as
.envabove). - Configure the Serverless Function path (usually
/api/telegram). - Deploy and note the production URL.
- Set Telegram webhook (replace tokens & URL):
curl -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/setWebhook" \
-d "url=https://your-deployment.vercel.app/api/telegram"If successful, Telegram will start sending updates to your endpoint.
- Never commit
SUPABASE_KEYorTELEGRAM_BOT_TOKENto source control. - Prefer to use Supabase Row Level Security and service_role keys carefully.
- Validate and sanitize user-provided URLs before fetching.
- Rate-limit requests and respect remote sites (consider
robots.txtand scraping rules).
- Telegram sends updates to
/api/telegram(webhook). - Handler reads
message.textandmessage.chat.idand runs command matching. - For multi-step flows, user session state is kept in memory (
userStateMap) until completed. - Completed requests are stored in
ezynotifytable in Supabase. - Background checker (not included here. see here ) would read
ezynotifyrows and perform periodic checks, sending messages withsendMessageto users.
/new_update_monitor- Bot: "Enter the URL you want to monitor"
- User:
https://example.com/news - Bot: "Send
yesto receive detailed diffs ornofor short alerts" - User:
yes - Bot: "Continue check after first result"
- User:
yesorno - Bot: "✅ Update monitoring request created!"
- Add a background worker (Cloud Function, Cron job, or Worker) that polls Supabase rows and performs change detection.
- Add webhook verification using
WEBHOOK_SECRETto validate Telegram calls. - Implement richer diffs (use
difflibs) and screenshot attachments for visual change detection. - Add analytics: count alerts sent per user, success/failure rates.
Contributions are welcome! Open an issue or a PR. Suggested workflow:
- Fork the repo
- Create a branch
feature/your-feature - Add tests & update README
- Open a Pull Request
Built with ❤️ and zero ☕. Ai helped a lot 😉.
This project is licensed under the MIT License — see LICENSE for details.
If you want help deploying or customizing the bot, open an issue.
Made with ❤️ by IsraelIyke