【集成示例】企业微信

企业微信内部应用集成智能对话机器人大模型问答。

效果展示

image

重要
  • 确保已经完成了微信企业认证。

  • 需要一个域名,用来接收回调消息。企业微信要求域名主体需要与企业微信的认证主体相同或相关,详情请参考:企业微信域名

准备工作

智能对话机器人配置

  1. 进入智能对话机器人控制台,选择左侧导航栏的应用管理->机器人->新建机器人

  2. 获取机器人ID,发布机器人(如无发布按钮则跳过)。

    image

  3. 访问智能对话机器人业务空间,获取业务空间AgentKey。

    image

  4. 访问RAM控制台,获取阿里云账号的ACCESS_KEYSECRET_KEY。

企业微信配置

  1. 访问企业微信后台,获取企业 ID。image

  2. 登录企业微信应用平台。

  3. 选择应用管理菜单,然后创建应用。image

  4. 设置API接收消息。imageimage

    1. 格式为https://{你的域名}/api/wechat/work/chat。

    2. TokenEncodingAESKey单击随机获取即可。

    3. 您需要把企业 ID、Token 和 EncodingAESKey配置到代码中,并部署本示例,确保回调URL能被外网调用到,否则您单击完成会提示“openapi回调地址请求不通过”。

  5. 上一步单击保存后,回到应用配置页,查看Secret。image

  6. 在应用配置页面,您可以进行企业可信IP的管理与配置。image

操作步骤

image

  1. 您首先需要获取安全认证信息,调用ApplyForStreamAccessToken 接口为后续操作做准备。详细信息请参考:获取流式调用的连接信息

  2. ApplyForStreamAccessToken 接口调用成功后会返回 AccessToken、ChannelId 和 StreamSecret 等后续使用的信息,信息有效期为2小时,到期后需重新调用接口获取。

  3. 您需要监听并接收用户发送的消息,详情请参考:接收消息

  4. 然后需要解析接收的信息,得到用户的提问信息和用户信息。详情请参考:消息格式

  5. 接着您需要调用GetToken API获取微信的AccessToken,每次调用微信的接口都会用到。详情请参考:获取调用凭证access_token

  6. 得到企业微信AccessToken。

  7. 接着您应该生成调用流式会话接口所需的签名。该签名应包含当前时间戳(Timestamp)和第二步接口返回的 StreamSecret 参数来计算生成。详情请参考:会话接口签名

  8. 其次您需要将 AccessToken、ChannelId、Sign 和 Timestamp 拼接成完整的 URL,然后使用 SSE 流式调用会话接口,以监听 SSE 事件并获取大模型的流式输出详情请参考:流式会话接口

  9. 大模型流式接口会多次返回,每次返回都是全量的回复,渲染端应该考虑用新的覆盖旧的。详情请参考:流式会话接口

  10. 等待大模型回复完成,一次性将消息回复给用户。

示例工程代码

源代码下载(JAVA)

wx-work-example.zip

示例运行配置

  1. 安装JDK,本示例工程的运行环境要求为JDK 8,参考文档:Windows安装JDK

  2. 根据本文的上述操作,获取示例参数

  3. 修改项目的配置文件application.properties中调整相关参数。

  4. 运行com.aliyun.chatbot.channel.WebApplication,也可打成jar包,通过java -jar命令运行。

示例参数

名称

描述

ALIYUN_ACCESS_KEY

阿里云账号AK

ALIYUN_SECRET_KEY

阿里云账号SK

CHATBOT_INSTANCE_ID

机器人 ID

CHATBOT_AGENT_KEY

业务空间AgentKey,获取地址:业务空间管理

WX_CORP_ID

企业 ID,获取方式可参考:企业微信配置步骤一。

WX_TOKEN

API接收消息配置中的Token,获取方式可参考:企业微信配置步骤四。

WX_ENCODING_AES_KEY

API接收消息配置中的EncodingAESKey,获取方式可参考:企业微信配置步骤四。

WX_SECRET

应用的Secret,获取方式可参考:企业微信配置步骤五。

常见问题

Q:配置回调接口信息时,直接单击完成会提示“openapi回调地址请求不通过”

A:需要把企业 ID、Token 和 EncodingAESKey配置到代码中,并部署本示例,确保回调URL能被外网调用到。