企业微信API-中级功能-shell命令发送信息(合同到期人员)到指定的企业微信接收人
因为企业微信,在免费的情况下,没有员工合同到期功能,没办法了,自己想办法去实现
1. 环境及条件
a. 企业微信-通讯录-添加自定义字段-合同到期,格式: yyyy-mm-dd
b. 本地linux服务器
2. 所需工具-JSON的命令行工具:jq提前安装
linux安装jq
yum install jq
ete.sh
#!/bin/bash #提取企业微信员工合同将到期记录 #登录企业微信查询:Ecorpid和Ecorpsecret,保存于相应的值中 Ecorpid="xxx" Ecorpsecret="xxxx" Ecurl=`curl 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid='$Ecorpid'&corpsecret='$Ecorpsecret'' | jq -r '.access_token'` Etoken=`echo $Ecurl` #提取json数据中的名字及合同到期(自定义字段)到当前目录下的json文件 curl 'https://qyapi.weixin.qq.com/cgi-bin/user/list?access_token='$Etoken'&department_id=1&fetch_child=1' | jq '.userlist' | jq -c '.[] | {name: .name, value: .extattr.attrs[0].value}' > ete.json for line in $(cat ./ete.json) do #提取已处理的json数据到变量进行分析 temp=`echo $line` #${string##*chars} 从字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符 temp1=${temp##*":"} temp2=${temp1:1} #过滤出合同到期数据,默认格式为:yyyy-dd-mm expday=${temp2:0:10} #当前时间戳 todays=`date +%s` #若日期格式不是:yyyy-mm-dd,则不处理 if echo $expday | grep -q "-" && date -d $expday +%Y%m%d > /dev/null 2>&1 then daydiff=$(( ($(date -d "$expday" +%s)-$todays)/86400 )); # -gt是大于 -lt是小于 -eq是等于 -ne是不等于 -ge是大于等于 -le是小于等于 # 提取并显示合同到期日期少于30天或日期格式不正确的数据 if [ $daydiff -le 30 ] ; then echo "将到期记录:$line" ; fi else echo "合同到期格式不是:yyyy-mm-dd $line" ; fi; done
-----------------
send_msg.sh
-----------------
#!/bin/bash # 发送消息到企业微信指定人事用户 # 企业id id="xxxxxxxxxxxxxxxxxx" # 应用id agentid="xxx" # 应用secret secret="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # 用户id [也就是企业微信-通信录-账号,多个用户用|符号分开] touser="xxx|xxx" # API接口 url="https://qyapi.weixin.qq.com/cgi-bin" # 获取token [这里token没做缓存,如果频繁调用gettoken接口,会受到频率拦截,官方默认token值有效时间2小时] token=`curl -s "$url/gettoken?corpid=$id&corpsecret=$secret"|jq -r .access_token` # 发送消息参数 part="message/send?access_token=$token" # 执行提示 function tips(){ code=`jq -r .errcode` if [ "$code" == "0" ] then echo -e "\033[32mSend successfully\033[0m" else echo -e "\033[31mSend fail,errcode:$code\033[0m" fi } #提取合同到期或日期异常员工信息保存到ete.log文件 ./ete.sh > ete.log # 发送文本消息 [这里按部门发送toparty] function send_t(){ #read -p "输入文本内容:" t t=`cat ete.log | sed 's/{"name":"//g' | sed 's/","value"//g' | sed 's/"}//g' | sed 's/"//g'` #textmsg='{"touser":"'$touser'","toparty":"'$toparty'","msgtype":"'text'","agentid":"'$agentid'","'text'":{"content":"'$t'"},"safe":0}' textmsg='{"touser":"'$touser'","msgtype":"'text'","agentid":"'$agentid'","'text'":{"content":"'$t'"},"safe":0}' curl -s -X POST -d "$textmsg" "$url/$part"|tips } # 执行脚本,判断记录是否为空再进行是否执行发送处理 if [[ ! -s ete.log ]]; then echo " ete.log IS NULL" else send_t fi
-----------------
其中ete.json的内容
cat ete.json
-----------------
{"name":"陈xx","value":"2021-12-31"}
{"name":"张xx","value":"2021-09-15"}
{"name":"张xx","value":"2021-12-31"}
{"name":"黄xx","value":"2021-12-31"}
{"name":"高xx","value":"2021-12-31"}
{"name":"钟xx","value":"2021-12-31"}
{"name":"杨xx","value":"2021-12-31"}
{"name":"何xx","value":"2021-12-31"}
{"name":"黄xx","value":""}
......
cat ete.log
将到期记录:{"name":"张xx","value":"2021-09-15"}
合同到期格式不是:yyyy-mm-dd {"name":"黄xx","value":""}
将到期记录:{"name":"ete","value":"2021-08-31"}
合同到期格式不是:yyyy-mm-dd {"name":"高xx","value":""}
-----------------
每周一上午9:00自动定时发送
crontab -l
00 9 * * 1 cd /app/backup/json/send_hetong; ./send_msg.sh > /dev/null 2&1
发送效果显示:
- 本文标签: 其他
- 本文链接: https://www.jimmy2k.top/article/236
- 版权声明: 本文由JimmyZ的个人博客原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权