<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Telegram Bots</title>
	<atom:link href="https://consultapp.ru/category/stati/telegram/telegram-bots/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>Веб-разработка, сопровождение информационных систем</description>
	<lastBuildDate>Sat, 09 Jan 2021 09:05:45 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>
	<item>
		<title>Простейший бот для Телеграма на PHP</title>
		<link>https://consultapp.ru/simple-bot-for-telegram-php/</link>
		
		<dc:creator><![CDATA[Дмитрий]]></dc:creator>
		<pubDate>Sun, 12 Apr 2020 14:24:26 +0000</pubDate>
				<category><![CDATA[Telegram]]></category>
		<category><![CDATA[Telegram Bots]]></category>
		<category><![CDATA[Статьи]]></category>
		<guid isPermaLink="false">https://consultapp.ru/?p=1070</guid>

					<description><![CDATA[<p>Для написания простейшего бота для телеграмма будем использовать схему работы через webhook, те отдадим телеге ссылку, по которой она будет стучаться, когда происходит какое-нибудь событие. Всего у нас будет 2 файла: webhook.php, который содержит логику работы, и tg.class.php, который содержит методы для отправки сообщений и ответа на запросы. Для того, что бы телеграм знаю куда&#8230;</p>
<p>Сообщение <a href="https://consultapp.ru/simple-bot-for-telegram-php/">Простейший бот для Телеграма на PHP</a> появились сначала на <a href="https://consultapp.ru">ConsultApp.ru</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Для написания простейшего бота для телеграмма будем использовать схему работы через webhook, те отдадим телеге ссылку, по которой она будет стучаться, когда происходит какое-нибудь событие.</p>



<span id="more-1070"></span>



<p>Всего у нас будет 2 файла: webhook.php, который содержит логику работы, и tg.class.php, который содержит методы для отправки сообщений и ответа на запросы.</p>



<p>Для того, что бы телеграм знаю куда стучаться при наступлении события сообщим ему о нашем обработчике открыв в браузере страницу с адресом, обратите внимание, что обязательно нужен SSL: https://api.telegram.org/bot<strong>API_TOKEN_TG</strong>/setWebhook?url=https://<strong>YOUR_DOMAIN</strong>/webhook.php</p>



<h3 class="wp-block-heading">webhook.php</h3>



<pre class="wp-block-code"><code>&lt;?php
define('TGKEY', 'TELEGRAM_API_KEY-insert here your tg api key');
include_once('tg.class.php');

$body = file_get_contents('php://input');
$arr = json_decode($body, true); 

$tg = new tg(TGKEY);

$tg_id = $arr&#91;'message']&#91;'chat']&#91;'id'];
$rez_kb = array();

$message_text = $arr&#91;'message']&#91;'text'];
$tg->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'); // говорим телеге, что все окей
?></code></pre>



<h3 class="wp-block-heading"> tg.class.php</h3>



<pre class="wp-block-code"><code>&lt;?php
class TG {
  
    public $token = '';
  
    public function __construct($token) {
        $this->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&#91;'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;
    }
}</code></pre>



<h2 class="wp-block-heading">Разберем отдельно по функциям</h2>



<h3 class="wp-block-heading">Конструктор</h3>



<pre class="wp-block-code"><code>class TG {
  
    public $token = '';
  
    public function __construct($token) {
        $this->token = $token; 
    }</code></pre>



<p>Все крайне просто, в конструкторе сохраняем во внутреннюю переменную Api ключ, который получили от BotFather бота телеграмма. </p>



<h3 class="wp-block-heading">Функция отправки запроса в телегу</h3>



<pre class="wp-block-code"><code>    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;
    }</code></pre>



<p>Отправляем запрос вида https://api.telegram.org/botAPI_KEY/ИМЯ_МЕТОДА по протоколу post через curl.</p>



<h3 class="wp-block-heading">Функция отправки сообщения &#8212; sendMessage</h3>



<pre class="wp-block-code"><code>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);
    }  </code></pre>



<p>Получаем в параметрах ID диалога, сообщение и инлайн клавиатуру, если она нужна.</p>



<h3 class="wp-block-heading">Функция редактирования текста сообщения &#8212; editMessageText</h3>



<pre class="wp-block-code"><code>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&#91;'reply_markup']=json_encode(array('inline_keyboard' => $kb));

        $this->request('editMessageText', $data); 
    }</code></pre>



<p>Редактируем с помощью нее сообщение бота в телеграме всемсте с инлайн клавиатурой, если нужно. Получаем в качестве параметров ID  чата,  ID сообщения, новый текст сообщения, инлайн клавиатуру.</p>



<h3 class="wp-block-heading">Функция ответа на событие нажатия кнопки (обратного запроса) &#8212; answerCallbackQuery</h3>



<pre class="wp-block-code"><code>public function answerCallbackQuery($cb_id, $message) {
        $data = array(
            'callback_query_id'      => $cb_id,
            'text'     => $message
        );
        $this->request('answerCallbackQuery', $data);
    } </code></pre>



<p>Получаем в параметрах ID обратного запроса и текст ответа.</p>



<h3 class="wp-block-heading">Функция редактирования разметки/кнопок &#8212; editMessageReplyMarkup</h3>



<pre class="wp-block-code"><code>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); 
    }</code></pre>



<p>Получаем как параметр ID чата, ID сообщения, новую разметку/клавиатуру. Используем в паре с <strong>answerCallbackQuery</strong>, для ответа на запрос с заменой разметки.</p>
<p>Сообщение <a href="https://consultapp.ru/simple-bot-for-telegram-php/">Простейший бот для Телеграма на PHP</a> появились сначала на <a href="https://consultapp.ru">ConsultApp.ru</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
