Telegram Bot Inline Keyboard with Dynamic Menus & Rating System

Go to Workflow
0 views
Built by Ruslan Elishev Ruslan Elishev
Created on June 08, 2026

Description

🤖 Telegram Bot with Dynamic Menus & Rating System

What It Does

This n8n workflow creates an interactive Telegram bot with:
Dynamic inline keyboards that respond to user clicks
5-star rating system for collecting feedback
Personalized responses using the user's actual name
Multi-level menu navigation (Main → Settings → Profile, etc.)
Real-time message updates when buttons are clicked

How It Works

Receives messages via Telegram webhook trigger node
Extracts user data (name, ID, message type)
Builds dynamic menus based on user actions
Sends/updates messages with inline keyboards
Handles button clicks without page refresh

🚀 Setup Instructions

Get Your Bot Credentials
Configure Workflow
Open "Set Bot Token" node
Replace token with yours
Save and activate workflow (Active)

Test Your Bot

Message your bot on Telegram
Click the buttons to navigate menus
Try the rating system on Feature 1

🎨 Customization Guide

Add New Menu Items

In the "Prepare Response" Function node, add new cases:
case 'your_feature':
responseText = 'Your feature description';
keyboard = [
[{ text: '🎯 Button 1', callback_data: 'action1' }],
[{ text: '🔙 Back', callback_data: 'main' }]
];
break;

Modify Rating Options

Change star buttons to numbers or emojis:
// Current: ⭐⭐⭐
// Alternative: 1️⃣ 2️⃣ 3️⃣ or 👎 👍

Change Bot Responses

Edit responseText for message content
Modify keyboard arrays for button layout
Add HTML formatting: bold, italic

💡 ++Key Features Demonstrated++

HTTP Request workaround for dynamic keyboards (n8n Telegram node limitation)
Callback query handling to prevent loading animations
Message editing vs sending new messages
User data extraction from Telegram API
Switch-case menu routing for scalable navigation

⚠️ ++Important Notes++

Limitation: n8n's native Telegram node doesn't support dynamic inline keyboards, this is why need to use HTTP nodes.
Solution demonstrated: Use HTTP Request node with Telegram Bot API directly

Nodes Used (1)

HTTP Request
n8n-nodes-base.httpRequest