MadM
1
скачал GitHub - aadegtyarev/telegram2wb: Телеграм-бот на wb-rules
создал бота
прописал данные в
token: “”,
users: [@],
сохраняю правило и ошибку получаю
ReferenceError: identifier ‘exports’ undefined duk_js_var.c:1232 F /etc/wb-rules/telegram2wb.js:657 preventsyield
MadM
2
скопировал файл src/telegram2wb.js
в папку /etc/wb-rules-modules/
и перезапустил wb-rules systemctl restart wb-rules
.
MadM
3
прописал токен бота телеграммовского как
token: “823342:AAGDRLLTxtY20TrnE"
Добрый день.
Судя по выводу у вас файл модуля расположен в каталоге скриптов. Зачем? Покажите команды которыми размещали файлы.
MadM
6
первую ошибку можно игонорировать. через веб интерфейс в правила пытался.
отсюда все брал GitHub - aadegtyarev/telegram2wb: Телеграм-бот на wb-rules
потом
- файл скачал из репозитория. ничего не изменял. и залил в папку
/etc/wb-rules-modules/
через sftp.
- взял файл с примерами telegram2wb-logic.js и сделал правило. запролнил token и users в нем.
- сделал отдельное правило куда указал
idUserTelegram = 106мойид7;
defineRule("TestTelega", {
whenChanged: "wb-mr6cv3_57/K1",
then: function (newValue, devName, cellName) {
if (newValue)
statusText = 'Сработал'
else
statusText = 'Выключился';
text = 'Датчик ' + statusText ;
sendMsg(idUserTelegram, text);
}
})
Действия:
- через виджеты выкл вкл “wb-mr6cv3_57/K1”
Ожидаемый результат - чтото бот слать мне должен о выключателе
Фактический - тишина.
- в бота чего нибудь пишу. в том числе пробую /start
Ожидаемый результат - ответ бота по командам
Фактический - тишина.
PS systemctl restart wb-rules делал
MadM
7
похоже коннектится к боту. в логах по крайней мере вижу
allowUsers = [“имя без собаки пишем”]
ура начал хотябы команды присылать когда убрал собаку.
но отдельное правило по датчику все равно не работает
Проверил:
sendMsg("48*********3", "text");
получаю:
ну и советую добавить вывод в лог как раз в фкнкции правила чтобы убедиться в том что функция запускается. При включенном Debug вижу в логе:
Sep 06 09:26:18 wirenboard-AWI3MCGC wb-rules[9357]: INFO: [rule info] telegram2wb: [sendMessage/runShellCommand]
|→ exitCode: 0 | capturedOutput:{"ok":true,"result":{"message_id":47,"from":{"id":60*****96,"is_bot":true,"first_name":"r***n","username":"r*******_bot"},"chat":{"id":48*******93,"first_name":"\u*************9","last_name":"\u**************32","username":"********","type":"private"},"date":1693992378,"text":"text"}}
Кажется, тут первым параметром не юзер айди, а чат айди чата с ботом. То есть куда отправлять и что.
Ну и, кстати, нашел багу в https://github.com/aadegtyarev/telegram2wb/blob/860bb4ef40d33162bc3c39a2bd1ed131f6b4763f/src/telegram2wb.js#L623
Если
reply["result"];
содержит “[]”
То есть проще показать:
var test2 = "{\"ok\":true,\"result\":[{\"update_id\":460000005,\"message\":{\"message_id\":68}}]}"
log.info("test2", test2);
test3 = JSON.parse(test2);
log.info("test3.ok", test3.ok);
log.info("test3.result.update_id", test3.result.update_id);
Тут test3.result.update_id - undefined
А вот если без “[]”
var test2 = "{\"ok\":true,\"result\":{\"update_id\":460000005,\"message\":{\"message_id\":68}}}"
то работает.
MadM
11
я думал он мне должен слать напрямую, а не в бота. что указать тогда? какой айди?
MadM
12
// это telega.js
idUserTelegram = "10xxxxxxxx7"; // мой айди
defineRule("TestTelega", {
whenChanged: "wb-mr6cv3_57/K1",
then: function (newValue, devName, cellName) {
if (newValue)
statusText = 'Сработал'
else
statusText = 'Выключился';
text = 'Датчик ' + statusText ;
sendMsg(idUserTelegram, text);
}
})
ERROR: [rule error] ECMAScript error: ReferenceError: identifier ‘sendMsg’ undefined
duk_js_var.c:1232
anon /etc/wb-rules/telega.js:16 preventsyield
call native strict preventsyield
anon /usr/share/wb-rules-system/scripts/lib.js:238 preventsyield
07-09-2023 17:33:49.626 [wb-rules] INFO: [rule info] telegram2wb: [getMessages]
Где (в каком месте скрипта) определена эта функция?
MadM
14
так она есть в telegram2wb-logic.js или ее как то еще раз в telega.js определять?
Но скрипты изолированы друг от друга. Если хотите использовать функцию использующую объекты из модуля - этот модуль надо сначала подключить.
MadM
16
а другой скрипт подключить нельзя?
MadM
17
изменяю строку для попытки вывести данные по включаемому датчику
так работает text = 'Датчик ’ + cellName + newValue + statusText ;
(в логах 07-09-2023 21:27:51.336 [wb-rules] INFO: [rule info] 1064462367 Датчик K1falseВыключился undefined)
а так уже не работает text = 'Датчик ’ + devName + cellName + newValue + statusText ;
(в логах 07-09-2023 21:28:42.838 [wb-rules] INFO: [rule info] 1064462367 Датчик wb-mr6cv3_57K1trueСработал undefined)
Вопрос: почему не работает с devName ?
MadM
18
Сам ставлю задачу, сам решаю
text = ‘Датчик ’ + ’ ’ + devName + ’ ’ + cellName + ’ ’ + newValue + ’ ’ + statusText ;
newText = text.replace(’_', ’ ');
sendMsg(idUserTelegram, newText);
Подчеркивание символ не шлет в телегу. надо наверное в модуле подправить
Зачем? Ну, если считаете что нужно экранировать смволы в модуле - то, теоретически, можно, (сделайте PR).
Да, опроавляется post запросом.
system
Closed
20
Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.