Poll Bot

A friendly scheduling bot for your Telegram group - set it up in about 20 minutes, no coding required.

It posts RSVP polls before each meeting, sends reminders, wishes people happy birthday, and tracks attendance automatically - all driven from one Google Sheet.

Perfect for a church discipleship group (DG), a small group / community group (CG), a sports team, a club, or any group that meets on a schedule.

What it does

Four jobs, all running quietly in the background from your sheet.

Auto RSVP polls

Posts a poll before every event - “Coming / Not coming / Joining online…”.

Reminders

An optional nudge on the day (or X days before) the meeting.

Birthday messages

Automatic happy-birthday posts to the group.

Attendance tracking

A dashboard that fills itself in from poll answers.

📝 Note

Everything is controlled from tabs in your copy of the sheet - you never touch the code.

Before you start

Two things, and about 20 minutes.

  • A Telegram account.
  • The Telegram group where the bot should post - or create a new one.
  • Time needed: roughly 20 minutes, start to finish.

Set-up steps

Follow these in order. Each one builds on the last.

đź“„ Make your copy of the Poll Bot sheet

Make your own copy of the sheet

Click the “Make your copy” button above. Give it a name (e.g. “Friday DG - Poll Bot”). From now on you only work in your copy.

📝 Note

Making a copy automatically brings the code (the “Apps Script”) with it - but the automatic schedule does not copy over. You’ll switch it on in Step 6.

Create your Telegram bot

In Telegram, open a chat with @BotFather. Send /newbot and follow the prompts - you’ll pick a name and a username ending in “bot”. BotFather replies with a bot token that looks like 1234567890:AAH…xyz.

⚠️ Warning

Keep this token private - it’s the password to your bot.

Add the bot to your group

Open your group → Add members → add your new bot. Then make the bot an Admin of the group.

đź’ˇ Tip

Admin lets the bot post polls and messages, and read poll answers reliably.

Find your group’s ID

The quickest way: open Telegram Web in your browser, click into your group, and look at the address bar. The negative number after the # is your Group ID:

https://web.telegram.org/k/#-1001371481828

Copy that whole number, including the minus sign. It looks like -1001371481828 for larger groups, or a shorter -123456789 for smaller ones.

đź’ˇ Tip

Can’t spot it in the URL? Add @RawDataBot to the group for a moment - it prints the chat ID right in the chat - then remove it.

📝 Advanced fallback

Send any message in the group, then visit https://api.telegram.org/bot<TOKEN>/getUpdates (replace <TOKEN> with your token) and look for "chat":{"id":-100…}.

Plug your token & group ID into the sheet

Go to the Settings tab of your copy:

  • Paste your bot token into the “Telegram Bot ID” field - cell E28.
  • Paste your Group ID into the “Telegram Group ID” field - cell E29.

Authorize and turn on the schedule

Reload the sheet. A new menu - “Small Group Assistant” - appears in the top bar.

Click Small Group Assistant → Send Poll Manually. The first time, Google asks you to authorize the script - approve it (it’s your own copy).

📝 Note

If you see “Google hasn’t verified this app,” click Advanced → Go to (project) → Allow. This is normal for personal Apps Scripts.

Now turn on the daily schedule: Extensions → Apps Script → click the clock icon (Triggers) → Add Trigger, twice:

  • Trigger 1: function morningTasks - Time-driven, Day timer, e.g. 7–8 am.
  • Trigger 2: function eveningTasks - Time-driven, Day timer, e.g. 8–9 pm.
đź’ˇ What each one does

morningTasks sends polls, reminders and birthdays, and tidies up. eveningTasks collects the latest poll answers.

Fill in your own content

Calendar tab - each row is one meeting:

  • Date - the meeting date (the bot looks at the next event within 30 days).
  • Poll Question - what the poll asks (leave blank to skip the poll that date).
  • Answer 1–6 - the RSVP options (Answers 2–6 are optional).
  • Reminder (far-right column) - the message sent on reminder day, if reminders are on.

Birthdays tab (optional) - a row per person: Name, Day, Month, optional Year, and a note. On someone’s birthday the bot posts your birthday message.

Settings tab preferences:

  • Day to send poll.
  • Collect responses X days after event (0 = on the day).
  • Automatically hide old events.
  • Send reminders? (On/Off + days before).
  • Send birthday texts? (On/Off; the message uses {{Name}}, which is swapped for each person’s name).

Optional: test it with a private test group first

The smart, low-stress way to make sure everything works before you unleash it on your real group.

đź’ˇ Why bother

You can learn and experiment freely - try polls, reminders and birthdays - without spamming your real group while you figure things out.

1. Create a test group

In Telegram → New Group → name it e.g. “Poll Bot Test” → add yourself and at least one other member (a friend, or your own second account). Telegram needs at least one other member besides the bot. Then add your Poll Bot to it and make it Admin (same as Step 3).

2. Point the sheet at the test group

Get the test group’s ID (same method as Step 4) and temporarily put it in Settings → Telegram Group ID (E29).

3. Add a test event

In the Calendar tab, add a row dated today or tomorrow, with a Poll Question, a couple of Answer options, and a Reminder message.

4. Test the poll

Small Group Assistant → Send Poll Manually. Confirm the poll appears in your test group, and vote on it from your account(s).

5. Test attendance collection

Run it again later - or run the eveningTasks function directly: open Extensions → Apps Script, pick eveningTasks in the function dropdown, click Run. Then check that the Poll Responses / Attendance tabs fill in.

6. Test reminders

In Settings, set “Send reminders?” to On and reminder days to 0. In the Apps Script editor, run the morningTasks function and confirm a reminder posts (it replies to the poll).

7. Test birthdays

Add a Birthdays row with today’s day/month, set “Send birthday texts?” to On, run morningTasks, and confirm the birthday message posts.

📝 Note

Reminders and birthdays have no menu button, so you trigger them for testing by running morningTasks manually in the Apps Script editor.

8. Go live

Once you’re happy: set Settings → Telegram Group ID back to your real group’s ID, remove or fix up the test rows in Calendar/Birthdays, and you’re ready. You can delete the test group (and remove the bot from it) afterwards.

đź’ˇ Tip

If you used one bot for both, you don’t need a new token - just switch the Group ID. If you’d rather fully isolate testing, create a separate test bot with its own token via @BotFather.

Day-to-day use

Once it’s running, there’s very little to do.

  • Mostly hands-off. Keep the Calendar a few weeks ahead and the bot does the rest.
  • Send a poll early / manually. Small Group Assistant → Send Poll Manually.
  • See who’s coming. The Attendance dashboard fills in from poll answers automatically.
⚠️ Warning

Don’t delete old polls in the Polls Sent / Poll Responses tabs - it can corrupt past attendance records. Hide rows instead.

Troubleshooting

The usual suspects, and how to fix them.

No poll posted
Is there a Calendar row with a future date AND a Poll Question? Is the token / Group ID filled in (Settings E28 / E29)? Are the two triggers added (Step 6)?
“Unauthorized” error
Re-run Send Poll Manually and approve the authorization prompt.
Poll posts but answers don’t show
Make sure the bot is a group Admin and the poll is non-anonymous (it is by default).
Nothing happens automatically
Re-check the two time-driven triggers - they don’t copy over with the sheet.
Second poll won’t send
A poll already exists for that event date. Delete the existing Telegram poll first, or change the event date.

Launch checklist

Tick these off and you’re live.

Keep your bot token private - if it leaks, go to @BotFather → your bot → Revoke token, then paste the new one into Settings.