Hardcoded inline keyboards in Telegram bots break the moment content changes. If you have 5 order statuses today and 7 next month, you're back in the scenario editing it manually.
The pattern
Pull your button options from Airtable (or any data source) at runtime. In Make, this looks like:
- Trigger (webhook or schedule)
- Search Airtable records — returns a list of items
- Iterator — processes each item one by one
- Array Aggregator — collects results into a JSON array formatted as Telegram inline keyboard buttons
- Send/Edit Telegram message with the aggregated keyboard
Each button object: {"text": "Order #42", "callback_data": "order_42"}. The aggregator builds the array; you pass it as reply_markup.inline_keyboard.
Callback handling
When a user taps a button, the bot receives a callback_query with your callback_data. Parse it in a Router to branch into the right flow — no hardcoded conditionals needed if your data is structured cleanly.
Limits to watch
Telegram limits inline keyboards to 100 buttons total. If your dataset can exceed this, add filtering before the iterator — show only the most relevant items, with a "load more" option.