Бот для телеграмма на php - IT Новости
Microclimate.su

IT Новости
371 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Бот для телеграмма на php

Пишем бота для Telegram на php

Вступление

Сегодня telegram является активно развивающейся платформой, а потому актуально будет осветить для широкой аудитории тему создания собственных ботов для этого мессенджера. Хотя-бы поверхностно. Для полноценного освящения этой темы я планирую написать две статьи, первая для php вторая для c#. Почему две? Дело в том, что правила телеграма(защищенность) задают для ботов очень жесткие правила размещения. В частности бот должен находиться на https домене. Сегодня мы будем рассматривать именно такой вариант бота, как наиболее очевидный. К сожалению, разрабатывать бота вам придется прямиком на сервере, то есть я предполагаю что у читателя уже есть свой домен и собственно уже налажен ftp доступ к этому домену. На дэнвере php боты работать не будут. Ну ладно не буду врать — можно сделать чтобы оно и на дэнвере работало, но давайте не будем писать такие велосипеды в этой статье и подождем до следующей, в которой я как раз опишу данный способ на примере с c#(а нахрена нам php с дэнвером когда есть такой замечательный инструмент). В этой статье мы общаемся с telegram api через webhook, это для особо прошаренных. Читающий статью человек должен уметь пользоваться: ftp, ssh(консоль сервера).

Шаг первый. Домен и https

Начнем пожалуй с домена, на котором будет размещаться наш будущий бот. Я беру свой старый домен — вебача. Как вы видите там нет https и я не покупал для этого домена https сертификат. Но тем не менее сертификат нужен иначе бота там не разместить. К счастью, есть cloudflare, который, в числе прочих преимуществ, дает нам возможность использовать эмулированный https. Переносим наш домен туда, это делается очень быстро бесплатно и автоматически. Зарегистрируйтесь, нажмите addsite поменяйте ns адреса у домена и все будет установлено. Если этого краткого описания вам не достаточно — можете нагуглить в сети мануал по подключению cloudflare, моя статья этому не посвящена.

И так мы подключили домен. Теперь надо перейти на панель своего сайта:

После чего выбрать вкладку Crypto и пункт SSL установить в flexible.

Что делает этот пункт? Он эмулирует безопасное соединение до вашего сайта.
Проверяем — https://2webach.ru/

Как вы видите — все работает. У вас должно быть абсолютно так-же, без этого, бота вы запустить не сможете! Будет выдаваться ошибка «HTTP Version Not Supported», так что если вы пришли на эту страницу в поисках решения — перечитайте данный пункт внимательно и повторите все то я описал.

Шаг второй. Знакомство с Botfather.

Botfather — это такой бот, через которого регистрируют все остальные боты. Без него нам никак не обойтись, поэтому давайте откроем telegram и перейдем по ссылке — BotFather

Там все крайне просто, вбиваем /help и смотрим на список доступных команд:

собственно сейчас нас интересует команда /newbot, пишем ее и создаем бота указывая его название. В данном случае я назову своего бота — Рев.ком.стих и будет он у нас выдавать стихи о Маяковского и Есенина (когда я его доделаю, однако весь процесс в эту статью я включать не буду).

Нам выдадут токен, на скриншоте он замазан в целях…, ну вы сами понимаете. Этот токен нам и нужен, сохраните его куда-нибудь в текстовый файл, он нам еще пригодится.

Далее можно задать оформление для бота. Например картинку — логотип. Для этого используем команду /setuserpic после чего загружаем картинку. Так-же задаются описание бота и прочие вещи до которых вы допрете и без моего участия.

Ну и чтобы проверить установилась картинка или нет переходим на бота вбивая его имя через собачку в поиск

Теперь надо сделать боту доступ к сообщениям пользователей, то есть выключить нахер приватный режим. Если мы планируем добавлять бота в группы или конфы, назовите как хотите, в любом случае приватность нам нахер не нужна. Чтобы ее выключить вбиваем команду /setprivacy после чего выбираем пункт — disabled. Обязательно выполните этот шаг, если вы хотите сделать действительно интерактивного бота.

Теперь самое время заняться backend частью, а именно написанием кода для команд нашего бота, но сначала настроим среду разработки.

Шаг третий. Среда для разработки.

Собственно в качестве библиотеки для обращения к API я буду использовать данный проект — TelegramBotApi у которого нифига нет документации, зато код довольно просто читается. В любом случае в этой статье я постараюсь описать максимально подробно все варианты работы с этой библиотекой, так что документация вам не понадобится вообще.

Но сначала давайте ее установим. Для этого будем использовать composer. Короче говоря будем делать все по «правилам», если этот термин вообще применим к php. Хороший язык, гибкий, не вгоняет в рамки, я знаете ли люблю его за эту вот гибкость. Но любителям «сапога в жопе» конечно всегда больше подходят ruby или какой-нибудь go в котором даже нормально библиотеку в своей папке не разместить, только в gopath. Однако так уж вышло, что данную библиотеку руками ставить будет геморойнее, чем через composer, я тут непричем, просто экономия времени. Для начала нам понадобится ssh соединение с вашим сервером. Для таких дел я предпочитаю ZOC terminal т.к. работаю из под windows. Скачать этот продукт можно на торрентах, сами найдете короче. Далее запускаем ваш терминал и заходим на сервер, после чего переходим к директории нашего домена(команда cd).

Я не хочу размешать наш проект в корне директории, потому что там может быть например… форум. А вот в подпапке — запросто. Так что давайте эту самую подпапку и создадим через команду mkdir

В данном случае подпапка называется ‘revcom_bot’.

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

Просто вставляете их в ssh консоль по очереди и все.

Отлично, если вы справились с этой задачей, то далее нам следует установить компонент telegram-bot/api, для этого просто пишем в консоли:

После чего проверяем создались ли новые файлы в нашей директории. Вклчаем FTP менеджер, у меня это WinScp (бесплатное приложение, советую вам использовать его вместо глючной файлзиллы), переходим в папку проекта и смотрим что там есть:

Отлично. Вот теперь можно начинать писать код.

Шаг четвертый. Кодинг

Минимальная версия PHP

Для использования кода, который я демонстрирую, у вас должен стоять минимум php-5.6

Собственно создаем в директории файл index.php в котором мы и будем писать код нашего проекта. Внимание: кодировка файла — utf-8 без bom! Вообще описание кода по шагам это не моя сильная сторона, поэтому я просто буду вставлять код с комментариями в статью, а вы читайте и повторяйте.

После того как переменная бота создана мы можем обращаться к api, но сначала нам надо зарегистрировать webhook.
Что такое webhook? Это такой механизм по которому выполняется связка бота с telegram’ом. Когда пользователь в телеграме вводит команду ее надо как-то передать в на сервер и получить ответ. Webhook как раз это и делает — указывает телеграму куда передавать команду пользователя. Но так как изначально телеграм НЕ ЗНАЕТ где мы разместили нашего бота, то надо ему об этом обязательно сообщить.
Для этого у нас есть команда: $bot->setWebhook

Отлично, можно запустить наш бот и проверить, перейдя к нему из браузера. Если в папке бота создался файл registered.trigger значит телеграм теперь знает о том, где находится наш бот.

Приготовления пройдены, самое время зарегистрировать первые команды для бота. В спецификации телеграма сказано, что каждый бот должен отвечать на две обязательные команды. Первая команда — /start и вторая — /help, создадим их.

Читать еще:  Языковой обмен по скайпу

Отлично! А теперь давайте разберемся немного с API нашей библиотеки.

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

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

Отправка сообщения выполняется командой:

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

Отправка картинок пользователю выполняется через передачу телеграму ссылки на эту картинку. Телеграм САМ скачивает изображение и отдает пользователю, нам ничего качать не надо! В качестве демонстрации я загружу сейчас на свой блог изображение и отошлю его пользователю на команду /getpic.

Как вы видите — все работает.

Отправка документа

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

После чего добавить такую команду:

Точно так-же можно передать войсы:

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

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

Дабы сделать это у API есть очень годная команда .on() ее мы и будем использовать в самой простой из форм.

Этот метод так-же позволит вам прикрутить к телеграму, например, нейросеть для анализа сообщений или алгоритм Маркова, чтобы развлекать публику генерацией случайного бреда.

Задаем список команд

Теперь команды работают а значит настало время сообщить о том что они у нас есть в Botfather’а. Идем туда и вбиваем /setcommands

И к стати если вы где-то опечатались можете заново вбить /setcommands и переопределить команды.

Смотрим добавились команды на страницу бота или нет:

Заключение

Думаю этого будет достаточно. Статья получилась полной, я разве что не осветил методы отправки аудио файлов, но думаю вы и сами сможете на них посмотреть без моего в этом участия — тут, я ведь разобрался, хоть и не нашел ни документации нормальной ни освещения данных вопросов в интернете. Зато теперь в этой статье я рассказал вам все что сам знаю о создании ботов к telegram на php. Однако, как я говорил выше эта статья всего лишь часть всех возможностей. Советую вам прочитать вторую статью уже про C# и работу с telegram api БЕЗ webhook, https и прочих геморроев. Проще говоря хостинг не понадобится.

Надеюсь, дорогой читатель, что я не зря писал эту статью. Ах да.

Скачать исходники

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

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

Сегодня поговорим о том, как написать бота для Телеграм на php. Материал рассчитан на программистов начального уровня, владеющих азами php. Итак, начнем.

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

Прежде чем мы приступим к созданию бота, убедимся в том, что в нашем распоряжении имеются хостинг, домен и SSL-сертификат для него (т.е URL начинается с https).

BotFather. Получение API токена

1. Авторизуемся в Телеграмм. Через поиск находим BotFather (https://web.telegram.org/#/im?p=@BotFather), добавляемся к нему нажав «Start»;
2. Вводим /start
3. Появится список команд, доступных для работы с этим ботом. Введём /newbot
4. Придумываем уникальное имя для нашего бота. Например arch_wood
5. Вводим уникальное имя пользователя для бота, которое обязательно должно оканчиваться на _bot. В примере выше я придумал arch_wood_bot. Если имя уже занято, вы получите сообщение «Sorry, this username is already taken. Please try something different.» Тогда придется придумать что-то другое.
6. После того как уникальное имя боту будет задано мы получим сообщение с ключем (токеном), который будет выделен красным либо синим цветом (зависит от активной цветовой схемы месенджера). Например: 314548665:AAtttG4r4OF_QzMsaZjTpvN9Mb04ttYi6GA
7. Копируем ключ. Переходим к кодингу.

Работа с TelegramBotApi

Дабы облегчить себе жизнь, взаимодействовать с 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/api

php composer.phar require telegram-bot/api


Откроем в бразуере папку с проектом и убедимся, что все файл установились.

Далее нам нужно скопировать их на хостинг, в папку, в которой будет располагаться наш бот. Наконец можно приступить к непосредственному кодингу бота.

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

В папке с ботом создаем файл index.php.

Пропишем заголовки и подключим АПИ.

header(‘Content-Type: text/html; charset=utf-8’);
// подключаемся к API
require_once(«vendor/autoload.php»);
// создаем переменную бота
$token = «токен, который выдал BotFather»;
$bot = new TelegramBotApiClient($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()); // создаем файл дабы остановить повторные регистрации
>
>

Сохраняем индексный файл в том виде, в каком он есть сейчас, а после обратимся к этому файлу по прямому URL. После первого такого обращения в папке с ботом должен появиться 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();

Cохраняем индексный файл и тестировать нашего бота! Ура! Все прекрасно работает! Дальнейший кодинг зависит исключительно от стоящих перед Вами задач. Мне лишь остается ознакомить вас с общим принципом работы библиотеки TelegramBotApi.

Как работает библиотека TelegramBotApi

Все команды TelegramBotApi задаются блоком:

$bot->command(‘start’, function ($message) use ($bot) <
>);

Где $message — объект Message. Советую ознакомиться со всми возможными полями здесь — Types/Message.php

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

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

Отправка сообщения выполняется командой:

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

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

Чтобы переслать пользователю картинку — достаточно передать ее URL. Мессенджер самостоятельно скачает, сконвертирует, а затем перешлет изображение пользователю. В качестве примера запрограммируем команду /getpic.

// передаем картинку
$bot->command(‘getpic’, function ($message) use ($bot) <
$pic = «https://icopydoc.ru/wp-content/uploads/fortelegrambot.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 = «https://icopydoc.ru/wp-content/uploads/maxim_glazunov-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 для телеграмма. Успехов в разработке!

Телеграм бот на PHP

Передо мной появилась задача сделать телеграм бота на PHP. Я нашел два варианта решения этой задачи. Первый вариант, используя библиотеку telegram api, второй вариант без использования каких-либо библиотек. Сначала я будут инструкции, которые применимы к этим двум вариантам, а после рассмотрим каждый вариант более подробно

Обратите внимание, что действия указанные в этой статье, я делал на реальном сервере и домене у которого есть сертификат безопасности ssl, т.е. домен доступен по https. Телеграм требует этот сертификат.

Итак для начала нам необходимо создать нашего телеграм бота, для этого в телеграме необходимо найти телеграм бота @BotFather, в диалоге с этим ботом введите команду /newbot, после чего задайте имя и никнейм вашего бота. Вам будет предоставлен уникальный токен, сохраните его куда-нибудь, он вам еще пригодится.

Если вы хотите использовать вашего бота в чатах, то необходимо изменить его приватность. Для этого в диалоге с @BotFather введите команду /setprivacy, вам надо установить значение приватности в Disable.

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

Первый вариант. Библиотека telegram api

Для работы с телеграм ботом, вам надо выбрать папку на вашем сервере, в которой вы будете с ним работать, у меня это будет — mysite.ru/botinfo.

Установим библиотеку telegram api, которая упростит нам взаимодействие с ботом. Откройте консоль, перейдите в папку, которую вы выбрали и выполните следующие команды:

Этими командами вы установите composer, при помощи которого мы и скачаем библиотеку для работы с телеграмом. Выполните команду:

Этой командой вы установили библиотеку.

Теперь в папке, в моем случае это папка botinfo, создадим файл index.php в этом файле будем писать код для работы с нашим ботом.

Пример моего php кода в файле index.php

В моем примере бот, на команду /start будет отвечать «Привет!», а на сообщение +, будет отвечать «-«.

Условие if(!file_exists(«registered.trigger»)) нужно для того, чтобы телеграм бот понимал куда ему обращаться на вашем сайте, вам надо будет запустить этот файл из браузера, один раз, чтобы появился файл registered.trigger

Вы можете полазить по папкам библиотеки, которую вы скачали и посмотреть какую информацию может получить ваш бот. Ниже я приведу пару примеров таких функций и расскажу, что ими можно делать. Все эти функции я буду использовать в блоке $bot->on

$message->getFrom()->getId() — Уникальный идентификатор пользователя;

$message->getFrom()->getFirstName() — Имя пользователя;

$message->getFrom()->getLastName() — Фамилия пользователя;

$message->getFrom()->getUsername() — Никнейм пользователя;

$message->getChat()->getTitle() — Название чата;

$message->getChat()->getId() — Уникальный идентификатор чата;

$message->getDate() — Дата сообщения, в формате unix;

Пример получения координат, которые пользователь передал, отправив геолокацию в телеграме:

Пример получения фото, которое отправил в телеграм пользователь:

Данный код, сохранит отправленную пользователем в телеграме картинку, к вам на сервер. Если вас не устраивает размер картинки, то можете поэксперементировать и заменить $photoInfo[0] на $photoInfo[1]. Как я понял в этом массиве содержатся разные размеры изображения.

Пример кода, для отправки фото

Этот код отправит фото, в тот чат, откуда был задан вопрос — $message->getChat()->getId(). В переменной $pic содержится ссылка на фото, которое вы хотите отправить.

Второй вариант. Создание телеграм бота, без библиотек.

Прежде всего рекомендую вам ознакомиться с документацией, которую дает телеграм — https://core.telegram.org/api

Для начала я приведу вам пример кода двух файлов, после чего разберу и поясню, что написано в каждом из этих файлов.

После того как создадите эти файлы, дайте знать телеграму куда ему слать информацию, это делается ссылкой: https://api.telegram.org/botВАШТОКЕН/setWebhook?url=ССЫЛКА_НА_telegrambot.php

Используя эти два файла, ваш телеграм бот на любое сообщение будет отвечать «Нас не догонят!» Разберемся, что у нас написано в файле telegrambot.php.

Переменная $body содержит информацию в json формате, которая приходит от телеграм. Как вы наверное уже догадались в переменной $chat_id у нас находится id чата, в переменной $userTgId — id пользователя, который послал сообщение, в $text — текст сообщения, которое послал пользователь, в переменных $coord1 и $coord2 будет информация о координатах, в случае если пользователь отправил геолокацию.

Если вам интересны все данные, которые приходят от телеграм, то советую эти данные записать в какой-нибудь файл, к примеру:

После чего можете отослать сообщение своему боту, затем открыть файл test.txt и посмотреть информацию в json формате, которая пришла когда вы отправили своему боту сообщение.

Пример такой информации:

Как вы могли заметить, в этом примере, есть «photo», что говорит нам о том, что боту послали фото. Для того, чтобы сохранить фото, которое послали вашему боту, необходимо в файле telegrambot.php использовать следующий код:

Кстати, если мы говорим о фото, которые вы посылаете телеграму, то имейте ввиду, что он их сжимает. Если вам надо получить информацию о фото, например какие-нибудь exif данные, то советую отправлять фото, как файл.

У вас также есть возможность отправить клавиатуру или кнопки в чат. Пример отправки кнопок в чат:

Пишем телеграмм бота на PHP

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

Постановка задачи

Реализовать простого бота на PHP с двумя командами:

  • /start — отправка приветственного сообщения (эта команда вызывается всегда при добавлении бота и нажатия кнопки «Start» в чате)
  • /quote — отправка случайной цитаты

Что потребуется

  • PHP 5.5+
  • установленный composer
  • телеграмм клиент

Ограничения

Бот для телеграмм может работать одним из двух вариантов:

  • опрашивать api по крону через метод getUpdates. Для этого придется хранить идентификатор последнего сообщения и обрабатывать только новые.
  • установить callback бота на ваш url. В данном случае обрабатываем входящие сообщения мгновенно, не заботимся об очереди, но потребуется https домен.

Остановимся на втором варианте.

Часть 1. Регистрация и настройка бота

Для начала необходимо создать нового бота. Добавляем себе в контакт-лист «крестного отца» @BotFather . Отправляем команду /newbot и самое сложное — придумываем название и имя бота. Есть небольшое ограничение, которое позволяет отличить бота от реального человека — это наличие суффикса bot в имени. Например, MyAwesomeBot или my_awesome_bot .

Когда бот создан, вы получаете его токен вида 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11 . Сразу установим наши команды для удобства использования. Для этого отправим /setcommands для BotFather. Он предложит выбрать одного из ваших ботов и задать для него список доступных команд в указанном виде. Отправим в ответ

Важно заметить, что эти команды не имеют ничего общего с теми, что мы будем реализовывать в скрипте. Это просто «выпадающие подсказки». На этом административная часть закончена, перейдем к программной.

Часть 2. Реализация самого приложения

Создаем новую директорию и переходим туда. Далее устанавливаем расширение для работы с telegram-api с помощью composer:

Читать еще:  Телеграм каналы про бизнес

Создадим директорию web и укажем ее в качестве web-root для нашего домена в настройках сервера. Тут будут храниться наши скрипты доступные из web. Такая структура крайне желательна, так как она не дает получить доступ к остальным файлам с кодом, что является хорошей практикой в плане безопасности.

Настройки бота и список цитат вынесем в отдельный файл data/config.php

Заменяем botToken на полученный от BotFather и дополняем файл своими цитатами.

Далее нам необходимо произвести регистрацию web-хука. Сделать это можно только через API, поэтому создадим одноразовый файл set-webhook.php внутри папки web со следующим содержимым:

Важно! Название my-secret-webhook.php дано просто для примера. В реальных условиях оно должно иметь несвязанную тарабарщину (например, mu4OG-70sYakjrPcLf_DqHwTX4Ijr6B-.php ). Это сократит возможность несанкционированного доступа к файлу с целью передачи «плохих данных» в скрипт.

Теперь обращаемся к файлу set-webhook.php из браузера. На странице должна отобразиться цифра «1». После этого удаляем файл, он больше не потребуется.

Теперь впереди осталось то, ради чего все затевалось — реализация логики работы самого бота. Создадим файл web/my-secret-webhook.php

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

Данная статья содержит один из самых простых примеров реализации телеграмм бота на php и имеет ряд недостатков. Например

  • весь код реализации содержится в одном входном файле
  • не отлавливаются исключения и не логируются ошибки
  • валидность конфигурации не проверяется и написана не в самом удобном виде

Есть и другое применение ботов — это отправка оповещений о каких-либо действиях (например, новое письмо с сайта или изменение статуса заказа), но это тема для отдельной статьи.

Как создать Bot Telegram на PHP

Бот – это учетная запись, для которой не требуется указания номера телефона. Принцип его действия очень прост: посылайте запросы в Телеграмм, созданные по определенным правилам. Самое главное – знать Bot API. Создание Bot Telegram на PHP основано на отправке GET или POST запросов на сервер API. Сделать это не сложно.

Требования к хостингу

Телеграмм принимает только защищенные сертификатами безопасности команды. То есть, все они передаются по протоколу https. Поэтому вы должны иметь хост, который имеет купленный или установленный самоподписанный сертификат безопасности. Мы расскажем, как создать телеграмм бот php на примере хостинга beget.ru, так как он предоставляет ssl сертификат.

Если у вас нет собственного домена, то его надо приобрести или создать. Процесс установки сервера, открытия его для сети и установка ssl-соединения – это тема отдельной статьи. Если вы не специалист в этих вопросах – проще купить готовый вариант. В среднем стоимость самого простого хостинга составляет 1000-1500 р. в год. Проследите, чтобы он поддерживал работу с PHP и имел SSL.
Также можете воспользоваться облачными сервисами. Например, cloudflare.

Создание бота

Зайдите в мессенджер. Сделать это можно с любого устройства, указав свой телефон. На этот номер придет код доступа. Стоит заметить удобство регистрации – нет необходимости помнить учетные данные и пароль. Регистрируя одно устройство и заходя затем с другого, Телеграмм «запоминает» эту связку. Эта технология называется Cloud Password Telegram.

После входа необходимо создать новый бот. Для этого зайдите в Телеграмм и найдите @BotFather.

Пройдите всю процедуру пошагово:

  • Укажите имя для посетителей.
  • Укажите имя для бота.

По желанию определите описание (description) и другие параметры. В итоге вы получите токен – уникальный идентификатор вашего робота. Его надо сохранить.

Настройка домена

Прежде чем писать Telegram бот на PHP, необходимо настроить среду для ее работы. Используя файловый менеджер своего хостинга создайте директорию для программы. Далее следует настроить WebHook.

Телеграмм дает два способа получать информацию о действиях пользователей:

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

Чтобы подключить WebHook необходимо послать в мессенджер команду:
https://api.telegram.org/botВАШ_ТОКЕН/setWebhook?url=ВАШ_ДОМЕН

Если делать это из адресной строки браузера, вы получите ответ:

Если вы используете самоподписанный сертификат, то в качестве второго параметра следует передать ссылку на файл сертификата.

Далее мы будем делать это программным путем. Если необходимо удалить WebHook, передайте в качестве url пустой параметр.

Команды PHP для обработки сообщений

Программируя бот для Телеграмм на PHP, мы используем команды библиотеки Curl, которые позволяют отправить запрос на сервер и получить результат. Также будем использовать команду file_get_contents(), которая позволит получить JSON-строку – ответ из Телеграм. Для парсинга строки JSON используется функция json_encode().

Команды библиотеки Curl:

  • curl_init() — открыть сеанс
  • curl_close() — закрыть сеанс
  • curl_exec() — выполнить запрос
  • curl_setopt() – установка опций
  • CURLOPT_RETURNTRANSFER — указание на возврат ответа в виде строки, а не вывода на экран.
  • CURLOPT_CONNECTTIMEOUT — время ожидания ответа
  • CURLOPT_TIMEOUT — время в секундах выполнения
  • CURLOPT_USERAGENT — установка заголовков
  • CURLOPT_URL — адрес, куда отправляется запрос. У нас это api.telegram.org
  • CURLOPT_POST — сообщение о том, что отправляется POST методом
  • CURLOPT_POSTFIELDS — указание данных для POST запроса в виде массива

Ниже приведена программа установки WebHook с комментариями.

//Запись в переменную первой части адреса бота с указанием токена
$url=»https://api.telegram.org/bot507226896:AAGT_fsEO1milOkqbNp-VolQDJ0tGjaPvD7/»;
//Инициализация запроса
$con = curl_init();
//Запоминаем в переменную дескриптор команды установки WebHook
$wh=$url.»setWebhook?url=https://tuolalbn.beget.tech/anna_bot/»;
//Устанавливаем опции запроса
curl_setopt($con, CURLOPT_URL, $wh);
curl_setopt($con, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($con, CURLOPT_HEADER, 0);
//Выполняем запрос, устанавливающий WebHook
$output = curl_exec($con);
//закрываем запрос
curl_close($con);
?>

Сохраните эту программу как wh.php в созданной директории на хостинге и запустите ее из адресной строки:
ВАШ_ДОМЕН/НАЗВАНИЕ_ДИРЕКТОРИИ/wh.php

Приведем пример простой программы отправки сообщений пользователю.

$url=»https://api.telegram.org/bot507226896:AAGT_fsEO1milOkqbNp-VolQDJ0tGjaPvD7/»;
//читаем результат из стандартного потока, в который PHP записывает полученные данные
$a=file_get_contents(‘php://input’);
$content = json_decode($a);
//получаем значение chat_id – идентификатор чата с пользователем, отправившим сообщение
$chatID=$update[‘result’][0][‘message’][‘chat’][‘id’];
//Инициализируем новый запрос
$ch = curl_init();
//Формируем строку запроса – отправка пользователю сообщения «hello»
$msg=$url.»sendMessage?chat_id=».$chatID.»&text=Hello»;
//Настраиваем запрос
curl_setopt($con, CURLOPT_URL, $msg);
curl_setopt($con, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($con, CURLOPT_HEADER, 0);
//Выполняем запрос
$output = curl_exec($con);
//Закрываем запрос
curl_close($con);
?>

Вышеприведенный код PHP на любое сообщение пользователя выдает ему «Hello». Если добавить в код проверку введенной строки, можно обработать любое сообщение: приветствие, команды и т.д.

Главное понимать, что все запросы в бот строятся с помощью команд Telegram Bot API. Мы привели пример использования sendMessage. Перечень доступных команд можно взять в документации к Telegram Bot API — https://core.telegram.org

Например, команда для отправки контакта будет иметь следующий вид:
https://api.telegram.org/botВАШ_ТОКЕН/sendContact?chat_id=ЧАТ_ID&phone_number=ТЕЛЕФОН&first_name=ИМЯ&last_name=ФАМИЛИЯ

Для получения последнего сообщения пользователя можно воспользоваться следующим алгоритмом:
//в массиве хранится история сообщений бота
$update = json_decode($content, true);
//выясняем размер массива – количество сообщений
$n=count($update[‘result’]);
//получаем текст последнего
$text=$update[‘result’][$n-1][‘message’][‘text’];

Вы можете настроить вывод команд в боте, используя различные объекты. Самый простой вариант – стандартный ввод в виде «/команда». С помощью строковых функций PHP не сложно организовать проверку переданного пользователем текста и используя условный переход запустить то или иное действие.

Второй вариант – создание кнопок-команд. Пользователь получает своеобразное меню. Такое вы можете увидеть, например, в боте @Strawberry Logic.

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

  • ReplyKeyboardMarkup
  • KeyboardButton
  • ReplyKeyboardHide
  • InlineKeyboardMarkup
  • InlineKeyboardButton

В адресной строке пример команды встроенной клавиатуры будет иметь вид:
https://api.telegram.org/botВАШ_ТОКЕН/sendMessage?chat_id=ЧАТ_ID&text=Hello&reply_markup=<‘inline_keyboard’:[[<‘text’:’Согласен’,’callback_data’:’/yes_call’>,<‘text’:’Не согласен’,’callback_data’:’/no_call’>

У вас в боте должны быть созданы команды /yes_call и /no_call. В качестве обратного вызова (callback) вы можете задавать любые свои команды.

Код реализации в PHP:
$button_yes = array(‘text’ => ‘Согласен’, ‘callback_data’ => ‘/yes_call’);
$button_no = array(‘text’ => ‘не согласен’, ‘callback_data’ => ‘/no_call’);
$keyboard = array(‘inline_keyboard’ => array(array($button_yes, $button_no)));
$params[‘reply_markup’] = json_encode($keyboard, TRUE);
$con = curl_init();
$msg=$url.»sendMessage?chat_id=».$chatID.»&text=Hello&reply_markup=».$params[‘reply_markup’];
curl_setopt($con, CURLOPT_URL, $msg);
curl_setopt($con, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($con, CURLOPT_HEADER, 0);
$output = curl_exec($con);

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

0 0 голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector