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

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

Модератор: immortal

smoker_vvo
Сообщения: 113
Зарегистрирован: Пт дек 14, 2012 3:46 am
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Модуль "Telegram"

Сообщение smoker_vvo » Ср мар 16, 2016 2:33 pm

И еще один вопрос для понимания. Ранее вы писали
"По поводу
Code:
say('привет',5);

не хватает в конце return "";
бот воспринимает это как ошибка, и высылает ответ что ошибка
предполагалось, что результатом выполнения такой команды будет какой либо ответ
в ближайшей версии пересмотрю это поведение"
что означает - return "";
skysilver
Сообщения: 2855
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 368 раз
Поблагодарили: 1646 раз
Контактная информация:

Re: Модуль "Telegram"

Сообщение skysilver » Чт мар 17, 2016 12:36 am

Поставил модуль. Потестил. По итогу есть следующие наблюдения.

1. Если в настройках учеток Телеграм не указать пользователя Мажордомо и дать право получать системную историю (чат Алисы), то сообщения приходить не будут. Пришлось заводить пользователей в Мажородомо. Сначала думал, что баг, но, видимо, это все-таки фича. ))

2. Для проигрывания голосовых сообщений нужны кодеки OGG. Иначе mplayer вывалит ошибку:

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

[ogg @ 0xb667c558]Codec not found
LAVF_header: av_open_input_stream() failed
Ogg stream 0 is of an unknown type
А вот где этот кодек взять большой вопрос. Пробовал даже под виндой проиграть эти файлы в VLC и AIMP - ничего не вышло. ((

3. Никак не смог заставить произносить фразы отправленные боту через обработчик метода ThisComputer.commandReceived. Т.е. пишем боту "скажи Привет" или "повтори Привет", команда отображается в чате Алисы от имени пользователя, но не выполняется. При этом в debmes видим

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

DEBUG [root]: External context response: a:1:{s:15:"MATCHED_CONTEXT";i:0;} (at /var/www/lib/general.class.php:432) 
а на вкладке Methods в XRay видно, что метод commandReceived даже не вызывался. При все при этом команда выполнится, если отправить ее в чат Алисы через веб-интерфейс Мажордомо. С шаблонами поведения проблем нет.

4. Функция $telegram_module->sendMessageToAll("test message to all"); выдает ошибку

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

1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for
the right syntax to use near '' at line 1 SELECT * FROM tlg_user WHERE
Надо в файле в функции sendMessageTo($where, $message) сделать вместо

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

    if ($query)
        $query = $query." WHERE ".$where; 
например так

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

if ($where != "")
        $query = $query." WHERE ".$where; 
C sendImageToAll аналогично.
За это сообщение автора skysilver поблагодарил:
Eraser (Чт мар 17, 2016 9:51 am)
Рейтинг: 1.23%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
Eraser
Сообщения: 943
Зарегистрирован: Вт окт 21, 2014 7:31 pm
Откуда: Киров
Благодарил (а): 13 раз
Поблагодарили: 702 раза
Контактная информация:

Re: Модуль "Telegram"

Сообщение Eraser » Чт мар 17, 2016 9:37 am

skysilver писал(а):Eraser, случаем, не знаете у Hangouts нет аналогичного функционала ботов и api соответствующего? Может, мониторили информацию перед написанием модуля. А то у меня Telegram не прижился еще пока. ))

в Hangouts протокол схожий с XMPP(jabber)
думаю в Hangouts тоже можно реализовать бота, но в нем нет возможности формировать клавиатуру с командами
smoker_vvo писал(а):И еще один вопрос для понимания. Ранее вы писали
"По поводу
Code:
say('привет',5);

не хватает в конце return "";
бот воспринимает это как ошибка, и высылает ответ что ошибка
предполагалось, что результатом выполнения такой команды будет какой либо ответ
в ближайшей версии пересмотрю это поведение"
что означает - return "";
сейчас return "" не обязательно, return для того чтобы сразу отправить ответ в телеграм, например

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

sg("relay.on",0);
return ("Включено");
skysilver писал(а):Поставил модуль. Потестил. По итогу есть следующие наблюдения.

1. Если в настройках учеток Телеграм не указать пользователя Мажордомо и дать право получать системную историю (чат Алисы), то сообщения приходить не будут. Пришлось заводить пользователей в Мажородомо. Сначала думал, что баг, но, видимо, это все-таки фича. ))

2. Для проигрывания голосовых сообщений нужны кодеки OGG. Иначе mplayer вывалит ошибку:

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

[ogg @ 0xb667c558]Codec not found
LAVF_header: av_open_input_stream() failed
Ogg stream 0 is of an unknown type
А вот где этот кодек взять большой вопрос. Пробовал даже под виндой проиграть эти файлы в VLC и AIMP - ничего не вышло. ((

3. Никак не смог заставить произносить фразы отправленные боту через обработчик метода ThisComputer.commandReceived. Т.е. пишем боту "скажи Привет" или "повтори Привет", команда отображается в чате Алисы от имени пользователя, но не выполняется. При этом в debmes видим

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

DEBUG [root]: External context response: a:1:{s:15:"MATCHED_CONTEXT";i:0;} (at /var/www/lib/general.class.php:432) 
а на вкладке Methods в XRay видно, что метод commandReceived даже не вызывался. При все при этом команда выполнится, если отправить ее в чат Алисы через веб-интерфейс Мажордомо. С шаблонами поведения проблем нет.

4. Функция $telegram_module->sendMessageToAll("test message to all"); выдает ошибку

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

1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for
the right syntax to use near '' at line 1 SELECT * FROM tlg_user WHERE
Надо в файле в функции sendMessageTo($where, $message) сделать вместо

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

    if ($query)
        $query = $query." WHERE ".$where; 
например так

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

if ($where != "")
        $query = $query." WHERE ".$where; 
C sendImageToAll аналогично.
спасибо, за багрепорт

1. да нужна привязка к пользователю, чтобы пользователю не отправлялось то что он отправил, кроме этого если несколько пользователей, то в чате будет видно кто что писал
2. странно, но vlc под виндой у меня открыло голосовое сообщение, и в linux mplayer тоже справился
3. видимо срабатывает какой-то шаблон
4. исправлю
Connect ---- Telegram
Яндекс.Деньги для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!! :D
skysilver
Сообщения: 2855
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 368 раз
Поблагодарили: 1646 раз
Контактная информация:

Re: Модуль "Telegram"

Сообщение skysilver » Чт мар 17, 2016 10:51 am

Eraser писал(а):3. видимо срабатывает какой-то шаблон
Проверял все шаблоны поведения, даже в БД искал (мало ли хвосты какие остались, которых в админке не видно) - ничего такого, что могло сработать на "скажи|повтори" нет. Но это не критичный момент, вполне можно и без commandReceived обойтись, реализовав все на шаблонах поведения.

Вопрос по функционалу. Есть ли возможность в коде команд и шаблонов поведения получить ID пользователя, который сформировал запрос на команду (шаблон)?
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
Eraser
Сообщения: 943
Зарегистрирован: Вт окт 21, 2014 7:31 pm
Откуда: Киров
Благодарил (а): 13 раз
Поблагодарили: 702 раза
Контактная информация:

Re: Модуль "Telegram"

Сообщение Eraser » Чт мар 17, 2016 11:13 am

skysilver писал(а):
Eraser писал(а):3. видимо срабатывает какой-то шаблон
Проверял все шаблоны поведения, даже в БД искал (мало ли хвосты какие остались, которых в админке не видно) - ничего такого, что могло сработать на "скажи|повтори" нет. Но это не критичный момент, вполне можно и без commandReceived обойтись, реализовав все на шаблонах поведения.

Вопрос по функционалу. Есть ли возможность в коде команд и шаблонов поведения получить ID пользователя, который сформировал запрос на команду (шаблон)?
в коде команды можно получить ID пользователя $chat_id, ну а дальше передать параметром куда надо

Например, кусок кода из команды которая отправляет снимок с камеры

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

include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->sendImageToUser($chat_id,$img);
в шаблонах используется id привязанного пользователя системы, а по нему из базы (таблица tlg_user) можно получить chat_id
За это сообщение автора Eraser поблагодарил:
skysilver (Чт мар 17, 2016 11:25 am)
Рейтинг: 1.23%
Connect ---- Telegram
Яндекс.Деньги для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!! :D
skysilver
Сообщения: 2855
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 368 раз
Поблагодарили: 1646 раз
Контактная информация:

Re: Модуль "Telegram"

Сообщение skysilver » Чт мар 17, 2016 11:25 am

Eraser писал(а):в коде команды можно получить ID пользователя $chat_id, ну а дальше передать параметром куда надо
Отлично! То, что надо.

Предлагаю вынести нюансы заполнения настроек модуля и все возможные параметры, передаваемые командам и шаблонам, на вкладку Помощь модуля. ;)
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
Eraser
Сообщения: 943
Зарегистрирован: Вт окт 21, 2014 7:31 pm
Откуда: Киров
Благодарил (а): 13 раз
Поблагодарили: 702 раза
Контактная информация:

Re: Модуль "Telegram"

Сообщение Eraser » Чт мар 17, 2016 11:32 am

skysilver писал(а):Предлагаю вынести нюансы заполнения настроек модуля и все возможные параметры, передаваемые командам и шаблонам, на вкладку Помощь модуля. ;)
Как раз планирую этим занятся :)
Connect ---- Telegram
Яндекс.Деньги для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!! :D
smoker_vvo
Сообщения: 113
Зарегистрирован: Пт дек 14, 2012 3:46 am
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Модуль "Telegram"

Сообщение smoker_vvo » Чт мар 17, 2016 1:35 pm

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

Re: Модуль "Telegram"

Сообщение Eraser » Чт мар 17, 2016 1:53 pm

Дополнил help
Connect ---- Telegram
Яндекс.Деньги для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!! :D
Аватара пользователя
Eraser
Сообщения: 943
Зарегистрирован: Вт окт 21, 2014 7:31 pm
Откуда: Киров
Благодарил (а): 13 раз
Поблагодарили: 702 раза
Контактная информация:

Re: Модуль "Telegram"

Сообщение Eraser » Пн мар 21, 2016 3:16 pm

Обновление
1. Добавлена возможность скрытия команд из клавиатуры, при этом команда выполняется, если ее набирают вручную
Скрытие можно привязать значению свойства какого либо объекта

2. Формирование своей клавиатуры

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

include_once(DIR_MODULES . 'telegram/telegram.class.php');
$option = array( array("A", "B","C"), array("D", "E") );
$telegram_module = new telegram();
$telegram_module->sendMessageToUser($chat_id,"Select option",$option);
 
За это сообщение автора Eraser поблагодарили (всего 2):
skysilver (Чт мар 24, 2016 11:43 pm) • Samir77 (Чт дек 27, 2018 8:36 pm)
Рейтинг: 2.47%
Connect ---- Telegram
Яндекс.Деньги для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!! :D
Ответить