V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
KevinRed
V2EX  ›  程序员

通过企业微信和定时任务实现你的提醒小助手

  •  
  •   KevinRed · 2020-03-26 08:40:56 +08:00 · 1544 次点击
    这是一个创建于 1464 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原文排版更好看哦=>通过企业微信和定时任务实现你的提醒小助手

    原文排版更好看哦=>通过企业微信和定时任务实现你的提醒小助手

    原文排版更好看哦=>通过企业微信和定时任务实现你的提醒小助手


    注册和新建应用的过程就不细说了,现在企业微信申请不用认证任何信息,任意微信号就可以注册


    新建应用后按如下截图找到几个信息


    1.corpid  企业 id

    2.corpsecret 应用的 secret

    3.agentid  应用的agentid





    发送信息也很好实现,首先获取 token

    token有个过期时间,用 redis 存储并设置过期时间,可以很方便的判断是否需要重新获取

    获取到 token 之后就可以调用发送消息接口,具体参数可以看官方文档 接口文档


    这里提供一个 php 的工具类

    /**
     * 发送企业微信
     * @param $content    内容
     * @param $tokenName  token 的 key
     * @param $secret     应用 secret
     * @param $agentId    应用 agentId
     * @author WJ
     * @date 2019-12-18
     */
    public function sendWXWork($content, $tokenName, $secret, $agentId)
    {
    
    //使用 redis 存储 token,设置一个超时时间,过期后重新获取
    
    $redis = new \Redis();
    $redis->connect('127.0.0.1', 6379);
    $redis->auth('****');
    
    $token = $redis->get($tokenName);
    if (empty($token)) {
    
        $curl = curl_init();
    
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        
        //换上你的 corpid
        curl_setopt($curl, CURLOPT_URL, "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=****&corpsecret=" . $secret);
    
        $result = curl_exec($curl);
        curl_close($curl);
    
        $result = json_decode($result, true);
    
        if ($result['errcode'] === 0) {
            $token = $result['access_token'];
            $redis->set($tokenName, $token);
            $redis->expire($tokenName, $result['expires_in']);
    
        } else {
            return;
        }
    }
    
    
    //发送消息
    $url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" . $token;
    
    $text_param = array(
        "touser" => "@all",
        "msgtype" => "text",
        "agentid" => $agentId,
        "text" => array("content" => $content)
    );
    $requestData = json_encode($text_param);
    
    
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Content-Length:' . strlen($requestData)));
    curl_setopt($curl, CURLOPT_POSTFIELDS, $requestData);
    curl_setopt($curl, CURLOPT_HEADER, 1);
    curl_setopt($curl, CURLINFO_HEADER_OUT, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    
    //设置请求头
    $headers = array();
    $header[] = 'User-Agent: iMAG0'; //设置一个你的浏览器 agent 的 header
    $header[] = 'token:Test'; //设置一个你的浏览器 agent 的 header
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    
    curl_exec($curl);
    curl_close($curl);
    

    }




    本文以实现一个喝水助手为例



    先来说一下 linux 的定时任务


    首先通过 crontab  -e 命令新建定时任务,其实就是一个文本文档,格式如下


    分        小时    日       月       星期     命令

    0-59   0-23   1-31   1-12     0-6     command    


    可以用特殊字符表示范围:

    “*”代表取值范围内的数字
    “/”代表”每”
    “-”代表从某个数字到某个数字
    “,”分开几个离散的数字



    通过 crontab  -l 可以查看当前所有的定时任务


    最后通过 curl 命令访问写好的接口就大功告成了


    喝水助手的代码如下

    public function drink(){
    
    for($i = 1; $i <= 3; $i ++){
        $content = '现在是' . date("Y-m-d H:i:s", time()) . "\n\n 该喝水了!!!\n\n 喝水了!!!\n\n 水了!!!\n\n 了!!!\n\n !!!\n\n !!\n\n !";
        $this->sendWXWork($content, "drinkToken", "************", "************");
        sleep(2);
    }
    

    }


    定时任务设置如下

    30 6 * * * curl 127.0.0.1/drink
    30 8 * * * curl 127.0.0.1/drink
    0 11 * * * curl 127.0.0.1/drink
    0 13 * * * curl 127.0.0.1/drink
    30 15 * * * curl 127.0.0.1/drink
    0 17 * * * curl 127.0.0.1/drink
    30 18 * * * curl 127.0.0.1/drink
    0 21 * * * curl 127.0.0.1/drink






    18 条回复    2020-03-28 11:40:29 +08:00
    xnode
        1
    xnode  
       2020-03-26 08:43:06 +08:00
    加一个 该拉屎了!!
    justrand
        2
    justrand  
       2020-03-26 08:50:49 +08:00
    直接滴答清单不就行了,也是微信提醒
    renmu
        3
    renmu  
       2020-03-26 09:07:12 +08:00 via Android
    Chrome 有个喝水助手,还挺好用的
    KevinRed
        4
    KevinRed  
    OP
       2020-03-26 09:13:44 +08:00
    @xnode
    @renmu
    @justrand
    喝水助手仅是个例子,还可以用其他触发方式推送很多信息,比如博客的访问记录
    xabc
        5
    xabc  
       2020-03-26 09:31:19 +08:00
    手机闹钟不行吗? 简单问题复杂化 😂
    erDaren
        6
    erDaren  
       2020-03-26 09:34:54 +08:00 via Android
    只能在企业微信收消息吗?还是微信也可以收到?
    naix1573
        7
    naix1573  
       2020-03-26 09:37:13 +08:00
    应该加一个提肛
    Aprilming
        8
    Aprilming  
       2020-03-26 09:37:48 +08:00
    滴答清单啊,能够实现微信推送的
    7654
        9
    7654  
       2020-03-26 09:40:28 +08:00
    用企业微信搭了一个报警平台,然后再设置微信接收,每天轰炸不要太酸爽
    polythene
        10
    polythene  
       2020-03-26 10:21:48 +08:00
    这里有一个同样功能的,只不过通过微信公众号实现的提醒机器人
    https://github.com/polyrabbit/WeCron
    liyaojian
        11
    liyaojian  
       2020-03-26 10:27:24 +08:00 via iPhone
    @polythene 用老哥的微提醒好几年了
    KevinRed
        12
    KevinRed  
    OP
       2020-03-26 10:37:24 +08:00
    @xabc
    @Aprilming
    这个可定制程度很高


    @erDaren
    微信也可以,关注微服务就行

    @7654
    哈哈哈,我曾经一天推了一万多条


    @polythene
    公众号需要认证吧,我记得很费劲还要钱,企业微信啥都不用
    chmlai
        13
    chmlai  
       2020-03-26 10:38:56 +08:00
    @naix1573 提肛还行,不明白为啥喝水都要提醒自己
    bnm965321
        14
    bnm965321  
       2020-03-26 10:57:37 +08:00
    @KevinRed 文档上写每人每天只能接收到一个 「企业号」 30 条推送,你的一万条是针对不同用户吗。

    如果要建企业微信聊天群,就可以有更多限额了
    raymanr
        15
    raymanr  
       2020-03-26 11:07:28 +08:00
    @7654 我刚给部门写了一个邮件+钉钉机器人的提醒, 现在部门领导正用这个到处发垃圾信息... 各种上万字的邮件, 刷满屏的机器人消息... 我唯一能做的就是把我从邮件接收人和机器人 @列表里面去掉...
    polythene
        16
    polythene  
       2020-03-26 11:26:28 +08:00
    @liyaojian 这么多年了,一直在贴钱运营,感动不 :)
    liyaojian
        17
    liyaojian  
       2020-03-26 11:28:34 +08:00
    @polythene #16 感动,大佬不差钱
    Liutos
        18
    Liutos  
       2020-03-28 11:40:29 +08:00
    我也做了个类似的工具: https://github.com/Liutos/cuckoo

    发送给微信用的是方糖的服务,通知栏看的效果可能没有那么好:-p

    除了发送到微信之外还会在桌面弹出通知,目前只做了对 macOS 的支持,所以需要一直开着电脑用 2333

    欢迎各位大佬试用亲喷,在项目的 wiki 中有使用文档: https://github.com/Liutos/cuckoo/wiki
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5207 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 01:22 · PVG 09:22 · LAX 18:22 · JFK 21:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.