Commands & deep links

Commands /start, /help

Команды — текст, начинающийся с /, который Telegram распознаёт и подсвечивает в интерфейсе. Они используются для запуска бота, вызова справки и любых явных действий пользователя.

Стандартные команды: /start и /help

Эти команды Telegram ожидает увидеть у любого бота. /start вызывается при первом запуске бота пользователем и при переходе по deep link вида https://t.me/your_bot?start=payload — тогда после команды придёт аргумент (payload). /help обычно выводит список возможностей.

Telegram передаёт такие сообщения как обычные message с полем entities, в котором есть тип bot_command, и text вида /start payload_123.

Регистрация команд в BotFather

Telegram подсвечивает команды только если они зарегистрированы у BotFather. Откройте @BotFather → /setcommands, выберите бота и отправьте список построчно:

start - Начать работу с ботом
help - Список команд
catalog - Открыть каталог товаров
order - Оформить заказ

Этот же список отображается в меню бота и подсказывается при вводе /.

Обработка входящего update

В обработчике polling/webhook отделяйте команду и её аргумент. Простейший парсер:

<?php
function parseCommand($text) {
    if (!isset($text[0]) || $text[0] !== '/') return null;
    $text = strtok($text, "\n");
    $botUsername = strtolower($_ENV['BOT_USERNAME'] ?? '');
    $parts = explode(' ', $text, 2);
    $cmd = $parts[0];
    if ($botUsername !== '') {
        $at = '@' . $botUsername;
        if (substr($cmd, -strlen($at)) === $at) {
            $cmd = substr($cmd, 0, -strlen($at));
        }
    }
    return [
        'name'  => strtolower($cmd),
        'arg'   => $parts[1] ?? '',
    ];
}

$msg = $update['message'] ?? null;
if ($msg && isset($msg['text'])) {
    $parsed = parseCommand($msg['text']);
    if ($parsed) {
        switch ($parsed['name']) {
            case '/start':
                $chatId = $msg['chat']['id'];
                $arg    = $parsed['arg'];
                $text = $arg !== '' ? "Привет! Вы перешли по ссылке с кодом: $arg"
                                     : "Привет! Я бот. Введите /help для списка команд.";
                apiRequest('sendMessage', ['chat_id' => $chatId, 'text' => $text]);
                break;
            case '/help':
                $help = "/catalog — открыть каталог\n/order — оформить заказ";
                apiRequest('sendMessage', ['chat_id' => $msg['chat']['id'], 'text' => $help]);
                break;
        }
    }
}

Суффикс @your_bot в команде добавляется автоматически в групповых чатах, чтобы указать, какому именно боту адресована команда. Поэтому его нужно обрезать перед сравнением.

Команды в группах

По умолчанию бот реагирует на все сообщения в группе. Если хотите обрабатывать только команды — фильтруйте по entities[].type === 'bot_command'. Так вы отсеете обычный текст, случайно начинающийся с /.

Стандартные /start и /help — это точка входа пользователя в бота и основа навигации. После них логично подключать Reply Keyboard для главного меню или Inline Keyboard для действий.

Дальше: Deep links.