Не работает отправка ТГ-уведомлений из wb-rules

Здравствуйте.
У WB7 подключены 2 сетевых интерфейса, которые дают доступ к интернет: модем и проводной интерфейс. Проводной интернет “ходит” только через прокси вышестоящего провайдера.
Суть проблемы в следующем.
Через модем сообщения из правил в ТГ отправляются без проблем, однако, когда WB использует для подключения проводной интерфейс, то сообщения не отправляются вот с такой ошибкой:

ERROR: command '/bin/sh -c curl -s -X POST https://api.telegram.org/bot123:ABC/sendMessage -d chat_id=-123 -d text="Текст сообщения"' **failed with exit status 60**

Понять, из-за чего это происходит, сложно, поскольку, если я пишу команду для отправки сообщения в консоли, то оно отправляется без ошибок.
Подскажите, пожалуйста, в чем может быть проблема?

Думаю стоит приложить код, который отправляет через wb-rules.

function send_message_telegram(text_message){
  var token = "123:ABC";
  var chat_id = -123;
  var command = 'curl -s -X POST https://api.telegram.org/bot{}/sendMessage -d chat_id={} -d text="{}"'.format(token, chat_id, text_message);
  runShellCommand(command);
}

Добрый день!
Для диагностики проблемы пришлите, пожалуйста, архив с диагностической информацией контроллера. Создание архива описано в документации.

А что в stdout, stderr возвращается?

Вот диагностический архив:
diag_output_AGO7HF6L_2025-04-28-22.14.47.zip (178,2 КБ)

В stdout, по-моему, в случае удачи запрос ТГ в формате JSON, но, да, мне было интереснее, что возвращает stderr в случае ошибки, но там, почему-то, пусто.

В нем нет вывода, к сожалению.

Точно пусто? Покажите пожалуйста.

Вот функция, которая вызывается для отправки сообщения в ТГ:

function send_message_telegram(text_message){
  var token = "123:ABC";
  var chat_id = -123;
  var command = 'curl -s -X POST https://api.telegram.org/bot{}/sendMessage -d chat_id={} -d text="{}"'.format(token, chat_id, text_message);
  "https://api.telegram.org/bot7604256657:AAFBIR11-vb6NJDS7C7mRtcKnma3p3Cx3pQ/sendMessage";
  runShellCommand(command, {
    captureOutput: true, 
    captureErrorOutput: true, 
    exitCallback: function (exitCode, capturedOutput, capturedErrorOutput) 
          {
            log("cmd output: " + capturedOutput);
            log("cmd Erroroutput: " + capturedErrorOutput);
            if (exitCode === 0){
              log("Сообщение '" + text_message + "' отправлено успешно");
            }else{
              log("Сообщение '" + text_message + "' отправить не удалось");
            }

          }
  });
  
}

А вот и логи

Apr 29 13:20:30 wirenboard-AGO*** wb-rules[1937]: INFO: [rule info] Right door is open
Apr 29 13:20:30 wirenboard-AGO*** wb-rules[1937]: INFO: [rule info] cmd output:
Apr 29 13:20:30 wirenboard-AGO*** wb-rules[1937]: INFO: [rule info] cmd Erroroutput:
Apr 29 13:20:30 wirenboard-AGO*** wb-rules[1937]: INFO: [rule info] Сообщение 'Правая дверь открыта' отправить не удалось
Apr 29 13:20:41 wirenboard-AGO*** wb-rules[1937]: INFO: [rule info] Right door is closed
Apr 29 13:20:42 wirenboard-AGO*** wb-rules[1937]: INFO: [rule info] cmd output:
Apr 29 13:20:42 wirenboard-AGO*** wb-rules[1937]: INFO: [rule info] cmd Erroroutput:
Apr 29 13:20:42 wirenboard-AGO*** wb-rules[1937]: INFO: [rule info] Сообщение 'Правая дверь закрыта' отправить не удалось

Добрый день!
Попробую у себя воспроизвести ситуацию и сообщу о результате.

Ну неправда ж:

//04_29_test_02.js

function send_message_telegram(text_message){
  var token = "123:ABC";
  var chat_id = -123;
  var command = 'curl -s -X POST https://api.telegram.org/bot{}/sendMessage -d chat_id={} -d text="{}"'.format(token, chat_id, text_message);
  //command = 'ls -l';
  log.info("before start command=", command);
  runShellCommand(command,{
        captureOutput: true,
        exitCallback: function (exitCode, capturedOutput) {
        log.info("exitCode:", exitCode, "cmd output: " + capturedOutput);
      }
  })
}


send_message_telegram("XXX")

Screenshot_20250429_135240

Хорошо, попробую ваш использовать

Это довольно однобокое решение.
Сам пользуюсь таким решением, сторонним, но удивительно хорошо написанным: GitHub - aadegtyarev/telegram2wb: Телеграм-бот на wb-rules

1 лайк

Взял код из вашего сообщения

function send_message_telegram(text_message){
  var token = "123:ABC";
  var chat_id = -1234;
  var command = 'curl -s -X POST https://api.telegram.org/bot{}/sendMessage -d chat_id={} -d text="{}"'.format(token, chat_id, text_message);
    log.info("before start command=", command);
  runShellCommand(command,{
        captureOutput: true,
        exitCallback: function (exitCode, capturedOutput) {
        log.info("exitCode:", exitCode, "cmd output: " + capturedOutput);
      }
  });
  
}

Лог немного изменился:

Apr 29 19:32:23 wirenboard-AGO*** wb-rules[1937]: INFO: [rule info] before start command= curl -s -X POST https://api.telegram.org/bot123:ABC/sendMessage -d chat_id=-1234 -d text="Тестовое сообщение"
Apr 29 19:32:23 wirenboard-AGOAGO*** wb-rules[1937]: INFO: [rule info] exitCode: 60 cmd output:

Видно, что консоль возвращает код ошибки 60 – то есть сообщение не отправляется даже. Причём тут же пишу команду в консоли и мне она возвращает:

{"ok":true,"result":{"message_id":875,"from":{"id":123,"is_bot":true,"first_name":"ABC","username":"abc_bot"},"author_signature":"ABC","chat":{"id":-1234,"title":"ABC","type":"channel"},"date":1745930422,"text":"\u0422\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435"}}

Почему так? Мне кажется, что Телеграм-бот тоже не сможет отправить сообщение – он, ведь, тоже использует runShellCommand() или нет?.

Посмотрите в stderr - 60 как следует из документации ошибка сертификата.

Да, возможно проблема в этом, но всё равно не понятно, почему из консоли сообщение отправляется, а из скрипта – нет. :thinking:

Добрый день!
Рекомендую проверить текущее время на ПК и на контроллере — важно, чтобы они совпадали и были верные.

1 лайк