[Модуль] Telegram (telegram)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Аватара пользователя
Eraser
Сообщения: 1085
Зарегистрирован: Вт окт 21, 2014 7:31 pm
Откуда: Киров
Благодарил (а): 14 раз
Поблагодарили: 868 раз
Контактная информация:

Re: Модуль "Telegram"

Сообщение Eraser » Вт ноя 15, 2016 9:02 am

Sas писал(а):А можно ли сделать отправку поюзерно?
В системе же все равно есть привязка айди телеграмма к айди пользователя мжд. С гетюзернейм уже легче, но все равно надо будет каждому писать свой велосипед.
Удобно же когда система отвечает на сообщение только тому кто спросил что то, а не всем в общий чат
можно подробнее описать, что хотелось бы, так сказать на примере :)
Connect ---- Telegram
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!! :D
Akorolev
Сообщения: 119
Зарегистрирован: Вт ноя 08, 2016 4:27 pm
Благодарил (а): 11 раз
Поблагодарили: 10 раз

Re: Модуль "Telegram"

Сообщение Akorolev » Ср ноя 16, 2016 5:01 am

Была остановка циклов и модуль перестал реагировать на сообщения, перестал отправлять и принимать. Как можно решить?
Аватара пользователя
Eraser
Сообщения: 1085
Зарегистрирован: Вт окт 21, 2014 7:31 pm
Откуда: Киров
Благодарил (а): 14 раз
Поблагодарили: 868 раз
Контактная информация:

Re: Модуль

Сообщение Eraser » Ср ноя 16, 2016 6:45 am

Akorolev писал(а):Была остановка циклов и модуль перестал реагировать на сообщения, перестал отправлять и принимать. Как можно решить?
Перезапустить цикл
Чтобы не зависеть от работы циклов надо настроить работу модуля через webhook
Connect ---- Telegram
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!! :D
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Модуль "Telegram"

Сообщение skysilver » Ср ноя 16, 2016 6:40 pm

skysilver писал(а):Webhook классная тема, но выставлять сервер наружу только ради этого идея, так скажем, не очень.
Есть ли какой-то вариант, например, перенести https://ваш_сервер/webhook_telegram.php на другой порт, чтобы на роутере разрешить проброс порта исключительно для бота?! Основная веб-морда MjD при этом останется доступной только в локальной сети. Такой принцип реализован в IOBroker.
Сам спросил, сам отвечаю. ))

Решил для себя эту задачу следующим образом.
1. Поднял виртуальный сервер Apache на https с самоподписанным сертифкатом.
Конфиг такой:
СпойлерПоказать

Код: Выделить всё

<IfModule mod_ssl.c>
<VirtualHost ЛОКАЛЬНЫЙ_ИП_СЕРВЕРА:443>
        
        ServerAdmin почта@админа.ru
        ServerName ИМЯ.no-ip.org
        
        DocumentRoot /var/www/tgwebhook
        
        <Directory /var/www/tgwebhook>
            Options FollowSymLinks MultiViews
            AllowOverride None
            Order deny,allow
            deny from all
            allow from 149.154.167.192/26
            allow from ИП_ЛОКАЛЬНОЙ_СЕТИ/24
        </Directory>
 
        LogLevel warn
 
        ErrorLog ${APACHE_LOG_DIR}/error.tgwebhook.log
        CustomLog ${APACHE_LOG_DIR}/access.tgwebhook.log combined
 
        SSLEngine on
        SSLCertificateFile    /etc/apache2/ssl/mysert.crt
        SSLCertificateKeyFile /etc/apache2/ssl/mysert.key
 
</VirtualHost>
</IfModule>
2. В настройках виртуального сервера разрешил доступ к сайту только с IP адресов серверов телеграма (на сегодняшний день это 149.154.167.192/26, позже возможно будут меняться) и своей домашней сети.
3. В корневой директории виртуального сервера (/var/www/tgwebhook) создал папку с именем токена моего бота. В качестве имени папки можно использовать любую другую последовательность символов, известную только вам. Это для усложнения поиска пути к скрипту. Такой вариант рекомендуется самим телеграмом наряду с ограничением доступа с определенных IP.
4. В директорию поместил файл webhook_telegram.php с таким содержанием:
СпойлерПоказать

Код: Выделить всё

<?php

$content = file_get_contents("php://input");
$update = json_decode($content, TRUE);

$data_string = json_encode($update);

$ch = curl_init('http://127.0.0.1:80/webhook_telegram.php');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',                                                                                
    'Content-Length: ' . strlen($data_string))
);

curl_exec($ch);

?>
Т.е. принимаем сообщение от сервера телеграма и сразу отправляем его в POST-запросе вебхук-скрипту приложения.
Не забываем выставить права и владельца www-data на директории и файл.
5. На роутере настроил проброс порта 8443 на 443. В МЭ роутера разрешил доступ только с серверов телеграма, чтобы у всяких ботнетов не было желания сканить мой веб-сервер (хоть он и пустой по сути).
6. Вручную зарегистрировал вебхук со ссылкой вида https://ИМЯ.no-ip.org:8443/ТОКЕН_БОТА/webhook_telegram.php. Через приложение не получится, т.к. оно не поддерживает указание своего каталога для вебхук-скрипта.
7. Остановил и убрал из загрузки цикл телеграмма в MJD.
8. Профит!

В итоге обошлось без Nginx или mod_proxy Apache в качестве прокси, и без выставления наружу MJD.
Возможно, увеличилось время отклика из-за того, что сервер телеграмма дергает не сразу вебхук-скрипт приложения, а идет через "посредника" на другом виртуальном сервере. Но визуально все работает довольно быстро.

Пожелание к Eraser - добавить возможность указания своего каталога для размещения вебхук-скрипта.

P.S.: да, временами мой внутренний параноик на профессиональной почве на дает мне спать ночами. :D
За это сообщение автора skysilver поблагодарил:
Alexei (Чт апр 20, 2017 2:04 pm)
Рейтинг: 1.16%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
Eraser
Сообщения: 1085
Зарегистрирован: Вт окт 21, 2014 7:31 pm
Откуда: Киров
Благодарил (а): 14 раз
Поблагодарили: 868 раз
Контактная информация:

Re: Модуль "Telegram"

Сообщение Eraser » Ср ноя 16, 2016 7:24 pm

skysilver писал(а): 6. Вручную зарегистрировал вебхук со ссылкой вида https://ИМЯ.no-ip.org:8443/ТОКЕН_БОТА/webhook_telegram.php. Через приложение не получится, т.к. оно не поддерживает указание своего каталога для вебхук-скрипта.

Пожелание к Eraser - добавить возможность указания своего каталога для размещения вебхук-скрипта.
Попробовал зарегистрировать с указанием своего каталога
Указал в поле "Webhook URL" https://ИМЯ.no-ip.org:8443/ТОКЕН_БОТА
Зарегистрировалось на адрес https://ИМЯ.no-ip.org:8443/ТОКЕН_БОТА/webhook_telegram.php

Или как-то надо по другому?
Connect ---- Telegram
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!! :D
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Модуль "Telegram"

Сообщение skysilver » Ср ноя 16, 2016 8:15 pm

Eraser писал(а):Или как-то надо по другому?
Не-не, все так и надо. Насчёт пожелания беру слова обратно. ))
Просто в справке приложения написано "3. В поле Webhook URL задается имя вашего сервера или ip", т.е. строго сервер, а не путь к скрипту. Вот это и смутило. Если работает, то все ок. )
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Благодарил (а): 99 раз
Поблагодарили: 140 раз
Контактная информация:

Re: Модуль "Telegram"

Сообщение ErmolenkoM » Ср ноя 16, 2016 9:00 pm

Уважаемый Eraser, возможно ли доработать модуль,что бы иметь несколько ботов?
aka msh555
Cubian на Cubietruck, Connect
Аватара пользователя
Eraser
Сообщения: 1085
Зарегистрирован: Вт окт 21, 2014 7:31 pm
Откуда: Киров
Благодарил (а): 14 раз
Поблагодарили: 868 раз
Контактная информация:

Re: Модуль "Telegram"

Сообщение Eraser » Ср ноя 16, 2016 9:10 pm

ErmolenkoM писал(а):Уважаемый Eraser, возможно ли доработать модуль,что бы иметь несколько ботов?
Надо подумать. А для каких целей надо несколько ботов? Мне ничего в голову не приходит ;)
Connect ---- Telegram
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!! :D
ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Благодарил (а): 99 раз
Поблагодарили: 140 раз
Контактная информация:

Re: Модуль "Telegram"

Сообщение ErmolenkoM » Ср ноя 16, 2016 9:20 pm

Eraser писал(а):
ErmolenkoM писал(а):Уважаемый Eraser, возможно ли доработать модуль,что бы иметь несколько ботов?
Надо подумать. А для каких целей надо несколько ботов? Мне ничего в голову не приходит ;)
Самое простое - один - полный лог с отключенным в телеге звуком, второй АЛАРМ.
Другой вариант - можно делать полезное для друзей, например - автоответчик. Но без доступа к дому.
aka msh555
Cubian на Cubietruck, Connect
Аватара пользователя
Eraser
Сообщения: 1085
Зарегистрирован: Вт окт 21, 2014 7:31 pm
Откуда: Киров
Благодарил (а): 14 раз
Поблагодарили: 868 раз
Контактная информация:

Re: Модуль "Telegram"

Сообщение Eraser » Ср ноя 16, 2016 9:52 pm

ErmolenkoM писал(а): Самое простое - один - полный лог с отключенным в телеге звуком, второй АЛАРМ.
Другой вариант - можно делать полезное для друзей, например - автоответчик. Но без доступа к дому.
Первое лучше реализовать на основе каналов, создать несколько каналов и настроить им разные уровни истории, на канале с полным логом отключить уведомления

Да и второе можно реализовать с текущим функционалом, но уже сложнее, нужно создать обработчик события на получение сообщения, и в нем выполнять всю обработку по выполнению определенных действий

Как вариант можно еще добавить один пункт настройки для пользователя - выполнение сценариев, команды останутся отдельно.
Те при получении сообщения будет выполнятся поиск команды в соответствии с разрешениями данного пользователя, и если не найдена, передавать дальше на обработку в сценарии, при выключенной опции не передавать.
За это сообщение автора Eraser поблагодарил:
m-malva (Чт ноя 17, 2016 1:38 am)
Рейтинг: 1.16%
Connect ---- Telegram
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!! :D
Ответить