Как отправить 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 (может быть отрицательным!)