Биллинговая система Nodeny

Главная категория => Nodeny Plus => Тема начата: k291 от 18 Октября 2017, 01:25:42



Название: Nodeny telegram
Отправлено: k291 от 18 Октября 2017, 01:25:42
Можно добавить отправку сообщения в telegram?

Админу:
Кто оплатил + сумма платежа + способ оплаты
В случае создания/ изменения тикета: номер + тема + сообщение + кто написал + ссылка на тикет
Напоминание о старте тикета через N часов
Клиенту:
об окончании услуги
Сообщение от администратора + ссылка в личный кабинет
О пропаже ответа от его IP(пропажа зеленого ключика) и появлении

Например для отправки сообщений определенных данных из файла:
Цитировать
#!/bin/bash

#Telegram
CHATID=341937610
APIKEY=339502684:AAFkklb2-wz3ynk5f7nxiZkt-bdYKda-J4A

#Просто текст
WORKERNAME=Machin1
#Загрузка CPU
CPU=$(top -b -n2 -p 1 | fgrep "Cpu(s)" | tail -1 | awk -F'id,' -v prefix="$prefix" '{ split($1, vs, ","); v=vs[length(vs)]; sub("%", "", v); printf "%s%.1f%%\n", prefix, 100 - v }')
#Часть текста из файла
TOTAL_GPU_RATE=$(tail -n 30 loger.log |grep Total| tail -n 1)

MSG=" Worker: $WORKERNAME
CPU: $CPU
$TOTAL_GPU_RATE

/usr/bin/curl -s -X POST --output /dev/null h_ttps://api.telegram.org/bot${APIKEY}/sendMessage -d "text=${MSG}" -d chat_id=${CHATID}


Название: Re: Nodeny telegram
Отправлено: k291 от 21 Октября 2017, 04:50:43
Для работы отправки сообщений, необходимо установить в консоли:
perl -MCPAN -e 'install WWW::Telegram::BotAPI'


Далее, в /usr/local/nodeny/web/_o_tickets.pl я добавил:

Код:
use WWW::Telegram::BotAPI;

#Telegram
my $textMessage = "My Keyboard";
my $token = "777777777:AAF1IywqEMRsNObEXUwtiNL2Y3ygJtMVQrU";
my $chat_id = "44444444";

my $api = WWW::Telegram::BotAPI->new(
token => $token);
    $api->sendMessage ({
        chat_id => $chat_id,
        text    => my $subject.'  -  '.$force_dialog.'  -  '.$last_author
    });

Сообщения приходят, но со значениями 0, null, пустым текстом. В случае $last_author, приходит  HASH(0x............) с разными значениями.

Подскажите, как передать тему и сообщение тикета?


Название: Re: Nodeny telegram
Отправлено: sever от 23 Октября 2017, 09:58:16
Код:
#!/usr/bin/env bash

TOKEN='тут мой токен'

which curl &>/tmp/telegram.log

if [ $? -ne 0 ] ; then echo 'FAIL: curl not found.' && exit 1 ; fi
if [ $# -ne 3 ] ; then echo 'FAIL: Params not defined.' && echo 'Usage: zabbix-to-telegram-notify.sh TelegramID Subject Message' && exit 1 ; fi

CHAT_ID="$1"
SUBJECT="$2"
MESSAGE="$3"

curl -s --header 'Content-Type: application/json' --request 'POST' --data "{\"chat_id\":\"${CHAT_ID}\",\"text\":\"${SUBJECT}\n${MESSAGE}\"}" "https   ://api.telegram.org/bot${TOKEN}/sendMessage" | $

if [ $? -eq 0 ] ; then exit 1 ; fi


Название: Re: Nodeny telegram
Отправлено: sever от 23 Октября 2017, 10:02:00
Код:
#!/usr/bin/env bash

TOKEN='тут мой токен'

which curl &>/tmp/telegram.log

if [ $? -ne 0 ] ; then echo 'FAIL: curl not found.' && exit 1 ; fi
if [ $# -ne 3 ] ; then echo 'FAIL: Params not defined.' && echo 'Usage: zabbix-to-telegram-notify.sh TelegramID Subject Message' && exit 1 ; fi

CHAT_ID="$1"
SUBJECT="$2"
MESSAGE="$3"

curl -s --header 'Content-Type: application/json' --request 'POST' --data "{\"chat_id\":\"${CHAT_ID}\",\"text\":\"${SUBJECT}\n${MESSAGE}\"}" "https   ://api.telegram.org/bot${TOKEN}/sendMessage" | $

if [ $? -eq 0 ] ; then exit 1 ; fi

Чтобы клиенту отправлять через телеграм
Клиент должен добавить чат id твоего чата
+ ты должен знать id-клиента в телеграмм.


Название: Re: Nodeny telegram
Отправлено: k291 от 23 Октября 2017, 20:35:40
Как создать собственного бота telegram:
   Находим в поиске аккаунт с именем @botfather
   Нажимаем на кнопку Start в нижней части экрана

После чего пишем ему команду /newbot
Потом отвечаем на 2 вопроса:
   Первый вопрос – имя создаваемого бота Test1splaBot
   Второй вопрос – ник создаваемого бота (должен оканчиваться на bot) Test_1spla_bot
   В ответ получим токен нашего бота, в моём случае, это 44444444:AAEEe279_R5bT2UEG9nczRIlTGHiXRwe1ho

Затем, нужно найти нашего бота в поиске по имени @Test_1spla_bot и нажать на кнопку Start, чтобы его запустить.


Если бот уже создан, а мы не помним его Token:
Находим @botfather
Нажимаем "/mybots", выбираем своего бота, в ответ получаем "44444444:AAEEe279_R5bT2UEG9nczRIlTGHiXRwe1ho".


Теперь надо узнать ID Chat(по сути ID телеграма,что установлен на телефоне), находим @MyTelegramID_bot, жмем "/start", получаем ответ "777777777"


Название: Re: Nodeny telegram
Отправлено: k291 от 23 Октября 2017, 20:59:05
Я так понимаю, у вас реализовано через Zabbix и каждого пользователя(надо добавлять вручную).
Для начала, я хочу чтобы приходило сообщение в Телеграм при создании или изменении в тикете.
При действиях из второго поста, сообщения приходят, не без нужных данных. Не могу понять какую надо передать переменную. $subject, $comment,
При попытке передать $msg,$comment, получаю ошибку:
Цитировать
Global symbol "$msg" requires explicit package name (did you forget to declare "my $msg"?) at /usr/local/nodeny/web/_o_tickets.pl line 935. Compilation failed in require at /usr/local/nodeny/web/calls.pm line 1374.


Название: Re: Nodeny telegram
Отправлено: sever от 24 Октября 2017, 08:35:58
Я так понимаю, у вас реализовано через Zabbix и каждого пользователя(надо добавлять вручную).


У меня мониторинг привязан к телеграм.
Скрипт был оттуда.


Название: Re: Nodeny telegram
Отправлено: k291 от 24 Октября 2017, 16:34:22
Можете показать пример сообщения в телеграм.
Вы реализовали приход сообщения об изменении в Тикете или изменениях в Платежи?


Название: Re: Nodeny telegram
Отправлено: Efendy от 25 Октября 2017, 10:20:33
Код:
        text    => my $subject.'  -  '.$force_dialog.'  -  '.$last_author
здесь слово my лишнее. Слово my говорит типа  "здесь создать переменную с таким-то именем"


Название: Re: Nodeny telegram
Отправлено: k291 от 25 Октября 2017, 22:55:08
Исправил:
Код:
#Telegram
my $textMessage = "
Mess: {$1} #Для теста
\nMess1: {$performer_lbl} #Исполнитель
\nMess2: {$subject} #Тема
";
my $token = "377236753:AAF1IywqEMRsNObEXUwtiNL2Y3ygJtMVQrU";
my $chat_id = "341937610";

my $api = WWW::Telegram::BotAPI->new(
token => $token);
    $api->sendMessage ({
        chat_id => $chat_id,
        'parse_mode' => 'HTML',
        'text' => $textMessage
    });
При добавлении $subject в Mess2, выдает ошибку:
Цитировать
Global symbol "$subject" requires explicit package name (did you forget to declare "my $subject"?) at /usr/local/nodeny/web/_o_tickets.pl line 925. Compilation failed in require at /usr/local/nodeny/web/calls.pm line 1374.
Возможно тему,сообщение,комментарий, надо по другому передавать. Только как?


Название: Re: Nodeny telegram
Отправлено: ser970 от 26 Октября 2017, 00:17:20
При добавлении $subject в Mess2, выдает ошибку:
Цитировать
Global symbol "$subject" requires explicit package name (did you forget to declare "my $subject"?) at /usr/local/nodeny/web/_o_tickets.pl line 925. Compilation failed in require at /usr/local/nodeny/web/calls.pm line 1374.
Возможно тему,сообщение,комментарий, надо по другому передавать. Только как?

did you forget to declare =  вы забыли объявить


где то так
my ($subject,$performer_lbl);




Название: Re: Nodeny telegram
Отправлено: k291 от 26 Октября 2017, 00:23:27
Нашел.
Чтобы получать уведомление в Telegram, при добавлении сообщений в тикет:

В o_tickets.pl, в 11 строке вставляем:
use WWW::Telegram::BotAPI;
my $token = "777777777:AAF1IywqEMRsNObEXUwtiNL2Y3ygJtMVQrU";
my $chat_id = "444444444";

В o_tickets.pl, вставляем код ниже 1136, перед "push @sqls, $d->_notifications(\%p, $notification_msg);"
Код:
#Telegram
my $textMessage = "
Изменения в Тикете: $p{id}
Тема: $p{subject}
Комментарий: $p{comment}
Сообщение: $msg
";

my $api = WWW::Telegram::BotAPI->new(
token => $token);
    $api->sendMessage ({
        chat_id => $chat_id,
        'parse_mode' => 'HTML',
        'text' => $textMessage,

    });

Это дубовый способ. Если у нас много кому надо отправлять сообщения(админам,сапорту,начальству), то придется дублировать часть кода.
Надо админам в Н+, добавлять поле token , chat_id и тип тикета по которому сотруднику присылать сообщения. Чтобы запрос клиента не приходил админу, а тикет по настройке нового коммутатора, не приходил тех.поддержке.


Если мы хотим отсылать сообщения об окончании услуге клиенту, то нам надо добавить поле chat_id(с Телеграма), куда клиент внесет свои данные. token у всех клиентов будет один и тотже.


Название: Re: Nodeny telegram
Отправлено: k291 от 30 Октября 2017, 23:12:23
Для получения сообщений в Telegram, при обращении клиента в личном кабинете в форме"Сообщение администрации":
В /usr/local/nodeny/web/user/_message.pl:
Добавляем в строку 5, после "use strict;":
Код:
use WWW::Telegram::BotAPI;

#Telegram
my $token = "777777777:AAF1IywqEMRsNObEXUwtiNL2Y3ygJtMVQrU";
my $chat_id = "444444444";


Добавляем в строку 34, после
"        my $new_data = {
            creator => $uid,
            comment => $comment,
            subject => $subject,
        };
":

Код:
#Telegram
my $textMessage = "
Message from the client: $uid
Subject: $subject
Comment: $comment
";

my $api = WWW::Telegram::BotAPI->new(
token => $token);
    $api->sendMessage ({
        chat_id => $chat_id,
        'parse_mode' => 'HTML',
        'text' => $textMessage,

    });


Название: Re: Nodeny telegram
Отправлено: Redmen от 31 Октября 2017, 00:40:17
Прекрасный вариант!
Тоже думал об этом!
+ в карму
Но:
1) Нужно попросить Стаса добавить хуки в места вставки твоего кода
2) $token и $chat_id вынести в настройки в тикетах
3) в сообщение добавить урл на абона или на сам тикет (тяжелее), тему, и как то обозначить абона (фио / адрес )


Название: Re: Nodeny telegram
Отправлено: Redmen от 09 Ноября 2017, 22:01:45
Сделал патч по выше упомянутым 2м постам, но:
  • нет проверок на наличие настроек
  • не поборол проблему с кириллицей
  • в патче с настройками, кому надо, допишите перевод на русский

у меня этот патч работает с первого числа и сотрудникам понравилась идея с оповещением


Название: Re: Nodeny telegram
Отправлено: Redmen от 09 Ноября 2017, 22:10:11
В o_tickets.pl, в 11 строке вставляем:
...
Это дубовый способ. Если у нас много кому надо отправлять сообщения(админам,сапорту,начальству), то придется дублировать часть кода.
Надо админам в Н+, добавлять поле token, chat_id и тип тикета...
нужно только доп поле chat_id,
token бота не меняется, кроме заполненого поля chat_id, каждому кто хочет получать уведомление нужно добавить бота в контакт лист и написать ему пм.

вместо выбора типа тикета, можно отправлять только тем кто исполнитель даного тикета


Название: Re: Nodeny telegram
Отправлено: k291 от 11 Марта 2018, 15:49:23
Подскажите как брать данные с доп.поля клиента?
Хочу чтобы клиент получал уведомление о скором списании или блокировки интернета в telegram. Еще по хорошему об отсутствии связи с клиентским роутером, на случай, "у вас интернет г...но, я не чего не трогал", а потом оказывается, роутер не подключен к розетке 220в.


Название: Re: Nodeny telegram
Отправлено: Efendy от 11 Марта 2018, 17:22:51
Допполе - это поле в таблице data0. select поле from data0 where uid=xxx;


Название: Re: Nodeny telegram
Отправлено: Cell от 20 Мая 2018, 18:49:13
Сделал патч по выше упомянутым 2м постам, но:
  • нет проверок на наличие настроек
  • не поборол проблему с кириллицей
  • в патче с настройками, кому надо, допишите перевод на русский

у меня этот патч работает с первого числа и сотрудникам понравилась идея с оповещением
Спасибо, выручил. Один клиент попросил запилить и оно запилилось практически мгновенно. Нужно бы как-то рассмотреть вопрос чтобы рассылалось не по одному chat id а по всем, указанным в конфиге. Вообще бы бомба была.


Название: Re: Nodeny telegram
Отправлено: k291 от 20 Мая 2018, 22:07:01
Можно поступить по "дикому" и с дублировать строки из 13-го поста под нужное количество chat id.
А можно создать доп. поле в учетке клиентов, админов и оттуда брать данные chat id. Я крутил, крутил, но так и не вышло.


Название: Re: Nodeny telegram
Отправлено: Cell от 20 Мая 2018, 22:10:39
Нужно этот айди через запятую писать в конфиге и по циклу отправлять. Времени нет сейчас  заняться, но как-то запилю.


Название: Re: Nodeny telegram
Отправлено: Cell от 15 Июня 2018, 17:48:18
В итоге отправка ботом сообщений нескольким юзерам вылилась вот в такой код, где идентификаторы чата нужно писать в настройках модуля через запятую.

Код:
        my $new_data = {
            creator => $uid,
            msg => $comment,
            subject => $subject,
        };
        #Telegram
                my $textMessage = "New message from user id: $uid\n".
                        "URL:$cfg::telegram_url?a=user&uid=$uid";

                my $api = WWW::Telegram::BotAPI->new(
                token => $cfg::telegram_token);

           my $id_list = $cfg::tickets_chat_id;

            foreach( split /,/, $id_list ){
            $api->sendMessage ({
                chat_id => $_,
                'parse_mode' => 'HTML',
                'text' => $textMessage,
            });
                  }
        my $fid_sql;