Daily
Send birthday wishes and payment links on each person's preferred app
Each day, contacts due a message get a personal note on WhatsApp or Telegram, whichever they prefer, and every send is logged.
- Runs
- Daily
- Apps
- Telegram, WhatsApp Business
- AI
- Not needed
- Access
- whatsapp_business_messaging; bot token
Send this to your assistant
Create a ClickRuntime automation: every morning, check my contacts list for birthdays and payment reminders due today, send each person a message on their preferred app, and log what was sent.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Clubs, tutors and small service businesses keep in touch with their people through a mix of WhatsApp and Telegram. Birthday messages and payment reminders matter, but sending them one by one from a phone is easy to forget.
Keeping one contact list with each person's preferred app and letting the day's messages go out automatically means nobody is forgotten and nobody gets a message on an app they don't use.
What you get out of it
Nobody forgotten
Everyone due a message today gets one.
The right app for each person
Each contact is messaged where they prefer.
Personal touch
Messages include the person's name and their own details, like the amount due.
A log of what was sent
You can see who was messaged and when.
How it works
What happens, step by step
Every morning it reads your contact list.
It picks people with a birthday or payment due today.
Each person gets a personal message on WhatsApp or Telegram, whichever they prefer.
Each send is logged so nobody is messaged twice in a day.
Before it runs live
- Connect Telegram
- Connect WhatsApp Business
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Run it at a different time, more or less often, or only on weekdays
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Slack
- Combine it with other Telegram and WhatsApp Business steps into one automation
Under the hood
The code that runs this automation
import csv, io
from datetime import date
from clickruntime import on_trigger, credentials, http, state, log
CONTACTS_CSV = "https://example.com/contacts.csv"
WA = "https://graph.facebook.com/v20.0/your-phone-number-id/messages"
def wa_template(to, name, params):
body = {"messaging_product": "whatsapp", "to": to, "type": "template", "template": {"name": name, "language": {"code": "en"},
"components": [{"type": "body", "parameters": [{"type": "text", "text": str(p)} for p in params]}]}}
return http.post(WA, headers={"Authorization": f"Bearer {credentials.secret('WHATSAPP_TOKEN')}"}, json=body).json()
TG = "https://api.telegram.org"
def tg(chat_id, text):
http.post(f"{TG}/bot{credentials.secret('TELEGRAM_BOT_TOKEN')}/sendMessage", json={"chat_id": chat_id, "text": text})
@on_trigger
def run(event):
today, sent = date.today(), 0
for c in csv.DictReader(io.StringIO(http.get(CONTACTS_CSV).text)):
birthday = c["birthday"][5:] == today.strftime("%m-%d")
due = c.get("due_date") == today.isoformat()
key = f"{today}:{c['name']}"
if not (birthday or due) or state.get(key):
continue
text = f"Happy birthday, {c['name']}! 🎉" if birthday else f"Hi {c['name']}, a reminder that {c['amount']} is due today: {c['link']}"
if c["channel"] == "telegram":
tg(int(c["telegram_id"]), text)
else:
wa_template(c["phone"], "birthday" if birthday else "payment_due", [c["name"]] if birthday else [c["name"], c["amount"], c["link"]])
state.set(key, True)
log.info("sent", {"to": c["name"], "channel": c["channel"]})
sent += 1
return {"sent": sent}FAQ
Common questions
Where does the contact list live?
Can I include payment links?
Will someone get a message twice in one day?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Get filtered job, news or market alerts on Telegram and WhatsApp
Every hour new items from your feeds are filtered for what you care about and the matches arrive on Telegram and WhatsApp.
See how it worksSend error alerts to WhatsApp and Telegram
When a job fails, you get an alert on both WhatsApp and Telegram, with repeats held back.
See how it worksGet new sales on Telegram and WhatsApp
Every new sale or order pings you on both Telegram and WhatsApp with the amount and what was bought.
See how it worksKeep exploring
Set up “Send birthday wishes and payment links on each person's preferred app” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.