Windows/macOS

与第三方机器人互动

更新时间: 2024/05/27 14:09:02

本文主要介绍如何快速接入类 ChatGPT 的第三方机器人,帮助您在 IM 应用中实现多样化的 AI 服务。

文中的接入流程以接入 ChatGPT(微软版)为例,其他第三方机器人服务均可通过文中介绍的方法接入,在一对一(P2P)和群组(高级群,Team)场景中进行即时通讯。

技术原理

接入第三方机器人后,IM 应用中的工作流程如下(以单聊为例):

主要流程如下:

  1. 用户发送消息给机器人(提前定义好机器人的用户账号 accid);
  2. 云信 IM 服务器检测到发送对象为机器人后,发送给云信机器人服务器;
  3. 云信机器人服务器调用第三方机器人服务的相关接口;
  4. 第三方机器人服务响应,返回回复内容;
  5. 云信机器人服务器调用云信的发送消息接口将回复内容发送到云信 IM 服务器;
  6. 云信 IM 服务器将机器人的回复消息返回给用户。

当您开通第三方回调和安全通服务时,您发送的消息以及机器人回复的消息都会经过安全审核,相关内容请参考安全通第三方回调

前提条件

实现流程

这里以单聊场景为例,描述用户与第三方机器人一对一聊天的实现步骤。

步骤1:配置第三方机器人

  1. 在控制台首页应用管理中选择应用,然后单击 IM 即时通讯下的功能配置按钮进入功能配置页。

    image.png
  2. 顶部选择账号管理页签,单击机器人右侧的子功能配置

    机器人子功能配置.png

  3. 单击添加机器人按钮,进入机器人具体配置页。

    • 填写机器人信息

      机器人信息.png

      字段 必填 说明
      机器人accid 输入机器人对应的 IM 账号(accid)
      可以是已注册的云信 IM 账号,也可以是未注册过的用户自定义的账号(云信后台会自行注册对应的 IM 账号)
      机器人名称 输入机器人名称
      头像 上传机器人头像,支持 jpg/png/jpeg 格式,单个文件大小限制 5MB 以内
      机器人能力 选择机器人的能力,默认为“微软openAI ChatGPT”,也可以选择自定义的机器人能力
    • 配置机器人能力

      微软openAI ChatGPT

      若选择 “微软openAI ChatGPT” 机器人能力,则需要配置对应的 Azure OpenAI,具体请参考微软官网文档

      AzureOpenAI.png

      自定义的机器人

      若选择 “自定义” 机器人能力,则需要配置对应的 Webhook 地址。自定义机器人 Webhook 的请求和相应格式需要满足具体的接口规范,否则云信服务器将不会处理相关请求。

      自定义机器人配置.png

    • 配置消息逻辑

      机器人消息逻辑.png

      字段 必填 说明
      消息回溯条数 发给 ChatGPT 需要往前回溯的消息条数限制
      消息回溯时间 发给 ChatGPT 需要往前回溯消息的时间限制
      回复消息是否直接下放 直接下发的消息不会回调至业务服务器,也不会通过云信自带审核服务,默认为是
  4. 配置完后,单击保存,即机器人创建完成,可以与机器人开始对话。

    可以配置多个机器人,且 webhook 地址可以相同。

步骤2:与机器人互动

  1. 用户调用nim::Talk::RegReceiveCb 方法监听消息接收。示例代码如下:

    Talk::RegReceiveCb(
        [](const IMMessage& msg) {
            // process msg
            // ......
        },
        "");
    
  2. 用户调用 nim::Talk::CreateTextMessage 方法构建一条文本消息,并调用 nim::Talk::SendMsg 方法向机器人发送文本消息。

    向机器人发送消息时,需要在消息体(nim::IMMessage)中配置 robot_info_ 字段设置好机器人信息,其中 robot_info_的字段类型为 IMMessageRobotInfo

    IMMessageRobotInfo 字段说明:

    参数类型说明
    functionstd::string机器人具体功能
    topicstd::string机器人消息话题
    custom_contentstd::string机器人自定义内容
    accountstd::string机器人账号(仅当发送到群组有效,点对点会被忽略)

    示例代码如下:

    js//这里主要以发送文本消息为例
    MessageSetting msg_setting;
    // fill msg_setting
    auto msg = Talk::CreateTextMessage("robot accid", kNIMSessionTypeP2P, "What is chatgpt?", msg_setting);
    Talk::SendMsg(msg);
    

    目前机器人消息功能支持多种消息类型,包括文本消息、图片消息、语音消息、视频消息、文件消息、地理位置消息、提示消息、通知消息以及自定义消息。

  3. 触发消息发送回调(Talk::RegSendMsgCb),消息发送成功。

  4. 触发接收消息回调(nim::Talk::RegReceiveCb),接收到机器人回复的消息。

此文档是否对你有帮助?
有帮助
去反馈
  • 技术原理
  • 前提条件
  • 实现流程
  • 步骤1:配置第三方机器人
  • 步骤2:与机器人互动