diff --git a/app/Http/Controllers/Api/ApproveController.php b/app/Http/Controllers/Api/ApproveController.php index 428c54980..0eb5c0630 100755 --- a/app/Http/Controllers/Api/ApproveController.php +++ b/app/Http/Controllers/Api/ApproveController.php @@ -966,7 +966,6 @@ class ApproveController extends AbstractController return $res; } - // 审批机器人消息 public function approveMsg($type, $dialog, $botUser, $toUser, $process, $action = null) { @@ -986,24 +985,31 @@ class ApproveController extends AbstractController 'comment_content' => $process['comment_contents']['content'] ?? '', 'comment_pictures' => $process['comment_contents']['pictures'] ?? [] ]; - $msg_action = null; - $msg_data = [ + $msgAction = null; + $msgData = [ 'type' => $type, 'action' => $action, 'is_finished' => $process['is_finished'], 'data' => $data ]; + $msgData['desc'] = match ($type) { + 'approve_reviewer' => '待你审批', + 'approve_notifier' => '审批通知', + 'approve_comment_notifier' => '审批评论通知', + 'approve_submitter' => '审批结果', + default => '不支持的指令', + }; if ($action == 'withdraw' || $action == 'pass' || $action == 'refuse') { // 任务完成,给发起人发送消息 if ($type == 'approve_submitter' && $action != 'withdraw') { - return WebSocketDialogMsg::sendMsg($msg_action, $dialog->id, 'template', $msg_data, $botUser->userid, false, false, true); + return WebSocketDialogMsg::sendMsg($msgAction, $dialog->id, 'template', $msgData, $botUser->userid, false, false, true); } // 查找最后一条消息msg_id - $msg_action = 'change-' . $toUser['msg_id']; + $msgAction = 'change-' . $toUser['msg_id']; } // try { - $msg = WebSocketDialogMsg::sendMsg($msg_action, $dialog->id, 'template', $msg_data, $process['start_user_id'], false, false, true); + $msg = WebSocketDialogMsg::sendMsg($msgAction, $dialog->id, 'template', $msgData, $process['start_user_id'], false, false, true); // 关联信息 if ($action == 'start') { $proc_msg = new ApproveProcMsg(); diff --git a/app/Models/UserBot.php b/app/Models/UserBot.php index ad6f40458..b0e1eaefb 100644 --- a/app/Models/UserBot.php +++ b/app/Models/UserBot.php @@ -117,7 +117,7 @@ class UserBot extends AbstractModel 'label' => Doo::translate('帮助指令') ], [ 'key' => '/api', - 'label' => Doo::translate('Api接口文档') + 'label' => Doo::translate('API接口文档') ], [ 'key' => '/list', 'label' => Doo::translate('我的机器人') diff --git a/app/Models/WebSocketDialogMsg.php b/app/Models/WebSocketDialogMsg.php index 0282182b7..2f574b6ef 100644 --- a/app/Models/WebSocketDialogMsg.php +++ b/app/Models/WebSocketDialogMsg.php @@ -591,7 +591,7 @@ class WebSocketDialogMsg extends AbstractModel return $data['msg']['notice']; case 'template': - return $this->previewTemplateMsg($data['msg']); + return Doo::translate($data['msg']['desc'] ?: '未知消息类型'); default: $action = Doo::translate("未知的消息"); @@ -617,55 +617,6 @@ class WebSocketDialogMsg extends AbstractModel return "[{$action}] {$msg['name']}"; } - /** - * 预览模板消息 - * @param $msg - * @return string - */ - private function previewTemplateMsg($msg) - { - switch ($msg['type']) { - case '/help': - return Doo::translate('帮助指令'); - case '/list': - return Doo::translate('我的机器人'); - case '/info': - return Doo::translate('机器人信息'); - case '/newbot': - return Doo::translate('新建机器人'); - case '/setname': - return Doo::translate('设置名称'); - case '/deletebot': - return Doo::translate('删除机器人'); - case '/token': - return Doo::translate('机器人Token'); - case '/revoke': - return Doo::translate('更新Token'); - case '/webhook': - return Doo::translate('设置Webhook'); - case '/clearday': - return Doo::translate('设置保留消息时间'); - case '/dialog': - return Doo::translate('对话列表'); - case '/api': - return Doo::translate('API接口文档'); - - case 'approve_reviewer': - return Doo::translate('待你审批'); - case 'approve_notifier': - return Doo::translate('审批通知'); - case 'approve_comment_notifier': - return Doo::translate('审批评论通知'); - case 'approve_submitter': - return Doo::translate('审批结果'); - - case 'notice': - return $msg['notice']; - default: - return Doo::translate(preg_match("/^\//", $msg['type']) ? '帮助菜单' : '未知消息类型'); - } - } - /** * 生成关键词 * @return string diff --git a/app/Tasks/BotReceiveMsgTask.php b/app/Tasks/BotReceiveMsgTask.php index 156abc394..ad92ee1c1 100644 --- a/app/Tasks/BotReceiveMsgTask.php +++ b/app/Tasks/BotReceiveMsgTask.php @@ -95,14 +95,20 @@ class BotReceiveMsgTask extends AbstractTask if ($botUser->email === 'check-in@bot.system') { $text = UserBot::checkinBotQuickMsg($command, $msg->userid); if ($text) { - WebSocketDialogMsg::sendMsg(null, $msg->dialog_id, 'text', ['text' => $text], $botUser->userid, false, false, true); // todo 未能在任务end事件来发送任务 + WebSocketDialogMsg::sendMsg(null, $msg->dialog_id, 'template', [ + 'type' => 'desc', + 'desc' => $text, + ], $botUser->userid, false, false, true); // todo 未能在任务end事件来发送任务 } } // 隐私机器人 if ($botUser->email === 'anon-msg@bot.system') { $text = UserBot::anonBotQuickMsg($command); if ($text) { - WebSocketDialogMsg::sendMsg(null, $msg->dialog_id, 'text', ['text' => $text], $botUser->userid, false, false, true); // todo 未能在任务end事件来发送任务 + WebSocketDialogMsg::sendMsg(null, $msg->dialog_id, 'template', [ + 'type' => 'desc', + 'desc' => $text, + ], $botUser->userid, false, false, true); // todo 未能在任务end事件来发送任务 } } // 管理机器人 @@ -113,14 +119,17 @@ class BotReceiveMsgTask extends AbstractTask $isManager = false; } else { $text = "非常抱歉,我不是你的机器人,无法完成你的指令。"; - WebSocketDialogMsg::sendMsg(null, $msg->dialog_id, 'text', ['text' => $text], $botUser->userid, false, false, true); // todo 未能在任务end事件来发送任务 + WebSocketDialogMsg::sendMsg(null, $msg->dialog_id, 'template', [ + 'type' => 'desc', + 'desc' => $text, + ], $botUser->userid, false, false, true); // todo 未能在任务end事件来发送任务 return; } // $array = Base::newTrim(explode(" ", "{$command} ")); $type = $array[0]; $data = []; - $notice = ""; + $desc = ""; if (!$isManager && in_array($type, ['/list', '/newbot'])) { return; // 这些操作仅支持【机器人管理】机器人 } @@ -143,20 +152,19 @@ class BotReceiveMsgTask extends AbstractTask ->orderByDesc('id') ->get(); if ($data->isEmpty()) { - $type = "notice"; - $notice = "您没有创建机器人。"; + $desc = "您没有创建机器人。"; } break; /** * 详情 */ + case '/hello': case '/info': $botId = $isManager ? $array[1] : $botUser->userid; $data = $this->botManagerOne($botId, $msg->userid); if (!$data) { - $type = "notice"; - $notice = "机器人不存在。"; + $desc = "机器人不存在。"; } break; @@ -169,27 +177,27 @@ class BotReceiveMsgTask extends AbstractTask ->where('users.bot', 1) ->where('user_bots.userid', $msg->userid) ->count() >= 50) { - $type = "notice"; - $notice = "超过最大创建数量。"; + $desc = "超过最大创建数量。"; break; } if (strlen($array[1]) < 2 || strlen($array[1]) > 20) { - $type = "notice"; - $notice = "机器人名称由2-20个字符组成。"; + $desc = "机器人名称由2-20个字符组成。"; break; } $data = User::botGetOrCreate("user-" . Base::generatePassword(), [ 'nickname' => $array[1] ], $msg->userid); if (empty($data)) { - $type = "notice"; - $notice = "创建失败。"; + $desc = "创建失败。"; break; } $dialog = WebSocketDialog::checkUserDialog($data, $msg->userid); if ($dialog) { - $text = "
您好,我是机器人:{$data->nickname},我的机器人ID是:{$data->userid},
你可以发送 /help 查看我支持什么命令。
"; - WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', ['text' => $text], $data->userid); // todo 未能在任务end事件来发送任务 + WebSocketDialogMsg::sendMsg(null, $dialog->id, 'template', [ + 'type' => '/hello', + 'desc' => '创建成功。', + 'data' => $data, + ], $data->userid); // todo 未能在任务end事件来发送任务 } break; @@ -200,8 +208,7 @@ class BotReceiveMsgTask extends AbstractTask $botId = $isManager ? $array[1] : $botUser->userid; $nameString = $isManager ? $array[2] : $array[1]; if (strlen($nameString) < 2 || strlen($nameString) > 20) { - $type = "notice"; - $notice = "机器人名称由2-20个字符组成。"; + $desc = "机器人名称由2-20个字符组成。"; break; } $data = $this->botManagerOne($botId, $msg->userid); @@ -211,8 +218,7 @@ class BotReceiveMsgTask extends AbstractTask $data->pinyin = Base::cn2pinyin($nameString); $data->save(); } else { - $type = "notice"; - $notice = "机器人不存在。"; + $desc = "机器人不存在。"; } break; @@ -226,8 +232,7 @@ class BotReceiveMsgTask extends AbstractTask if ($data) { $data->deleteUser('delete bot'); } else { - $type = "notice"; - $notice = "机器人不存在。"; + $desc = "机器人不存在。"; } break; @@ -240,8 +245,7 @@ class BotReceiveMsgTask extends AbstractTask if ($data) { User::generateToken($data); } else { - $type = "notice"; - $notice = "机器人不存在。"; + $desc = "机器人不存在。"; } break; @@ -256,8 +260,7 @@ class BotReceiveMsgTask extends AbstractTask $data->password = Doo::md5s(Base::generatePassword(32), $data->encrypt); $data->save(); } else { - $type = "notice"; - $notice = "机器人不存在。"; + $desc = "机器人不存在。"; } break; @@ -278,8 +281,7 @@ class BotReceiveMsgTask extends AbstractTask $data->clear_day = $userBot->clear_day; $data->clear_at = $userBot->clear_at; // 这两个参数只是作为输出,所以不保存 } else { - $type = "notice"; - $notice = "机器人不存在。"; + $desc = "机器人不存在。"; } break; @@ -291,8 +293,7 @@ class BotReceiveMsgTask extends AbstractTask $webhookUrl = $isManager ? $array[2] : $array[1]; $data = $this->botManagerOne($botId, $msg->userid); if (strlen($webhookUrl) > 255) { - $type = "notice"; - $notice = "webhook地址最长仅支持255个字符。"; + $desc = "webhook地址最长仅支持255个字符。"; } elseif ($data) { $userBot = UserBot::whereBotId($botId)->whereUserid($msg->userid)->first(); if ($userBot) { @@ -303,8 +304,7 @@ class BotReceiveMsgTask extends AbstractTask $data->webhook_url = $userBot->webhook_url ?: '-'; $data->webhook_num = $userBot->webhook_num; // 这两个参数只是作为输出,所以不保存 } else { - $type = "notice"; - $notice = "机器人不存在。"; + $desc = "机器人不存在。"; } break; @@ -325,8 +325,7 @@ class BotReceiveMsgTask extends AbstractTask ->take(20) ->get(); if ($list->isEmpty()) { - $type = "notice"; - $notice = "没有搜索到相关会话。"; + $desc = "没有搜索到相关会话。"; } else { $list->transform(function (WebSocketDialog $item) use ($data) { return $item->formatData($data->userid); @@ -334,19 +333,45 @@ class BotReceiveMsgTask extends AbstractTask $data->list = $list; // 这个参数只是作为输出,所以不保存 } } else { - $type = "notice"; - $notice = "机器人不存在。"; + $desc = "机器人不存在。"; } break; } // - WebSocketDialogMsg::sendMsg(null, $msg->dialog_id, 'template', [ - 'type' => $type, - 'data' => $data, - 'notice' => $notice, - 'manager' => $isManager, - 'version' => Base::getVersion() - ], $botUser->userid, false, false, true); // todo 未能在任务end事件来发送任务 + + if ($desc) { + $msgData = [ + 'type' => 'desc', + 'desc' => $desc, + ]; + } else { + $msgData = [ + 'type' => $type, + 'data' => $data, + ]; + $msgData['desc'] = match ($type) { + '/hello' => '您好', + '/help' => '帮助指令', + '/list' => '我的机器人', + '/info' => '机器人信息', + '/newbot' => '新建机器人', + '/setname' => '设置名称', + '/deletebot' => '删除机器人', + '/token' => '机器人Token', + '/revoke' => '更新Token', + '/webhook' => '设置Webhook', + '/clearday' => '设置保留消息时间', + '/dialog' => '对话列表', + '/api' => 'API接口文档', + default => '不支持的指令', + }; + if ($type == '/api') { + $msgData['version'] = Base::getVersion(); + } elseif ($type == '/help') { + $msgData['manager'] = $isManager; + } + } + WebSocketDialogMsg::sendMsg(null, $msg->dialog_id, 'template', $msgData, $botUser->userid, false, false, true); // todo 未能在任务end事件来发送任务 } } @@ -363,7 +388,7 @@ class BotReceiveMsgTask extends AbstractTask $serverUrl = 'http://' . env('APP_IPPR') . '.3'; $userBot = null; $extras = []; - $error = null; + $errorDesc = null; switch ($botUser->email) { // ChatGPT 机器人 case 'ai-openai@bot.system': @@ -377,10 +402,10 @@ class BotReceiveMsgTask extends AbstractTask 'chunk_size' => 7, ]; if (empty($extras['openai_key'])) { - $error = 'Robot disabled.'; + $errorDesc = '机器人未启用。'; } elseif (in_array($this->client['platform'], ['win', 'mac', 'web']) && !Base::judgeClientVersion("0.29.11", $this->client['version'])) { - $error = 'The client version is low (required version ≥ v0.29.11).'; + $errorDesc = '当前客户端版本低(所需版本≥v0.29.11)。'; } break; // Claude 机器人 @@ -393,10 +418,10 @@ class BotReceiveMsgTask extends AbstractTask 'server_url' => $serverUrl, ]; if (empty($extras['claude_token'])) { - $error = 'Robot disabled.'; + $errorDesc = '机器人未启用。'; } elseif (in_array($this->client['platform'], ['win', 'mac', 'web']) && !Base::judgeClientVersion("0.29.11", $this->client['version'])) { - $error = 'The client version is low (required version ≥ v0.29.11).'; + $errorDesc = '当前客户端版本低(所需版本≥v0.29.11)。'; } break; // Wenxin 机器人 @@ -410,10 +435,10 @@ class BotReceiveMsgTask extends AbstractTask 'server_url' => $serverUrl, ]; if (empty($extras['wenxin_key'])) { - $error = 'Robot disabled.'; + $errorDesc = '机器人未启用。'; } elseif (in_array($this->client['platform'], ['win', 'mac', 'web']) && !Base::judgeClientVersion("0.29.11", $this->client['version'])) { - $error = 'The client version is low (required version ≥ v0.29.12).'; + $errorDesc = '当前客户端版本低(所需版本≥v0.29.12)。'; } break; // QianWen 机器人 @@ -426,10 +451,10 @@ class BotReceiveMsgTask extends AbstractTask 'server_url' => $serverUrl, ]; if (empty($extras['qianwen_key'])) { - $error = 'Robot disabled.'; + $errorDesc = '机器人未启用。'; } elseif (in_array($this->client['platform'], ['win', 'mac', 'web']) && !Base::judgeClientVersion("0.29.11", $this->client['version'])) { - $error = 'The client version is low (required version ≥ v0.29.12).'; + $errorDesc = '当前客户端版本低(所需版本≥v0.29.12)。'; } break; // Gemini 机器人 @@ -444,10 +469,10 @@ class BotReceiveMsgTask extends AbstractTask 'server_url' => $serverUrl, ]; if (empty($extras['gemini_key'])) { - $error = 'Robot disabled.'; + $errorDesc = '机器人未启用。'; } elseif (in_array($this->client['platform'], ['win', 'mac', 'web']) && !Base::judgeClientVersion("0.29.11", $this->client['version'])) { - $error = 'The client version is low (required version ≥ v0.29.12).'; + $errorDesc = '当前客户端版本低(所需版本≥v0.29.12)。'; } break; // 智谱清言 机器人 @@ -460,10 +485,10 @@ class BotReceiveMsgTask extends AbstractTask 'server_url' => $serverUrl, ]; if (empty($extras['zhipu_key'])) { - $error = 'Robot disabled.'; + $errorDesc = '机器人未启用。'; } elseif (in_array($this->client['platform'], ['win', 'mac', 'web']) && !Base::judgeClientVersion("0.29.11", $this->client['version'])) { - $error = 'The client version is low (required version ≥ v0.29.12).'; + $errorDesc = '当前客户端版本低(所需版本≥v0.29.12)。'; } break; // 其他机器人 @@ -472,8 +497,11 @@ class BotReceiveMsgTask extends AbstractTask $webhookUrl = $userBot?->webhook_url; break; } - if ($error) { - WebSocketDialogMsg::sendMsg(null, $msg->dialog_id, 'text', ['text' => $error], $botUser->userid, false, false, true); // todo 未能在任务end事件来发送任务 + if ($errorDesc) { + WebSocketDialogMsg::sendMsg(null, $msg->dialog_id, 'template', [ + 'type' => 'desc', + 'desc' => $errorDesc, + ], $botUser->userid, false, false, true); // todo 未能在任务end事件来发送任务 return; } if (!preg_match("/^https*:\/\//", $webhookUrl)) { @@ -498,13 +526,13 @@ class BotReceiveMsgTask extends AbstractTask $userBot->webhook_num++; $userBot->save(); } - if($res['data'] && $data = json_decode($res['data'])){ - if($data['code'] != 200 && $data['message']){ + if ($res['data'] && $data = json_decode($res['data'])) { + if ($data['code'] != 200 && $data['message']) { WebSocketDialogMsg::sendMsg(null, $msg->dialog_id, 'text', ['text' => $res['data']['message']], $botUser->userid, false, false, true); } } } catch (\Throwable $th) { - //throw $th; + info($th->getMessage()); } } diff --git a/app/Tasks/UnclaimedTaskRemindTask.php b/app/Tasks/UnclaimedTaskRemindTask.php index 4f88c70a3..954a96a18 100644 --- a/app/Tasks/UnclaimedTaskRemindTask.php +++ b/app/Tasks/UnclaimedTaskRemindTask.php @@ -47,7 +47,7 @@ class UnclaimedTaskRemindTask extends AbstractTask Project::whereNull('deleted_at')->whereNull('archived_at')->chunk(100, function ($projects) { foreach ($projects as $project) { // - $projectTasks = ProjectTask::select('project_tasks.id', 'project_tasks.name') + $projectTasks = ProjectTask::select(['project_tasks.id', 'project_tasks.name']) ->leftJoin('project_task_users', function ($query) { $query->on('project_tasks.id', '=', 'project_task_users.task_id'); }) @@ -68,12 +68,15 @@ class UnclaimedTaskRemindTask extends AbstractTask $project->syncDialogUser(); } // - $taskHtml = '任务待领取发送文本消息:
curl --request POST '{{ $A.apiUrl('dialog/msg/sendtext') }}' \
---header 'version: {{ $version }}' \
+--header 'version: {{ msg.version }}' \
--header 'token: {机器人Token}' \
--form 'dialog_id="{对话ID}"' \
--form 'text="{消息内容}"'
diff --git a/resources/assets/js/pages/manage/components/DialogView/template/bot-hello.vue b/resources/assets/js/pages/manage/components/DialogView/template/bot-hello.vue new file mode 100644 index 000000000..455bcc779 --- /dev/null +++ b/resources/assets/js/pages/manage/components/DialogView/template/bot-hello.vue @@ -0,0 +1,18 @@ + +/setname{{IDLabel}} {机器人名称} - 修改机器人名称
/deletebot{{IDLabel}} - 删除机器人
/clearday{{IDLabel}} {天数} - 设置保留消息时间(默认30天)
-/webhook{{IDLabel}} [url] - 设置消息Webhook(详情请看 Api接口文档)
+/webhook{{IDLabel}} [url] - 设置消息Webhook(详情请看 API接口文档)
机器人设置
@@ -28,7 +28,7 @@/dialog{{IDLabel}} [搜索关键词] - 查看会话ID
-
Api接口文档
+API接口文档
/api - 查看接口列表
diff --git a/resources/assets/js/pages/manage/components/DialogView/template/notice.vue b/resources/assets/js/pages/manage/components/DialogView/template/desc.vue similarity index 88% rename from resources/assets/js/pages/manage/components/DialogView/template/notice.vue rename to resources/assets/js/pages/manage/components/DialogView/template/desc.vue index 5b2dffff2..ad68cb4f2 100644 --- a/resources/assets/js/pages/manage/components/DialogView/template/notice.vue +++ b/resources/assets/js/pages/manage/components/DialogView/template/desc.vue @@ -1,6 +1,6 @@