NeuroAgent

Unique Bot Authorization for Different Telegram Chats

Learn how to implement chat-specific authorization for Telegram bots. Alternative methods for access restriction without multiple tokens.

Is unique bot authorization possible for different Telegram chats?

Suppose there is one bot working in 10 chats. Is it possible to create multiple tokens for the bot, each corresponding to a specific chat?

For example, I want that when using token_1, messages can only be sent to chat_1. That is, token_x should correspond to chat_x.

Or can a bot only have one token, and it’s impossible to implement restrictions for different chats?

NeuroAgent

Each bot in Telegram has only one unique token, and it’s impossible to create multiple tokens for a single bot, each of which would be restricted to a specific chat. However, there are alternative ways to implement chat-specific restrictions through the bot’s code and access control.

Table of Contents

Telegram Bot API Restrictions

According to the official Telegram documentation, each bot receives one unique token when created through @BotFather. This is the primary authentication information that provides full access to the bot’s functions.

Your bot token is its unique identifier — keep it safe and share it only with people who require direct access to the bot. [source]

Research shows that the Telegram API does not provide a mechanism for generating multiple tokens for a single bot or restricting tokens to specific chats. A bot token works globally for all chats where the bot is added.

Alternative Authorization Approaches

Although you cannot create tokens with a limited scope, there are effective alternative methods for implementing chat-specific authorization:

1. Filtering by chat_id

The most common approach is to check the chat_id before performing operations:

python
async def restrict_access(update: Update, context: ContextTypes.DEFAULT_TYPE):
    allowed_chats = ['chat_1', 'chat_3', 'chat_5']  # IDs of allowed chats
    
    if update.effective_chat.id not in allowed_chats:
        await update.message.reply_text("Access to this chat is denied")
        return
    
    # Main bot logic
    await update.message.reply_text("Action completed")

2. Setting chat permissions

The Telegram API allows bots to set access permissions for chat members through methods:

  • set_chat_permissions() - setting default permissions
  • restrict_chat_member() - restricting a specific member

The bot must be an administrator in the group or supergroup and have the appropriate rights to manage members. [source]

3. Storing authorization states

Storing authorization information in a database linked to chat_id:

python
# Example storage structure
{
    "chat_1": {
        "authorized": True,
        "permissions": ["read", "write"],
        "last_access": "2025-06-23T10:30:00Z"
    },
    "chat_2": {
        "authorized": False
    }
}

Practical Implementation

Example using python-telegram-bot

python
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, filters

# Configuration
AUTHORIZED_CHATS = {
    'chat_1': True,
    'chat_2': False,
    'chat_3': True
}

async def check_chat_access(update: Update, context):
    chat_id = str(update.effective_chat.id)
    
    if chat_id not in AUTHORIZED_CHATS or not AUTHORIZED_CHATS[chat_id]:
        await update.message.reply_text("Access denied")
        return False
    return True

async def start_command(update: Update, context):
    if not await check_chat_access(update, context):
        return
    
    await update.message.reply_text("Bot started in authorized chat")

async def message_handler(update: Update, context):
    if not await check_chat_access(update, context):
        return
    
    await update.message.reply_text("Your message has been processed")

def main():
    application = ApplicationBuilder().token("YOUR_BOT_TOKEN").build()
    
    application.add_handler(CommandHandler("start", start_command))
    application.add_handler(MessageHandler(filters.ALL & ~filters.COMMAND, message_handler))
    
    application.run_polling()

if __name__ == '__main__':
    main()

Using Webhook with Authorization Check

python
from flask import Flask, request, jsonify

app = Flask(__name__)

AUTHORIZED_CHATS = {'chat_1': True, 'chat_3': True}

@app.route('/webhook', methods=['POST'])
def webhook():
    data = request.json
    chat_id = str(data['message']['chat']['id'])
    
    if chat_id not in AUTHORIZED_CHATS or not AUTHORIZED_CHATS[chat_id]:
        return jsonify({'status': 'access_denied'}), 403
    
    # Process message
    return jsonify({'status': 'ok'}), 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

Method Comparison

Method Advantages Disadvantages Applicability
chat_id filtering Simple implementation, low cost Requires configuration updates Small and medium bots
Setting chat permissions Built-in API functionality Limited capabilities, requires admin rights Bots in groups and channels
Storing states Flexibility, complex access rules Requires database, more complex implementation Large bots with different access rights

Security Recommendations

  1. Token storage: Never store tokens in plain text or in code. Use environment variables or secret management systems.

  2. Regular rotation: Periodically change tokens through @BotFather if you suspect a leak.

  3. IP restriction: If possible, restrict access to your bot’s API to specific IP addresses.

  4. Logging: Keep logs of all access attempts from unauthorized chats.

  5. Multi-factor authentication: For critical functions, use additional verification methods.

Conclusion

  1. No multiple tokens: The Telegram API does not support creating multiple tokens for a single bot with scope limited to specific chats.

  2. Effective alternatives: For implementing chat-specific restrictions, use chat_id checking, setting access permissions through the API, or storing authorization states.

  3. Recommended approach: For most cases, simple filtering by chat_id before performing operations is sufficient, providing a balance between implementation simplicity and reliable protection.

  4. Scalability: For complex scenarios with multiple chats and different access rules, it’s recommended to use a combination of filtering and state storage in a database.

Sources

  1. Bots: An introduction for developers - Telegram APIs
  2. Telegram Bot API - Chat Permissions
  3. How To Limit Access To A Telegram Bot - Stack Overflow
  4. ChatPermissions - python-telegram-bot Documentation
  5. How to implement access control for a Telegram bot - Advanced Web Machinery