运维咖啡吧

享受技术带来的乐趣,体验生活给予的感动

疫情在家帮老婆提升下工作效率

受疫情影响,上海许多公司都在两周之前开始居家办公,我和老婆都是,随着风控加码有些小伙伴开始出现物资短缺,吃饭都面临困难。上周老婆任职的公司启动关怀模式,开始给缺乏物资的员工派送蔬菜礼包。特殊时期公司能得到的物资也有限,没有办法给每一位员工都派送,只能先派发给风控区内物资匮乏的员工,老婆得到任务统计有哪些员工比较紧急需要支援,收集相关信息上报

信息收集

拿到任务后马上就开始执行,我看她拟了个通知发到公司大群让有需求的员工单独找她,她再将大家的联系电话家庭住址等信息统一进行汇总

看这操作手法我实在着急,效率也太低了,收集信息完全可以通过在线问卷的方式,大家各自填写,完了后台导出报表就行了,不仅简单高效还能做到数据格式统一

于是我打开腾讯问卷系统花点时间现学现卖生成了个问卷,让她发在大群让有需求的同事自行填写,起初她还抵触,用过之后是真的香

信息确认

这周上海以黄浦江为界,整个浦东都开启封闭管理,老婆她们公司开启了第二波蔬菜大礼包配送,有了上次成功的经验,这次主动求我给重新做个问卷收集信息,我自当义不容辞了

信息收集完成后,领导说由于上次有些人信息填错导致物资送不到,这次再确认下大家填写的信息是否有误,总共有百来十个员工信息需要确认,这要一个一个的找她们确认得确认到啥时候呀,沟通成本太高了

于是我给她建议,用个Google文档之类的在线文档,数据放进去发消息给每个人让他们自己去确认下,然而数据里包含家庭住址等私密信息,所有人都能看到自己的家庭住址不太好

自己只能看到自己的信息,别人的看不到,那也就是说发给每个人的信息都是不一样的,现有的这些在线工具似乎是不太好处理,这个时候就发挥出来我的优势了,由于她们内部使用企业微信沟通的,花了点时间看了下企业微信的文档,可以通过推送消息接口给每个人推送个性化的消息

说干就干,总体也比较简单,没几行代码就搞定了,思路就是循环读取记录用户信息的csv文件,取每一条数据匹配出来相关信息然后调用企业微信API发送通知,发送通知的代码如下

import json
import requests


class WorkWeixinApi:
    def __init__(self):
        self.domain = 'https://qyapi.weixin.qq.com/cgi-bin'
        self.client_id = 'Your client id'
        self.client_secret = 'Your client secret'
        self.agentid = 'Your agentid'

    def get_access_token(self):
        params = {
            'corpid': self.client_id,
            'corpsecret': self.client_secret,
        }

        try:
            r = requests.get(self.domain + '/gettoken', params=params)

            return True, r.status_code, r.json()
        except Exception as e:
            return False, 500, '获取Token失败:' + str(e)

    def send_message(self, subject, content, reciever_list, enable_duplicate_check=0):
        _state, _code, _data = self.get_access_token()

        if _state:
            post_data = json.dumps({
                "touser": '|'.join([i.split('@')[0] for i in reciever_list]),
                "msgtype": "text",
                "agentid": int(self.agentid),
                "text": {"content": subject + "\r\n\r\n" + content},
                "enable_duplicate_check": enable_duplicate_check
            })

            try:
                r = requests.post(self.domain + '/message/send?access_token=' + _data.get('access_token'),
                                  data=post_data)

                return True, r.status_code, r.json()
            except Exception as e:
                return False, 500, '发送消息失败:' + str(e)
        else:
            return _state, _code, _data


if __name__ == '__main__':
    for line in open("ops-coffee.cn.csv"): 
        id, name, email, phone, street, address = line.split(',')

        state, code, data = WorkWeixinApi().send_message(
            '蔬菜大礼包信息确认',
            '你好,请你确认蔬菜礼包送货地址是否正确,如有错误请单独联系HR告知,无错误请忽略\r\n\r\n名称:%s\r\n电话:%d\r\n街道:%s\r\n地址:%s' %(
            name, phone.strip(), street, address),
            ['%s' % email]
        )

        print('%s 通知发送 %s, %s' %(name, '成功' if state and data.get('errcode') == 0 else '失败', data.get('errmsg')))

csv文件的内容大概像这样

01,韦小宝,[email protected],15866668888,张江镇,张江路115弄40号
01,张无忌,[email protected],15866668888,张江镇,张江路115弄41号

数据脚本都准备好了,然后直接执行,相关的人就只收到了包含自己信息的通知

片刻时间所有需要确认的信息都准确无误的发送给了正确的人,这波操作下来,起码晚上加两个菜应该是没啥问题了吧。由此想到其实可以给做的更简单更完善一点,一个专门发送企业微信通知的服务,面向不懂技术的普通用户,她们只需要收集好要发送的通知信息就好了,然后上传或者粘贴进系统内一键发送,同时能记录发送日志,就到这里不再展开了吧,各位有想法的小伙伴可以实现下

最后,希望疫情快点过去,大家都能绿码永在,核算常阴,早日自由