Telegram создание бота php — Как создать Телеграм бот на php (инструкция)

В прошлый раз мы разбирали более простой способ создания бота для телеграмм, который не требовал знаний программирования т.к. использовал сторонний сервис и визуальный конструктор. Сегодня предлагаю поднять планку и поговорить о том, как написать бота для Телеграм на php (это язык программирования). Если вы не программист, то материал ниже будет вам непонятен, поэтому советую прочитать другую статью. Итак, начнем.

Подготовка к написанию бота

Прежде чем мы приступим к написанию бота, убедимся, что у нас имеется в распоряжении хостинг и домен с https, а также API токен, который нам выдал Botfather (подробнее о том, как получить API ключ для Телеграмм бота см. тут).

Обращаться к API Телеграма будем при помощи TelegramBotApi. Соответственно, чтобы клонировать проект с Гитхаба нам понадобиться Composer. Composer как правило не устанавливается без файла php.exe. Самый просто способ это исправить — установить Open Server.

Клонирование проекта с Гитхаба

Открываем командную строку, при помощи команды cd заходим в папку в которую будем устанавливать код и выполняем последовательно следующие команды:php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php composer-setup.php php -r "unlink('composer-setup.php');"

Далее устанавливаем telegram-bot/apiphp composer.phar require telegram-bot/api

Заходим в папку и убеждаемся, что все файлы успешно установлены.

Теперь данные файлы помещаем на наш хостинг в папку, в которой будет располагаться наш бот. На этом подготовка завершена — приступим к кодингу.

Кодинг Telegram бота на php

В папке с ботом создадим файл index.php в котором мы и будем писать код нашего бота. Важно! Кодировка файла — utf-8 без bom!

header('Content-Type: text/html; charset=utf-8'); // подключаемся к API require_once("vendor/autoload.php"); // создаем переменную бота $token = "токен, который выдал BotFather"; $bot = new \TelegramBot\Api\Client($token);

После того как мы создали переменную бота $bot, мы можем обращаться к api, но прежде нам необходимо зарегистрировать webhook.

Что такое webhook?

WebHook — это механизм по которому выполняется связка бота с telegram’ом. Когда пользователь в телеграме вводит команду, ее надо каким-то образом передавать на сервер и получать ответ. Webhook как раз для этого и нужен. Он сообщает телеграму куда передавать команды. Поскольку Телеграм НЕ ЗНАЕТ, где именно расположен код нашего бота, то нам нужно это исправить.

Для этой цели у нас существует команда: $bot->setWebhook

// если бот еще не зарегистрирован - регистрируем if(!file_exists("registered.trigger")){ /** * файл registered.trigger будет создаваться после регистрации бота. * если этого файла нет существует, значит бот не * зарегистрирован в Телеграмм */ // URl текущей страницы $page_url = "https://".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; $result = $bot->setWebhook($page_url); if($result){ file_put_contents("registered.trigger",time()); // создаем файл дабы остановить повторные регистрации } } Прежде чем продолжить писать код — сохраним индексный файл и запустим его в том виде, в котором он есть сейчас. После запуска в папке с ботом должен появиться еще один файл — registered.trigger. Если файла появился — значит все сделали правильно и Телеграмм знает, где лежит наш бот.

Обязательные команды для ботов

Теперь необходимо научить нашего бота реагировать на обязательные для всех ботов команды /start и /help.

// обязательное. Запуск бота $bot->command('start', function ($message) use ($bot) { $answer = 'Добро пожаловать!'; $bot->sendMessage($message->getChat()->getId(), $answer); }); // помощь $bot->command('help', function ($message) use ($bot) { $answer = 'Команды: /help - помощь'; $bot->sendMessage($message->getChat()->getId(), $answer); }); // запускаем обработку $bot->run();

Снова сохраняем индексный файл и попробуем потестировать нашего бота! Ура, все пашет! Дальнейший кодинг зависит от поставленной Вами задачи, а потому самое время поговорить о том, как устроена наша API библиотека

Принцип работы библиотеки TelegramBotApi

Команды задаются блоком:

$bot->command('start', function ($message) use ($bot) { });

Где $message — объект Message, все его поля можно посмотреть тут — Types/Message.php

Все команды должны быть до вызова $bot->run();, а иначе не будет работать. Т.е. $bot->run();должен замыкать наш код.

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

Отправка сообщения выполняется командой:$bot->sendMessage(id пользователя которому отправляем, текст сообщения);

Отправка картинок в TelegramBot API

Отправка картинок осуществляется через передачу Телеграмму ссылки на эту картинку. Мессенджер самостоятельно скачивает изображение и отдает пользователю! Для примера отправим юзеру картинку если он введет команду /getpic.// передаем картинку $bot->command('getpic', function ($message) use ($bot) { $pic = "http://binetmed15.beget.tech/wp-content/uploads/forbot.jpg"; $bot->sendPhoto($message->getChat()->getId(), $pic); });

Отправка документов и голосовых сообщений

Документы, в отличие от картинок необходимо оправлять ввиде POST. К счастью, библиотека TelegramBotApi сделает все что нужно без нашего с вами участия. Сначала загрузим документ в папку с нашим ботом (см картинку ниже)

Для отправки документа используем следующий код:

// передаем документ $bot->command('getdoc', function ($message) use ($bot) { $document = new \CURLFile('sendfrombot.txt'); $bot->sendDocument($message->getChat()->getId(), $document); });

Обратите внимание, что строчка

$document = new \CURLFile('sendfrombot.txt');

предполагает размещение txt-файла sendfrombot в в корневой папке бота. Однако, можно передавать в переменную и обычный урл. С передачей голосовых сообщения (войсов) ситуация аналогична:

// передаем войс $bot->command('getvoice', function ($message) use ($bot) { $voice = "http://binetmed15.beget.tech/wp-content/uploads/glazunov_maxim-prividenie.mp3"; $bot->sendVoice( $message->getChat()->getId(), $voice //, //$duration, //$replyToMessageId, //$replyMarkup, //$disableNotification ); });

Получение сообщений из чата

Для получения данных из чата в API имеется команда .on(). С ее помощью мы можем прикрутить к нашему телеграм-боту, нейросеть для анализа сообщений или соорудитеь простенькую болталку по алгоритму Маркова, для отправки случайных сообщений в ответ на месенджы пользователя. Выглядеть это может примерно так:

// болталка $bot->on(function($Update) use ($bot){ $message = $Update->getMessage(); $mtext = $message->getText(); $cid = $message->getChat()->getId(); if(mb_stripos($mtext,"привет бот") !== false){ $bot->sendMessage($message->getChat()->getId(), "и тебе здорова, чувак!"); } }, function($message) use ($name){ return true; // когда тут true - команда проходит });

Сообщаем Botfather-у список наших команд

После того как команды прописаны необходимо сообщить Botfather’у об их наличии (строго говоря это не является обязательным, но желательно все же добавить). Открываем чат с Botfather и вбиваем /setcommands (в случае опечатки используем команду /setcommands для переопределения).

Теперь потестим нашего телеграм-бота.

Как видим, все ок! Теперь вы знаете как создать своего бота на php для телеграмма. Успехов в разработке! В следующий раз мы продолжим дорабатывать нашего бота и разберем как добавить кнопки, а пока рекомендую скачать исходники текущего урока:

Поделиться:
Нет комментариев

Добавить комментарий

Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.