Как отправить telegram сообщения средствами php

05.11.2016
Захотелось мне отправлять сообщения с raspberry pi через teleпрам. Как не странно, но интернет, в основном, изобилует примерными с установкой дополнительного софта, который еще нужно настроить, а сама отправка делается через sh файлы. А вот дельных примеров работы с API на php, не оказалось.

На мой взгляд отправка telegram сообщения на php универсальнее, да и не требует дополнительного софта и настроек

По сути, нужно вызвать api https://api.telegram.org/botID:HASH/sendMessage?chat_id=111&text=Nice+to+meet+you

- где botID:HASH - идентификатор бота, от имени которого будут приходить сообщения; chat_id - идентификатор чата, в который писать; text - текст сообщения

 
<?
  define('BOT_TOKEN', '123:AAAAAA');
  define('API_URL', 'https://api.telegram.org/bot'.BOT_TOKEN.'/');

  /**
  * Отправление сообщений
  * 
  * Документация: https://core.telegram.org/api
  * 
  * 
  */
  class soTelegramMessager
  { 
    /**
    * Делает запрос к серверу
    * 
    * @param resource $handle
    * 
    * @return boolean
    */
    protected function _exec_curl_request($handle)
    {
      $response = curl_exec($handle);
      if ($response === false)
      {
        $errno = curl_errno($handle);
        $error = curl_error($handle);
        error_log("Curl returned error $errno: $error\n");
        curl_close($handle);
        return false;
      }

      $http_code = intval(curl_getinfo($handle, CURLINFO_HTTP_CODE));
      curl_close($handle);
      if ($http_code >= 500)
      {
        // do not wat to DDOS server if something goes wrong
        sleep(10);
        return false;
      }
      else if ($http_code != 200)
      {
        $response = json_decode($response, true);
        error_log("Request has failed with error {$response['error_code']}: {$response['description']}\n");
        if ($http_code == 401)
        {
          throw new Exception('Invalid access token provided');
        }
        return false;
      }
      else
      {
        $response = json_decode($response, true);
        if (isset($response['description']))
        {
          error_log("Request was successfull: {$response['description']}\n");
        }
        $response = $response['result'];
      }

      return $response;
    }

    /**
    * Подготовка запроса
    * 
    * @param string $method
    * @param array $parameters
    * 
    * @return boolean
    */
    protected function _apiRequest($method, $parameters)
    {
      if (!is_string($method))
      {
        error_log("Method name must be a string\n");
        return false;
      }

      if (!$parameters)
      {
        $parameters = array();
      }
      else if (!is_array($parameters))
      {
        error_log("Parameters must be an array\n");
        return false;
      }

      foreach($parameters as $key => & $val)
      {
        // encoding to JSON array parameters, for example reply_markup
        if (!is_numeric($val) && !is_string($val))
        {
          $val = json_encode($val);
        }
      }

      $url = API_URL . $method . '?' . http_build_query($parameters);

      $handle = curl_init($url);
      curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, 5);
      curl_setopt($handle, CURLOPT_TIMEOUT, 60);
      return $this->_exec_curl_request($handle);
    }

    /**
    * Отправка сообщения 
    * 
	* @param int $id_chat
	* @param string $sMessage
	* 
	* @return void
	*/
    public function sendMessage($id_chat, $sMessage)
    {
      //https://api.telegram.org/botID:HASH/sendMessage?chat_id=111&text=Nice+to+meet+you

      $this->_apiRequest('sendMessage', array(
        'chat_id' => $id_chat,
        'text' => $sMessage,
      ));
    }  
  }


  $oTelegramMessager = new soTelegramMessager();
  $oTelegramMessager->sendMessage('111111', 'Какой-то текст');


Как получить id_chat

Создаем чат, добавляем в него бота, делаем его админом, отправляем в чат сообщение, обращающемся в браузере к

 
https://api.telegram.org/botXXX:YYY/getUpdates

Смотрим id_chat (может быть отрицательным!)


Категории: PHP, raspberry pi 3 / arduino
Яндекс.Метрика