# Создание 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/>
