Как получать данные из API Telegram Bot

Давайте теперь научимся работать с API. Данные из API получать очень легко, это может быть GET или POST запрос по URL. Давайте посмотрим как строится такой URL:

https://api.telegram.org/bot<токен>/<метод>

<токен> - это ваш ключ, который вы получили в боте @BotFather. Про это мы писали на странице "Получаем токен".

<метод> - это что то вроде команды для API, что бы оно поняло что нам нужно. На данный момент их около 78. Но они не все нужны. Про некоторые обязательно поговорим более подробно дальше в этом руководстве. Полный список вы можете найти в официальном руководстве.

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

Ответ приходит в формате JSON. Ответ будет содержать поле ok, которое может быть равно true или false. Если все хорошо, то true и тогда в поле 'result' будет нужный ответ, а если false то где то ошибка. Думаю будет понятней на примерах.

Давайте попробуем два метода: посмотрим информацию о боте и отправим себе сообщение.

Получаем информацию о боте

Что бы получить информацию о текущем боте можно использовать метод getMe, который возвращает базовую информацию про бота. Давайте составим запрос. Для этого возьмем тестовый токен из статьи «Получаем токен», который 1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890. Получается у нас будет ссылка для запроса:

https://api.telegram.org/bot1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890/getMe

Так как нам никак не нужно обрабатывать данные у нас на сервере, а только один раз посмотреть данные, то давайте просто откроем ссылку в браузере.

Если вы подставили свой токен, то вы должны увидеть ответ как у меня. Поздравляю, вы отправили первый запрос к API Telegram. И так что мы видим: результат ok у нас true, а значит можно посмотреть массив result.

  • id - уникальный идентификатор бота.
  • is_bot - если true то это бот.
  • first_name - название бота.
  • username - логин бота, который используется в ссылке.
  • can_join_group, can_read_all_group_messages, supports_inline_queries - дополнительные настройки, которые можно настроить в @BotFather, пока нам это не нужно.

Отправка себе сообщения

Теперь давайте попробуем отправить себе сообщение из нашего бота. Для этого нам нужен метод sendMessage, но к нему мы должны добавить минимум два параметра: chat_id и text. Этим методом нужно будет часто пользоваться и поэтому мы обязательно рассмотрим все дополнительные параметры.

  • chat_id - этой ваш уникальный идентификатор в Telergam, что бы бот понял кому отправлять сообщение. Важно: Боты могут отправлять сообщения только тем кто запустил их. Поэтому вам нужно найти вашего бота в Telegram и нажать кнопку "Запустить". Что бы узнать свой id зайдите в бота @getmyid_bot и нажмите "запустить". Бот пришлет сообщение в котором будет "Your user ID: 12345678910". Эти цифры и есть ваш id.
  • text - это сообщение которое нужно отправить. Если отправлять его через GET запрос, то нужно будет закодировать его через urlencode. К примеру, мы хотим что бы бот отправил нам сообщение "привет". Идем на сайт www.urlencoder.org и там пишем "привет" в форме и жмем "ENCODE". Сайт закодирует это сообщение. Еще вариант: этот текст написать в поиске яндекса, а потом скопировать куда нибудь адресную строку из браузера. В ней будет GET параметр "text", который будет содержать закодированое сообщение. В итоге мы получаем строку %D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82.

Составляем запрос соединяя параметры через символ &:

https://api.telegram.org/bot1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890/sendMessage?chat_id=12345678910&text=%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82

Теперь открываем ссылку в браузере и видим ответ от API. Если все сделали правильно то пункт "ok" будет true и вам придет сообщение от бота.

Вот так вот мы научились отправлять сообщения в боте. Конечно потом мы будем использовать POST запрос через PHP, а не открывать запросы в браузере. Это мы сделали для наглядности.

Кстати иногда бывают случаи когда не нужно делать запросы к api, а просто быстро уведомить о чем нибудь, то можно просто отправить сообщение. Для этого можно использовать такой скрипт:


//токен api
$token = '1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';

//текст сообщения
$text = urlencode('Уведомление о событии');

//telegram id того кого нужно уведомить
$chat_id = '12345678910';

//отправка сообщения
file_get_contents('https://api.telegram.org/bot'.$token.'/sendMessage?chat_id='.$chat_id.'&text='.$text);


Опубликовано: 6 ноября 2023
Автор: Семен