Как сделать бота в Telegram

Всем привет! Давно не писал, и чувствую, что это надо восполнить)
В общем недавно делал бота в телеграмме (@GraphCreator_bot или http://t.me/GraphCreator_bot), который из текстовых файлов делает графики. Не очень полезная штука, но это первый блин.

Создать бота

Итак, как создать бота в телеграмме.
В телеграмме перейдите к «Крёстному отцу» всех ботов — @BotFather. Выберите команду /newbot и дайте ему любое имя. После, введите username (уникальный и заканчивающийся на bot). Отнеситесь к уникальному имени серьёзно, ведь именно по нему будут искать вашего бота. Ваш бот готов! Отец всех ботов пришлёт вам токен вашего бота, который мы и будем использовать. Отца так же можно попросить добавить ботам описание и фото аватара.
На этом можно окончить возню с телеграммом (для отладки лучше скачать десктоп версию кстати!).

Настройка вебхука

Пожалуй наитруднейшая часть.
У вас должен быть SSL сеертификат, а по-обывательски: домен должен начинаться с https. Что бы его приобрести можно пойти двумя путями:
1) Изначально при покупке домена подключить SSL. У многих хостинг-провайдеров есть бесплатные сертификаты (к примеру у TimeWeb).
2) Можно самому на сервере поработать с командной строкой  и сделать «самодельный сертификат». Однако боюсь, что для многих действий потребуется, права администратора, то есть сервер у вас должен быть либо выделенным, либо VDS. Подробнее тут.
Дальше нужно сказать серверу телеграмма, что по такому-то адресу он должен отправлять нам обновления (updates), то есть команды и сообщения, которые он отправляет нашему боту в чат.
Для этого нам нужно отправить запрос от нашего сервера к серверу телеграмма, поэтому напишем сразу команду, которой мы будем отправлять методы и параметры, а она будет выдавать результаты наших запросов.
[Сразу оговорюсь, что я использую фреймворк yii2, поэтому читайте дальше в конце дам совет, если вы не на фреймворке]

Теперь создадим экшн в контроллере, который отправит запрос серверам телеграмма с url нашей странички, которая будет принимать апдейты от сервера телеграмма, а именно от пользователей нашего бота.

После этого переходим по адресу этого php файла и отправляется запрос.
вебхук установлен! Поздравляю, если у вас всё получилось.

Тело бота

Итак, что мы сделали? Установив вебхук, бот работает в следующем режиме:

  1. Пользователь отправляет команду или текст
  2. Оно приходит на сервер телеграмма
  3. Телеграмм тут же «стучиться» в ваш вебхук
  4. Вебхук отправляет запрос телеграмму, а тот наконец пользователю.

Это pull запрос, то есть не мы вытягиваем апдейт с телеграмма, а он идёт к нам.
Как выглядит вебхук. вообще как-то так:

Итак что же такое file_get_contents(‘php://input’) ? php:// — это доступ к различным потокам ввода-вывода. php://input является потоком только для чтения, который позволяет вам читать необработанные данные из тела запроса (подробнее).

А дальше обрабатывайте апдейты как хотите!) Вот пример отправки сообщения с html маркировкой:

Выглядеть это будет так:

На этом можно закончить. Ссылка на методы Bot API https://core.telegram.org/bots/api .

Если вам необходимо выполнить какой-то проект в сфере Телеграмм ботов — обращайтесь: anton@abrekhov.ru !)

Тем, кто не на фреймворке

Итак, если вы скопируете всё, что внутри экшнов и классов и поместите всё в один php файл получится всё то же самое)