• Stars
    star
    560
  • Rank 79,068 (Top 2 %)
  • Language
    Go
  • License
    MIT License
  • Created almost 6 years ago
  • Updated 9 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

a sensible WeCom (企业微信, Wechat Work, Work Weixin) SDK for Go

go-workwx

GitHub go.mod Go version GitHub tag (latest by date) GitHub Workflow Status (develop branch) GitHub license info Go Report Card Go Reference GitHub Repo stars

本项目需要您的帮助!

import (
    "github.com/xen0n/go-workwx" // package workwx
)

A Work Weixin (a.k.a. Wechat Work) client SDK for Golang, that happens to be battle-tested and pretty serious about its types.

In production since late 2018, pushing all kinds of notifications and alerts in at least 2 of Qiniu's internal systems.

一个 Golang 企业微信客户端 SDK;碰巧在生产环境试炼过,还对类型很严肃。

自 2018 年末以来,在七牛至少 2 个内部系统运转至今,推送各种通知、告警。

English translation TODO for now, as the service covered here is not available outside of China (AFAIK).

Why another wheel?

工作中需要用 Go 实现一个简单的消息推送,想着找个开源库算了,然而现有唯一的开源企业微信 Golang SDK 代码质量不佳。只好自己写一个。

Update: 自从这个库写出来,已经过了很久;现在(2019.08)已经有三四个同类项目了。 不过看了看这些“竞品”,发现自己这个库的类型设计、公开接口、access token 处理等方面还不赖。 为什么人们总是喜欢写死请求 Host、用全局量、为拆包而拆包甚至不惜公开内部方法呢?

Supported Go versions

本库的 v1.x 分支最低支持到 go1.17

CI 会在 go1.17 和 Go 的当前稳定版本、上一个稳定版本上跑测试,只有测试全部通过才可能合并 PR。

Features

  • 包名短
  • 支持覆盖 API Host,用于自己拦一层网关、临时调试等等奇葩需求
  • 支持使用自定义 http.Client
  • access token 处理靠谱
    • 你可以直接就做 API 调用,会自动请求 access token
    • 你也可以一行代码起一个后台 access token 刷新 goroutine
    • 自带指数退避重试
  • 严肃对待类型、公开接口
    • 公开暴露接口最小化,两步构造出 WorkwxApp 对象,然后直接用
    • 刻意不暴露企业微信原始接口请求、响应类型
    • 后续可能会做一个 lowlevel 包暴露裸的 API 接口,但很可能不做
    • 不为多态而多态,宁可 SDK 内部重复代码,也保证一个接口一类动作,下游用户 static dispatch
    • 个别数据模型做了调整甚至重做(如 UserInfoRecipient),以鼓励 idiomatic Go 风格
    • 几乎不会越俎代庖,一言不合 panic现存的少数一些情况都是要修掉的。
  • 自带一个 workwxctl 命令行小工具帮助调试
    • 用起来不爽提 issue 让我知道你在想啥

详情看 godoc 文档,还提供 Examples 小段代码可以参考。

Supported APIs

  • 通讯录管理 (部分支持,见下)
  • 客户联系 (大部分支持,见下)
  • 应用管理
  • 消息发送 (除修改群聊会话外全部支持)
  • 消息接收
  • 素材管理 (支持上传, 见下)
  • OA (大部分支持,见下)
  • 会话内容存档 (大部分支持,见下)
  • 企业微信登录接口 (code2Session)
通讯录管理 API
  • 成员管理
    • 创建成员
    • 读取成员 NOTE: 成员对外信息暂未实现
    • 更新成员
    • 删除成员
    • 批量删除成员
    • 获取部门成员
    • 获取部门成员详情
    • userid与openid互换
    • 二次验证
    • 邀请成员
    • 获取加入企业二维码
    • 手机号获取userid
    • 邮箱获取userid
    • 获取成员ID列表
  • 部门管理
    • 创建部门
    • 更新部门
    • 删除部门
    • 获取部门列表
    • 获取子部门ID列表
  • 标签管理
    • 创建标签
    • 更新标签名字
    • 删除标签
    • 获取标签成员
    • 增加标签成员
    • 删除标签成员
    • 获取标签列表
  • 异步批量接口
    • 增量更新成员
    • 全量覆盖成员
    • 全量覆盖部门
    • 获取异步任务结果
  • 通讯录回调通知
    • 成员变更通知
    • 部门变更通知
    • 标签变更通知
    • 异步任务完成通知
客户联系 API
  • 成员对外信息
  • 企业服务人员管理
    • 获取配置了客户联系功能的成员列表
    • 客户联系「联系我」管理
  • 客户管理
    • 获取客户列表
    • 获取客户详情
    • 批量获取客户详情
    • 修改客户备注信息
  • 在职继承
    • 分配在职成员的客户
    • 查询客户接替状态
    • 分配在职成员的客户群
  • 离职继承
    • 获取待分配的离职成员列表
    • 分配离职成员的客户
    • 查询客户接替状态
    • 分配离职成员的客户群
  • 客户标签管理
    • 管理企业标签
    • 编辑客户企业标签
  • 客户分配
    • 获取离职成员列表
    • 分配在职或离职成员的客户
    • 查询客户接替结果
    • 分配离职成员的客户群
  • 变更回调通知
    • 添加企业客户事件
    • 编辑企业客户事件
    • 外部联系人免验证添加成员事件
    • 删除企业客户事件
    • 删除跟进成员事件
    • 客户接替失败事件
    • 客户群变更事件
  • 消息推送
    • 创建企业群发
    • 获取企业的全部群发记录
    • 发送新客户欢迎语
    • 入群欢迎语素材管理
身份验证 API
  • 获取访问用户身份
应用管理 API
  • 获取应用
  • 设置应用
  • 自定义菜单
    • 创建菜单
    • 获取菜单
    • 删除菜单
消息发送 API
  • 发送应用消息
  • 接收消息
  • 发送消息到群聊会话
    • 创建群聊会话
    • 修改群聊会话
    • 获取群聊会话
    • 应用推送消息

消息类型

  • 文本消息
  • 图片消息
  • 语音消息
  • 视频消息
  • 文件消息
  • 文本卡片消息
  • 图文消息
  • 图文消息(mpnews)
  • markdown消息
  • 任务卡片消息
素材管理 API
  • 上传临时素材
  • 上传永久图片
  • 获取临时素材
  • 获取高清语音素材
OA API
  • 审批
    • 获取审批模板详情
    • 提交审批申请
    • 审批申请状态变化回调通知
    • 批量获取审批单号
    • 获取审批申请详情
    • 获取企业假期管理配置
    • 修改成员假期余额
会话内容存档 API
  • 获取会话内容存档开启成员列表
  • 获取会话同意情况
  • 客户同意进行聊天内容存档事件回调
  • 获取会话内容存档内部群信息

Notes

关于保密消息发送

Markdown 等类型消息目前不支持作为保密消息发送,强行发送会报错。 那么为何发送消息的方法还全部带着 isSafe 参数呢?

一方面,企业微信服务方完全可能在未来支持更多消息类型的保密发送,到时候不希望客户端代码重新编译; 另一方面,反正响应会报错,你也不会留着这种逻辑。因此不改了。

License

Stargazers over time

Stargazers over time

More Repositories

1

autojump-rs

A fast drop-in replacement of autojump written in Rust
Rust
231
star
2

JNUthesis

江南大学学位论文 XⱻLᴬTᴇX 宏包
TeX
44
star
3

android_device_meizu_arale

Device tree for Meizu MX4 (common part + Ubuntu Edition)
C
33
star
4

larva

PoC LoongArch - RISC-V emulator
Rust
28
star
5

weiyu

微雨 -- "light rain", yet another Python Web framework
Python
26
star
6

loongson-overlay

Support overlay for Gentoo/Loongson users
Shell
20
star
7

xen0n.github.io

Source to my blog
CSS
13
star
8

local_manifests_arale

Local manifests for Meizu MX4 (both Ubuntu and ordinary editions)
8
star
9

android_mediatek_lenovo

mediatek directory for Lenovo devices
C++
8
star
10

maidata-rs

[WIP] Rust library for working with maidata.txt files from the simai community
Rust
8
star
11

sendfile.rs

A platform sendfile wrapper for Rust
Rust
5
star
12

jsunidecode

A simple JavaScript port of the Python transliteration library "unidecode".
JavaScript
5
star
13

protobuf-gogogo

[WIP] Attempt to implement gogo/protobuf on top of APIv2
Go
5
star
14

shengloong

昇龍 -- upgrades LoongArch sysroot in-place to new glibc symbol version
C
4
star
15

howto-foss-web-devel-zh-cn

(in Chinese) 自由/开源技术Web开发教程
4
star
16

goubao

狗宝——帮你整理文档的好同事
Go
3
star
17

dotfiles

my dotfiles backup
Emacs Lisp
3
star
18

brickbot

一个用来润滑日常搬砖过程中团队协作的简单 bot
Go
3
star
19

gosmopolitan

Report certain i18n/l10n anti-patterns in your Go codebase
Go
3
star
20

rustc-l10n

Experimental project to bring l10n to rustc
Rust
2
star
21

rust-jnisupport

(NAME CHANGE NEEDED) Easy-to-use JNI wrapper macros for Rust
2
star
22

touchmon

Simple inotify-based filesystem observer
Python
2
star
23

simplecolor-themes

Theme(s) comprised of Simple Colors, that's it
2
star
24

pyopen189

Unofficial Python client for open.189.cn (天翼开放平台)
Python
2
star
25

cirrocumulus

卷积云 -- 江南听雨网应用部署平台
Python
2
star
26

qn-changelog-rs

Rust port of https://github.com/sorcerer-ma/changelog
Rust
2
star
27

android_device_meizu_mx4

Device tree for Meizu MX4 (non-Ubuntu editions)
Makefile
2
star
28

docker-pandora-express

(UNOFFICIAL) Dockerized Qiniu Pandora 2.0
Shell
2
star
29

r2-loongarch

Radare2/Rizin plugins for LoongArch
C
2
star
30

open189-rs

A Rust client for the open.189.cn (天翼开放平台) API
Rust
2
star
31

android_vendor_meizu_arale

Vendor tree for Meizu MX4 Ubuntu Edition
Shell
2
star
32

gentoo-loongson-patches

Loongson patches for Gentoo; clone into your /etc/portage/patches to use
1
star
33

xen0n

1
star
34

loongson-portage-conf

Portage configuration for Loongson-based boxes
1
star
35

android_device_zte_p635-common

Common device tree for ZTE Blade A1
C
1
star
36

gingerprawn

A highly extensible client specifically made for students in Jiangnan University
Python
1
star
37

maidata.vim

Vim syntax highlighting for maidata.txt files
Vim Script
1
star
38

acmed-dns-helper-dnspod

Helper for ACMEd to handle DNS challenges with DNSPod
Rust
1
star
39

monkeywrapper

2015 Unique Hack Day project
Java
1
star
40

android_hardware_mediatek

android hardware support for MTK
C++
1
star
41

android_device_zte_p635b32

Device tree for ZTE Blade A1 (C880A variant)
Makefile
1
star
42

android_device_lenovo_a808t

Lenovo A808t
C
1
star
43

qiniu-rs

[WIP] Rust SDK for Qiniu
Rust
1
star
44

cloud-provider-shim

[WIP] a Kubernetes cloud provider shim enabling non-Golang implementations
Go
1
star
45

android_vendor_zte_p635b32

Vendor tree for ZTE Blade A1 (C880A variant)
Shell
1
star
46

glibc-patches

my fork of Gentoo's glibc-patches
Shell
1
star