Команды и deep links
Команды /start, /help
Команды /start и /help: регистрация в BotFather, парсинг аргументов и обработка сообщений в PHP-боте.
Команды — текст, начинающийся с /, который 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.