美文网首页Java
给企业微信加个群机器人

给企业微信加个群机器人

作者: NanBox | 来源:发表于2020-01-16 15:25 被阅读0次

    现在很多企业在使用企业微信或钉钉进行工作交流,我们可以在群里添加一个自定义群机器人,定时发送一些提醒或咨询信息,它可以作为一个小组手,也为工作增加一点乐趣。

    群机器人

    下面是企业微信和钉钉的群机器人文档:

    企业微信群机器人文档

    钉钉群机器人文档

    它们的功能和用法基本是一致的,本文将以企业微信为例进行讲解。

    我们在群里添加一个机器人后,可以获取到这个机器人的 Webhook:

    通过向这个地址发起 POST 请求,就可以实现机器人在群里发送消息。

    群机器人是要在群里才能添加的,但这里有个小技巧,我们可以先拉一个群然后把别人都踢掉,这样就变成自己一个人的群了。这样方便我们测试,也可以创建一个私人的小组手。

    Hello World

    万物源于 Hello World,群机器人也不例外。其实就是发起一个 POST 请求而已,用什么开发语言看个人爱好了。

    我这里以 node.js 为例,添加了请求库 axios 的依赖,代码如下:

    const axios = require('axios')
    
    axios.post('https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx', {
            "msgtype": "text",
            "text": {
                "content": "Hello World"
            }
        })
        .then(response => {
            console.log(response.data);
        })
        .catch(error => {
            console.log(error)
        })
    

    不出意外的话,运行这段代码,就能在群里看到机器人发的消息了:

    知乎日报

    确定可以发送成功之后,我们就可以开发更多的玩法了。比如通过调用一些开放接口,获取到数据后转发到群里。

    这里以知乎日报为例,代码如下:

    const axios = require('axios')
    
    postZhiHu()
    
    function postZhiHu() {
        axios.get('https://news-at.zhihu.com/api/4/news/latest')
            .then(response => {
                var stories = response.data.stories
                postMessage(stories)
            })
            .catch(error => {
                console.log(error);
            })
    }
    
    function postMessage(stories) {
        var articles = []
        stories.forEach(story => {
            articles.push({
                "title": story.title,
                "url": story.url,
                "picurl": story.images[0]
            })
        })
        axios.post('https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx', {
                "msgtype": "news",
                "news": {
                    "articles": articles
                }
            })
            .then(response => {
                console.log(response.data);
            })
            .catch(error => {
                console.log(error);
            })
    }
    

    运行上面代码,就能收到机器人发的知乎日报了:

    机器人可以发多种样式的消息,这里的知乎日报是图文类型的,具体有哪些类型大家可以看官方文档。

    定时任务

    我们自然是希望机器人可以自动发消息的,这时候就要用到定时任务了。

    在 node.js 上可以用 schedule 实现定时任务:

    const schedule = require('node-schedule')
    
    schedule.scheduleJob({hour: 9, minute: 30}, function(){
        postZhiHu()
    })
    

    上面代码可以让机器人在每天上午九点半的时候,发送一条知乎日报的消息。

    但为了保证每天都能收到消息,就需要计算机一直运行这个定时任务,关机或待机的时候就收不到消息了。你可以把任务运行在服务器上,或者是用下面教大家的方法。

    云函数

    腾讯云提供的云函数服务,可以让我们在指定条件下运行代码,特别适合我们的群机器人使用,提供的免费额度对群机器人来说是绰绰有余的。云函数的具体使用方法,大家可以看官方文档:

    云函数文档

    下面给大家简单讲一下用云函数实现群机器人。

    依赖配置

    我们依旧使用 node.js 作为运行环境。我们可以使用模板创建云函数,但如果是添加了第三方依赖,在新建云函数时需要把 node_modules 文件夹一起打包上传。

    在新建云函数的时候,提交方法选择「本地上传zip包」:

    然后把 index.js 文件和 node_modules 文件夹打包成 zip 上传:

    这样就能愉快的在云函数里使用第三方依赖了。

    函数代码

    main_handler 是云函数的执行入口,我们对上面知乎日报的代码做一点小小的改造,把下面代码添加到云函数的 index.js 中:

    const axios = require('axios')
    
    exports.main_handler = (event, context, callback) => {
        axios.get('https://news-at.zhihu.com/api/4/news/latest')
            .then(response => {
                stories = response.data.stories
                postMessage(stories)
            })
            .catch(error => {
                console.log(error);
            })
    }
    
    function postMessage(stories) {
        var articles = []
        stories.forEach(story => {
            articles.push({
                "title": story.title,
                "url": story.url,
                "picurl": story.images[0]
            })
        })
        axios.post('https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx', {
                "msgtype": "news",
                "news": {
                    "articles": articles
                }
            })
            .then(response => {
                console.log(response.data);
            })
            .catch(error => {
                console.log(error);
            })
    }
    

    点击下面的保存后,再点击测试,就能看机器人的知乎日报消息了,跟在本地执行是一样的效果。

    触发方式

    在云函数里添加触发方式,可以让云函数在指定条件下自动执行。

    我们添加一个触发方式,使用定时触发。比如我想在周一到周五每天的上午九点半发送消息,就可以这样设置:

    关于 Cron 表达式,具体用法大家可以参考文档:

    定时触发器文档

    更多玩法?

    到这里,我们基本就可以玩转企业微信和钉钉的群机器人功能了。除了上面说的知乎日报,我们还可以给机器人添加天气、新闻、吃饭提醒、会议提醒等消息。

    不知道大家还能想到什么有趣的功能,欢迎留言讨论。

    相关文章

      网友评论

        本文标题:给企业微信加个群机器人

        本文链接:https://www.haomeiwen.com/subject/vumfzctx.html