Функция для отправки сообщений в WhatSapp через callmebot

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Ответить
Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Напрямую, как в чаты Телеграмм, в WhatsApp отправлять сообщения нельзя.
Но можно воспользоваться API сайта www.callmebot.com.

Для использования необходимо получить apikey от бота, прежде чем использовать API. Для этого:

1. Добавьте номер телефона +34 644 66 32 62 в контакты вашего смартфона или планшета. (Назовите это так, как вы хотите)

2. Отправьте сообщение "I allow callmebot to send me messages" новому созданному контакту (конечно, используя WhatsApp).

3. Подождите, пока вы не получите сообщение "API активирован для вашего номера телефона. Ваш APIKEY "XXXXXX" для бота.

4. Берём отсюда код функции $FuncWhatsAppSender

Код: Выделить всё

# function FuncWhatsAppSender
# ------------------------------------------------------------
# by Sertik, DrPioneer 02/11/2022
# https://api.callmebot.com/whatsapp.php?phone=[phone_number]&text=[message]&apikey=[your_apikey]

:global FuncWhatsAppSender
:if (!any $FuncWhatsAppSender) do={ :global FuncWhatsAppSender do={
:if ([:len $0]!=0) do={
:global Emoji
:global WhatsAppPhone
:global WhatsAppApiKey
:if ([:len $2]=0) do={

# Function of converting CP1251 to UTF8
    # https://forummikrotik.ru/viewtopic.php?p=81457#p81457
    :local FuncCP1251toUTF8 do={
        :local cp1251 [:toarray {"\20";"\01";"\02";"\03";"\04";"\05";"\06";"\07";"\08";"\09";"\0A";"\0B";"\0C";"\0D";"\0E";"\0F"; \
                                 "\10";"\11";"\12";"\13";"\14";"\15";"\16";"\17";"\18";"\19";"\1A";"\1B";"\1C";"\1D";"\1E";"\1F"; \
                                 "\21";"\22";"\23";"\24";"\25";"\26";"\27";"\28";"\29";"\2A";"\2B";"\2C";"\2D";"\2E";"\2F";"\3A"; \
                                 "\3B";"\3C";"\3D";"\3E";"\3F";"\40";"\5B";"\5C";"\5D";"\5E";"\5F";"\60";"\7B";"\7C";"\7D";"\7E"; \
                                 "\C0";"\C1";"\C2";"\C3";"\C4";"\C5";"\C6";"\C7";"\C8";"\C9";"\CA";"\CB";"\CC";"\CD";"\CE";"\CF"; \
                                 "\D0";"\D1";"\D2";"\D3";"\D4";"\D5";"\D6";"\D7";"\D8";"\D9";"\DA";"\DB";"\DC";"\DD";"\DE";"\DF"; \
                                 "\E0";"\E1";"\E2";"\E3";"\E4";"\E5";"\E6";"\E7";"\E8";"\E9";"\EA";"\EB";"\EC";"\ED";"\EE";"\EF"; \
                                 "\F0";"\F1";"\F2";"\F3";"\F4";"\F5";"\F6";"\F7";"\F8";"\F9";"\FA";"\FB";"\FC";"\FD";"\FE";"\FF"; \
                                 "\A8";"\B8";"\B9";"\8D"}];
        :local utf8   [:toarray {"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"000A";"0020";"0020";"000A";"0020";"0020"; \
                                 "0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020"; \
                                 "0021";"0022";"0023";"0024";"0025";"0026";"0027";"0028";"0029";"002A";"002B";"002C";"002D";"002E";"002F";"003A"; \
                                 "003B";"003C";"003D";"003E";"003F";"0040";"005B";"005C";"005D";"005E";"005F";"0060";"007B";"007C";"007D";"007E"; \
                                 "D090";"D091";"D092";"D093";"D094";"D095";"D096";"D097";"D098";"D099";"D09A";"D09B";"D09C";"D09D";"D09E";"D09F"; \
                                 "D0A0";"D0A1";"D0A2";"D0A3";"D0A4";"D0A5";"D0A6";"D0A7";"D0A8";"D0A9";"D0AA";"D0AB";"D0AC";"D0AD";"D0AE";"D0AF"; \
                                 "D0B0";"D0B1";"D0B2";"D0B3";"D0B4";"D0B5";"D0B6";"D0B7";"D0B8";"D0B9";"D0BA";"D0BB";"D0BC";"D0BD";"D0BE";"D0BF"; \
                                 "D180";"D181";"D182";"D183";"D184";"D185";"D186";"D187";"D188";"D189";"D18A";"D18B";"D18C";"D18D";"D18E";"D18F"; \
                                 "D001";"D191";"2116";"000A"}];
        :local convStr ""; 
        :local code    "";
        :for i from=0 to=([:len $1]-1) do={
            :local symb [:pick $1 $i ($i+1)]; 
            :local idx  [:find $cp1251 $symb];
            :local key  ($utf8->$idx);
            :if ([:len $key] != 0) do={
                :set $code ("%$[:pick ($key) 0 2]%$[:pick ($key) 2 4]");
                :if ([pick $code 0 3] = "%00") do={:set $code ([:pick $code 3 6])}
            } else={:set code ($symb)}; 
            :set $convStr ($convStr.$code);
        }
        :return ($convStr);
    }

:local StrWS [$FuncCP1251toUTF8 $1]

:set StrWS ("$Emoji"."%20"."$[/system identity get name]"."%0A"."$StrWS")
do {/tool fetch url="https://api.callmebot.com/whatsapp.php\?phone=$WhatsAppPhone&text=$StrWS&apikey=$WhatsAppApiKey" keep-result=no; :return "Done"
} on-error={:log info; :log error "Error function $0 fetch"; :log info ""; :return "Error fetch"}
    } else={:log info; log error "Parametrs function $0 mismatch"; :log info ""; :return "Error parametrs mismatch"}
   }
  }
}
4. Затем, перед использованием FuncWhatsAppSender Вы должны установить две глобальные переменные, куда заносите номер своего телефона и полученный APIKEY от callmebot. Emoji настраиваем свой, если хотим:

:global Emoji "%F0%9F%A7%9A"
:global WhatsAppPhone 7XXXXXXXXXX
:global WhatsAppApiKey YYYYYY

5. И вызываем функцию, передавая ей текст для вывода в чат

:global FuncWhatsAppSender
:log info [$FuncWhatsAppSender "Привет world !"]

Всё ! Теперь Вы можете отправлять с роутеров любые уведомления для CallmeBot в WhatsApp, в том числе и на русском языке !

а вот пример простейшего парсера-уведомителя для WhatsApp, основанного на вышеприведенной функции:

Код: Выделить всё

# WhatsAppNotify
# by Sertik & DrPieneer 02/11/2022

:global lastTime
:global output
:global FuncWhatsAppSender

:local LogGet [ :toarray [ /log find topics~"wireless" || message~"system" || message~"login failure" || message~"logged" || message~"connected" || message~"[Ff]ailure" ] ];
:local LogtLineCount [ :len $LogGet ] ;
if ($LogtLineCount > 0) do={
   :local currentTime "$[ /log get [ :pick $LogGet ($LogtLineCount -1) ] time ]";
   :if ([:len $currentTime] = 10 ) do={
      :set currentTime [ :pick $currentTime 0 10 ];
   }
   :set output "$currentTime - $[/log get [ :pick $LogGet ($LogtLineCount-1) ] message ]";
   :if (([:len $lastTime] < 1) || (([:len $lastTime] > 0) && ($lastTime != $currentTime))) do={
      :set lastTime $currentTime ;
     [$FuncWhatsAppSender $output]
   }
}
Сохраняем скрипт в репозитории и ставим его в крон (Планировщик) с нужной переодичностью.
Последний раз редактировалось Sertik 11 ноя 2022, 11:37, всего редактировалось 2 раза.


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

А здесь пример для нотификации в WhatsApp через Dude

send whatsapp notification
https://forum.mikrotik.com/viewtopic.ph ... 28#p860703


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

приведенный пример простого парсера журнала с уведомлением в CallMeBot пересылает только последнее сообщение и только из последней строки.
Для коротких системных уведомлений это нормально, но парсер будет пропускать сообщения в логе, если их будет несколько за период срабатывания и будет пересылать только последнее.
Кому нужен полноценный парсер, пишите в личку ! :-)


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Один форумчанин написал мне в личку, что у него функция, настроенная по инструкции выше работает, но сообщение в чат с CallMeBot не приходит.
Проблема может быть в том, если system identity содержит служебные символы или символы национальных языков. Других проблем пока не вижу, у меня работает на всех роутерах.


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Проверил, работает))) Думаю, там, кто не любит Telegram , но нуждается в оповещениях в мессенджер, будет по душе. Спасибо.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Спасибо, дружище ! Рад Вашему возвращению !


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Висел у меня этот скриптик в виде оповещения о входах и выходах на сервере OpenVPN. А так как часть клиентов яблочники и абсолютно неспособны к выполнению простейших инструкций типа "попользовался туннелем, выключи", наблюдал битву энергосбережения эпла и клиента, который хотел работать не переставая. Телефон гасил клиента, клиент просыпался и восстанавливал туннель. И так раз в минуту. ;;-)))
Одним словом, я это к чему. Сегодня пришли уведомления от callmebot о том, что теперь он становится платным. :ny_tik:


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Проверим.


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Вот такие сообщения)))
Изображение
Вот переход на страницу оплаты...
Изображение
И вот теперь я думаю, как бы мне сделать контроль предельного числа подключений клиента за единицу времени. И есть ли смысл делать это.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Ответить