Достаточно много видел примеров использования whatsapp-уведомлений с zabbix, и другими системами мониторинга, но на собственные эксперименты с whatsapp меня вдохновила эта статья. Однако если с системами мониторинга все ясно, то при наличии прекрасной «врожденной» системы email-оповещений, городить огород ради одной bacula было откровенно лень. Да и вдруг, потом захочется поставить zabbix или еще что-то куда-то послать? Каждому боту по ватсапу?
Так что, пусть это будет что-то более универсальное. Например, отдельный сервер, который сможет обслужить bacula, zabbix, syslog-сервер, сайт или даже виндоусы с макинтошами.
UPD: Сразу оговорюсь, что задачи «наиболее простым путем отправить произвольное сообщение на телефон» не стояло, так как есть джаббер, смс, любой мобильный email-клиент, наконец. Задача была: а) приспособить именно whatsapp, так как он уже есть в моем телефоне и еще около 1 млрд других, в отличие от того же пресловутого telegram б) сделать как можно более универсальный шлюз, с которого можно быстро перенаправить рассылку хоть куда, а то и дублировать.
Приступим. Я ставил на «пустой» Centos 7 amdx64 в lxc-контейнер под proxmox ve 4.4.
Первое, что обычно делаю — обновляю, подключаю epel и ставлю ssh, чтобы потом удобно работать
yum -y update
yum -y install epel-release openssh-server
systemctl enable sshd
systemctl start sshd
yum -y install unzip wget tar nano
yum -y install python python-dateutil python-argparse
yum -y install libtiff-devel libjpeg-devel libzip-devel freetype-devel lcms2-devel
yum -y install gcc
yum -y install protobuf pycrypto python-axolotl-curve25519
yum -y install python-devel python-pip python-imaging
pip install --upgrade pip
cd /usr/src/
wget https://github.com/tgalal/yowsup/archive/master.zip
unzip master
cd yowsup-master/
python setup.py install
yowsup-cli registration --requestcode sms --phone 7xxxxxxxxxx --cc 7 --mcc 250 --mnc xx
phone — ваш номер телефона, начинающийся с 7
cc — country code — это код страны (для России это 7)
mcc — mobile country code — это другой код страны (для России это 250)
mnc — mobile network code — это код вашего оператора. (01 — МТС, 02 — мегафон, 20 — теле2, 99 — билайн)
yowsup-cli registration --register xxx-xxx --phone 7хххxxxxxxx --cc 7
status: ok
kind: free
pw: X1isWwe+25d/aOXJpcSduzTV7fg=
price: 33,00 руб.
price_expiration: 1495380655
currency: RUB
cost: 33.00
expiration: 4444444444.0
login: 7хххххххххх X1isWwe+37d/aOXJpcSduzTV7fg=
type: new
nano yowsup-cli.config
cc=7
phone=7хххxxxxxxx
password=X1isWwe+25d/aOXJpcSduzTV7fg=
yowsup-cli demos -c yowsup-cli.config -M -s 7хххххххххх "alarm"
localectl
в моем сетапе какие-то проблемы, поэтому:nano /etc/locale.conf
LANG=ru_RU.UTF-8
, сохраняем и рестартуем сессиюnano /usr/lib/python2.7/site-packages/yowsup2-2.5.2-py2.7.egg/yowsup/demos/cli/layer.py
reload(sys)
sys.setdefaultencoding('utf8')
from .cli import Cli, clicmd
from yowsup.layers.interface import YowInterfaceLayer, ProtocolEntityCallback
from yowsup.layers.auth import YowAuthenticationProtocolLayer
from yowsup.layers import YowLayerEvent, EventCallback
from yowsup.layers.network import YowNetworkLayer
import sys
reload(sys)
sys.setdefaultencoding('utf8')
cd /usr/src
wget https://github.com/adnanh/webhook/releases/download/2.6.3/webhook-linux-amd64.tar.gz
tar -xvf webhook-linux-amd64.tar.gz -C /var
mv /var/webhook-linux-amd64 /var/webhook
mkdir /var/yowsup
cp /usr/src/yowsup-master/yowsup-cli.config /var/yowsup
hooks.json
.cd /var/webhook?????
nano hooks.json
http://адрес сервера:9000/hooks/wp-admin
, обрабатывать и слать сообщения на whatsapp админа. Внутрь файла добавляем описание условий:[
{
"id": "wp-admin",
"execute-command": "/var/webhook/admin.sh",
"command-working-directory": "/var/webhook",
"pass-arguments-to-command":
[
{
"source": "url",
"name": "msg"
}
]
}
]
http://адрес сервера:9000/hooks/wp-admin?msg=привет
— исполнит скрипт /var/webhook/admin.sh
, а тот, в свою очередь, отправит привет админу на whatsupp, и только ему. Я решил не передавать каждый раз пару телефон-сообщение, а при необходимости рассылки на другие номера создать дополнительные хуки. Например, хук с отправкой определенному контакт-листу или универсальный с парой телефон-сообщение и каким-то токеном для вящей безопасности../webhook -hooks hooks.json -verbose
[webhook] 2017/04/26 05:12:48 version 2.6.3 starting
[webhook] 2017/04/26 05:12:48 setting up os signal watcher
[webhook] 2017/04/26 05:12:48 attempting to load hooks from hooks.json
[webhook] 2017/04/26 05:12:48 found 1 hook(s) in file
[webhook] 2017/04/26 05:12:48 loaded: wp-admin
[webhook] 2017/04/26 05:12:48 serving hooks on 0.0.0.0:9000/hooks/{id}
#! /bin/bash
msg="$(echo "$*" | tr ' ' ' ')"
if [[ ! -z "${msg/ //}" ]]; then
/usr/bin/yowsup-cli demos -c /var/yowsup/yowsup-cli.config -M -s 7xxxxxxxxxx "$msg"
fi
http://адрес сервера:9000/hooks/wp-admin?msg=привет
. Все должно работать. Добавляем хук в автозагрузку. Я сделал через systemd
.nano /etc/systemd/system/webhook.service
[Unit]
Description=Webhook
After=syslog.target
After=network.target
[Service]
Type=simple
PIDFile=/var/webhook/webhook-service.pid
WorkingDirectory=/var/webhook
User=root
Group=root
OOMScoreAdjust=-500
ExecStart=/var/webhook/webhook -hooks hooks.json -verbose
ExecStop=/usr/bin/pkill -f webhook
ExecReload=
TimeoutSec=300
[Install]
WantedBy=multi-user.target
systemctl enable webhook
systemctl start webhook
systemctl -l status webhook
curl -G http://адрес сервера:9000/hooks/wp-admin?msg=привет
export VAR="привет\nбуфет"
export MSG=$(echo -e $VAR)
curl -G http://адрес сервера:9000/hooks/wp-admin --data-urlencode msg="$MSG"
yum -y install bc curl
# Variables
HOUR=$(date +%d/%m/%Y\ %H:%M:%S)
YOWSEXEC="curl -G http://ваш сервер:9000/hooks/wp-admin"
LOG="/var/log/bacula/whatsapp.log"
# MySQL config
DBUSER="bacula"
DBPASSWORD="bacula"
DBNAME="bacula"
$YOWSEXEC demos --config $CONF --send $RECIPIENT_NUMBER "`echo -e "$MESSAGE${COUNT}"`" &>> $LOG
FMSG=`echo -e "$MESSAGE${COUNT}"`
$YOWSEXEC --data-urlencode msg="$FMSG" &>> $LOG
chmod +x /etc/bacula/send_whatsapp.sh
Command = "/etc/bacula/send_whatsapp.sh %i"
К сожалению, не доступен сервер mySQL