Страница 1 из 1

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

Добавлено: 02 ноя 2022, 18:06
Sertik
Напрямую, как в чаты Телеграмм, в 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]
   }
}
Сохраняем скрипт в репозитории и ставим его в крон (Планировщик) с нужной переодичностью.

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

Добавлено: 02 ноя 2022, 22:24
Sertik
А здесь пример для нотификации в WhatsApp через Dude

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

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

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

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

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

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

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

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

Добавлено: 20 ноя 2022, 21:07
Sertik
Спасибо, дружище ! Рад Вашему возвращению !

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

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

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

Добавлено: 22 дек 2022, 21:48
Sertik
Проверим.

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

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