企业微信开放了消息发送接口,企业可以使用这些接口让自定义应用与企业微信后台或用户间进行双向通信。

通过消息推送,企业应用可以主动向成员、部门、标签等发送文本、图片、图文、文件以及 markdown 格式的消息,在***的企业微信版本中,可以发送展示功能更加丰富的模板卡片消息。
通过本教程,你讲了解以下内容:
- 如何向成员推送文本、图文、markdown等基本类型的消息
- 如何向成员推送图片、语音、视频、文件等媒体类型的消息
准备工作
在开始本教程之前,请确保你已经完成了以下准备工作:
使用官方代码示例
一、下载官方代码示例
查看官方 代码示例 ,打开命令行工具,执行以下命令,下载服务端代码。
git clone https://github.com/WecomTeam/CodeSameples.git
二、配置项目信息
打开下载的代码工程,在根目录将 main.config.demo.js 复制一份到 main.config.js 文件中,并根据实际项目情况补充以下配置信息:
module.exports = {// 企业信息corp_id: "",// 应用信息agent_id: "",app_secret:""}
提示:该文件配置的信息极其重要,切勿泄漏。
三、安装启动服务
在已下载的示例代码项目根目录下,执行以下代码完成依赖安装:
执行以下命令,启动后端服务:
npm run buildnpm run start
四、访问示例页面
在浏览器中访问 http://localhost:3000,打开页面。

创建应用,配置信息
根据根据教程 一:如何创建企业内部应用内容的指引,在企业管理后台创建内部应用,在应用创建成功后依据教程 二:如何获取应用接口凭证 的步骤,得到对应的 agent_id 和 secret。
发送应用消息
通过向企业微信消息推送接口 POST 对应的消息结构体,即可实现应用消息的推送。
请求地址
https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN
一、基本参数
- 调用接口凭证
access_token 作为 URL Params 带在请求的 URL 中。 - 应用的id
agent_id 代表当前发送消息的应用 ID,可在应用的设置页面查看。 - 消息接收范围
touser、toparty、totag 分别表示接收消息的 成员、部门、标签,这几个范围标记不能同时为空。 - 消息类型
msgtype 用于指定消息的类型,当指定某一消息类型之后,接口服务只会读取该类型对应字段下的数据。 - 消息内容
不同的消息类型,会对应不同的消息内容字段。
二、基本流程
发送基本类型消息
文本、图文消息、markdown类型的消息仅需要直接在业务后台服务器直接向企业微信消息推送接口发送对应数据请求即可。
在示例代码的 /server/messageController.js 文件中展示了向消息推送 Api 接口发送消息数据体的基本流程:
router.post('/message/send', async function (req, res, next) {// 从前端请求中获取对应的参数let {form:form_parames} = req.body || {};// 将 agentid 拼入请求的结构体中let request_data= {...form_parames,agentid:Config.agent_id,};request_data.safe = form_parames.safe ? '1' : '0';// 获取 Access Tokenconst access_token = await AccessToken.getAppToken();// 向消息推送的 Api 发送对应的数据结构体const {data} =await axios.post('https://qyapi.weixin.qq.com/cgi-bin/message/send', request_data,{params: {access_token}});// 返回请求的结果res.send(data);});

发送媒体类型消息
当要推送 图片、语音、视频、文件等媒体类型的消息时,需要将对应的文件通过临时素材的接口上传至企业微信临时素材库,请参考 上传临时素材。
在示例代码的 /server/mediaController.js 文件中,展示了通过企业微信临时素材接口上传临时素材的基本流程:
router.post('/media/upload', async function (req, res, next) {let { media: file } = req.files || {};console.log(req.files);let { type } = req.body || {};const access_token = await AccessToken.getAppToken();// 组件一个form,用来上传文件const form = new FormData();form.append('filename', file.name);form.append('filelength', file.size);form.append('media', file.data, file.name);const { data } = await axios.post('https://qyapi.weixin.qq.com/cgi-bin/media/upload',form,{params: {access_token,type},headers: {"Content-Type": "multipart/form-data"},});res.send(data);});

小结
在本节课程中,我们了解了如何通过企业内部应用的应用消息推送接口向成员、部门以及标签推送应用消息,可以参考文档 消息推送了解更多关于消息推送相关的信息。