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
相关产品推荐
相关产品推荐

