[Модуль] Telegram (telegram)
Модератор: immortal
-
- Сообщения: 207
- Зарегистрирован: Вт июл 12, 2016 6:16 pm
- Благодарил (а): 2 раза
- Поблагодарили: 14 раз
Re: Модуль "Telegram"
Это не совсем то.
Спрашиваю я у системы через телеграм какая погода/температура/уровень воды в унитазе и она отвечает всем, а например хотелось бы иметь возможность ответить только спросившему. Функцию сей странно пилят. Сделали возможность отвечать на терминал с которого пришел запрос, но не сделали возможность отвечать только пользовател ю сделавшему запрос.
Система вроде как многопользовательская, но чтобы этого добиться приходится костылить
Можно применить костыль и записывать айди спросившего пользователя в переменную чтобы потом ее отлавливать и отправлять ему ответ.
Мне видится так: пришел запрос из телеграмма, обрабатываем и отправляем обратно по этому же айди.
Спрашиваю я у системы через телеграм какая погода/температура/уровень воды в унитазе и она отвечает всем, а например хотелось бы иметь возможность ответить только спросившему. Функцию сей странно пилят. Сделали возможность отвечать на терминал с которого пришел запрос, но не сделали возможность отвечать только пользовател ю сделавшему запрос.
Система вроде как многопользовательская, но чтобы этого добиться приходится костылить
Можно применить костыль и записывать айди спросившего пользователя в переменную чтобы потом ее отлавливать и отправлять ему ответ.
Мне видится так: пришел запрос из телеграмма, обрабатываем и отправляем обратно по этому же айди.
- Amarok
- Сообщения: 1425
- Зарегистрирован: Пт дек 14, 2012 12:24 pm
- Откуда: Россия, Нижняя Тура
- Благодарил (а): 460 раз
- Поблагодарили: 126 раз
- Контактная информация:
Re: Модуль "Telegram"
Можно создать команду в телеграмке и ответ будет лишь тому, кто её ткнул на выполнение
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
- Fantom
- Сообщения: 31
- Зарегистрирован: Чт фев 06, 2014 9:56 pm
- Благодарил (а): 9 раз
- Поблагодарили: 2 раза
Re: Модуль "Telegram"
Как ставить emoji на кнопки?skysilver писал(а):С emoji на кнопках и размещением их на кнопках разобрался.
И как вы создаете вложенные меню на кнопках?


Последний раз редактировалось Fantom Сб ноя 26, 2016 1:06 pm, всего редактировалось 1 раз.
Banana PI (Armbian 21.02.1 Buster) + Arduino + esp8266
-
- Сообщения: 32
- Зарегистрирован: Вс фев 28, 2016 8:11 am
- Благодарил (а): 1 раз
- Поблагодарили: 3 раза
Re: Модуль "Telegram"
Обновил телеграмм.. сейчас не работает передача сообщение из общего чата в телеграмм... команды работают..
Вернее с истории все ок.. проблема в следующим.. если сработал шаблон поведения и в ней есть ответ в общий чат (Например шаблоне поведение есть команда Sаy('Тук. Тук',0)) .. то в телеграмм данное сообщение не приходит.. А в общем чате Алиса пишет! Грубо говоря если в общем чате написать "Привет", то в телеграмм приходит ответ "Привет меня зовут, Алиса", а если в телегамме написать "Привет", то в ответ телеграмм ответ не приходит.. (в общем чате все ок)
Вернее с истории все ок.. проблема в следующим.. если сработал шаблон поведения и в ней есть ответ в общий чат (Например шаблоне поведение есть команда Sаy('Тук. Тук',0)) .. то в телеграмм данное сообщение не приходит.. А в общем чате Алиса пишет! Грубо говоря если в общем чате написать "Привет", то в телеграмм приходит ответ "Привет меня зовут, Алиса", а если в телегамме написать "Привет", то в ответ телеграмм ответ не приходит.. (в общем чате все ок)
-
- Сообщения: 3006
- Зарегистрирован: Чт авг 21, 2014 8:28 am
- Откуда: Киров, Россия
- Благодарил (а): 400 раз
- Поблагодарили: 1750 раз
- Контактная информация:
Re: Модуль "Telegram"
Использую функционал обработки событий. Тут уже были примеры формирования клавиатуры на основе обработки событий от пользователя. По сути у меня на вкладке Команды имеется только одна видимая команда "Меню" с пустым кодом. А на вкладке События есть одно событие "messageHook" (тип Текстовое сообщение), которое и формирует динамическую клавиатуру. Вот код этого обработчика:Fantom писал(а):Как ставить emoji на кнопки?
И как вы создаете вложенные меню на кнопках?![]()
СпойлерПоказать
Код: Выделить всё
$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 тарелка-ложки
*/
Чтобы узнать 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.71%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Мой CONNECT | Блоги | Telegram
- Fantom
- Сообщения: 31
- Зарегистрирован: Чт фев 06, 2014 9:56 pm
- Благодарил (а): 9 раз
- Поблагодарили: 2 раза
Re: Модуль "Telegram"
Подскажите как такую ссылку создать?
- Вложения
-
- Снимок.PNG (76.77 КБ) 10269 просмотров
Banana PI (Armbian 21.02.1 Buster) + Arduino + esp8266
- Eraser
- Сообщения: 1085
- Зарегистрирован: Вт окт 21, 2014 7:31 pm
- Откуда: Киров
- Благодарил (а): 14 раз
- Поблагодарили: 868 раз
- Контактная информация:
Re: Модуль "Telegram"
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);
- Рейтинг: 2.35%
Connect ---- Telegram
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!!
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!!

- Fantom
- Сообщения: 31
- Зарегистрирован: Чт фев 06, 2014 9:56 pm
- Благодарил (а): 9 раз
- Поблагодарили: 2 раза
Re: Модуль "Telegram"
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"
исправил, теперь должно работать не только из команд, но и из скриптов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 пользователя или канала, не выходит
- Рейтинг: 1.18%
Connect ---- Telegram
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!!
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!!
