[TOC]
## 简介
企业微信基于SDK [wxwork](https://github.com/ghaoo/wxwork) 实现。
因为市面上真找不到代码比较清晰的SDK,所以就自己写了一个,精力有限,只实现了部分功能,以后可能会继续开发,已经实现的功能见上面的链接,文档见[godoc](https://godoc.org/github.com/ghaoo/wxwork)
> 请确保你已经了解企业微信相关操作!企业微信帮助中心 [https://work.weixin.qq.com/help](https://work.weixin.qq.com/help)
> 确保你的web服务可以被外网访问!
## 开启API接收消息
企业微信转接器提供了消息接收的api,URI为:`wework`。
比如你的部署地址为 `https://baidu.com:7856`,对应消息接收地址为 `https://baidu.com:7856/wework`
配置好 `Token` 和 `EncodingAESKey`。
此api提供了url验证功能,将下面的配置填写完整,运行机器人服务才可进行验证。
## 配置企业微信机器人
将`企业ID`,自建应用的`AgentId`和`Secret`,消息服务器的`Token` 和 `EncodingAESKey` 填入对应配置中:
```env
# 聊天转接器
ROBOT_ADAPTER=wework
# 企业微信 企业ID
WORKWX_CORP_ID=xxxxxxxxx
# 企业微信自建应用agentid
WORKWX_AGENT_ID=xxxxxxxxxxxx
# 企业微信自建应用secret
WORKWX_SECRET=xxxxxxxx
# 企业微信自建应用API接收消息token
WORKWX_RECV_TOKEN=xxxxxxxxxx
# 企业微信自建应用API接收消息EncodingAESKey
WORKWX_RECV_AES_KEY=xxxxxxxxxx
```
## 传入消息(Incoming)
当企业微信将消息或事件推送给转接器时,转接器会做以下操作:
- 记录发送者
- 记录应用ID `AgentId`
- 记录原始数据 `Data`,原始数据为SDK的`wxwork.RecvMessage`类型,使用`gob`进行序列化,脚本可以反序列化后获取原始记录,并做相关处理。
其中发送者记录在消息体中,其他记录在消息体的`Header`中,最后转接器将消息存入 `incoming` 通道中,等待机器人获取消息。
## 传出消息(Outgoing)
消息通过脚本解析执行后会将处理结果发送给用户,脚本可以发送转接器支持的消息类型到客户端。
企业微信支持七种消息类型:
- `text` 文本消息
- `markdown` markdown消息
- `image` 图片消息
- `voice` 语音消息
- `video` 视频消息
- `file` 文件消息
- `textcard` 文本卡片消息
> 消息类型请查看企业微信开发文档 [发送应用消息](https://open.work.weixin.qq.com/api/doc/90000/90135/90236)
> 需要在 `Header`中设置消息类型 `msgtype`
> 在不指定时默认为 `markdown` 类型消息
## 同步联系人信息
该转接器同样也提供了同步联系人功能,需要 `通讯录同步` 权限。获取此权限需要设置 `WORKWX_CONTACT_SECRET` 的值为 `通讯录同步` 的 `Secret`