An automated system that checks the DTU Convocation portal twice daily for multiple roll number variations and sends notifications via Telegram with screenshots.
The script has been tested successfully and is ready to deploy to GitHub Actions.
- Automatically logs into the DTU Convocation portal
- Checks multiple roll number variations (e.g., with/without leading zeros)
- Runs twice daily at 2 PM and 10 PM IST
- Sends Telegram notifications with screenshots
- Completely FREE - uses GitHub Actions (no credit card required)
- Click the "Fork" button at the top right of this page
- This creates your own copy of the repository
First, we need to create a way for the automation to reach you. Telegram is perfect because it's free, reliable, and easy to set up.
Creating your Telegram bot:
- Open Telegram and search for "BotFather" (the official bot creation tool)
- Start a chat and send the command
/newbot - Give your bot a name (like "DTU Convocation Monitor")
- Give it a username (must end in 'bot', like "dtu_convocation_check_bot")
- BotFather will give you a token that looks like
1234567890:ABCdefGHIjklMNOpqrsTUVwxyz. Save this carefully.
Getting your Chat ID:
- Search for your new bot in Telegram and start a conversation
- Send any message to it (like "Hello")
- Open this URL in your browser:
https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates(Replace<YOUR_BOT_TOKEN>with your actual token) - Look for
"chat":{"id":followed by a number. That's your chat ID. Save it.
This is where you'll securely store your sensitive information. GitHub Secrets are encrypted and never exposed in logs or screenshots, which keeps your credentials completely safe.
- In your repository, click on "Settings" (top menu)
- In the left sidebar, click "Secrets and variables" → "Actions"
- Click "New repository secret" for each of the following:
Create these 5 secrets:
| Secret Name | Value | Example |
|---|---|---|
STUDENT_NAME |
Your name in CAPITALS | DHRUV KEJRWAL |
ROLL_NUMBERS |
Comma-separated roll numbers | 2K21/MC/053, 2K21/MC/53 |
DATE_OF_BIRTH |
Date in dd-mm-yyyy format | 19-07-2000 |
TELEGRAM_BOT_TOKEN |
Your bot token from Step 2 | 123456789:ABC... |
TELEGRAM_CHAT_ID |
Your chat ID from Step 2 | 123456789 |
How to add each secret:
- Click "New repository secret"
- Enter the name exactly as shown above (case-sensitive!)
- Paste the value
- Click "Add secret"
- Repeat for all 5 secrets
Important Notes:
- For
ROLL_NUMBERS: Separate multiple roll numbers with commas - Example:
2K21/MC/053, 2K21/MC/53(this checks both variations) - Name must be in CAPITALS exactly as shown on portal
- Date format must be dd-mm-yyyy (e.g., 19-07-2000)
- Go to the Actions tab in your repository
- Click "I understand my workflows, go ahead and enable them"
- The automation is now active!
Before waiting for the scheduled runs, let's test it immediately to make sure everything works:
- Go to the "Actions" tab in your repository
- Click on "DTU Convocation Checker" in the left sidebar
- Click the "Run workflow" button on the right
- Click the green "Run workflow" button in the dropdown
- Wait about 1-2 minutes, then refresh the page
- You should see a new workflow run appear
- Click on it to see the progress
- Check your Telegram - you should receive a message with a screenshot!
You'll get a Telegram message like this:
🎓 DTU Convocation Multi-Check Report
📅 Check Time: 07 October 2025, 2:00 PM IST
👤 Student: DHRUV KEJRWAL
🔢 Roll Numbers Checked: 2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Check #1: 2K21/MC/053
❌ Roll No Not Found
Your roll number is not yet in the convocation system.
📄 Page Title: DTU Convocation 2024
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Check #2: 2K21/MC/53
❌ Roll No Not Found
Your roll number is not yet in the convocation system.
📄 Page Title: DTU Convocation 2024
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💡 What This Means:
• If both show "Not Found": Normal before convocation announcement
• If one is "Found": Use that roll number format on the portal
• If results differ: The portal may prefer one format over the other
Automated check running twice daily at 9 AM and 6 PM IST
Plus screenshots of each check!
The workflow runs automatically twice daily:
- 2:00 PM IST (8:30 AM UTC) – Afternoon check
- 10:00 PM IST (4:30 PM UTC) – Evening check
You can also trigger it manually anytime from the GitHub Actions tab.
💡 Tip: Learn more about cron syntax and customize schedules at Crontab Guru.
- Check your bot: Send a message to your bot on Telegram first
- Verify secrets: Make sure all 5 secrets are added correctly
- Check Actions tab: Look for any error messages in the workflow runs
- Date format: Ensure it's dd-mm-yyyy (e.g., 09-02-2004, not 9-2-2004)
Just add them to the ROLL_NUMBERS secret, separated by commas:
2K21/MC/053, 2K21/MC/53, 2K21/MC/0053
Edit .github/workflows/check_convocation.yml:
schedule:
- cron: '30 8 * * *' # 2:00 PM IST
- cron: '30 16 * * *' # 10:00 PM ISTUse Crontab Guru to create custom schedules.
- GitHub Actions triggers the workflow twice daily
- Python script launches a headless browser using Playwright
- Script navigates to DTU convocation portal
- Logs in with each roll number variation
- Captures the response and takes screenshot
- Sends everything to your Telegram
100% FREE!
- GitHub Actions: Free for public repositories (2000 minutes/month)
- Telegram Bot: Free forever
- No credit card required anywhere
- All credentials stored as encrypted GitHub Secrets
- Bot token and chat ID never exposed in code
- Screenshots automatically deleted after 7 days
- The script is respectful to the DTU servers with appropriate delays
- Screenshots are uploaded as GitHub artifacts (backup)
- Each roll number is checked sequentially
- Portal text is analyzed to determine status
If you encounter issues:
- Check the Actions tab for error logs
- Verify all secrets are correctly configured
- Ensure date format is exactly dd-mm-yyyy
- Make sure you've started a chat with your Telegram bot
This is an educational project for automating legitimate access to your own convocation portal. Use responsibly and in accordance with DTU's terms of service.
When deployed on Render's free tier, the app may spin down after inactivity. Use the wake-up utility to bring it back online.
A Playwright-based script to wake up the Render app by hitting the health endpoint.
Basic Usage:
# Wake up the app (default 60s timeout)
python wakeup.py
# Custom timeout
python wakeup.py --timeout 90
# With retries
python wakeup.py --retries 3 --timeout 60
# Custom URL
python wakeup.py --url https://dtu-convocation-checker.onrender.com/healthFeatures:
- Waits up to 60 seconds for cold starts
- Retry support for unreliable connections
- Returns JSON response from health endpoint
- Exit code 0 on success, 1 on failure
| Endpoint | Description |
|---|---|
/ |
API info and available endpoints |
/health |
Health check (use for cron jobs) |
/wakeup |
Wake-up status info |
/check |
Trigger convocation check (async) |
/check-sync |
Trigger convocation check (sync) |
For keeping the app alive, set up cron jobs:
- Health endpoint: Hit
/healthevery minute to keep app warm - Check endpoint: Hit
/check2 times daily for convocation checks
Made with ❤️ for DTU students waiting for their convocation dtu-convocation-checker