Найти тему
КОНТЕКСТ РЕШАЕТ

КАК СОЗДАТЬ ПРОСТОГО БОТА ДЛЯ ТЕЛЕГРАМ НА PHP

Оглавление
КАК СОЗДАТЬ ПРОСТОГО БОТА ДЛЯ ТЕЛЕГРАМ НА PHP
КАК СОЗДАТЬ ПРОСТОГО БОТА ДЛЯ ТЕЛЕГРАМ НА PHP

Здравствуйте, дорогие читатели. Раз вы здесь, то пришли вы сюда из поиска по фразе "бот для телеграм на пхп". И работающего бота вы сделать сможете, прочитав данную статью. Вопросы для чего вам бот в Телеграм, здесь не обсуждаются, хотя мы сами используем собственного публичного бота @novelsite_bot для информирования о нас и наших услугах и сборе заявок. А также у нас есть закрытый бот, который мы используем как информатор в CRM (уведомления, свои задачи) и как показала практика — это действительно удобно.

Итак,

Создадим простого бота для мессенджера Telegram с использованием PHP. Данная статья создана исключительно в поучительных целях и не претендует на полноту или правильность подхода. Весь код бота очень простой и может быть освоен начинающими PHP-разработчиками.

Предупреждаю сразу профессионалов и перфекционистов от программирования — вам здесь делать нечего. Никаких фреймворков и гитхабов! Все будет очень просто и примитивно, но работать будет. И это главное. Всем счастья:)

ШАГ 1: ПОДГОТОВКА

Что нам понадобится:

  1. Веб-сервер с работающим PHP 5.6 и выше — не локальный веб-сервер, а веб-сервер на хостинге, что важно! Так как сервисы Telegram должны будут видеть вашего бота по внешней URL-ссылке;
  2. Веб-сервер должен работать через https — то есть на веб-сервере должен быть установлен давно (больше суток назад) зарегистрированный SSL-сертификат. Достаточно будет бесплатного Let's Encrypt SSL-сертификата;
  3. Доступ к файлам на этом сервере, конечно же — иначе как мы что-то сделаем;
  4. Установленная кодовая страница UTF-8 на сервере по-умолчанию или добавьте в файл .htacces в корне сайта строку AddDefaultCharset utf-8;
  5. Аккаунт в мессенджере Telegram;
КАК СОЗДАТЬ ПРОСТОГО БОТА ДЛЯ ТЕЛЕГРАМ НА PHP
КАК СОЗДАТЬ ПРОСТОГО БОТА ДЛЯ ТЕЛЕГРАМ НА PHP

ШАГ 2. РЕГИСТРАЦИЯ ВАШЕГО БОТА В ТЕЛЕГРАМ

Да, да. Бот еще даже не создан, но перед этим его уже нужно зарегистрировать, чтобы получить уникальный идентификатор, чтобы в дальнейшем обращаться к BOT API Telegram.

  • Для этого заходим в Телеграм в специального бота @BotFather и присоеденяемся к нему — кнопка Присоединится, при этом бот выдаст команду /start — это базовая команда любого бота;
  • @BotFather вас поприветствует и можно посмотреть все команды, введя /help
  • Создаем бота, введя /newbot
  • И вводим имя бота и username, чтобы не заморачиваться — введите одинаково, но помните, что username вводится на латинице и в конце должно быть _bot, например:
    username: verysimple_bot — подходит
    username: verysimplebot — не подходит
  • Далее @BotFather вас поздравит и выдаст ключ или токен бота для HTTP API — по сути это строка из номера (ID) бота и набора случайных символов, примерно в таком виде:
    1234567899:AAKJhkkjhkjhKhKhjkhkhk_kJhgkjhJhgjghjhG
    Запомните свой токен — он нам понадобится дальше.
  • Далее можно задать картинку (аватар) бота, введя /setuserpic
    - Можно использовать любую вашу картинку в формате JPG, PNG, загрузив её после этой команды.
  • Можно приступать к программированию...

ШАГ 3. СОЗДАЕМ КОД БОТА

Будем делать прямо в корне сервера (не самый верный подход, можно создать папку bot, а в ней уже файл verysimple_bot.php). Для этого на сервере создадим файл verysimple_bot.php в котором и будет весь код бота. Не забываем, что весь код в файле verysimple_bot.php должен быть в кодировке UTF-8.

Для редактирования файлов кода и заброске их на сервер удобно использовать FAR Manager — в нем есть и подсветка синтаксиса и FTP/SFTP клиент для копирования файла на сервер.

Делаем заготовку бота, который сможет выдавать список команд и информацию о нас - код вы можете посмотреть на нашем сайте "Новый Сайт"

ШАГ 4. ДЕЛАЕМ WEBHOOK И КОНКРЕТИЗИРУЕМ КОД БОТА

Итак, базовый код бота мы сделали. Он сможет отвечать на 2 команды: /help (Помощь) и /about (Информация о нас). Но как теперь это заставить работать и, как работает функция message_to_telegram?

  1. Чтобы все заработало, нужно сособщить сервису Телеграм, что наш бот лежит там-то — используй его код для такого-то бота verysimple_bot.
    Для этого нужно сформировать ссылку, которая называется WebHook и её мы и сообщим телеграму:

    https://api.telegram.org/bot1234567899:AAKJhkkjhkjhKhKhjkhkhk_kJhgkjhJhgjghjhG/setWebhook?url=https://www.mysite.ru/verysimple_bot.php

    Не забываем где красное заменяем на свои данные!
    Как сформируете эту ссылку — вставьте её в браузер и запустите!

    Если все пройдет правильно, то ответ на эту ссылку в браузере будет примерно такой:
      {"ok":true,"result":true,"description":"Webhook was set"}
  2. Функция message_to_telegram отправляет сообщение через Telegram Bot API в диалог бота, формируя массив в нужном формате через вызов библиотеки CURL (обычно встроена в PHP). С CURL более правильно и структурировано работает с https-запросами.

    То есть мы обращаемся к телеграм бот API, указав ему нашего бота и сделав запрос /sendMessage и передав наш текст, а бот Api уже "запихает" это сообщение в мессенджер Телеграм — и мы увидем реультат. Получается цепочка:Пользователь в диалоге с ботом пишет запрос, например /help
    Telegram Bot API через WebHook, что мы установили, берет этот запрос и отправляет в код бота
    Мы в боте получаем его, анализируем, видим  например, /help и через Telegram Bot API и
    функцию message_to_telegram отправляем ответ — который появлется в диалоге как ответ бота.

ШАГ 5. ДОБАВИМ ВОЗМОЖНОСТЬ ДЕЛАТЬ ЗАЯВКИ ЧЕРЕЗ БОТА

Заявкой будем считать сообщение или вопрос, которое можно будет отправить через нашего бота какому-то пользователю, назовем его менеджер компании. То есть нам нужно организовать такую цепочку:

  1. Пользователь запрашивает у бота "Оставить заявку", например набрав команду /order
  2. Бот входит в режим ожидания текста Заявки
  3. Если пользователь ввел текст и нажал Enter, только тогда отослать это сообщение заранее запрограммированному по менеджеру компании.

Получим идентификатор chat_id пользователя кому нужно отсылать заявки:

  1. Помните наш файл message.txt — вот он сейчас понадобится
  2. Присоединяемся к нашему боту тем пользователем, кому будем слать заявки (менеджер компании)
  3. Сразу открываем файл message.txt и смотрим блок: [chat]

                [chat] => Array
                    (
                        [id] => 123456789
                        [first_name] => manager
                        [last_name] => company
                        [username] => username
                        [type] => private
                    )
  4. Сохраняем это в коде бота сверху и добавим переменную состояния бота:
-3

Сохраняем состояние бота для каждого пользователя

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

Напишем две функции: set_bot_state($chat_id, $data) и get_bot_state($chat_id) — которые сохраняют текущее состояние бота и получают соответсвенно, для нужного пользователя. Сохранять будем в подпапке /users на сервере, которую создадим предварительно не забыв дать права на запись. Состояния будут хранится все в тех же текстовых файлах с именами chat_id пользователей и содержать последнюю команду:

-4

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

Этот код вы можете посмотреть на нашем сайте "Новый Сайт"

ШАГ 6. РЕГИСТРАЦИЯ КОМАНД БОТА

Теперь, если у вас все работает и бот отзывается на все команды, можно будет зарегистрировать эти команды у отца ботов @BotFather

  • Заходим к боту @BotFather
  • Запрашиваем установку команд /setcommands
  • Выбираем нашего бота
  • Вбиваем команды (без слешей вначале):
    help - список команд
    about - о нас
    order - оставить заявку
  • Все — теперь в вашем боте появится список команд, если нажать в диалоге /

Вот и все — простой бот работает! Всем спасибо, если дочитали и что-то заработало.

Автор: Николай Комарков

Подписывайтесь на наш канал для получения новых знаний и ставьте лайк, если материал оказался полезным для Вас.

Агентство интернет-маркетинга Новый Сайт