# Создание Telegram бота на PHP #2: создание первого бота для Telegram

Во втором уроке я вам покажу как создать бота для Telegram и мы попробуем отправить несколько сообщений в чат.

Полный список всех записей курса находится на сайте <https://prog-time.ru/course_cat/telegram-bot-basic/> или в публикациях на Хабр <https://habr.com/ru/users/Prog-Time/posts/>

Для того чтобы создать бота, нам необходимо сделать несколько последовательных действий.

1\) Вам нужно авторизоваться в Telegram аккаунте

2\) В поиске найти пользователя @BotFather

<figure><img src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/3d3/461/b61/3d3461b61ed65cda1303619f332cf0bf.jpeg" alt="" height="371" width="1024"><figcaption></figcaption></figure>

3\) Отправить сообщение боту — `/newbot`

<figure><img src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/f09/549/9e3/f095499e3368c739dbe6d88eeb5e5031.png" alt="" height="107" width="1024"><figcaption></figcaption></figure>

4\) После отправки запроса , нужно указать имя бота

<figure><img src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/987/f51/8f4/987f518f451dd20abdf8879abd7fc783.png" alt="" height="100" width="584"><figcaption></figcaption></figure>

5\) После этого дублировать название бота, но только суффиксом `_bot`

<figure><img src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/aaf/d34/e23/aafd34e23e7270c08f08fe1f9ce1c231.png" alt="" height="319" width="796"><figcaption></figcaption></figure>

6\) После успешной регистрации бота, [@BotFather](https://t.me/BotFather) пришлёт вам сообщение с токеном, который вам нужно сохранить, в дальнейшем он нам понадобится.

7\) Теперь нам нужно создать чат в который мы добавим нашего бота

<figure><img src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/367/b70/187/367b701871c1821c17be06182556c062.jpeg" alt="" height="672" width="1024"><figcaption></figcaption></figure>

<figure><img src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/20f/53c/229/20f53c2291d4de4c297b7b86f4bf2cb4.png" alt="" height="366" width="1024"><figcaption></figcaption></figure>

<figure><img src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/9eb/5fe/19e/9eb5fe19e00fe133f972ca8a81faea3a.png" alt="" height="404" width="850"><figcaption></figcaption></figure>

8\) Далее нам нужно получить `id` нашего бота. Для этого нужно перейти по следующей ссылке, где вместо символов X нужно подставить ваш токен:\
<https://api.telegram.org/botXXXXXXXXXXXXXXXXXX/getUpdates\\>
Не закрывайте эту страницу, после 9 пункта, её нужно будет обновить.

9\) Теперь вам необходимо отправить команду `/join` в чат для активации бота. После отправки команды, вам нужно обновить страницу, чтобы сделать повторный запрос.

Здесь вам нужно записать следующий фрагмент кода — id вашего бота.

Вам нужен id со знаком минус.

```
"my_chat_member":{"chat":{"id":-594377170, ...
```

#### Пример отправки сообщения боту в Telegram

Теперь давайте попробуем отправить сообщение нашему боту методом GET запроса.

Здесь мы создаём переменные в которые заносим токен, id чата и сообщение. Сообщение мы прогоняем через функцию **urlencode()** для формирования специальный кодировки, для создания запросов.

А в конце мы используем функцию **file\_get\_contents()** для отправки запроса.

```
$token = "5340791844:AAEXXD786InvQrlWHRXykV91USOQSevrPVU";
$chat_id = -594377170;

$textMessage = "Тестовое сообщение";
$textMessage = urlencode($textMessage);

$urlQuery = "https://api.telegram.org/bot". $token ."/sendMessage?chat_id=". $chat_id ."&text=" . $textMessage;

$result = file_get_contents($urlQuery);
```

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

Информацию по использованию данной библиотеке, вы можете получить в следующей записи — <https://prog-time.ru/parsing-php-biblioteka-curl/>

Давайте посмотрим код для запросов, с использованием Curl.

```
$token = "5340791844:AAEXXDduvInvQrlykV91USOQSevrPVU";

$getQuery = array(
     "chat_id" 	=> 1424625511,
     "text"  	=> "Новое сообщение из формы",
     "parse_mode" => "html",
);
$ch = curl_init("https://api.telegram.org/bot". $token ."/sendMessage?" . http_build_query($getQuery));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);

$resultQuery = curl_exec($ch);
curl_close($ch);

echo $resultQuery;
```

Теперь мы получили более удобочитаемый код, благодаря записи параметров в массив **$getQuery**. При такой структуре, вам не нужно переписывать URL запроса, изменения вносятся только в массив **$getQuery**, а функция **http\_build\_query()** сама добавит строку параметров в URL запроса.

В дальнейших уроках, мы будем пользоваться библиотекой Curl, но вы должны понимать что многие запросы можно отправлять через функцию file\_get\_contents. Нужно просто составить правильный URL.

У нас получилось отправить сообщение в Telegram с помощью нашего бота. Теперь давайте посмотрим на ответы которые отправляет нам Telegram.

#### Разбор ответа от Telegram.

При создании запроса к боту, Telegram всегда отправляет ответ, который вы можете записать в переменную и вывести на экран.

Если вы допустили ошибку, то вам придёт сообщение с параметрами, в которых указан код ошибки с описанием.

В зависимости от метода работы, вам будут возвращаться разные ответы. В прошлом уроке мы с вами рассматривали документацию, где я рассказывал о типах данных которые вам могут прийти в ответе.

Сейчас давайте попробуем сделать запрос на отправку сообщения и разобрать полученный ответ.

```
{
  "ok": true,
  "result": {
    "message_id": 12,
    "from": {
      "id": 5340791844,
      "is_bot": true,
      "first_name": "test_prog_time",
      "username": "test_prog_time_bot"
    },
    "chat": {
      "id": 1424646511,
      "first_name": "Илья",
      "last_name": "Лящук",
      "username": "iliyalyachuk",
      "type": "private"
    },
    "date": 1658907913,
    "text": "Новое сообщение из формы"
  }
}
```

В ответе мы видим следующее:

* Параметр «ok» — описывает успешность отправки запроса
* «result» — возвращает массив с данными ответа, в которых:
  * «message\_id» — id созданного сообщения
  * «from» — кто отправил сообщение
  * «chat» — данные о чате в который попало сообщение
  * «date» — дата создания сообщения
  * «text» — текст сообщения

Подведём итог.

* Все боты для Telegram создаются через **BotFather**
* Для отправки запросов вы можете использовать функцию file\_get\_contents или воспользоваться библиотекой Curl
* Каждый запрос в Telegram возвращает ответ с описание результата запроса.

Третий урок уже на Хабр - <https://habr.com/ru/post/697002/>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://book.konstantinsecurity.com/readme/architect/bots/telegram/sozdanie-telegram-bota-na-php-2-sozdanie-pervogo-bota-dlya-telegram.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
