Страница 11 из 191

Re: Модуль "Telegram"

Добавлено: Ср мар 16, 2016 2:33 pm
smoker_vvo
И еще один вопрос для понимания. Ранее вы писали
"По поводу
Code:
say('привет',5);

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

Re: Модуль "Telegram"

Добавлено: Чт мар 17, 2016 12:36 am
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 аналогично.

Re: Модуль "Telegram"

Добавлено: Чт мар 17, 2016 9:37 am
Eraser
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. исправлю

Re: Модуль "Telegram"

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

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

Re: Модуль "Telegram"

Добавлено: Чт мар 17, 2016 11:13 am
Eraser
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

Re: Модуль "Telegram"

Добавлено: Чт мар 17, 2016 11:25 am
skysilver
Eraser писал(а):в коде команды можно получить ID пользователя $chat_id, ну а дальше передать параметром куда надо
Отлично! То, что надо.

Предлагаю вынести нюансы заполнения настроек модуля и все возможные параметры, передаваемые командам и шаблонам, на вкладку Помощь модуля. ;)

Re: Модуль "Telegram"

Добавлено: Чт мар 17, 2016 11:32 am
Eraser
skysilver писал(а):Предлагаю вынести нюансы заполнения настроек модуля и все возможные параметры, передаваемые командам и шаблонам, на вкладку Помощь модуля. ;)
Как раз планирую этим занятся :)

Re: Модуль "Telegram"

Добавлено: Чт мар 17, 2016 1:35 pm
smoker_vvo
Спасибо!! Будем творить дальше

Re: Модуль "Telegram"

Добавлено: Чт мар 17, 2016 1:53 pm
Eraser
Дополнил help

Re: Модуль "Telegram"

Добавлено: Пн мар 21, 2016 3:16 pm
Eraser
Обновление
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);