企业微信运维手册
一、 前言
本手册旨在为企业微信管理员和运维人员提供全面的操作指南和最佳实践,覆盖核心功能模块的配置、管理和常见问题处理,特别是自建应用的开发与运维全流程。请结合企业微信官方文档使用。
二、 全局配置与管理
- 企业信息管理
- 路径: 管理后台 -> 我的企业 -> 企业信息
- 运维要点:
- 确保企业名称、行业、规模等信息准确,便于员工查找和识别。
- 定期检查并更新企业LOGO。
- 管理企业对外简称(用于生成企业名片)。
- 通讯录管理
- 路径: 管理后台 -> 通讯录
- 运维要点:
- 成员管理: 新员工入职及时添加,设置部门、职位、手机号、邮箱等信息。离职员工及时禁用或删除账号(注意离职交接流程)。
- 部门管理: 根据组织架构调整部门树,确保层级清晰。管理部门的可见范围。
- 批量操作: 利用导入/导出功能进行成员信息的批量更新。
- 权限管理: 设置分级管理员,分配管理权限(如部门管理员)。
- 安全与合规
- 路径: 管理后台 -> 安全与保密
- 运维要点:
- 登录安全: 配置登录方式(手机号/邮箱/微信扫码)、密码强度要求、登录设备管理、登录地点限制。
- 会话存档: (需购买)配置合规存档范围,确保满足审计和合规要求。关注存储安全和访问日志。
- 防泄漏: 配置水印、禁止截图/录屏、限制文件转发等策略。
- IP白名单: 限制后台访问来源IP,增强安全性。
- 基础设置
- 路径: 管理后台 -> 管理工具 -> 基础设置
- 运维要点:
- 消息频率限制: 根据业务需求调整成员发送消息的频率限制。
- API调用频率限制: 关注自建应用、第三方应用的API调用情况,避免触发限制。
- 网络代理: 如有需要,配置企业代理。
三、 核心功能模块运维
-
客户管理 (客户联系)
- 路径: 管理后台 -> 客户联系
- 运维要点:
- 配置联系我方式: 管理成员的"联系我"二维码和联系方式。设置分配规则(轮流分配、随机分配)。
- 管理客户标签: 创建和维护企业客户标签体系。管理标签分组。
- 客户继承 (离职交接): 配置自动或手动分配离职成员的客户给其他成员。详见离职交接章节。
- 群管理: 配置客户群入群方式、群欢迎语、防骚扰规则(广告、刷屏)。
- SOP (标准操作流程): 创建和管理客户服务SOP,确保服务标准化。
- 数据统计: 定期查看客户联系数据报表,分析服务效果。
-
聊天工具栏 (聊天附件栏)
- 路径: 管理后台 -> 聊天工具栏
- 运维要点:
- 配置工具栏: 为成员配置聊天界面底部工具栏显示的应用(包括自建应用、第三方应用、小程序、文档等)。
- 分配规则: 根据不同部门、成员角色分配不同的工具栏应用组合。
- 关联自建应用: 将开发好的自建应用配置到成员的聊天工具栏中,方便快速调用。需要自建应用已发布。
- 监控使用情况: 关注各工具栏应用的使用频率和效果。
-
会议
- 路径: 管理后台 -> 会议
- 运维要点:
- 配置会议设置: 管理入会密码、等候室、屏幕共享水印、录制权限等。
- 管理会议室: (若使用硬件会议室)添加和管理会议室资源,配置预约规则。
- 管理企业会议: 查看企业内发起的会议列表(需管理员权限)。
- 数据统计: 查看会议时长、参与人数等统计信息。
-
聊天记录
- 运维要点:
- 本地存储: 提醒用户注意定期备份重要聊天记录(企业微信客户端支持导出)。
- 云端存档: 会话存档功能(需购买) 是官方提供的合规存储方案。运维重点在于配置存档范围、确保存储空间、监控存档服务状态、处理查询请求。
- 自建应用访问: 通过会话存档接口(需授权)开发应用获取存档消息。注意处理消息加解密。
- 运维要点:
-
离职交接
- 路径: 管理后台 -> 离职继承
- 运维要点:
- 客户继承: 当成员离职时,及时将其负责的客户分配给其他在职成员。可手动分配或配置自动分配规则。分配后,客户会收到通知。
- 群聊继承: 将离职成员创建的客户群(群主身份)转移给其他成员。
- 应用数据交接: 对于自建应用,需在应用设计时考虑用户数据隔离和交接逻辑(如工单系统、CRM)。通常需要开发特定的交接功能或通过管理员后台操作。
-
企业名片 & 个人名片
- 运维要点:
- 企业名片: 确保管理后台中配置的企业对外简称准确,这是生成企业名片的基础。成员对外展示时会自动附带企业信息。
- 个人名片: 提醒成员在"我" -> "个人信息"中维护好个人姓名、职位、部门、手机号、邮箱等,这些信息构成个人名片。管理员可在通讯录中协助维护。
- 运维要点:
-
收付款 (企业支付)
-
路径: 管理后台 -> 应用管理 -> 企业支付
-
运维要点:
- 开通与配置: 完成商户号申请、绑定等配置。设置支付通知URL。
- 证书管理: 极其重要! 安全存储API证书(
apiclient_cert.pem,apiclient_key.pem)。定期更新(通常每年)。丢失或泄露需立即重新申请并停用旧证书。 - 密钥管理: 安全存储APIv3密钥。定期更换。
- API调用监控: 严格监控支付API调用频率、成功率、错误码。设置告警。
- 对账: 每日进行交易对账,确保资金安全。
- 沙箱环境: 开发测试务必使用沙箱环境。
-
示例代码 (Python - 获取平台证书):
pythonimport requests from requests.auth import HTTPBasicAuth # 假设配置 MCHID = "your_mchid" # 商户号 API_V3_KEY = "your_api_v3_key" # APIv3密钥 CERT_SERIAL_NO = "your_cert_serial_no" # 商户证书序列号 PRIVATE_KEY = open('apiclient_key.pem').read() # 商户私钥 # 构造请求 (简化版,实际需签名) url = "https://api.mch.weixin.qq.com/v3/certificates" auth = HTTPBasicAuth(MCHID, 'WECHATPAY2-SHA256-RSA2048') # 固定值 # ... 此处省略构造Authorization头的复杂签名过程 (需使用PRIVATE_KEY) ... response = requests.get(url, auth=auth, headers={"User-Agent": "curl/7.62.0", ...}) # 处理响应,获取并解密平台证书列表 # ... 解密需要API_V3_KEY ...
-
-
邮箱 (企业邮箱)
- 运维要点:
- 开通与绑定: 确保企业邮箱服务已开通并与企业微信绑定。
- 成员邮箱管理: 在管理后台分配和管理成员的邮箱账号。
- 客户端配置: 指导用户在企业微信客户端配置邮箱账号。
- 反垃圾与安全: 配置邮箱反垃圾策略、邮件审核规则。
- 运维要点:
-
AI聊天助手
- 运维要点:
- 服务开通: 确认企业购买的AI助手服务(如腾讯企点)。
- 基础配置: 配置助手名称、头像、欢迎语。
- 知识库管理: 维护问答知识库,优化机器人回答准确率。
- 转人工规则: 配置触发转接人工客服的条件和路由规则。
- 对话监控: 抽样检查对话记录,评估服务质量。
- 数据报表: 分析咨询量、解决率、满意度等指标。
- 运维要点:
四、 自建应用开发与运维详解 (重点)
自建应用是企业微信扩展能力的关键,允许企业深度集成内部系统或定制开发特有功能。
4.1 创建自建应用 (从头开始)
-
规划与设计
- 明确应用目的、目标用户、核心功能。
- 设计用户界面(UI)和用户体验(UX)。
- 确定所需的企业微信API(通讯录、消息、客户联系等)。
- 评估是否需要会话存档、支付等高级能力。
- 设计数据存储方案(自有服务器/云数据库)。
-
开发准备
- 创建应用:
- 路径: 管理后台 -> 应用管理 -> 自建应用 -> 创建应用
- 步骤:
- 填写应用名称(用户可见)、描述、应用图标。
- 设置可见范围(哪些部门/成员可以使用此应用)。
- 获取关键凭证:
AgentId: 应用的唯一标识。Secret: 极其重要! 应用调用API的凭证密钥。务必妥善保管,切勿泄露。 可在应用详情页查看或重置。
- 配置API接收
- 目的: 接收企业微信服务器发送的事件(如用户消息、菜单点击、成员变更)和指令回调(如授权变更)。
- 路径: 应用详情页 -> "接收消息" / "指令回调"
- 步骤:
- 启用API接收: 打开开关。
- 填写URL: 提供你服务器上处理企业微信请求的入口地址 (e.g.,
https://yourdomain.com/wecom/callback)。 - 设置Token & EncodingAESKey:
Token: 自定义的令牌,用于验证请求来源。EncodingAESKey: 自定义的加密密钥,用于消息加解密。务必随机生成并安全存储。
- 选择消息加解密方式: 推荐使用安全模式(加密)。
- 保存并验证: 保存配置后,企业微信会向你的URL发送一个验证请求(包含
echostr参数),你的服务端需要正确解析并响应才能通过验证。
- 服务器准备
- 准备具有公网IP/域名、支持HTTPS的服务器(TLS证书)。
- 部署应用后端代码(Python, Java, Node.js等)。
- 准备数据库。
- 创建应用:
-
开发实现
-
基础框架 (Python Flask 示例):
pythonfrom flask import Flask, request, jsonify import hashlib import xml.etree.ElementTree as ET # 简化解析 app = Flask(__name__) # 配置参数 (实际应从安全配置读取) WECOM_CORP_ID = "your_corp_id" # 企业ID (在"我的企业"->"企业信息"查看) WECOM_TOKEN = "your_token" WECOM_AES_KEY = "your_encoding_aes_key" # 43个字符 @app.route('/wecom/callback', methods=['GET', 'POST']) def wecom_callback(): if request.method == 'GET': # URL验证逻辑 msg_signature = request.args.get('msg_signature', '') timestamp = request.args.get('timestamp', '') nonce = request.args.get('nonce', '') echostr = request.args.get('echostr', '') # ... 此处省略验证签名算法 (使用Token, Timestamp, Nonce, 计算签名与msg_signature比对) ... # ... 验证通过后,解密echostr得到明文 ... return plain_echostr # 返回解密后的明文echostr elif request.method == 'POST': # 处理事件推送 msg_signature = request.args.get('msg_signature', '') timestamp = request.args.get('timestamp', '') nonce = request.args.get('nonce', '') encrypted_xml = request.data # 加密的XML消息体 # ... 此处省略解密算法 (使用AESKey解密encrypted_xml) ... # ... 得到明文XML消息 ... root = ET.fromstring(decrypted_xml) msg_type = root.find('MsgType').text # 根据MsgType处理不同事件 (text, event, ...) if msg_type == 'event': event = root.find('Event').text if event == 'subscribe': # 应用被关注(用户点击了应用) user_id = root.find('UserID').text # 响应欢迎消息或进行初始化操作 # ... 构造回复消息XML (可选) ... return "" # 或返回回复XML return jsonify({"errcode": 0, "errmsg": "ok"}) # 成功接收 if __name__ == '__main__': app.run(host='0.0.0.0', port=80, ssl_context='adhoc') # 生产环境应用HTTPS证书 -
访问令牌 (
access_token) 获取-
重要性: 调用绝大多数API都需要
access_token,它是应用的身份凭证。 -
获取方式: 使用
CorpID和应用的Secret调用/cgi-bin/gettoken接口。 -
缓存:
access_token有效期为2小时(7200秒),且调用次数有限制。务必在服务端缓存,避免频繁刷新。 -
示例代码 (Python):
pythonimport requests import time def get_access_token(): # 尝试从缓存获取 (伪代码) cached_token = cache.get('wecom_access_token') if cached_token and cached_token['expires_at'] > time.time(): return cached_token['token'] # 缓存无效,重新获取 url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={WECOM_CORP_ID}&corpsecret={APP_SECRET}" resp = requests.get(url).json() if resp['errcode'] == 0: access_token = resp['access_token'] expires_in = resp['expires_in'] # 通常是7200 # 缓存token和过期时间 (例如:expires_at = time.time() + expires_in - 300) 提前5分钟过期 cache.set('wecom_access_token', {'token': access_token, 'expires_at': time.time() + expires_in - 300}) return access_token else: # 处理错误 raise Exception(f"Failed to get access token: {resp}")
-
-
调用企业微信API
-
使用获取到的
access_token,按照官方API文档调用所需接口(如发送消息、获取用户信息、管理客户等)。 -
示例:发送文本消息 (Python):
pythondef send_text_message(access_token, user_id, content): url = f"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={access_token}" data = { "touser": user_id, "msgtype": "text", "agentid": AGENT_ID, # 你的应用AgentId "text": { "content": content }, "safe": 0 # 是否加密消息 } resp = requests.post(url, json=data).json() return resp # 检查errcode是否为0
-
-
开发应用主页
- 配置一个URL作为应用入口(在应用详情页设置)。
- 用户点击应用图标时,企业微信会打开这个URL。
- 通常需要实现OAuth2.0授权登录流程来获取用户身份 (
code->userid)。 - OAuth2.0 简化流程示例:
-
构造授权URL,引导用户访问:
https://open.work.weixin.qq.com/wwopen/sso/qrConnect?appid={CORP_ID}&agentid={AGENT_ID}&redirect_uri={REDIRECT_URI}&state={STATE} -
用户授权后,跳转到
redirect_uri并附带code和state。 -
服务端用
code换取用户信息 (userid):pythondef get_user_info(access_token, code): url = f"https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={access_token}&code={code}" resp = requests.get(url).json() if resp['errcode'] == 0: return resp['UserId'] # 用户的UserID else: return None
-
集成到聊天工具栏
-
在管理后台配置聊天工具栏时,选择你的自建应用。
-
当用户在聊天中点击工具栏图标时,企业微信会向你的API接收URL 发送一个事件 (
event = click,EventKey= 自定义的键值)。 -
服务端接收事件后,根据
EventKey判断用户点击了哪个功能项。 -
需要返回一个JSON消息体,指定企业微信打开应用的主页URL或小程序页面。这允许你动态传递上下文(如当前聊天对象)。
-
示例响应 (打开应用主页):
json{ "type": "webview", "webview": { "url": "https://yourdomain.com/app/toolbar_action?chat_context=...", "width": 1024, "height": 768 } }
-
-
-
测试
- 内部测试: 将应用可见范围设置为测试部门/成员。
- 功能测试: 测试所有API调用、事件接收、消息发送、OAuth登录、主页加载、工具栏点击等。
- 安全测试: 检查输入输出安全,防止XSS、SQL注入等。
- 性能测试: 评估在高并发下的表现。
- 企业微信官方测试工具: 利用管理后台提供的调试工具(如消息推送调试)。
-
发布与上线
- 测试通过后,在管理后台将应用可见范围扩大到目标用户群体。
- 正式上线。
4.2 自建应用日常运维
- 监控
- API调用监控: 监控
access_token获取频率、各业务API调用频率、成功率、错误码(特别是频率限制错误)。设置告警阈值。 - 服务器监控: CPU、内存、磁盘、网络流量。
- 应用日志: 记录关键操作、错误信息、API请求响应。定期分析。
- 企业微信后台: 关注管理后台中应用的"API调用次数"统计。
- API调用监控: 监控
- 错误处理
- 理解错误码: 熟悉企业微信API返回的常见错误码 (
40001-凭证错误,40014-Token过期,45033-频率限制等)。 - 重试策略: 对于可重试错误(如频率限制),实现指数退避重试。
- 告警: 对关键错误(如获取
access_token失败、支付失败)设置实时告警(邮件、短信、钉钉机器人等)。
- 理解错误码: 熟悉企业微信API返回的常见错误码 (
- 证书与密钥管理
- 应用Secret: 定期检查是否泄露。如有泄露风险,立即在管理后台重置Secret,并更新所有使用该Secret的服务。
- API接收Token/AESKey: 如需变更,需在管理后台修改并重新验证URL。
- 企业支付证书/密钥: 如前所述,严格管理,定期更新。
- 升级与变更
- API变更: 关注企业微信官方公告和API文档更新。评估变更对现有应用的影响,及时升级适配。
- 应用功能升级: 采用灰度发布策略,先小范围测试再全量。维护版本号。
- 依赖库升级: 定期更新服务器操作系统、语言运行时、依赖库,修复安全漏洞。
- 用户支持
- 建立应用内部反馈渠道。
- 收集用户问题和建议,持续优化应用。
- 编写用户使用手册或FAQ。
- 备份与恢复
- 定期备份应用代码、数据库、配置文件。
- 制定灾难恢复计划(DRP),定期演练。
- 安全加固
- 服务器安全组/防火墙限制访问IP。
- 使用WAF防护Web攻击。
- 定期进行安全扫描和渗透测试。
- 最小权限原则配置数据库和服务器账号。
五、 总结
企业微信运维是一项持续性的工作,涉及基础配置、功能管理、安全保障和深度集成(特别是自建应用)。管理员需要熟悉平台功能,密切关注官方更新,并建立完善的监控、告警、变更管理和应急响应机制。自建应用的运维更是重中之重,需从开发源头考虑可运维性,并在整个生命周期中做好监控、维护和安全保障。