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