给客户推送订单状态、给项目群发巡检告警,是企业微信机器人最常见的两类需求。这篇把"一条文本消息怎么发出去"拆成三步:准备凭证、确定发送目标、调用 sendText,最后补上几个容易踩的坑。

背景痛点

企微后台自带的群发功能,覆盖不了业务系统里"事件驱动发消息"的场景:订单状态变了要通知对应客户,监控告警要按条件发到指定群,这类需求只能走接口。

很多文章到这里就结束了。实际接入时,新手多半卡在两个问题上:conversationId 到底填什么,以及为什么接口返回成功、手机上却看不到消息。如果还没做过控制台收发测试,建议先按Eyun 企微 API 快速开始把凭证和登录这一步走完,再看下文。

原理

所谓企业微信机器人,本质上是一个保持在线的企微账号实例,业务系统通过 API 指挥它收发消息。调用模型很直白:每个能力一个路径,全部 POST + JSON,请求头用 Bearer 调用凭证鉴权,请求体里的 appid 决定这次调用作用在哪个实例上。

一条文本消息,就是"凭证 + appid + 会话 ID + 内容"四个要素。

核心实现

先跑通最小请求(示例代码,需按官方文档校验):

curl -X POST "{BASE_URL}/api/message/sendText" \
  -H "Authorization: Bearer <你的调用凭证>" \
  -H "Content-Type: application/json" \
  -d '{
    "appid": "<你的实例 ID>",
    "conversationId": 1688850000000001,
    "content": "您的订单已发货,预计明天送达"
  }'

完整参数和失败码见Eyun 发送文本消息接口页。curl 验证通过后,Python 侧封装一个函数就够用:

import requests

def send_text(appid, conversation_id, content):
    # 示例代码,需按官方文档校验
    resp = requests.post(
        f"{BASE_URL}/api/message/sendText",
        headers={"Authorization": f"Bearer {CREDENTIAL}"},
        json={"appid": appid, "conversationId": conversation_id,
              "content": content},
        timeout=10,
    )
    data = resp.json()
    if data.get("code") != 0:
        raise RuntimeError(f"发送失败:{data.get('message')}")
    return data["data"]

踩坑

一、conversationId 是 JSON number,不能加引号。单聊填对方的 userId,群聊填 roomId;给自己发时填本账号的 uin,从个人信息接口取,不要照抄文档里的示例 ID。

二、code 等于 0 只表示接口受理成功。经接口发出的消息不会回推正文到 Webhook,只会推一条 2001 已读回执,所以验收要用手机客户端真机看一眼,别拿 Webhook 有没有收到来判断。

三、conversationId 这类 ID 是 int64,超过 JavaScript 的安全整数范围。后端用 Python、Java 问题不大,前端或 Node 服务要专门处理,下篇单独展开。

总结

三步收个尾:控制台领凭证扫码登录、用个人信息接口确认发送目标、封装 sendText 加上错误处理。这套示例基于 Eyun 平台的企微接口整理,参数细节以官方文档为准,调用失败先查错误码表再改代码,能少走不少弯路。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐