我们公司一直在用企业微信来做员工的沟通工具,不少群里面都有添加一下群聊机器人来做一下任务的提醒,那么做为群聊机器人的一个应用场景自然就是执行定义任务,如定时发送会议提醒,周报填写提醒等等,那往往我们就需要有一台不关机的个人PC或者云服务器来支持群聊机器人的长时间运行(Windows系统中的广告可以在任务计划程序中找到并关闭),个人自用的PC电脑其实不太适合长时间的运行(Windows谁用谁知道,没多久就会变卡),云服务器也需要花费不少的费用,所以我们就需要有一个Serverless的平台来解决这个问题(免费的额度也够用了,绝对超值)。
我们通过采用腾讯云平台中Serverless产品下的云函数来做服务支撑完成一个企业微信群机器人定时每天早8点发送当天天气情况的一个案例,实现此案例你需要做如下准备工作:
npm init -y
tsc --init
yarn add axios
/**
* 消息类型
*/
export enum MsgType {
/** markdown类型 */
markdown = "markdown",
}
/**
* markdow消息模型
*/
export type MarkdownContext = {
/** markdown内容,最长不超过4096个字节,必须是utf8编码 */
content: string,
}
/**
* 消息模型基类
*/
export type Message<T> = {
msgtype: MsgType & T,
[type: string]: T,
}
/**
* 创建待发送消息
* @param type
* @param content
* @returns
*/
function createMessage<T>(type: MsgType, content: T) {
return {
msgtype: type,
[type]: content,
} as Message<T>;
}
/**
* 创建markdown类型的消息
* @param content
* @returns
*/
export function createFileMessage(content: FileContext) {
return createMessage<FileContext>(MsgType.file, content);
}
复制代码
import axios from 'axios';
import { createFileMessage, createImageMessage, createMarkdownMessage, createNewsMessage, createTextMessage, FileContext, ImageContext, MarkdownContext, Message, NewsContext, TextContext } from './model';
function request<T>(webhook: string, message: Message<T>) {
if (!webhook) throw new Error("请设置正确机器人的webhook地址");
axios.post(webhook, message).then(res => {
const { status, data } = res;
if (status === 200 && data) {
console.log(data.errcode === 0 ? "发送成功" : data.errmsg);
}
}).catch(err => {
console.log(err);
})
}
/** 发起Markdown类型消息通知 */
export const requestMDNotice = (webhook: string, mdContext: MarkdownContext) => request<MarkdownContext>(webhook, createMarkdownMessage(mdContext));
复制代码
import { requestMDNotice } from "./notice";
import axios from 'axios';
import { AMAP_WEATHER_API, ENTERPRISE_WECHAT_ROBOT_WEB_HOOK } from "./config";
axios.get(AMAP_WEATHER_API).then(res => {
const { status, data } = res;
if (status === 200 && data) {
if (data.status === '1' && data.infocode === '10000') {
let message = ''
data.lives.forEach((live: any) => {
message += `
##### 今天${live.province},${live.city}天气情况
* 天气: ${live.weather}
* 气温: ${live.temperature} 摄氏度
* 风向: ${live.winddirection}
* 风力: ${live.windpower} 级
* 湿度: ${live.humidity}
* 数据发布的时间: ${live.reporttime}\n
`
});
// 向企业微信群发送MD格式的通知
requestMDNotice(ENTERPRISE_WECHAT_ROBOT_WEB_HOOK, {
content: message
})
}
}
})
复制代码
// 企业微信群机器人webhook地址
export const ENTERPRISE_WECHAT_ROBOT_WEB_HOOK = "《请填写你自己机器人的webhook地址》";
// 高德天气查询API,城市地址在高德开发文档查询
export const AMAP_WEATHER_API = "《请填写你自己申请天气查询地址》"
ts-node .\src\index.ts
,输出发送成功后就可以在企微群看到最新的消息了。打开插件,第一次使用需要绑定用户凭证,绑定地域;
tsc
后将得到的内容覆盖云函数的src
目录(index.js文件需要copy内容到main_handler函数中);axios
模块来发送请求,所以云函数项目中也需要安装:进入云函数项目的**src**
目录执行:npm init -y && yarn add axios
;上传并在云端部署调试本篇涉及到的内容点有:高德开发平台天气查询API使用,腾讯云Serverless云函数使用,企微群机器人配置及API,共同完成了今天的实战案例,你还有什么有趣的应用场景呢?说说看?😂