From fe73fdd5bd1c556fc5a27b183198e8f7020d1884 Mon Sep 17 00:00:00 2001 From: ZF sun <34314687@qq.com> Date: Sat, 6 Dec 2025 16:37:37 +0800 Subject: [PATCH] =?UTF-8?q?test(addon/aikefu):=20=E8=BF=98=E5=8E=9F?= =?UTF-8?q?=E5=8E=9F=E5=85=88=E7=9A=84kefu.app=20=E6=96=B9=E4=BE=BF?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/api/controller/Kefu.php | 187 ++++++++++++++++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100644 src/app/api/controller/Kefu.php diff --git a/src/app/api/controller/Kefu.php b/src/app/api/controller/Kefu.php new file mode 100644 index 000000000..3b6d17bf3 --- /dev/null +++ b/src/app/api/controller/Kefu.php @@ -0,0 +1,187 @@ +params['message'] ?? ''; + $user_id = $this->params['user_id'] ?? $this->member_id; + $conversation_id = $this->params['conversation_id'] ?? ''; + $stream = $this->params['stream'] ?? false; + + // (可选)获取站点ID和会员ID,可以通过事件数据传递 + $site_id = $this->params['uniacid'] ?? $this->site_id; // 使用 uniacid, 方便以后迁移,而且uniacid 是唯一的, site_id 不是,同时被params给过滤了 + $member_id = $this->params['member_id'] ?? $this->member_id; + $token = $this->params['token'] ?? $this->token; + + // 验证参数 + if (empty($message)) { + return $this->response($this->error('请输入消息内容')); + } + + try { + // 准备事件数据 + $event_data = [ + 'message' => $message, + 'user_id' => $user_id, + 'conversation_id' => $conversation_id, + 'stream' => $stream, + 'site_id' =>$site_id, + 'member_id' => $member_id, + 'token' => $token, + ]; + + // 触发智能客服聊天事件 + $result = Event::trigger('KefuChat', $event_data); + + // 处理事件结果 + $response = [ + 'code' => 0, + 'message' => 'success', + 'data' => [] + ]; + + if (is_array($result) && !empty($result)) { + foreach ($result as $res) { + if (isset($res['code']) && $res['code'] < 0) { + $response = $res; + break; + } + if (isset($res['data'])) { + $response['data'] = array_merge($response['data'], $res['data']); + } + } + } + + return $this->response($response); + } catch (\Exception $e) { + return $this->response($this->error('请求失败:' . $e->getMessage())); + } + } + + /** + * 创建新会话 + * @return \think\response\Json + */ + public function createConversation() + { + // 获取请求参数 + $user_id = $this->params['user_id'] ?? $this->member_id; + + // (可选)获取站点ID和会员ID,可以通过事件数据传递 + $site_id = $this->params['uniacid'] ?? $this->site_id; // 使用 uniacid, 方便以后迁移,而且uniacid 是唯一的, site_id 不是,同时被params给过滤了 + $member_id = $this->params['member_id'] ?? $this->member_id; + $token = $this->params['token'] ?? $this->token; + + try { + // 准备事件数据 + $event_data = [ + 'user_id' => $user_id, + 'site_id' =>$site_id, + 'member_id' => $member_id, + 'token' => $token, + ]; + + // 触发创建会话事件 + $result = Event::trigger('KefuCreateConversation', $event_data); + + // 处理事件结果 + $response = [ + 'code' => 0, + 'message' => 'success', + 'data' => [] + ]; + + if (is_array($result) && !empty($result)) { + foreach ($result as $res) { + if (isset($res['code']) && $res['code'] < 0) { + $response = $res; + break; + } + if (isset($res['data'])) { + $response['data'] = array_merge($response['data'], $res['data']); + } + } + } + + return $this->response($response); + } catch (\Exception $e) { + return $this->response($this->error('请求失败:' . $e->getMessage())); + } + } + + /** + * 获取会话历史 + * @return \think\response\Json + */ + public function getHistory() + { + // 获取请求参数 + $conversation_id = $this->params['conversation_id'] ?? ''; + $user_id = $this->params['user_id'] ?? $this->member_id; + $limit = $this->params['limit'] ?? 20; + $offset = $this->params['offset'] ?? 0; + + // (可选)获取站点ID和会员ID,可以通过事件数据传递 + $site_id = $this->params['uniacid'] ?? $this->site_id; // 使用 uniacid, 方便以后迁移,而且uniacid 是唯一的, site_id 不是,同时被params给过滤了 + $member_id = $this->params['member_id'] ?? $this->member_id; + $token = $this->params['token'] ?? $this->token; + + // 验证参数 + if (empty($conversation_id)) { + return $this->response($this->error('会话ID不能为空')); + } + + try { + // 准备事件数据 + $event_data = [ + 'conversation_id' => $conversation_id, + 'user_id' => $user_id, + 'limit' => $limit, + 'offset' => $offset, + 'site_id' =>$site_id, + 'member_id' => $member_id, + 'token' => $token, + ]; + + // 触发获取历史消息事件 + $result = Event::trigger('KefuGetHistory', $event_data); + + // 处理事件结果 + $response = [ + 'code' => 0, + 'message' => 'success', + 'data' => [] + ]; + + if (is_array($result) && !empty($result)) { + foreach ($result as $res) { + if (isset($res['code']) && $res['code'] < 0) { + $response = $res; + break; + } + if (isset($res['data'])) { + $response['data'] = array_merge($response['data'], $res['data']); + } + } + } + + return $this->response($response); + } catch (\Exception $e) { + return $this->response($this->error('请求失败:' . $e->getMessage())); + } + } +}