- Saved searches
- Use saved searches to filter your results more quickly
- License
- radyakaze/phptelebot
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- Простейший бот для Телеграма на PHP
- webhook.php
- tg.class.php
- Разберем отдельно по функциям
- Конструктор
- Функция отправки запроса в телегу
- Функция отправки сообщения — sendMessage
- Функция редактирования текста сообщения — editMessageText
- Функция ответа на событие нажатия кнопки (обратного запроса) — answerCallbackQuery
- Функция редактирования разметки/кнопок — editMessageReplyMarkup
- Primary Sidebar
- О нас
- Полезные ссылки
- Свежие записи
- Editmessagereplymarkup telegram bot пример php
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Telegram bot framework written in PHP
License
radyakaze/phptelebot
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Telegram bot framework written in PHP
To install PHPTelebot with Composer, just add the following to your composer.json file:
< "require": < "radyakaze/phptelebot": "*" > >
or by running the following command:
composer require radyakaze/phptelebot
Composer installs autoloader at ./vendor/autoloader.php . to include the library in your script, add:
require_once 'vendor/autoload.php';
Download the PHP library from Github, then include PHPTelebot.php in your script:
require_once '/path/to/phptelebot/src/PHPTelebot.php';
require_once './src/PHPTelebot.php'; $bot = new PHPTelebot('TOKEN', 'BOT_USERNAME'); // Bot username is optional, its required for handle command that contain username (/command@username) like on a group. // Simple command $bot->cmd('*', 'Hi, human! I am a bot.'); // Simple echo command $bot->cmd('/echo|/say', function ($text) < if ($text == '') < $text = 'Command usage: /echo [text] or /say [text]'; > return Bot::sendMessage($text); >); // Simple whoami command $bot->cmd('/whoami|!whoami', function () < // Get message properties $message = Bot::message(); $name = $message['from']['first_name']; $userId = $message['from']['id']; $text = 'You are '.$name.' and your ID is '
.$userId.''; $options = [ 'parse_mode' => 'html', 'reply' => true ]; return Bot::sendMessage($text, $options); >); $bot->run();
You can also see my other sample.
- If function parameters is more than one, PHPTelebot will split text by space.
- If you don’t set chat_id on options bot will send message to current chat.
- If you add option reply => true, bot will reply current message (Only work if you don’t set custom chat_id and reply_to_mesage_id).
Use $bot->cmd(, ) to handle command.
// simple answer $bot->cmd('*', 'I am a bot'); // catch multiple commands $bot->cmd('/start|/help', function () < // Do something here. >); // call a function name function googleSearch($search) < // Do something here. > $bot->cmd('/google', 'googleSearch');
Use * to catch any command.
This code will send a photo to users when type command /upload.
// Simple photo upload $bot->cmd('/upload', function () < $file = '/path/to/photo.png'; // File path, file id, or url. return Bot::sendPhoto($file); >);
Use $bot->on(, ) to handle all possible PHPTelebot events.
To handle inline message, just add:
$bot->on('inline', function($text) < $results[] = [ 'type' => 'article', 'id' => 'unique_id1', 'title' => $text, 'message_text' => 'Lorem ipsum dolor sit amet', ]; $options = [ 'cache_time' => 3600, ]; return Bot::answerInlineQuery($results, $options); >);
Also, you can catch multiple events:
$bot->on('sticker|photo|document', function() < // Do something here. >);
- * — any type of message
- text – text message
- audio – audio file
- voice – voice message
- document – document file (any kind)
- photo – photo
- sticker – sticker
- video – video file
- contact – contact data
- location – location data
- venue – venue data
- edited – edited message
- pinned_message – message was pinned
- new_chat_member – new member was added
- left_chat_member – member was removed
- new_chat_title – new chat title
- new_chat_photo – new chat photo
- delete_chat_photo – chat photo was deleted
- group_chat_created – group has been created
- channel_chat_created – channel has been created
- supergroup_chat_created – supergroup has been created
- migrate_to_chat_id – group has been migrated to a supergroup
- migrate_from_chat_id – supergroup has been migrated from a group
- inline — inline message
- callback — callback message
- game — game
- channel — channel
- edited_channel — edited channel post
Command with custom regex (advanced)
Create a command: /regex string number
$bot->regex('/^\/regex (.*) (8)$/i', function($matches) < // Do something here. >);
Простейший бот для Телеграма на PHP
Для написания простейшего бота для телеграмма будем использовать схему работы через webhook, те отдадим телеге ссылку, по которой она будет стучаться, когда происходит какое-нибудь событие.
Всего у нас будет 2 файла: webhook.php, который содержит логику работы, и tg.class.php, который содержит методы для отправки сообщений и ответа на запросы.
Для того, что бы телеграм знаю куда стучаться при наступлении события сообщим ему о нашем обработчике открыв в браузере страницу с адресом, обратите внимание, что обязательно нужен SSL: https://api.telegram.org/botAPI_TOKEN_TG/setWebhook?url=https://YOUR_DOMAIN/webhook.php
webhook.php
sendChatAction($tg_id); $sms_rev=''; switch($message_text) < case '/start': $sms_rev = 'Здравствуйте, Вас приветсвует Простейший Бот Telegram! '; break; case '/help': $sms_rev = 'Я могу выполнить следующюю функцию: /rev - переворачиваею строку наоборот. '; break; case '/rev': $sms_rev = strrev($message_text); break; default: $sms_rev ='Команда не распознана'; break; >$tg->send($tg_id, $sms_rev, $rez_kb); exit('ok'); // говорим телеге, что все окей ?>
tg.class.php
token = $token; > public function send($id, $message, $kb) < $data = array( 'chat_id' =>$id, 'text' => $message, 'parse_mode' => 'HTML', 'disable_web_page_preview'=>true, 'reply_markup' => json_encode(array('inline_keyboard' => $kb)) ); $this->request('sendMessage', $data); > public function editMessageText($id, $m_id, $m_text, $kb='') < $data=array( 'chat_id' =>$id, 'message_id' => $m_id, 'parse_mode' => 'HTML', 'text' => $m_text ); if($kb) $data['reply_markup']=json_encode(array('inline_keyboard' => $kb)); $this->request('editMessageText', $data); > public function editMessageReplyMarkup($id, $m_id, $kb) < $data=array( 'chat_id' =>$id, 'message_id' => $m_id, 'reply_markup' => json_encode(array('inline_keyboard' => $kb)) ); $this->request('editMessageReplyMarkup', $data); > public function answerCallbackQuery($cb_id, $message) < $data = array( 'callback_query_id' =>$cb_id, 'text' => $message ); $this->request('answerCallbackQuery', $data); > public function sendChatAction($id,$action='typing') < $data = array( 'chat_id' =>$id, 'action' => $action ); $this->request('sendChatAction', $data); > public function request($method, $data = array()) < $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'https://api.telegram.org/bot' . $this->token . '/' . $method); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); $out = json_decode(curl_exec($curl), true); curl_close($curl); return $out; > >
Разберем отдельно по функциям
Конструктор
Все крайне просто, в конструкторе сохраняем во внутреннюю переменную Api ключ, который получили от BotFather бота телеграмма.
Функция отправки запроса в телегу
public function request($method, $data = array()) < $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'https://api.telegram.org/bot' . $this->token . '/' . $method); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); $out = json_decode(curl_exec($curl), true); curl_close($curl); return $out; >
Отправляем запрос вида https://api.telegram.org/botAPI_KEY/ИМЯ_МЕТОДА по протоколу post через curl.
Функция отправки сообщения — sendMessage
public function send($id, $message, $kb) < $data = array( 'chat_id' =>$id, 'text' => $message, 'parse_mode' => 'HTML', 'disable_web_page_preview'=>true, 'reply_markup' => json_encode(array('inline_keyboard' => $kb)) ); $this->request('sendMessage', $data); >
Получаем в параметрах ID диалога, сообщение и инлайн клавиатуру, если она нужна.
Функция редактирования текста сообщения — editMessageText
public function editMessageText($id, $m_id, $m_text, $kb='') < $data=array( 'chat_id' =>$id, 'message_id' => $m_id, 'parse_mode' => 'HTML', 'text' => $m_text ); if($kb) $data['reply_markup']=json_encode(array('inline_keyboard' => $kb)); $this->request('editMessageText', $data); >
Редактируем с помощью нее сообщение бота в телеграме всемсте с инлайн клавиатурой, если нужно. Получаем в качестве параметров ID чата, ID сообщения, новый текст сообщения, инлайн клавиатуру.
Функция ответа на событие нажатия кнопки (обратного запроса) — answerCallbackQuery
public function answerCallbackQuery($cb_id, $message) < $data = array( 'callback_query_id' =>$cb_id, 'text' => $message ); $this->request('answerCallbackQuery', $data); >
Получаем в параметрах ID обратного запроса и текст ответа.
Функция редактирования разметки/кнопок — editMessageReplyMarkup
public function editMessageReplyMarkup($id, $m_id, $kb) < $data=array( 'chat_id' =>$id, 'message_id' => $m_id, 'reply_markup' => json_encode(array('inline_keyboard' => $kb)) ); $this->request('editMessageReplyMarkup', $data); >
Получаем как параметр ID чата, ID сообщения, новую разметку/клавиатуру. Используем в паре с answerCallbackQuery, для ответа на запрос с заменой разметки.
Primary Sidebar
О нас
Мы занимаемся веб разработкой, автоматизацией бизнес-процессов и сопровождением информационных систем. Если есть вопросы, желание поговорить о Вашем проекте или интерес к сотрудничеству — пишите info@consultapp.ru
Полезные ссылки
Свежие записи
Editmessagereplymarkup telegram bot пример php
Поменять текст на кнопках, не присылая новый экран, можно с помощью запроса к Телеграм API методом editMessageReplyMarkup.
Для этого оформите в конструкторе экраны таким образом:
Рассмотрим более подробно:
1. Добавьте Кнопки. Все кнопки будут переводить на Запрос.
2. Оформите Запрос.
Метод — POST.
URL запроса:
https://api.telegram.org/bot123456789/editMessageReplyMarkup
Где вместо 123456789 — токен вашего бота.
Добавьте Тело запроса:
В Теле запроса в переменная text имеет значения «3» и «4».
Поэтому, когда пользователь нажмет на кнопку 1 или 2 на первоначальном экране, Запросом цифры на кнопках меняются на 3 и 4.
Значения в переменной «text» можно поменять на свои — на текст, который должен быть на кнопках после нажатия.
3. На том же экране, после Запроса, добавьте Перемотку с активным чек-боксом Остановить бота после перемотки до следующего сообщения от пользователя. Перемотка будет переводить на следующий экран с Развилкой.
4. Добавьте Развилку, в которой будет проверяться кнопка, которую нажал пользователь.
Для этого в Имя переменной откуда Развилка возьмет значение добавьте переменную lastUpdate.update.data.value.
Создайте Цели Развилки, которые будут реагировать на возможные значения пользователя.
В нашем примере, проверяются значения kn3 и kn4, так как их мы указали в теле запроса. Вы можете поменять значения на свои, главное, чтобы в Запросе и в Развилке эти значения совпадали.
5. Добавьте на экраны, куда будет попадать пользователь после Развилки, компонент Запрос.
Метод запроса — POST и URL запроса, остаются без изменений, как на « Экране после кнопок».
Когда пользователь окажется на этих экранах, текст на кнопках от бота снова поменяется на текст, который будет в теле запроса в переменной «text» .