前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >给企业微信加个群机器人

给企业微信加个群机器人

作者头像
NanBox
发布于 2020-02-13 07:00:37
发布于 2020-02-13 07:00:37
6.4K00
代码可运行
举报
文章被收录于专栏:NanBoxNanBox
运行总次数:0
代码可运行

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

群机器人

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

企业微信群机器人文档

钉钉群机器人文档

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

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

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

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

Hello World

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)
    })
复制代码

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

知乎日报

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 实现定时任务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 表达式,具体用法大家可以参考文档:

定时触发器文档

更多玩法?

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020年01月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Java字符串匹配_正则匹配替换字符串
public static void main(String args[]) {
全栈程序员站长
2022/09/24
2.8K0
java小工具util系列2:字符串工具
<font color='red'>问题:输出字符串 "0,1,61,"的第一个逗号、第二个逗号、第三个逗号、的索引</font>
刘大猫
2024/11/28
960
Java正则表达式中的十大问题
使用正则表达式的一个常见问题是提取所有的数字到整数的数组。在Java中,\ d代表的一系列数字(0-9)。任何时候如果可能的话,使用预定义类将会使你的代码容易读懂,并且可以消除由畸形的字符类引入的错误详情请参阅预定义字符类 的更多细节。请注意,第一个反斜杠\的\ D。如果你是一个字符串中使用转义构造,你必须先反斜杠用另一个反斜杠的编译字符串。这就是为什么我们需要使用\\ D。
用户2192970
2019/05/26
2.5K0
Java如何用正则表达式匹配字符串中的 '\'
今天运营反馈一个问题,自己扫描的单词记录看不到,看了下日志显示同步的英语不符合要求,限制了符合以下正则表达式的句子才会入库:
CoderJia
2024/10/18
3210
Java如何用正则表达式匹配字符串中的 '\'
Java-正则表达式学习总结
版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)
Fisherman渔夫
2019/07/31
4520
Java-正则表达式学习总结
java字符串操作(二)
Java中的字符串可以转换为其他类型的数据。例如,我们可以使用parseInt()方法将一个字符串转换为整型数值。该方法接受一个字符串参数,并返回一个整型值。例如:
堕落飞鸟
2023/04/01
4120
Java魔法堂:深入正则表达式API
目录                               一、前言 二、正则表达式的使用诉求 三、java.util.regex包 四、java.lang.String实例 五、最短路径实现诉求 六、Java支持的正则表达式功能语法 七、总结 八、参考 一、前言                                正则表达式作为文本处理的利器,早已成为各大语言的必要装备,但各语言对其的实现程度(功能语法支持程度)和API设计均有所差异,本篇将目光投向java原生类库中提供的正则表达式API
^_^肥仔John
2018/01/18
1.4K0
Java判断一个字符串是否包含某个字符
在Java编程中,字符串操作是日常开发中非常频繁的活动之一。字符串是文本数据的基本单位,它们可以包含字母、数字、符号和空格等字符。对字符串进行操作,如判断、查找、替换、拆分等,是编程中常见的任务。在很多应用场景中,如文本处理、数据验证、用户输入处理等,都需要用到字符串操作。
王也518
2024/04/25
3900
编程思想 之「字符串」
字符串(String)对象是不可变的,把String对象作为方法的参数时,其实都是复制一份引用,而该引用所指的对象一直待在单一的物理位置上,从未动过。我们可以给一个String对象起任意多的别名,因为String对象具有只读特性,所以指向它的任何引用都不能改变它的值。字符串的不可变性会带来一定的效率问题,为String对象重载过的+操作符就是一个例子,其中重载的含义为:一个操作符在应用于特定的类时,被赋予了特殊的意义。在此,值得我们注意的是:用于String对象的+和+=是 Java 中仅有的两个重载过的操作符。
CG国斌
2019/05/26
5170
Java正则表达式匹配AABB、ABAB格式字符
我们开发过程中,经常用到正则表达式来匹配想要的字符串,或者从一段文本中提取想要的关键字,比如爬虫应用等。正则表达式是对字符串提取的一套规则,我们把这个规则用正则里面的特定语法表达出来,去匹配满足这个规则的字符串。正则表达式具有通用型,不仅java里面可以用,其他的语言也一样适用。
用户8236825
2023/03/27
9290
编程笔记_JAVA_正则表达式工具
java.util.regex.Pattern; //模式类:字符串要被匹配的模式
陈黎栋
2020/02/17
9220
正则匹配
正则表达式的编译表示。没有公共构造方法,必须首先调用其公共静态编译方法获得 Pattern 对象。
Qwe7
2022/08/05
4.3K0
(89) 正则表达式 (中) / 计算机程序的思维逻辑
上节介绍了正则表达式的语法,本节介绍相关的Java API。 正则表达式相关的类位于包java.util.regex下,有两个主要的类,一个是Pattern,另一个是Matcher。Pattern表示正则表达式对象,它与要处理的具体字符串无关。Matcher表示一个匹配,它将正则表达式应用于一个具体字符串,通过它对字符串进行处理。 字符串类String也是一个重要的类,我们在29节专门介绍过String,其中提到,它有一些方法,接受的参数不是普通的字符串,而是正则表达式。此外,正则表达式在Java中是需要先
swiftma
2018/02/01
1.1K0
(89) 正则表达式 (中) / 计算机程序的思维逻辑
正则表达式处理复杂文本,效率就是高!
\d{6} 重复6次 \d\d{6}重复7次 (\d\d){6}重复12次
公众号 IT老哥
2022/12/17
3840
正则表达式处理复杂文本,效率就是高!
Java正则速成秘籍(一)之招式篇
静默虚空
2018/01/05
1.1K0
Java正则速成秘籍(一)之招式篇
Java 正则表达式
正则表达式是一个特殊的字符序列,有助于你用一种专门的语法模式来匹配或找到其他字符串或字符串集。他们可以用来搜索、编辑或是操纵文本和数据。Java 提供了 java.util.regex 包来与正则表达式进行模式匹配。 正则表达式:符合一定规则的表达式。 作用:用于专门操作字符串。 特点:用一些特定的符号来表示一些代码的操作.这样就简化书写。所以学习正则表达式就是学习一些特殊符号的使用。 好处:可以简化对字符串的操作。 弊端:符号定义越多,正则越长,阅读性越差。 Java JDK 1.40版本包含了java.
阿凯
2018/06/29
1K0
Java正则速成秘籍(一)之招式篇
目录 导读 概述 Pattern类 Matcher类 校验文本是否与正则规则匹配 案例:lookingAt vs find vs matches 查找匹配正则规则的文本位置 案例:使用start()、end()、group() 查找所有匹配正则条件的子序列 替换匹配正则规则的文本 案例:replaceFirst vs replaceAll 案例:appendReplacement、appendTail和replaceAl
用户1257215
2018/01/30
9900
Java性能调优--代码篇:优化正则表达式的匹配效率
在我们的日常业务开发中经常会涉及到使用正则表达式对数据进行处理,比如String的Split()方法,它根据方法中传入的正则表达式对字符串做分割处理。
浩说编程
2021/08/17
5.7K0
Java性能调优--代码篇:优化正则表达式的匹配效率
第三阶段-Java常见对象:【第七章 正则表达式】
(一) 正则表达式 (一) 正则表达式概述 (1) 简单概述 就是符合一定规则的字符串 (2) 常见规则 A:字符 x 字符 x。举例:'a'表示字符a \ 反斜线字符。 \n 新行(换行)符 ('\u000A') \r 回车符 ('\u000D') B:字符类 [abc] a、b 或 c(简单类) [^abc] 任何字符,除了 a、b 或 c(否定) [a-zA-Z] a到z 或 A到Z,两头的字母包括在内(范围) [0-9]
BWH_Steven
2019/08/09
4850
Java正则表达式
String[] split(CharSequence input) 根据此模式的正则表达式将输入的字符串拆分成String数组,默认的都是全部拆分开
爱撒谎的男孩
2019/12/31
1K0
相关推荐
Java字符串匹配_正则匹配替换字符串
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验