原文文档(by本末 QQ:790873158)
webqq::client git
完成整个过程需要用到2个脚本
- login.pl 登录QQ,循环刷新QQ信息,打开监听端口,接收来自client的消息,发送消息
- qqsms.sh 接收消息,发送消息给server端
- 下面放出2个脚本
Server端: Login.pl
#!/usr/bin/perl
use Webqq::Client;
use Data::Dumper;
use Digest::MD5 qw(md5_hex);
use LWP::UserAgent;
use JSON;
# 你的发送消息的qq号
my $qq = YOU_QQ_NUM;
# 你qq的密码
my $pwd = md5_hex('password');
my $client = Webqq::Client->new(debug=>1);
#############验证码##############
$client->load("PostImgVerifycode");
$client->on_input_img_verifycode() = sub{
my ($img_verifycode_file) = @_;
my $smtp = {
# 这里的邮件主要是负责发送QQ登录需要验证码到邮箱
smtp =>'smtp.imdst.com',
# 登录邮箱的账户
user =>'robot@imdst.com',
# 邮箱密码
pass =>'*******',
# 发件箱
from =>'robot@imdst.com',
# 收件箱,亲测最好别用QQ,收件箱只要能收到邮件就OK
to =>'*@imdst.com',
# 邮件的标题,最好还是英文,不然可能乱码
from_title => 'QQ_Robot',
# 邮件正文,其他同上
subject => '验证码',
};
return &{$client->plugin("PostImgVerifycode")}($client,$img_verifycode_file,$smtp);
};
$client->login( qq=> $qq, pwd => $pwd);
$client->on_receive_message = sub{
my $msg = shift;
my $group_uin = $msg->{from_uin};
};
$client->load("Openqq");
$client->on_run = sub{
# 监听的端口,接收来自客户端(qq_sms.sh)的消息
# 这里的hots和port是可以更改的,但是qq_sms.sh脚本也需要改成对应的
$client->call("Openqq",host=>"0.0.0.0",port=>5010);
};
$client->run();
客户端:qq_sms.sh
#!/bin/bash
API_ADDR="server_IP:5010" # 你login.pl中定义的host和port
#qq_num=$1 # 这里没有实际意义,因为这里告警轮询的是QQ群号,不是单独指定QQ号
# zabbix 报警 $2 $3
#message=`echo -e "$2\n$3"|od -t x1 -A n -v -w1000000000 | tr " " %`
# nagios 报警 $1
message=`echo -e "$1" |od -t x1 -A n -v -w1000000000 | tr " " %`
#------------------- main body dont' modify blow --------------------#
get_gid()
{
# 获取gid,需要安装jd处理json,下面有链接和用法,可以看一下nohup日志看自己的群是第几个修改 `jq '.[0].ginfo.gid'`
GID=`curl -s http://$API_ADDR/openqq/get_group_info | jq '.[0].ginfo.gid'| tr -d '"'`
}
send_messege()
{
get_gid
# 这没什么好说的
api_url="http://$API_ADDR/openqq/send_group_message?gid=$GID&content=$message"
curl $api_url
}
# 发送消息,主函数,很多朋友都复制漏了
send_messege
另外jd需要额外安装,用于处理json数据,jd的资料在-->点击这里
server端配置
接下来是要启动server端的login.pl脚本,唯一的难点就是依赖太多
yum –y install perl cpan # 需要perl
cpan JE Webqq::Encryption Time::HiRes Webqq::Client Data::Dumper Digest::MD5 LWP::UserAgent JSON YAML Sys::HostIP Plack:App:URLMap Twiggy::Server Plack::Middleware::Header #安装过程很慢,需要手动输入”yes”
cpan Mail::SendEasy #看是否有报错
启动login.pl
- 前台启动查看是否有报错,如果出现报错,检查是否漏装上面的模块
./login.pl
- 能正常启动后,使用后台启动
nohup ./login.pl &
查看邮箱接收的验证码
输入完成后查看下监听端口,确保端口起来了
netstat -tpln 5010
测试发送QQ消息
sh qq_sms.sh "hello im qqrobot"
看看QQ群是否收到消息 hello im qqrobot
配置nagios报警
- 修改 command.cfg 报警提示“因为消息过长发现 会导致发送失败,所以精简了”
- #$CONTACTEMAIL$ 是意义配置,只是避免nagios日志报错
# 'notify-host-by-qqrobot' ommand definition
define command{
command_name notify-host-by-qq
command_line /bin/bash /usr/local/nagios/bin/qq.sh "$HOSTNAME$ is $HOSTSTATE$" $CONTACTEMAIL$
}
# 'notify-service-by-qqrobot' ommand definition
define command{
command_name notify-service-by-qq
command_line /bin/bash /usr/local/nagios/bin/qq.sh "$HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$" $CONTACTEMAIL$
}
- 修改contact.cfg 增加报警
service_notification_commands notify-service-by-qq #原有邮件报警逗号隔开即可
host_notification_commands notify-host-by-qq