[Модуль] Telegram (telegram)
Модератор: immortal
-
- Сообщения: 560
- Зарегистрирован: Ср сен 04, 2013 10:31 am
- Откуда: Самара
- Благодарил (а): 99 раз
- Поблагодарили: 140 раз
- Контактная информация:
- Eraser
- Сообщения: 1085
- Зарегистрирован: Вт окт 21, 2014 7:31 pm
- Откуда: Киров
- Благодарил (а): 14 раз
- Поблагодарили: 868 раз
- Контактная информация:
Re: Модуль "Telegram"
Webhook в Telegram
Для чего?
Для того что бы исключить постоянный опрос серверов на наличие новых сообщений. Сервера Telegram сами уведомят о поступлении нового сообщения.
Как включить?
1. Ваш сервер должен быть доступен из интернет, а именно страница https://ваш_сервер/webhook_telegram.php
2. Доступен именно по протоколу HTTPS с подписанным сертификатом
3. В поле Webhook URL задается имя вашего сервера или ip без https://
4. Нажатием кнопки "Set Webhook" отправляется запрос на установку вашего адреса для webhook. Результат отобразится ниже кнопки.
Плюсы
1. Быстрый ответ на команду
2. Нет постоянных запросов на наличие новых сообщений
Минусы
1. Нужен HTTPS с подписанным сертификатом
2. При подписке на webhook перестает работать запрос сообщений с сервера. Поэтому прежде чем снять галочку "Use webhook" обязательно надо отписаться от webhook. Для этого надо нажать кнопку "Clean webhook".
3. При долгой обработке сообщения, сервер телеграмм будет повторно высылать вам это сообщение.
PS Текущий статус использования webhook можно узнать нажав кнопку "Status webhook"
Для чего?
Для того что бы исключить постоянный опрос серверов на наличие новых сообщений. Сервера Telegram сами уведомят о поступлении нового сообщения.
Как включить?
1. Ваш сервер должен быть доступен из интернет, а именно страница https://ваш_сервер/webhook_telegram.php
2. Доступен именно по протоколу HTTPS с подписанным сертификатом
3. В поле Webhook URL задается имя вашего сервера или ip без https://
4. Нажатием кнопки "Set Webhook" отправляется запрос на установку вашего адреса для webhook. Результат отобразится ниже кнопки.
Плюсы
1. Быстрый ответ на команду
2. Нет постоянных запросов на наличие новых сообщений
Минусы
1. Нужен HTTPS с подписанным сертификатом
2. При подписке на webhook перестает работать запрос сообщений с сервера. Поэтому прежде чем снять галочку "Use webhook" обязательно надо отписаться от webhook. Для этого надо нажать кнопку "Clean webhook".
3. При долгой обработке сообщения, сервер телеграмм будет повторно высылать вам это сообщение.
PS Текущий статус использования webhook можно узнать нажав кнопку "Status webhook"
- За это сообщение автора Eraser поблагодарил:
- ErmolenkoM (Ср окт 19, 2016 1:57 pm)
- Рейтинг: 1.18%
Connect ---- Telegram
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!!
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!!

-
- Сообщения: 3006
- Зарегистрирован: Чт авг 21, 2014 8:28 am
- Откуда: Киров, Россия
- Благодарил (а): 400 раз
- Поблагодарили: 1750 раз
- Контактная информация:
Re: Модуль "Telegram"
Это означает, что отпадает необходимость в запущенном цикле cycle_telegram.php? Или нет?Eraser писал(а):Для того что бы исключить постоянный опрос серверов на наличие новых сообщений. Сервера Telegram сами уведомят о поступлении нового сообщения.
P.S. Кажись, МТС устаканился. Теперь телеграм работает штатно.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Мой CONNECT | Блоги | Telegram
- Eraser
- Сообщения: 1085
- Зарегистрирован: Вт окт 21, 2014 7:31 pm
- Откуда: Киров
- Благодарил (а): 14 раз
- Поблагодарили: 868 раз
- Контактная информация:
Re: Модуль "Telegram"
да, можно цикл остановить, тем более теперь это легко сделать из XRAYskysilver писал(а):Это означает, что отпадает необходимость в запущенном цикле cycle_telegram.php? Или нет?Eraser писал(а):Для того что бы исключить постоянный опрос серверов на наличие новых сообщений. Сервера Telegram сами уведомят о поступлении нового сообщения.
P.S. Кажись, МТС устаканился. Теперь телеграм работает штатно.
Connect ---- Telegram
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!!
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!!

-
- Сообщения: 560
- Зарегистрирован: Ср сен 04, 2013 10:31 am
- Откуда: Самара
- Благодарил (а): 99 раз
- Поблагодарили: 140 раз
- Контактная информация:
Re: Модуль "Telegram"
Можно чуть-чуть причесать код массивами, получается компактнее, но возможно, менее понятно:Eraser писал(а):Вот еще одно довольно интересное решение интерактивной клавиатуры:СпойлерПоказать1) Создается команда "Свет" с кодом2) Создается событие "Callback_light" на "Callback" с кодомКод: Выделить всё
$off = json_decode('"'.'\ud83c\udf11'.'"'); $on = json_decode('"'.'\uD83C\uDF15'.'"'); $ks = $off; $ts = $off; if (gg("kitchenLed.on") == 1) $ks = $on; if (gg("Relay1.status") == 1) $ts = $on; $option = array( array($this->buildInlineKeyboardButton($text=$ks."Кухня","","Callback_kitchenLed",""), $this->buildInlineKeyboardButton($text=$ts."Торшер","","Callback_Relay1","") ) ); $keyb = $this->buildInlineKeyBoard($option); $content = array('chat_id' => $chat_id, 'text' => "Управление светом:", 'reply_markup' => $keyb); $this->sendContent($content);
В результате будет клавиатура на которой будет отображаться текущий статус, при нажатии на кнопки будет выполняться действие и изменяться статусКод: Выделить всё
$sw = false; if ($callback == 'Callback_kitchenLed') { $sw = true; cm("kitchenLed.switch"); } if ($callback == 'Callback_Relay1') { $sw = true; cm("Relay1.switch"); } if ($sw) { $off = json_decode('"'.'\ud83c\udf11'.'"'); $on = json_decode('"'.'\uD83C\uDF15'.'"'); $ks = $off; $ts = $off; if (gg("kitchenLed.on") == 1) $ks = $on; if (gg("Relay1.status") == 1) $ts = $on; $option = array( array($this->buildInlineKeyboardButton($text=$ks."Кухня","","Callback_kitchenLed",""), $this->buildInlineKeyboardButton($text=$ts."Торшер","","Callback_Relay1","") ) ); $keyb = $this->buildInlineKeyBoard($option); $this->editMessage($chat_id,$message_id,"Управление светом:",$keyb); }
Код: Выделить всё
$light = array(json_decode('"'.'\ud83c\udf11'.'"'),json_decode('"'.'\uD83C\uDF15'.'"'));
$option = array( array($this->buildInlineKeyboardButton($text=$light[gg('NooLiteD_KuhnyaTop.status')]."Кухня","","Callback_KuhnyaTop",""),
$this->buildInlineKeyboardButton($text=$light[gg('NooLiteD_ZalTop.status')]."Торшер","","Callback_ZalTop","") ) );
$keyb = $this->buildInlineKeyBoard($option);
$content = array('chat_id' => $chat_id, 'text' => "Управление светом:", 'reply_markup' => $keyb);
$this->sendContent($content);
gg('NooLiteD_KuhnyaTop.status') принимает значения 0 или 1.
$light[0] - выключенный эмоджи, $light[1] - включенный.
-
- Сообщения: 560
- Зарегистрирован: Ср сен 04, 2013 10:31 am
- Откуда: Самара
- Благодарил (а): 99 раз
- Поблагодарили: 140 раз
- Контактная информация:
Re: Модуль "Telegram"
если кто забыл, настройка HTTPS под linux описана в ВиКи в пункте Настройка HTTPS (Через nginx прокси)Eraser писал(а):Webhook в TelegramСпойлерПоказатьДля чего?
Для того что бы исключить постоянный опрос серверов на наличие новых сообщений. Сервера Telegram сами уведомят о поступлении нового сообщения.
Как включить?
1. Ваш сервер должен быть доступен из интернет, а именно страница https://ваш_сервер/webhook_telegram.php
2. Доступен именно по протоколу HTTPS с подписанным сертификатом
3. В поле Webhook URL задается имя вашего сервера или ip без https://
4. Нажатием кнопки "Set Webhook" отправляется запрос на установку вашего адреса для webhook. Результат отобразится ниже кнопки.
Плюсы
1. Быстрый ответ на команду
2. Нет постоянных запросов на наличие новых сообщений
Минусы
1. Нужен HTTPS с подписанным сертификатом
2. При подписке на webhook перестает работать запрос сообщений с сервера. Поэтому прежде чем снять галочку "Use webhook" обязательно надо отписаться от webhook. Для этого надо нажать кнопку "Clean webhook".
3. При долгой обработке сообщения, сервер телеграмм будет повторно высылать вам это сообщение.
PS Текущий статус использования webhook можно узнать нажав кнопку "Status webhook"
-
- Сообщения: 193
- Зарегистрирован: Чт дек 17, 2015 10:08 am
- Откуда: Уфа
- Благодарил (а): 36 раз
- Поблагодарили: 14 раз
Re: Модуль "Telegram"
Отлично работает! Спасибо!Eraser писал(а):Вот еще одно довольно интересное решение интерактивной клавиатуры:
Чуть заторможено, но все равно отлично.
- Eraser
- Сообщения: 1085
- Зарегистрирован: Вт окт 21, 2014 7:31 pm
- Откуда: Киров
- Благодарил (а): 14 раз
- Поблагодарили: 868 раз
- Контактная информация:
Re: Модуль "Telegram"
Добавил функцию sendAction($chat_id,$action)
Применяется для отображения что на стороне бота выполняется какое-то действие (для долгих команд)
$action
Применяется для отображения что на стороне бота выполняется какое-то действие (для долгих команд)
$action
- typing
- upload_photo
- record_video or upload_video
- record_audio or upload_audio
- upload_document
- find_location
Код: Выделить всё
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->sendAction($chat_id,"typing");
///
...........
///
$telegram_module->sendMessage($chat_id,$message);
Connect ---- Telegram
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!!
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!!

-
- Сообщения: 560
- Зарегистрирован: Ср сен 04, 2013 10:31 am
- Откуда: Самара
- Благодарил (а): 99 раз
- Поблагодарили: 140 раз
- Контактная информация:
Re: Модуль "Telegram"
Мне удалось запустить ЭТО!Eraser писал(а):Webhook в TelegramСпойлерПоказатьДля чего?
Для того что бы исключить постоянный опрос серверов на наличие новых сообщений. Сервера Telegram сами уведомят о поступлении нового сообщения.
Как включить?
1. Ваш сервер должен быть доступен из интернет, а именно страница https://ваш_сервер/webhook_telegram.php
2. Доступен именно по протоколу HTTPS с подписанным сертификатом
3. В поле Webhook URL задается имя вашего сервера или ip без https://
4. Нажатием кнопки "Set Webhook" отправляется запрос на установку вашего адреса для webhook. Результат отобразится ниже кнопки.
Плюсы
1. Быстрый ответ на команду
2. Нет постоянных запросов на наличие новых сообщений
Минусы
1. Нужен HTTPS с подписанным сертификатом
2. При подписке на webhook перестает работать запрос сообщений с сервера. Поэтому прежде чем снять галочку "Use webhook" обязательно надо отписаться от webhook. Для этого надо нажать кнопку "Clean webhook".
3. При долгой обработке сообщения, сервер телеграмм будет повторно высылать вам это сообщение.
PS Текущий статус использования webhook можно узнать нажав кнопку "Status webhook"
Грабли, с которыми я столкнулся:
1. Нужно поднять HTTPS, вроде по инструкции ВиКи все сделал, но при создании самоподписанного сертификата не заполнил поле CN. Заполнение этого поля обязательно.
2. Заполнил CN IpАдресом. Оказывается с 01.10.2016 такие сертификаты не действительны. Только ДОМЕНное имя. Зарегался на DynDNS, указал его.
3. Для проверки self signed certificate телеграмму нужно отправить PEM файл, поправил бота вот тут:
telegram.class.php
Код: Выделить всё
$webhookRes = $telegramBot->setWebhook($this->config['TLG_WEBHOOK_URL']."/webhook_telegram.php", "@/etc/nginx/ssl/cert.pem");
...
$webhookRes = $telegramBot->setWebhook($this->config['TLG_WEBHOOK_URL']."/webhook_telegram.php", "@/etc/nginx/ssl/cert.pem");
4. Файл webhook_telegram.php нужно бы добавить в исключения, что бы пароль не спрашивало (так сделано GPS.PHP) Кто подскажет как?
- Eraser
- Сообщения: 1085
- Зарегистрирован: Вт окт 21, 2014 7:31 pm
- Откуда: Киров
- Благодарил (а): 14 раз
- Поблагодарили: 868 раз
- Контактная информация:
Re: Модуль "Telegram"
1,2,3 у меня проблем не возникло, я получал сертификат на WoSignErmolenkoM писал(а): Мне удалось запустить ЭТО!
Грабли, с которыми я столкнулся:
1. Нужно поднять HTTPS, вроде по инструкции ВиКи все сделал, но при создании самоподписанного сертификата не заполнил поле CN. Заполнение этого поля обязательно.
2. Заполнил CN IpАдресом. Оказывается с 01.10.2016 такие сертификаты не действительны. Только ДОМЕНное имя. Зарегался на DynDNS, указал его.
3. Для проверки self signed certificate телеграмму нужно отправить PEM файл, поправил бота вот тут:
telegram.class.phpкомментарий: знак СОБАКИ нужен, так как у меня PHP 5.4; прописал жестко, а надо бы вынести в настройку модуля.Код: Выделить всё
$webhookRes = $telegramBot->setWebhook($this->config['TLG_WEBHOOK_URL']."/webhook_telegram.php", "@/etc/nginx/ssl/cert.pem"); ... $webhookRes = $telegramBot->setWebhook($this->config['TLG_WEBHOOK_URL']."/webhook_telegram.php", "@/etc/nginx/ssl/cert.pem");
4. Файл webhook_telegram.php нужно бы добавить в исключения, что бы пароль не спрашивало (так сделано GPS.PHP) Кто подскажет как?
Настройку для самоподписанных сертификатов я добавлю
4. Я добавлял исключения в lib/general.class.php.
Код: Выделить всё
if (defined('HOME_NETWORK') && HOME_NETWORK != '' && !isset($argv[0])
&& (!(preg_match('/\/gps\.php/is', $_SERVER['REQUEST_URI'])
|| preg_match('/\/trackme\.php/is', $_SERVER['REQUEST_URI'])
|| preg_match('/\/btraced\.php/is', $_SERVER['REQUEST_URI']))
|| $_REQUEST['op'] != '')
&& !preg_match('/\/webhook_telegram\.php/is', $_SERVER['REQUEST_URI'])
&& !preg_match('/\/rss\.php/is', $_SERVER['REQUEST_URI'])
&& 1)
{
Connect ---- Telegram
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!!
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!!
