You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LiveChat插件自动发聊天记录至坐席:agent_id取值异常求助

解决LiveChat聊天结束后获取坐席邮箱的问题

看起来你在配置LiveChat聊天结束后自动发送记录给坐席时,卡在了获取坐席邮箱的环节,我结合你提供的API返回结构,给你梳理两种可靠的解决方案:

1. 从agents数组直接提取坐席邮箱(推荐)

API返回的chat->agents字段专门存储参与本次聊天的坐席信息,其中login值就是坐席的邮箱(和你要找的agent_id完全一致),这个方式逻辑更直接,也不用遍历消息:

$agent_email = '';
// 先确认agents数组存在且不为空
if (!empty($data->chat->agents) && is_array($data->chat->agents)) {
    $agent_email = $data->chat->agents[0]->login;
}

2. 从messages数组筛选agent的agent_id

如果想从消息记录里提取,你的初始思路是对的,但需要考虑第一条消息可能不是坐席发送的极端情况,所以最好通过user_type筛选agent的消息:

$agent_email = '';
// 确认messages数组有效
if (!empty($data->chat->messages) && is_array($data->chat->messages)) {
    // 遍历消息,找到第一条agent发送的内容
    foreach ($data->chat->messages as $msg) {
        if ($msg->user_type === 'agent') {
            $agent_email = $msg->agent_id;
            break; // 找到后停止循环,提升效率
        }
    }
}

最终邮件发送完整示例

拿到邮箱后,记得把聊天记录转为字符串(print_r加第二个参数true),再执行邮件发送:

// 先获取坐席邮箱(这里用agents数组的方式)
$agent_email = '';
if (!empty($data->chat->agents) && is_array($data->chat->agents)) {
    $agent_email = $data->chat->agents[0]->login;
}

// 确认邮箱有效再发送
if (!empty($agent_email)) {
    $chat_content = print_r($data->chat, true);
    mail($agent_email, 'Chat transcript', $chat_content);
}

排查之前代码失败的可能原因

你说只能访问到$data->chat层级,大概率是这两个问题:

  • 没有做数组非空判断,当messages或agents为空时,直接取值导致代码报错中断;
  • 极端场景下messages数组里没有agent发送的消息(比如用户发消息后直接结束聊天),导致agent_id取不到。

你可以先通过var_dump($data->chat->agents)或var_dump($data->chat->messages)打印实际数据,确认数组内容是否符合预期。

内容的提问来源于stack exchange,提问作者Hitesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:39:41