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

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

Модератор: immortal

Sas
Сообщения: 207
Зарегистрирован: Вт июл 12, 2016 6:16 pm
Благодарил (а): 2 раза
Поблагодарили: 14 раз

Re: Модуль "Telegram"

Сообщение Sas » Вт ноя 22, 2016 11:36 pm

Это не совсем то.
Спрашиваю я у системы через телеграм какая погода/температура/уровень воды в унитазе и она отвечает всем, а например хотелось бы иметь возможность ответить только спросившему. Функцию сей странно пилят. Сделали возможность отвечать на терминал с которого пришел запрос, но не сделали возможность отвечать только пользовател ю сделавшему запрос.
Система вроде как многопользовательская, но чтобы этого добиться приходится костылить
Можно применить костыль и записывать айди спросившего пользователя в переменную чтобы потом ее отлавливать и отправлять ему ответ.
Мне видится так: пришел запрос из телеграмма, обрабатываем и отправляем обратно по этому же айди.
Аватара пользователя
Amarok
Сообщения: 1425
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Модуль "Telegram"

Сообщение Amarok » Ср ноя 23, 2016 7:33 am

Можно создать команду в телеграмке и ответ будет лишь тому, кто её ткнул на выполнение
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
Sas
Сообщения: 207
Зарегистрирован: Вт июл 12, 2016 6:16 pm
Благодарил (а): 2 раза
Поблагодарили: 14 раз

Re: Модуль "Telegram"

Сообщение Sas » Ср ноя 23, 2016 7:59 pm

Да можно и шаблоны писать с учетом, но это костыли:)
Аватара пользователя
Fantom
Сообщения: 31
Зарегистрирован: Чт фев 06, 2014 9:56 pm
Благодарил (а): 9 раз
Поблагодарили: 2 раза

Re: Модуль "Telegram"

Сообщение Fantom » Сб ноя 26, 2016 12:33 pm

skysilver писал(а):С emoji на кнопках и размещением их на кнопках разобрался.
Как ставить emoji на кнопки?
И как вы создаете вложенные меню на кнопках? :roll: :?:
Последний раз редактировалось Fantom Сб ноя 26, 2016 1:06 pm, всего редактировалось 1 раз.
Banana PI (Armbian 21.02.1 Buster) + Arduino + esp8266
anneksiya82
Сообщения: 32
Зарегистрирован: Вс фев 28, 2016 8:11 am
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: Модуль "Telegram"

Сообщение anneksiya82 » Сб ноя 26, 2016 12:53 pm

Обновил телеграмм.. сейчас не работает передача сообщение из общего чата в телеграмм... команды работают..
Вернее с истории все ок.. проблема в следующим.. если сработал шаблон поведения и в ней есть ответ в общий чат (Например шаблоне поведение есть команда Sаy('Тук. Тук',0)) .. то в телеграмм данное сообщение не приходит.. А в общем чате Алиса пишет! Грубо говоря если в общем чате написать "Привет", то в телеграмм приходит ответ "Привет меня зовут, Алиса", а если в телегамме написать "Привет", то в ответ телеграмм ответ не приходит.. (в общем чате все ок)
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Модуль "Telegram"

Сообщение skysilver » Сб ноя 26, 2016 3:30 pm

Fantom писал(а):Как ставить emoji на кнопки?
И как вы создаете вложенные меню на кнопках? :roll: :?:
Использую функционал обработки событий. Тут уже были примеры формирования клавиатуры на основе обработки событий от пользователя. По сути у меня на вкладке Команды имеется только одна видимая команда "Меню" с пустым кодом. А на вкладке События есть одно событие "messageHook" (тип Текстовое сообщение), которое и формирует динамическую клавиатуру. Вот код этого обработчика:
СпойлерПоказать

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

$this->sendAction($chat_id, "typing");

$em_l = json_decode('"'.'\ud83d\udca1'.'"');
$em_k = json_decode('"'.'\ud83d\udcac'.'"');
$em_n = json_decode('"'.'\u21a9\ufe0f'.'"');
$em_c = json_decode('"'.'\ud83d\udcf8'.'"');
$em_i = json_decode('"'.'\ud83d\udee0'.'"');
$em_s = json_decode('"'.'\u2699'.'"');
$em_g = json_decode('"'.'\ud83c\udf21'.'"');
$em_p = json_decode('"'.'\ud83c\udf24'.'"');
$em_o = json_decode('"'.'\ud83d\udcdd'.'"');
$off  = json_decode('"'.'\ud83c\udf11'.'"');
$on   = json_decode('"'.'\ud83c\udf15'.'"');
$em_rd = json_decode('"'.'\ud83d\udc47'.'"');
$em_cam = json_decode('"'.'\ud83c\udfa5'.'"');
$em_kuh = json_decode('"'.'\ud83c\udfa5 \ud83c\udf7d'.'"'); //\ud83c\udf7d
$em_kom = json_decode('"'.'\ud83c\udfa5 \ud83d\udecb'.'"'); //\ud83d\udecb

$pos = strripos($text , "Меню");
if ($pos > -1) {
    $this->sendAction($chat_id, "typing");
     $option = array( array($em_l." Свет", $em_c." Камеры"), array($em_p." Погода", $em_g." Климат"), array($em_o." Отчеты", $em_s." Служебное"));
     $this->sendMessageToUser($chat_id, $em_k." Выберите нужный пункт ".$em_rd, $option);
     $skip = true;
}

$pos = strripos($text , "Погода");
if ($pos > -1) {
     $this->sendAction($chat_id, "typing");
    $option = array( array($em_l." Свет", $em_c." Камеры"), array($em_p." Погода", $em_g." Климат"), array($em_o." Отчеты", $em_s." Служебное"));
    $this->sendMessageToUser($chat_id, gg('Kirov.Metcast'), $option);
     $skip = true;
}

$pos = strripos($text , "Климат");
if ($pos > -1) {
     $this->sendAction($chat_id, "typing");
    $option = array( array($em_l." Свет", $em_c." Камеры"), array($em_p." Погода", $em_g." Климат"), array($em_o." Отчеты", $em_s." Служебное"));
    $climat = "Температура ".gg('ThisComputer.RoomTemp')." С. Относительная влажность ".gg('ThisComputer.RoomHumidity')." %. Атмосферное давление ".gg('Kirov.Pressure')." мм.рт.ст.";
     $this->sendMessageToUser($chat_id, $climat, $option);
    $skip = true; 
}

$pos = strripos($text , "Свет");
if ($pos > -1) {
    $this->sendAction($chat_id, "typing");
 
     if (gg("Relay1MegaD1.status") == 1) $ks = $on; else $ks = $off;
    if (gg("Relay2MegaD2.status") == 1) $ps = $on; else $ps = $off;
     if (gg("Relay1MegaD2.status") == 1) $rs = $on; else $rs = $off;
    if (gg("SID701_Ch1.status") == 1) $ds = $on; else $ds = $off;

     $option = array( array($ks." Кухня", $ps." Прихожая"), array($rs." Комната", $ds." Подсветка"), array("Меню") );
     $this->sendMessageToUser($chat_id, $em_k." Можно включать и выключать свет:", $option);
     $skip = true;
}

$pos = strripos($text , "Кухня");
if ($pos > -1) {
    $this->sendAction($chat_id, "typing");
 
     cm("Relay1MegaD1.switch");

     if (gg("Relay1MegaD1.status") == 1) $ks = $on; else $ks = $off;
    if (gg("Relay2MegaD2.status") == 1) $ps = $on; else $ps = $off;
     if (gg("Relay1MegaD2.status") == 1) $rs = $on; else $rs = $off;
    if (gg("SID701_Ch1.status") == 1) $ds = $on; else $ds = $off;

     $option = array( array($ks." Кухня", $ps." Прихожая"), array($rs." Комната", $ds." Подсветка"), array("Меню") );
     $this->sendMessageToUser($chat_id, $em_k." Можно включать и выключать свет:", $option);
     $skip = true;
}

$pos = strripos($text , "Прихожая");
if ($pos > -1) {
    $this->sendAction($chat_id, "typing");
     
     cm("Relay2MegaD2.switch");
     //$this->sendMessageToUser($chat_id, $em_l." Метод света в прихожей");

     if (gg("Relay1MegaD1.status") == 1) $ks = $on; else $ks = $off;
    if (gg("Relay2MegaD2.status") == 1) $ps = $on; else $ps = $off;
     if (gg("Relay1MegaD2.status") == 1) $rs = $on; else $rs = $off;
    if (gg("SID701_Ch1.status") == 1) $ds = $on; else $ds = $off;

     $option = array( array($ks." Кухня", $ps." Прихожая"), array($rs." Комната", $ds." Подсветка"), array("Меню") );
     $this->sendMessageToUser($chat_id, $em_k." Можно включать и выключать свет:", $option);
     $skip = true;
}

$pos = strripos($text , "Комната");
if ($pos > -1) {
    $this->sendAction($chat_id, "typing");
     
     cm("Relay1MegaD2.switch");
     //$this->sendMessageToUser($chat_id, $em_l." Метод света в комнате");

     if (gg("Relay1MegaD1.status") == 1) $ks = $on; else $ks = $off;
    if (gg("Relay2MegaD2.status") == 1) $ps = $on; else $ps = $off;
     if (gg("Relay1MegaD2.status") == 1) $rs = $on; else $rs = $off;
    if (gg("SID701_Ch1.status") == 1) $ds = $on; else $ds = $off;

     $option = array( array($ks." Кухня", $ps." Прихожая"), array($rs." Комната", $ds." Подсветка"), array("Меню") );
     $this->sendMessageToUser($chat_id, $em_k." Можно включать и выключать свет:", $option);
     $skip = true;
}

$pos = strripos($text , "Подсветка");
if ($pos > -1) {
    $this->sendAction($chat_id, "typing");    
     
     cm("SID701_Ch1.switch");
     //$this->sendMessageToUser($chat_id, $em_l." Метод подсветки в шкафу");

     if (gg("Relay1MegaD1.status") == 1) $ks = $on; else $ks = $off;
    if (gg("Relay2MegaD2.status") == 1) $ps = $on; else $ps = $off;
     if (gg("Relay1MegaD2.status") == 1) $rs = $on; else $rs = $off;
    if (gg("SID701_Ch1.status") == 1) $ds = $on; else $ds = $off;

     $option = array( array($ks." Кухня", $ps." Прихожая"), array($rs." Комната", $ds." Подсветка"), array("Меню") );
     $this->sendMessageToUser($chat_id, $em_k." Можно включать и выключать свет:", $option);
     $skip = true;
}

$pos = strripos($text , "Камеры");
if ($pos > -1) {
    $this->sendAction($chat_id, "typing");
      $option = array( array($em_kuh." Web-cam 1", $em_kom." Web-cam 2"), array("Меню") );
     $this->sendMessageToUser($chat_id, $em_cam." Можно получить фото с камеры видеонаблюдения", $option);
     $skip = true;
}

$pos = strripos($text , "Web-cam 1");
if ($pos > -1) {
    $this->sendAction($chat_id, "upload_photo");
     if ( gg('webcam_1.status') != 1 ) {
         if ( gg('minMsgLevel') == 1 ) sg('minMsgLevel', '2');    
         cm('webcam_1.turnOn');
        setTimeOut('startSendPhotoScript', 'runScript("sendPhoto", array("chat_id"=>'.$chat_id.'));', 3); 
         DebMes('Get Photo from ID ' . $chat_id);
         setTimeOut('webCamOff', 'cm("webcam_1.turnOff");if ( gg("minMsgLevel") == 2 ) sg("minMsgLevel", "1");', 10);    
     } else {
         runScript('sendPhoto', array('chat_id'=>$chat_id));
    }
     $skip = true;
      //$option = array( array($em_kuh." Web-cam 1", $em_kom." Web-cam 2"), array("Меню") );
     //$this->sendMessageToUser($chat_id, $em_cam." Можно получить фото с камеры видеонаблюдения", $option);
}

$pos = strripos($text , "Web-cam 2");
if ($pos > -1) {
    $this->sendAction($chat_id, "typing");
     $option = array( array($em_kuh." Web-cam 1", $em_kom." Web-cam 2"), array("Меню") );
     $this->sendMessageToUser($chat_id, $em_cam." Камера в комнате не работает", $option);
     $skip = true;
}

$pos = strripos($text , "Служебное");
if ($pos > -1) {
    $this->sendAction($chat_id, "typing");
      $option = array( array("IP", "Ping"), array("Меню") );
     $this->sendMessageToUser($chat_id, $em_i." Служебные сведения", $option);
     $skip = true;
}

//Для того чтобы после обработки кода в событии прекратить дальнейшую обработку команд и шаблонов, надо в коде задать значение переменной $skip=true;
//$skip = true;

/*
    // \ud83d\udca1 лампочка
    // \ud83d\udcac комментарий
    // \u21a9\ufe0f    назад
    // \ud83d\udcf8    камера
    // \ud83d\udee0    инструменты
    // \u2699        шестеренка
    // \ud83c\udf21    градусник
    // \ud83c\udf24    погода
    // \ud83d\udcdd    отчеты
    // \ud83d\udc47 рука вниз
    // \ud83c\udf24 камера
    // \u041f\u043e\u0433 диван
    // \u043e\u0434\u0430 тарелка-ложки
*/
В коде также видно, как вставлять emoji в названия кнопок, и приведены UTF-коды использованных мною emoji.
Чтобы узнать UTF-коды emoji, пришлось в webhook_telegram.php добавить пару строчек для лога "сырых" сообщений от сервера Телеграм. При этом, если боту отправить какой-нить смайлик в чате, то в логе отобразится нужный UTF-код. Проще способа узнать этот код не нашел. ))
За это сообщение автора skysilver поблагодарили (всего 4):
Fantom (Сб ноя 26, 2016 3:51 pm) • Amarok (Вс ноя 27, 2016 6:41 am) • Samir77 (Пт мар 01, 2019 1:33 pm) • vitosmaxim80sad145 (Пн окт 26, 2020 2:45 pm)
Рейтинг: 4.65%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
Fantom
Сообщения: 31
Зарегистрирован: Чт фев 06, 2014 9:56 pm
Благодарил (а): 9 раз
Поблагодарили: 2 раза

Re: Модуль "Telegram"

Сообщение Fantom » Вс ноя 27, 2016 11:14 pm

Подскажите как такую ссылку создать?
Вложения
Снимок.PNG
Снимок.PNG (76.77 КБ) 10572 просмотра
Banana PI (Armbian 21.02.1 Buster) + Arduino + esp8266
Аватара пользователя
Eraser
Сообщения: 1085
Зарегистрирован: Вт окт 21, 2014 7:31 pm
Откуда: Киров
Благодарил (а): 14 раз
Поблагодарили: 868 раз
Контактная информация:

Re: Модуль "Telegram"

Сообщение Eraser » Пн ноя 28, 2016 7:59 am

Fantom писал(а):Подскажите как такую ссылку создать?

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

include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$option = array( 
                array($telegram_module ->buildInlineKeyboardButton("Url1", $url="http://majordomo.smartliving.ru/")),
                array($telegram_module ->buildInlineKeyboardButton("Url2", $url="http://majordomo.smartliving.ru/")),
                array($telegram_module ->buildInlineKeyboardButton("Url3", $url="http://majordomo.smartliving.ru/"))
);
$keyb = $telegram_module ->buildInlineKeyBoard($option);
$content = array('chat_id' => $chat_id, 'text' => "Press button", 'reply_markup' => $keyb);
$telegram_module->sendContent($content); 
За это сообщение автора Eraser поблагодарили (всего 2):
Amarok (Пн ноя 28, 2016 8:10 am) • Fantom (Пн ноя 28, 2016 8:09 pm)
Рейтинг: 2.33%
Connect ---- Telegram
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!! :D
Аватара пользователя
Fantom
Сообщения: 31
Зарегистрирован: Чт фев 06, 2014 9:56 pm
Благодарил (а): 9 раз
Поблагодарили: 2 раза

Re: Модуль "Telegram"

Сообщение Fantom » Пн ноя 28, 2016 7:50 pm

Eraser писал(а):
СпойлерПоказать

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

include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$option = array( 
                array($telegram_module ->buildInlineKeyboardButton("Url1", $url="http://majordomo.smartliving.ru/")),
                array($telegram_module ->buildInlineKeyboardButton("Url2", $url="http://majordomo.smartliving.ru/")),
                array($telegram_module ->buildInlineKeyboardButton("Url3", $url="http://majordomo.smartliving.ru/"))
);
$keyb = $telegram_module ->buildInlineKeyBoard($option);
$content = array('chat_id' => $chat_id, 'text' => "Press button", 'reply_markup' => $keyb);
$telegram_module->sendContent($content); 

Спасибо. На команду удалось повесить ссылки а как допустим пользователю или в канал отправить так же ссылки? Пробовал вместо $chat_id прописывать id пользователя или канала, не выходит :(
Banana PI (Armbian 21.02.1 Buster) + Arduino + esp8266
Аватара пользователя
Eraser
Сообщения: 1085
Зарегистрирован: Вт окт 21, 2014 7:31 pm
Откуда: Киров
Благодарил (а): 14 раз
Поблагодарили: 868 раз
Контактная информация:

Re: Модуль "Telegram"

Сообщение Eraser » Пн ноя 28, 2016 9:48 pm

Fantom писал(а):
Eraser писал(а):
СпойлерПоказать

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

include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$option = array( 
                array($telegram_module ->buildInlineKeyboardButton("Url1", $url="http://majordomo.smartliving.ru/")),
                array($telegram_module ->buildInlineKeyboardButton("Url2", $url="http://majordomo.smartliving.ru/")),
                array($telegram_module ->buildInlineKeyboardButton("Url3", $url="http://majordomo.smartliving.ru/"))
);
$keyb = $telegram_module ->buildInlineKeyBoard($option);
$content = array('chat_id' => $chat_id, 'text' => "Press button", 'reply_markup' => $keyb);
$telegram_module->sendContent($content);

Спасибо. На команду удалось повесить ссылки а как допустим пользователю или в канал отправить так же ссылки? Пробовал вместо $chat_id прописывать id пользователя или канала, не выходит :(
исправил, теперь должно работать не только из команд, но и из скриптов
За это сообщение автора Eraser поблагодарил:
Fantom (Пн ноя 28, 2016 10:25 pm)
Рейтинг: 1.16%
Connect ---- Telegram
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!! :D
Ответить