Telegram2wb помогите настроить

скачал GitHub - aadegtyarev/telegram2wb: Телеграм-бот на wb-rules

создал бота

прописал данные в
token: “”,
users: [@],

сохраняю правило и ошибку получаю

ReferenceError: identifier ‘exports’ undefined duk_js_var.c:1232 F /etc/wb-rules/telegram2wb.js:657 preventsyield

скопировал файл src/telegram2wb.js в папку /etc/wb-rules-modules/ и перезапустил wb-rules systemctl restart wb-rules .

прописал токен бота телеграммовского как

token: “823342:AAGDRLLTxtY20TrnE"

Добрый день.
Судя по выводу у вас файл модуля расположен в каталоге скриптов. Зачем? Покажите команды которыми размещали файлы.

первую ошибку можно игонорировать. через веб интерфейс в правила пытался.

отсюда все брал GitHub - aadegtyarev/telegram2wb: Телеграм-бот на wb-rules
потом

  1. файл скачал из репозитория. ничего не изменял. и залил в папку /etc/wb-rules-modules/ через sftp.
  2. взял файл с примерами telegram2wb-logic.js и сделал правило. запролнил token и users в нем.
  3. сделал отдельное правило куда указал

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);

    }
})

Действия:

  1. через виджеты выкл вкл “wb-mr6cv3_57/K1”

Ожидаемый результат - чтото бот слать мне должен о выключателе

Фактический - тишина.

  1. в бота чего нибудь пишу. в том числе пробую /start

Ожидаемый результат - ответ бота по командам

Фактический - тишина.

PS systemctl restart wb-rules делал

похоже коннектится к боту. в логах по крайней мере вижу

allowUsers = [“имя без собаки пишем”]

ура начал хотябы команды присылать когда убрал собаку.

но отдельное правило по датчику все равно не работает

Проверил:

sendMsg("48*********3", "text");

получаю:
Screenshot_20230906_122445

ну и советую добавить вывод в лог как раз в фкнкции правила чтобы убедиться в том что функция запускается. При включенном 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}}}"

то работает.

я думал он мне должен слать напрямую, а не в бота. что указать тогда? какой айди?


// это 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]

Где (в каком месте скрипта) определена эта функция?

так она есть в telegram2wb-logic.js или ее как то еще раз в telega.js определять?

Но скрипты изолированы друг от друга. Если хотите использовать функцию использующую объекты из модуля - этот модуль надо сначала подключить.

а другой скрипт подключить нельзя?

изменяю строку для попытки вывести данные по включаемому датчику
так работает 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 ?

Сам ставлю задачу, сам решаю :slight_smile:

text = ‘Датчик ’ + ’ ’ + devName + ’ ’ + cellName + ’ ’ + newValue + ’ ’ + statusText ;
newText = text.replace(’_', ’ ');
sendMsg(idUserTelegram, newText);

Подчеркивание символ не шлет в телегу. надо наверное в модуле подправить

Зачем? Ну, если считаете что нужно экранировать смволы в модуле - то, теоретически, можно, (сделайте PR).
Да, опроавляется post запросом.

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.