logo
当前页

接收回调

注意
回调服务不能保证完全可靠,请慎重考虑使用回调方案构建核心业务流程的风险。

通过本回调,您可以监听用户与智能体对话过程中所发生的事件,包含 ASR 结果、LLM 结果、异常事件、智能体被打断事件、用户说话行为、智能体实例状态、用户说话音频数据、智能体实例创建成功、智能体实例删除成功。

说明

如您需要接收以下类型的回调结果,请在创建智能体实例时,配置相应的 CallbackConfig 参数为 1

  • ASR 结果:CallbackConfig.ASRResult
  • LLM 结果:CallbackConfig.LLMResult
  • 智能体被打断事件:CallbackConfig.Interrupted
  • 用户说话行为:CallbackConfig.UserSpeakAction
  • 智能体实例状态:CallbackConfig.AgentInstanceStatus
  • 用户说话音频数据:CallbackConfig.UserAudioData

回调说明

  • 请求方法:POST。
    说明
    回调数据格式为 JSON。您需要对其进行 UrlDecode 解码.
  • 请求地址:请提供您业务后台用于接收回调的地址并联系 ZEGO 技术支持配置。
  • 传输协议:HTTPS/HTTP,建议使用 HTTPS。

回调参数

说明
回调的相关参数,ZEGO 会在之后的迭代计划中,持续优化更新(例如:新增字段、或新增某些字段的参数取值)。开发者在接入时,请避免将代码写死,造成后期更新后,无法兼容新版本。
说明
AgentSpeakAction 已废弃,请使用 AgentInstanceStatus 代替。
参数类型描述
AppIdNumberZEGO 给开发者 APP 的唯一标识。
EventString事件通知类型。
  • ASRResult:ASR 结果。
  • LLMResult:LLM 结果。
  • Exception:异常事件。
  • Interrupted:智能体被打断。
  • UserSpeakAction:用户说话行为。
  • AgentInstanceStatus:智能体实例状态。
  • UserAudioData:用户说话音频数据。
  • AgentInstanceCreated:智能体实例创建成功。
  • AgentInstanceDeleted:智能体实例删除成功。
NonceString随机数,用于检验串计算。
TimestampNumber回调发送时的 Unix 时间戳(毫秒),用于检验串计算。
SignatureString检验串,验证回调发送方身份。
AgentInstanceIdString智能体实例的唯一标识。
AgentUserIdString智能体的用户 ID。
AgentIdString智能体 ID。
NameString智能体名称。
RoomIdString房间 ID。
SequenceNumber回调序号,保证有序性,不保证连续性。
DataObject事件详细信息。本参数结构,请参考 Data

Data

根据 Event 取值不同,Data 包含的参数不同。

回调示例

以下展示各 Event 的回调示例。

验证签名

为提高数据安全性,建议开发者在收到 ZEGO 服务端发出的回调时,进行本地签名计算,并与 signature 进行对比,判断该请求是否合法。

校验的使用流程如下:

1

对参数进行排序

callbacksecrettimestampnonce 三个参数按照字典序进行排序

2

计算 SHA1

将排序后的 callbacksecrettimestampnonce 拼接成一个字符串并进行sha1计算

3

校验 signature

将计算后的哈希字符串与 signature 进行校验对比,如果相同则标识该请求来源于 ZEGO

参数说明如下:

参数说明
callbacksecret服务端校验密钥。在 ZEGO 控制台 注册项目时生成,可在 “控制台 > 项目配置 > 项目信息 > 配置信息” 中查看。
timestampUnix 时间戳。
nonce随机数。

以下示例代码用于生成和检验 signature。

// 从请求参数中获取到 signature, timestamp, nonce
$signature = $_POST["signature"];
$timestamp = $_POST["timestamp"];
$nonce = $_POST["nonce"];

$secret = callbacksecret;// 控制台获取的 callbacksecret
$tmpArr = array($secret, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );

if( $tmpStr == $signature ){
    return true;
} else {
    return false;
}

输出示例如下:

PHP 示例
$nonce = 123412;
$timestamp = 1470820198;
$secret = 'secret';
// 三个参数经过排序后的顺序为:nonce、timestamp、secret
// 排序拼接后需要加密的原始串为:1234121470820198secret
// 哈希运算的结果为:5bd59fd62953a8059fb7eaba95720f66d19e4517

返回响应

当您收到回调后,请返回 HTTP status code 为 2XX (例如 200),表示接收成功。返回其他,都表示接收失败。

回调重试策略

如果 ZEGO 服务器没有收到响应,或收到的 HTTP status code 不为 2XX(例如 200),都会尝试重试,最多进行 5 次重试。每次重试请求与上一次请求的间隔时间分别为 2s、4s、8s、16s、32s。若第 5 次重试后仍然失败,将不再重试,该回调丢失。

上一篇

插入消息到智能体实例上下文列表

下一篇

异常事件错误码

当前页

返回到顶部