1: регистрация бота у @BotFather
Прежде чем начать писать код, нового бота нужно зарегистрировать у «папы всех ботов» — @BotFather, чтобы получить токен (ключ) для работы с Telegram API.
Регистрация проходит в 5 простых этапов:
1) Открываете чат с @BotFather;
2) Вводите или выбираете из списка команду /newbot;
3) Отправляете желаемое название для бота;
4) Пишете юзернейм бота, по которому его будут находить через поиск. Обязательно на конце вашего юзернейма должно быть слово «bot» или «_bot». В моем случаи это @svpt_bot ссылка на него https://t.me/svpt_bot;
5) По желанию можно сразу настроить полное или краткое описание, список команд и аватарку.

По итогу регистрации получаем наш токен — 6604813784:AAHMpxRvi8Dc9M9UlQlUbvchsd_-NYEOtBs
Будьте осторожны: никогда и никому не показывайте токен, иначе ваш бот может быть скомпрометирован. Если по несчастливой случайности кто-то нехороший все-таки узнал ваш токен, то заменить его можно всё в том же @BotFather, нажав на кнопку «Revoke current token» в разделе «API Token».
Шаг 2: выбираем способ обработки запросов
Исходя из официальной документации, Telegram API основан на простых HTTP-запросах. Существует всего два различных способа обрабатывать запросы, которые пользователи будут посылать боту:
1) проверять «вручную», используя «Long Polling»;
2) доверить всё Telegram, поставив «Webhook». В этом случае любой запрос от пользователя Telegram сам будет посылать нам на сервер.
Мы остановимся на втором варианте, но у него есть ограничение: у вас на сайте обязательно должен быть установлен SSL-сертификат, чтобы все запросы проходили через безопасный протокол HTTPS. Самоподписанные и бесплатные сертификаты «Let’s Encrypt», которые поддерживает большинство хостингов, также подходят.
Шаг 3 — Регистрация хука
Регистрация вебхука — это явное указание, по какому https адресу должен вызываться наш php-файл обработчик. Для начала его нужно создать, например index.php в моем случаи po.php или любой другой.
Для установки вебхука(скрипта), который будет обрабатывать команды и отвечать на сообщения, необходимо открыть в браузере такую строку:
https://api.telegram.org/bot6604813784:AAHMpxRvi8Dc9M9UlQlUbvchsd_-NYEOtBs/setWebhook?url=https://sv-pt.ru/1/po.php
Где после слова bot мы вставляем токен выделенный желта красным цветом взятый у бота отца. И выделенное голубым мы вставляем адрес сайта где у нас находится скрипт обработки команд.

В результате открытия этой строки в браузере и нажатии кнопки enter, мы получаем такое сообщение : {«ok»:true,»result»:true,»description»:»Webhook was set»} — это означает, что вебхук установлен и теперь отправленные боту сообщения будут приходить на этот адрес.
4. Задаем список команд.
Теперь создадим список кнопок по которым будут обрабатывается команды. Сообщим о том что они у нас есть в Botfather’а. Идем туда и вбиваем /mybots потом выбираем имя вашего бота в котором будут всплывать команды. Потом Edit Bot и в следующем меню как на картинке выделенное красной точкой Edit Commands. Потом вбиваем в формате как на картинке.

И проверяем в боте появилось ли наше меню.

5. Обработка запросов.
Писать код бота будем на PHP, воспользуемся уже готовой и очень удобной библиотекой c гидхаба или можно скачать у меня с сервера .
Просмотрим сперва полный листинг кода.
<?php
header('Content-Type: text/html; charset=utf-8');
require_once("vendor/autoload.php");
$token = "6604813784:AAHMpxRvi8Dc9M9UlQlUbvchsd_-NYEOtBs";
$bot = new \TelegramBot\Api\Client($token);
$update = json_decode(file_get_contents('php://input'));
file_put_contents(__DIR__ . '/logos',print_r($update,1),FILE_APPEND);
$bot->command('start', function ($message) use ($bot) {
$answer = 'Добро пожаловать. Посетите наш сайт https://sv-pt.ru. Подробное описание по ссылке';
$bot->sendMessage($message->getChat()->getId(), $answer);
});
$bot->command('help', function ($message) use ($bot) {
$answer = 'Команды:
/start - Начало
/help - Помощь
/mess - Сообщение
/foto - Картинки
/doc - Документ
/video - Видео
/gif - Гиф анимация
/knopka - Кнопка
';
$bot->sendMessage($message->getChat()->getId(), $answer);
});
$bot->command('mess', function ($message) use ($bot) {
$mess = 'Текст сообщения';
$bot->sendMessage($message->getChat()->getId(), $mess);
});
$bot->command('foto', function ($message) use ($bot) {
$siteimg = 'https://sv-pt.ru/download/telegram/svpt_bot/bot.png';
$bot->sendPhoto($message->getChat()->getId(), $siteimg,'Отправляем картинку');
});
$bot->command('doc', function ($message) use ($bot) {
$sitedoc = new \CURLFile('file.txt');
//$sitedoc = new \CURLFile('/../telegram/sv-pt.ru/download/telegram/svpt_bot/doc.txt');
//$sitedoc = 'http://sv-pt.ru/download/telegram/svpt_bot/doc.txt';
$bot->sendDocument($message->getChat()->getId(), $sitedoc);
});
$bot->command('video', function ($message) use ($bot) {
$sitevideo = 'https://sv-pt.ru/download/telegram/svpt_bot/sample.mp4';
$bot->sendVideo($message->getChat()->getId(), $sitevideo);
});
$bot->command('gif', function ($message) use ($bot) {
$sitegif = 'https://sv-pt.ru/download/telegram/svpt_bot/bot.gif';
$bot->sendVideo($message->getChat()->getId(), $sitegif);
});
$bot->command('knopka', function ($message) use ($bot) {
$keyboard = new \TelegramBot\Api\Types\Inline\InlineKeyboardMarkup(
[
[
['callback_data' => 'smile4', 'text' => hex2bin('f09f97a1').'Подробная инс.', 'url' => 'https://sv-pt.ru'],
['callback_data' => 'smile4', 'text' => hex2bin('f09f97a2').'Подробная инс. 2', 'url' => 'https://sv-pt.ru'],
['callback_data' => 'smile4', 'text' => hex2bin('f09f97a3').'Подробная инс. 3', 'url' => 'https://sv-pt.ru']
]
]
);
$bot->sendMessage($message->getChat()->getId(),"Перейти на сайт", null, false, null, $keyboard);
});
$bot->run();
?>
Собственно создаем в директорию в моем случаии в папке 1/po.php в котором мы и будем писать код нашего проекта. Внимание: кодировка файла — utf-8 без bom!
6. Код по частям
С помощью команды /start выводим строку приветствия. Выполняется простая работа со строками.
$bot->command('start', function ($message) use ($bot) {
$answer = 'Добро пожаловать. Посетите наш сайт https://sv-pt.ru. Подробное описание по ссылке';
$bot->sendMessage($message->getChat()->getId(), $answer);
});

С помощью команды /help выводим полную справку команд. Которую можно использовать в данном боте.
$bot->command('help', function ($message) use ($bot) {
$answer = 'Команды:
/start - Начало
/help - Помощь
/mess - Сообщение
/foto - Картинки
/doc - Документ
/video - Видео
/gif - Гиф анимация
/knopka - Кнопка
';
$bot->sendMessage($message->getChat()->getId(), $answer);
});

С помощью команды $bot->sendMessage. Мы отправляем свободную строковая переменная по вашему желанию. В данном случаи переменную $mess.
$bot->command('mess', function ($message) use ($bot) {
$mess = 'Текст сообщения';
$bot->sendMessage($message->getChat()->getId(), $mess);
});

Далее обрабатываем фотографии с помощью команды отправки фото $bot->sendPhoto. Используем ссылку на фото и подпись с низу фотографии.
$bot->command('foto', function ($message) use ($bot) {
$siteimg = 'https://sv-pt.ru/download/telegram/svpt_bot/bot.png';
$bot->sendPhoto($message->getChat()->getId(), $siteimg,'Отправляем картинку');
});

Далее идет пример отправки документов с помощью команды $bot->sendDocument.
Документы, в отличие от картинок, на сервер телеграма надо оправлять в POST формате, библиотека сделает все за вас. Для начала файл документа нам надо загрузить в папку с ботом:
$bot->command('doc', function ($message) use ($bot) {
$sitedoc = new \CURLFile('file.txt');
$bot->sendDocument($message->getChat()->getId(), $sitedoc);
});

Далее отправку выполняем с помощью команды отправки видео $bot->sendVideo. Используем ссылку на видео.
$bot->command('video', function ($message) use ($bot) {
$sitevideo = 'https://sv-pt.ru/download/telegram/svpt_bot/sample.mp4';
$bot->sendVideo($message->getChat()->getId(), $sitevideo);
});

Отправка гиф анимации выполняется аналогично видео форматам с помощью $bot->sendVideo.
$bot->command('gif', function ($message) use ($bot) {
$sitegif = 'https://sv-pt.ru/download/telegram/svpt_bot/bot.gif';
$bot->sendVideo($message->getChat()->getId(), $sitegif);
});

Обработка кнопок выполняется с помощью InlineKeyboardMarkup библиотеки. А отправка выполняется как и отправку простого текста $bot->sendMessage. В данном примере выводится три кнопки с помощью hex2bin(‘f09f97a1’) можно вставить понравившиеся смайлики. При нажатии выполняется переход на сайт https://sv-pt.ru
$bot->command('knopka', function ($message) use ($bot) {
$keyboard = new \TelegramBot\Api\Types\Inline\InlineKeyboardMarkup(
[
[
['callback_data' => 'smile4', 'text' => hex2bin('f09f97a1').'Подробная инс. 1', 'url' => 'https://sv-pt.ru'],
['callback_data' => 'smile4', 'text' => hex2bin('f09f97a2').'Подробная инс. 2', 'url' => 'https://sv-pt.ru'],
['callback_data' => 'smile4', 'text' => hex2bin('f09f97a3').'Подробная инс. 3', 'url' => 'https://sv-pt.ru']
]
]
);
$bot->sendMessage($message->getChat()->getId(),"Выберите вариант", null, false, null, $keyboard);
});
