-
背景
近期在对项目优化过程中
注意到:当前的报警信息都是通过邮件发送,一方面时效性比较低,另外实现方式比较复杂
通过同事,了解到企业微信群机器人
实现起来简洁方便
在此,记录一下我的实现步骤
欢迎指摘 …
【注】: 当前为 PHP 实现方式,可根据自己的语言灵活对接
详细描述,请参考开发文档:
【 >>>如何使用群机器人 】
- 如何使用群机器人
在终端某个群组添加机器人之后,
创建者可以在机器人详情页看的该机器人特有的 webhookurl
开发者可以按以下说明向这个地址发起 HTTP POST 请求,即可实现给该群组发送消息
▷ 前期配置
- ① 首先 在已创建的企业微信群页面,点击
"添加群机器人"
操作截图如下:
- ② 添加完成后,可复制地址,用于业务接口的调用
注意:
一定要保护好机器人的
webhook地址
,避免泄漏!不要分享到 github、博客等可被公开查阅的地方,否则坏人就可以用你的机器人来发垃圾消息了。
▷ PHP 代码实现
- ① 代码接入:微信群消息,封装类
WechatMessageService
class WechatMessageService
{
/**
* Note: 企业微信群 机器人消息通知
* @param string $robot_url webhook地址
* @param string $content 发送内容
* @param string $msg_type 消息类型
* @return mixed|string
*/
public static function sendWechatRobotMsg($robot_url = '', $content = '' , $msg_type = 'text')
{
$post_data = [
'msgtype' => $msg_type,
'text' => [
'content' => $content,
],
'markdown' => [
'content' => $content,
],
];
$result = http_request($robot_url, json_encode($post_data,JSON_UNESCAPED_UNICODE));
$result_arr = json_decode($result, true);
$errcode = $result_arr['errcode'] ?? '0'; // 0:成功
return $errcode;
}
}
- ② 调用示例:
//测试推送消息
$msg = '你好啊,时间:'.date('Y-m-d H:i:s',time());
//机器人的 webhook地址
$robot_url = '替换掉机器人的 webhook地址';
WechatMessageService::sendWechatMsg($robot_url, $msg); //发送企业微信通知
- ③ 接口调用,结果:
▷ 附录:
-
其他的监控实现,可参考文章:
【用企业微信监控线上服务报警】
-
markdown
类型的样式实现当前测试,只是做了最简单的 文字推送,
可以根据自己的业务需求,阅读开发文档,设计更为合理的 消息类型,
此处补充一下markdown
类型的消息内容拼接举例如下:
//机器人-测试业务报警 $content = "**".$title ."** > 时间: <font color='warning'>".$curr_dateTime."</font> > 内容: <font color='comment'>".$content."</font>";
执行结果如下:
- 公共方法,补充一下方便参考使用:
function http_request($url, $data = null, $header = [])
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)) {
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
- 此处提供一下,鄙人自行封装的日志报警公共方法
可根据自己的业务需求,进行扩展
/**
* 公共方法 :错误日志报警
* @param string $title 标题
* @param string $content 报警内容
* @param int $error_rank 错误等级 (企业微信群机器人)1:结算业务报警;2:计划任务报警;3:其他待定报警
*/
function errorLogToAlarmMonitoring($error_rank = 0,$title = '',$content = ''){
$curr_dateTime = date('Y-m-d H:i:s',time());
//TODO 记录报错日志
$log_error_content = $title.' : '.$content;
Log::error($log_error_content);
switch ($error_rank){
case 0:
//常见业务报警
break;
case 1:
//结算业务报警
$content = $title.$content;
WechatMessageService::sendWechatRobotMsg('可替换的企业群机器人 webhook 地址', $content);
break;
case 2:
//机器人-测试业务报警
$content = "**".$title ."**
> 时间: <font color='warning'>".$curr_dateTime."</font>
> 内容: <font color='comment'>".$content."</font>";
WechatMessageService::sendWechatRobotMsg('可替换的企业群机器人 webhook 地址2', $content,'markdown');
break;
default:
// TODO 其他报警业务,可自行扩展
break;
}
}