• 设备
    • 今日
    • 2

    企业微信API-高级功能-读取通讯录的生日字段并定时发送生日祝福语

    主要说明:目前企业微信没有员工生日免费自动提醒功能,

    要免费实现企业微信员工生日自动提醒,思路整理如下:

    1. 在企业微信后台管理,添加员工生日自定义字段,输入格式: yyyy-mm-dd

    2. 通过企业微信通讯录接口,调用此自定义字段,并把员工生日与今天一样的帐号提取出来

    3. 通过企业微信自建应用接口,利用Linux中的crontab定时发送随机祝福语给生日的员工



    环境及条件

    a. 企业微信-通讯录-添加自定义字段-员工生日,格式: yyyy-mm-dd
    b. linux服务器

    c. 所需工具-JSON的命令行工具:jq提前安装

    linux安装jq

    yum install jq


    birthday.sh

    -----------------------------------------

    #!/bin/bash
    #提取与今天同月同日的员工帐号
    Ecorpid="xxxxxxxxxxxxxxxx"
    Ecorpsecret="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    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 '.[] | {userid: .userid, value: .extattr.attrs[1].value}' > birthday.json
    #从birthday.json文件中,循环打印出今天生日的员工帐号
    for line in $(cat ./birthday.json)
    do
     temp=`echo $line`
    #${string##*chars} 从字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符,
    #原始:{"userid":"rjzhang","value":"1976-08-24"}
    #结果:"1976-08-24"}
    temp1=${temp##*":"}
    #原始:"1976-08-24"}
    #结果:1976-08-24"}
    temp2=${temp1:1}
    #从temp2的结果中,从位置1开始,截取长度为10的字符,即日期数据,默认格式为:yyyy-dd-mm
    expday=${temp2:0:10}
    #当前时间戳,同时将日期格式化为:mmdd
    todays=`date +%m%d`
    #若日期格式不是:yyyy-mm-dd,则不处理
    if echo $expday | grep -q "-" && date -d $expday +%m%d > /dev/null 2>&1
    then 
    #将员工生日字段格式化为:mmdd
    birthdays=`echo $expday | grep -q "-" && date -d $expday +%m%d` 
    	# 提取与今天同月同日的员工帐号
    	if [ $birthdays = $todays ]; then
    	# {"userid":"rjzhang","value":"1976-08-23"}
    	# 删除:之前的字符
    	temp11=${temp#*":"}
    	# 结果: "rjzhang","value":"1976-08-23"}
    	# 删除,之后的字符
    	temp22=${temp11%,*}
    	# 打印结果:"rjzhang"
    	echo $temp22
    	fi 
    fi;
    done
    


    send_birthday.sh

    ---------------------


    #!/bin/bash
    # Author:JimmyZhang
    # 发送消息到企业微信应用里面
    
    # 企业id
    id="xxxxxxxxxxxxxxxxxx"
    
    # 应用id
    agentid="1000018"
    
    # 应用secret
    secret="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    
    # 部门id(这里没用到,因为只发达给生日员工,非部门)
    toparty=1
    
    # 提现今天生日的用户id [也就是用户账号]保存到birthday.log文件
    ./birthday.sh > birthday.log
    
    #删除birthday.log中双引号重新生成userid.txt文件
    cat birthday.log | sed 's/"//g' > userid.txt
    
    #多个用户用|符号分开
    touser=$(cat userid.txt | paste -d "|" -s)
    
    # 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
    }
    
    # 从文本中随机提现祝福语句发送给当天生日员工 [这里按人员发送touser]
    function send_t(){ # 随机提取生日语句,从文件:birthday_msg.txt中1-10行中的随机选择一行
    t=`awk 'NR=='$[RANDOM%10+1]' {print}' birthday_msg.txt`
    #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
    }
    
    # 执行脚本:当userid.txt非空时,代表当天有生日的员工数据
    if  [[ ! -s userid.txt ]]; then	  
    	echo " userid.txt is NULL"
    else
    	#echo " userid.txt NOT NULL"
    	send_t
    fi
    


    上述所有涉及的呈现结果:

    1.  cat birthday.json

    {"userid":"userID1","value":null}
    {"userid":"userID2","value":"2002-08-24"}

    {"userid":"userID3","value":"2001-08-24"}
    .....


    2. 假设今天是8月24日,则取到的数据为:

    cat birthday.log

    "userID2"
    "userID3"


    3. cat userid.txt

    userID2

    UserID3


    4. cat birthday_msg.txt

    愿你常与开心做伴,祝你生日快乐 --- 易迁易
    你的生日就是我最牵挂的日子,朋友请收下我最美好的祝福,祝你生日快乐--- 易迁易
    朋友,在这美好的日子里,紧握属于你的幸福,祝你生日快乐 --- 易迁易
    愿甜甜蜜蜜属于你的生日,属于你所有的日子,祝你生日快乐 --- 易迁易
    福星照亮你前程,禄星带给你好运,寿星保佑你健康,祝你生日快乐 --- 易迁易
    祝你在每个成长的日子里都开开心心,祝你生日快乐 --- 易迁易
    在思念之中,我想起了你的生日。我谨用只字片语,表达对你的祝福,祝你生日快乐 --- 易迁易
    今天是你的生日,我们都来为你祝福,愿你生日快乐,健康还美丽,祝你生日快乐 --- 易迁易
    祈望你心灵深处芳草永绿,青春常驻,笑口常开,健康幸福,祝你生日快乐 --- 易迁易
    有来有往有憧憬,前程似锦美梦成,祝你生日最高兴,时刻都有新感动,祝你生日快乐 --- 易迁易


    Linux 每天早上9点定时发送生日祝福

    crontab -e

    00 9 * * * cd /app/backup/json/send_birthday; ./send_birthday.sh > /dev/null 2&1



    来自:PC 广东省广州市
    上一篇: IDEA2021-备忘录
    您可能还喜欢这些:

    亲,沙发正空着,还不快来抢?

    评论审核已开启:即评论经审核才能正常显示! 记住我的个人信息 回复后邮件通知我