fix: harden identity, live access, drafts and setup (review only)
Source-reviewed hardening changes and regression tests. UNBUILT / UNTESTED: not a deployable release. Go formatting, compilation, automated regression tests, full frontend validation and staging acceptance remain required. See docs/hardening/VALIDATION.md. Main remains the original clean snapshot; no upstream Git history imported.
This commit is contained in:
@@ -583,7 +583,12 @@
|
||||
"startFirstRequest": "Start your first request",
|
||||
"openRequestCount": "{open} open of {total}",
|
||||
"loadConversationsFailed": "Could not load your requests",
|
||||
"createConversationFailed": "Could not create the request"
|
||||
"createConversationFailed": "Could not create the request",
|
||||
"dismissedTitle": "Chat window closed",
|
||||
"dismissedDescription": "Your support request has not been ended. You can return to continue the conversation.",
|
||||
"returnToChat": "Return to chat",
|
||||
"sendUnavailable": "This conversation is unavailable. Return to it or retry before sending.",
|
||||
"sendInProgress": "A message is already being sent."
|
||||
},
|
||||
"dashboardHome": {
|
||||
"rangeToday": "Today",
|
||||
@@ -3370,8 +3375,8 @@
|
||||
"statusReady": "Ready to Receive Requests",
|
||||
"statusNeedsSetup": "Setup Incomplete ({ready}/{total} steps ready)",
|
||||
"stepsProgress": "{ready} of {total} steps ready",
|
||||
"quickSetupAll": "Configure Everything in 1 Click",
|
||||
"quickSetupRunning": "Applying setup...",
|
||||
"quickSetupAll": "Review missing defaults",
|
||||
"quickSetupRunning": "Preparing preview...",
|
||||
"quickFixSuccess": "Configuration updated and routing re-checked",
|
||||
"refresh": "Re-check Readiness",
|
||||
"openSettings": "Open Settings",
|
||||
@@ -3433,7 +3438,9 @@
|
||||
"channel_no_agent": "Channel is not connected to an AI agent.",
|
||||
"channel_agent_disabled": "Channel points to a disabled or missing AI agent.",
|
||||
"channel_zero_rollout": "Channel has a 0% AI agent rollout rate.",
|
||||
"no_end_to_end_path": "No channel can successfully route to an available human operator right now."
|
||||
"no_end_to_end_path": "No channel can successfully route to an available human operator right now.",
|
||||
"agent_unpublished": "The agent has no published revision. Publish it in agent settings before using it for a channel.",
|
||||
"channel_agent_unpublished": "The channel points to an unpublished agent. Publish the agent or deliberately choose a published one."
|
||||
},
|
||||
"operatorBlockers": {
|
||||
"not_authenticated": "You are not signed in.",
|
||||
@@ -3446,22 +3453,22 @@
|
||||
"at_capacity": "You have reached your maximum active conversation limit."
|
||||
},
|
||||
"quickFixLabels": {
|
||||
"quick_setup_all": "Configure Everything in 1 Click",
|
||||
"ensure_team_and_schedule": "Create/Enable Team & 24/7 Schedule",
|
||||
"quick_setup_all": "Review missing defaults",
|
||||
"ensure_team_and_schedule": "Review team setup",
|
||||
"enable_my_operator_profile": "Enable My Reception & Set Idle",
|
||||
"fix_ai_agent_handoff": "Fix AI Agent Handoff & Bind Teams",
|
||||
"ensure_default_channel": "Create/Fix Default Web Channel"
|
||||
},
|
||||
"simulator": {
|
||||
"title": "Operator Route Simulator",
|
||||
"description": "Simulate what happens when a customer sends a message on a channel and see every decision hop in real time.",
|
||||
"description": "Read-only check of current human-only routing eligibility. AI behavior and partial rollout are not simulated, and no message is sent.",
|
||||
"selectChannelPlaceholder": "Select a channel to simulate...",
|
||||
"runSimulation": "Simulate Dispatch",
|
||||
"running": "Simulating...",
|
||||
"outcomeSuccess": "Request WILL reach operator: {operator}",
|
||||
"outcomeBlocked": "Request WILL NOT reach an operator",
|
||||
"outcomeSuccess": "Eligible operator now: {operator}",
|
||||
"outcomeBlocked": "Operator delivery not confirmed",
|
||||
"outcomes": {
|
||||
"assigned_to_operator": "Success: The conversation is assigned to an idle operator.",
|
||||
"assigned_to_operator": "Human-only routing currently has an eligible operator. This is a read-only check, not a delivery guarantee.",
|
||||
"blocked_no_channel": "Blocked: No channels exist or the requested channel was not found.",
|
||||
"blocked_channel_disabled": "Blocked: This channel is disabled.",
|
||||
"blocked_zero_rollout": "Blocked: Channel AI agent rollout rate is set to 0%.",
|
||||
@@ -3469,7 +3476,10 @@
|
||||
"blocked_ai_only_mode": "Blocked: AI agent is set to AI-Only mode and never hands off to human operators.",
|
||||
"blocked_agent_no_teams": "Blocked: AI agent has no valid operator teams assigned for handoff.",
|
||||
"queued_off_hours_no_schedule": "Queued: Target teams have no active shift schedule right now (Off-Hours).",
|
||||
"queued_no_eligible_operator": "Queued: Shift is active, but no idle operators with available capacity are online."
|
||||
"queued_no_eligible_operator": "Queued: Shift is active, but no idle operators with available capacity are online.",
|
||||
"ai_execution_not_simulated": "AI behavior is not simulated; operator delivery is unverified.",
|
||||
"partial_rollout_not_simulated": "Partial rollout is not simulated; operator delivery is unverified.",
|
||||
"blocked_agent_unpublished": "Operator routing is not verified for an unpublished agent. Publish the agent first."
|
||||
},
|
||||
"hops": {
|
||||
"channel": "Channel",
|
||||
@@ -3491,7 +3501,10 @@
|
||||
"blocked_agent_no_teams": "No active teams assigned to this agent",
|
||||
"queued_off_hours_no_schedule": "No active shift schedule covers the current time (Off-Hours)",
|
||||
"queued_no_eligible_operator": "No idle operators with available capacity in active teams",
|
||||
"assigned_to_operator": "Assigned to eligible operator"
|
||||
"assigned_to_operator": "Assigned to eligible operator",
|
||||
"ai_execution_not_simulated": "AI behavior is not simulated; operator delivery is unverified.",
|
||||
"partial_rollout_not_simulated": "Partial rollout is not simulated; operator delivery is unverified.",
|
||||
"blocked_agent_unpublished": "Operator routing is not verified for an unpublished agent. Publish the agent first."
|
||||
},
|
||||
"candidateTableTitle": "Evaluated Operator Candidates",
|
||||
"colOperator": "Operator",
|
||||
@@ -3520,6 +3533,53 @@
|
||||
"headerIndicator": {
|
||||
"readyLabel": "Ready for Chats",
|
||||
"blockedLabel": "Routing Blocked ({count})"
|
||||
},
|
||||
"preview": {
|
||||
"review": "Review setup changes",
|
||||
"title": "Review exact changes before applying",
|
||||
"description": "Only the named records and fields below will change. No shifts are added. Unlisted configurations and rollout percentages remain unchanged. Applying may dispatch pending conversations after the changes commit.",
|
||||
"noChanges": "No safe automatic changes are available. Use the relevant settings to choose a team, route or working hours.",
|
||||
"apply": "Apply reviewed changes",
|
||||
"create": "Create",
|
||||
"update": "Update",
|
||||
"notApplied": "The reviewed changes were not applied.",
|
||||
"manageSchedules": "Manage explicit working hours"
|
||||
},
|
||||
"repairFields": {
|
||||
"name": "Name",
|
||||
"leader_user_id": "Team leader ID",
|
||||
"status": "Enabled status (0 enabled, 1 disabled)",
|
||||
"user_id": "User ID",
|
||||
"team_id": "Team ID / new team name",
|
||||
"team_ids": "Routing teams",
|
||||
"service_status": "Availability (0 idle, 1 busy)",
|
||||
"auto_assign_enabled": "Automatic assignment",
|
||||
"max_concurrent_count": "Concurrent conversation limit",
|
||||
"priority_level": "Assignment priority",
|
||||
"receive_offline_message": "Receive offline messages",
|
||||
"service_mode": "Service mode (1 AI only, 2 human only, 3 AI first)",
|
||||
"rollout_percent": "Agent rollout (%)",
|
||||
"handoff_mode": "Handoff mode (2 team queue)",
|
||||
"fallback_mode": "Fallback mode",
|
||||
"auto_handoff_on_failure": "Automatic handoff on failure",
|
||||
"reply_timeout_seconds": "Reply timeout (seconds)",
|
||||
"max_steps": "Maximum AI steps",
|
||||
"channel_id": "Channel identifier",
|
||||
"channel_type": "Channel type",
|
||||
"ai_agent_id": "Agent ID / new agent name",
|
||||
"ai_agent_rollout_percent": "Channel rollout (%)",
|
||||
"config_json": "Channel configuration"
|
||||
},
|
||||
"repairWarnings": {
|
||||
"schedules_unchanged": "Working hours were not changed. Configure shifts explicitly; being off duty is not a setup error.",
|
||||
"active_team_required": "Select or enable a team in team settings before linking new records.",
|
||||
"disabled_configuration_preserved": "The selected configuration is disabled or has zero rollout and was left unchanged.",
|
||||
"agent_team_selection_required": "Choose the agent’s intended teams in agent settings; no teams were added automatically.",
|
||||
"channel_selection_required": "Choose the intended agent and rollout in channel settings. Existing channel routing was preserved.",
|
||||
"existing_configuration_preserved": "Existing configuration was preserved. Review any remaining readiness issues in the relevant settings.",
|
||||
"dispatch_failed": "Changes were saved, but pending conversation dispatch failed. Review the queue; do not reapply the repair.",
|
||||
"readiness_refresh_failed": "The readiness refresh failed. Reload diagnostics to see the current state; committed changes are not rolled back.",
|
||||
"agent_publication_required": "Publish the intended agent in agent settings before creating a channel. Setup does not publish agents or bypass the publication requirement."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
2
web/messages/en-US.json.license
Normal file
2
web/messages/en-US.json.license
Normal file
@@ -0,0 +1,2 @@
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
SPDX-FileComment: Modified in the independent hardening fork. See docs/hardening/README.md and MODIFIED_FILES.md for source attribution and change notes.
|
||||
@@ -583,7 +583,12 @@
|
||||
"startFirstRequest": "Создайте первое обращение",
|
||||
"openRequestCount": "Открыто {open} из {total}",
|
||||
"loadConversationsFailed": "Не удалось загрузить список обращений",
|
||||
"createConversationFailed": "Не удалось создать обращение"
|
||||
"createConversationFailed": "Не удалось создать обращение",
|
||||
"dismissedTitle": "Окно чата закрыто",
|
||||
"dismissedDescription": "Ваше обращение не завершено. Вы можете вернуться и продолжить разговор.",
|
||||
"returnToChat": "Вернуться в чат",
|
||||
"sendUnavailable": "Диалог недоступен. Вернитесь к нему или повторите попытку перед отправкой.",
|
||||
"sendInProgress": "Сообщение уже отправляется."
|
||||
},
|
||||
"dashboardHome": {
|
||||
"rangeToday": "Сегодня",
|
||||
@@ -3370,8 +3375,8 @@
|
||||
"statusReady": "Готово к приёму обращений",
|
||||
"statusNeedsSetup": "Требуется настройка (готово {ready} из {total} шагов)",
|
||||
"stepsProgress": "Готово {ready} из {total} шагов",
|
||||
"quickSetupAll": "Настроить всё в 1 клик",
|
||||
"quickSetupRunning": "Применение настроек...",
|
||||
"quickSetupAll": "Проверить недостающие настройки",
|
||||
"quickSetupRunning": "Подготовка плана...",
|
||||
"quickFixSuccess": "Настройки применены, проверка маршрутизации обновлена",
|
||||
"refresh": "Проверить снова",
|
||||
"openSettings": "Открыть настройки",
|
||||
@@ -3433,7 +3438,9 @@
|
||||
"channel_no_agent": "Канал не подключен к AI-агенту.",
|
||||
"channel_agent_disabled": "Канал указывает на отключенного или удаленного AI-агента.",
|
||||
"channel_zero_rollout": "У канала охват AI-агента равен 0%.",
|
||||
"no_end_to_end_path": "Ни один канал не может доставить запрос до доступного оператора прямо сейчас."
|
||||
"no_end_to_end_path": "Ни один канал не может доставить запрос до доступного оператора прямо сейчас.",
|
||||
"agent_unpublished": "У агента нет опубликованной версии. Опубликуйте его в настройках перед использованием в канале.",
|
||||
"channel_agent_unpublished": "Канал связан с неопубликованным агентом. Опубликуйте его или выберите опубликованного агента."
|
||||
},
|
||||
"operatorBlockers": {
|
||||
"not_authenticated": "Вы не вошли в систему.",
|
||||
@@ -3446,22 +3453,22 @@
|
||||
"at_capacity": "Вы достигли лимита одновременных диалогов."
|
||||
},
|
||||
"quickFixLabels": {
|
||||
"quick_setup_all": "Настроить всё в 1 клик",
|
||||
"ensure_team_and_schedule": "Создать/включить команду и расписание 24/7",
|
||||
"quick_setup_all": "Проверить недостающие настройки",
|
||||
"ensure_team_and_schedule": "Проверить настройку группы",
|
||||
"enable_my_operator_profile": "Включить мой приём и статус «Свободен»",
|
||||
"fix_ai_agent_handoff": "Настроить передачу оператору и привязать команды",
|
||||
"ensure_default_channel": "Создать/исправить веб-канал по умолчанию"
|
||||
},
|
||||
"simulator": {
|
||||
"title": "Симулятор маршрутизации к оператору",
|
||||
"description": "Протестируйте путь входящего сообщения клиента через канал и узнайте результат на каждом узле маршрутизации.",
|
||||
"description": "Проверка текущей доступности маршрута только с оператором без изменений. Поведение ИИ и частичный запуск не моделируются; сообщения не отправляются.",
|
||||
"selectChannelPlaceholder": "Выберите канал для симуляции...",
|
||||
"runSimulation": "Запустить симуляцию",
|
||||
"running": "Симуляция...",
|
||||
"outcomeSuccess": "Запрос ДОЙДЁТ до оператора: {operator}",
|
||||
"outcomeBlocked": "Запрос НЕ ДОЙДЁТ до оператора",
|
||||
"outcomeSuccess": "Сейчас доступен оператор: {operator}",
|
||||
"outcomeBlocked": "Передача оператору не подтверждена",
|
||||
"outcomes": {
|
||||
"assigned_to_operator": "Успех: обращение назначено свободному оператору.",
|
||||
"assigned_to_operator": "Для маршрута только с оператором сейчас есть подходящий сотрудник. Это проверка без изменений, не гарантия доставки.",
|
||||
"blocked_no_channel": "Заблокировано: каналы не созданы или запрошенный канал не найден.",
|
||||
"blocked_channel_disabled": "Заблокировано: данный канал отключен.",
|
||||
"blocked_zero_rollout": "Заблокировано: охват AI-агента в канале равен 0%.",
|
||||
@@ -3469,7 +3476,10 @@
|
||||
"blocked_ai_only_mode": "Заблокировано: AI-агент работает в режиме «Только ИИ» и не переключает на человека.",
|
||||
"blocked_agent_no_teams": "Заблокировано: у AI-агента не указаны активные команды для перевода.",
|
||||
"queued_off_hours_no_schedule": "В очереди: у команд сейчас нет активного расписания смен (нерабочие часы).",
|
||||
"queued_no_eligible_operator": "В очереди: смена активна, но нет свободных операторов с доступной емкостью."
|
||||
"queued_no_eligible_operator": "В очереди: смена активна, но нет свободных операторов с доступной емкостью.",
|
||||
"ai_execution_not_simulated": "Поведение ИИ не моделируется; передача оператору не подтверждена.",
|
||||
"partial_rollout_not_simulated": "Частичный запуск не моделируется; передача оператору не подтверждена.",
|
||||
"blocked_agent_unpublished": "Маршрутизация к оператору не подтверждена для неопубликованного агента. Сначала опубликуйте его."
|
||||
},
|
||||
"hops": {
|
||||
"channel": "Канал",
|
||||
@@ -3491,7 +3501,10 @@
|
||||
"blocked_agent_no_teams": "Агенту не назначены активные команды",
|
||||
"queued_off_hours_no_schedule": "Нет активного расписания на текущее время (нерабочие часы)",
|
||||
"queued_no_eligible_operator": "В активных командах нет свободных операторов с доступной емкостью",
|
||||
"assigned_to_operator": "Назначено подходящему оператору"
|
||||
"assigned_to_operator": "Назначено подходящему оператору",
|
||||
"ai_execution_not_simulated": "Поведение ИИ не моделируется; передача оператору не подтверждена.",
|
||||
"partial_rollout_not_simulated": "Частичный запуск не моделируется; передача оператору не подтверждена.",
|
||||
"blocked_agent_unpublished": "Маршрутизация к оператору не подтверждена для неопубликованного агента. Сначала опубликуйте его."
|
||||
},
|
||||
"candidateTableTitle": "Оценка кандидатов-операторов",
|
||||
"colOperator": "Оператор",
|
||||
@@ -3520,6 +3533,53 @@
|
||||
"headerIndicator": {
|
||||
"readyLabel": "Приём включен",
|
||||
"blockedLabel": "Приём заблокирован ({count})"
|
||||
},
|
||||
"preview": {
|
||||
"review": "Просмотреть изменения",
|
||||
"title": "Проверка изменений перед применением",
|
||||
"description": "Изменятся только указанные записи и поля. Смены не добавляются. Остальные настройки и доли запуска сохранятся. После сохранения ожидающие диалоги могут быть распределены.",
|
||||
"noChanges": "Безопасных автоматических изменений нет. Выберите группу, маршрут или рабочие часы в соответствующих настройках.",
|
||||
"apply": "Применить проверенные изменения",
|
||||
"create": "Создать",
|
||||
"update": "Изменить",
|
||||
"notApplied": "Проверенные изменения не были применены.",
|
||||
"manageSchedules": "Настроить рабочие часы"
|
||||
},
|
||||
"repairFields": {
|
||||
"name": "Название",
|
||||
"leader_user_id": "ID руководителя группы",
|
||||
"status": "Статус (0 включён, 1 отключён)",
|
||||
"user_id": "ID пользователя",
|
||||
"team_id": "ID группы / название новой группы",
|
||||
"team_ids": "Группы маршрутизации",
|
||||
"service_status": "Доступность (0 свободен, 1 занят)",
|
||||
"auto_assign_enabled": "Автоматическое назначение",
|
||||
"max_concurrent_count": "Лимит одновременных диалогов",
|
||||
"priority_level": "Приоритет назначения",
|
||||
"receive_offline_message": "Принимать сообщения офлайн",
|
||||
"service_mode": "Режим (1 только ИИ, 2 только оператор, 3 сначала ИИ)",
|
||||
"rollout_percent": "Доля запуска агента (%)",
|
||||
"handoff_mode": "Режим передачи (2 очередь группы)",
|
||||
"fallback_mode": "Резервный режим",
|
||||
"auto_handoff_on_failure": "Передавать оператору при сбое",
|
||||
"reply_timeout_seconds": "Тайм-аут ответа (сек.)",
|
||||
"max_steps": "Максимум шагов ИИ",
|
||||
"channel_id": "Идентификатор канала",
|
||||
"channel_type": "Тип канала",
|
||||
"ai_agent_id": "ID агента / название нового агента",
|
||||
"ai_agent_rollout_percent": "Доля запуска канала (%)",
|
||||
"config_json": "Настройки канала"
|
||||
},
|
||||
"repairWarnings": {
|
||||
"schedules_unchanged": "Рабочие часы не изменены. Настройте смены явно: время вне смены не является ошибкой настройки.",
|
||||
"active_team_required": "Выберите или включите группу в настройках перед связыванием новых записей.",
|
||||
"disabled_configuration_preserved": "Выбранная конфигурация отключена или имеет нулевую долю запуска и оставлена без изменений.",
|
||||
"agent_team_selection_required": "Выберите нужные группы в настройках агента. Группы не добавлялись автоматически.",
|
||||
"channel_selection_required": "Выберите агента и долю запуска в настройках канала. Существующая маршрутизация сохранена.",
|
||||
"existing_configuration_preserved": "Существующие настройки сохранены. Проверьте оставшиеся проблемы готовности в соответствующих настройках.",
|
||||
"dispatch_failed": "Изменения сохранены, но распределение ожидающих диалогов не удалось. Проверьте очередь, не применяйте исправление повторно.",
|
||||
"readiness_refresh_failed": "Не удалось обновить диагностику. Загрузите её снова: сохранённые изменения не отменены.",
|
||||
"agent_publication_required": "Опубликуйте нужного агента в его настройках перед созданием канала. Мастер не публикует агентов и не обходит это требование."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
2
web/messages/ru-RU.json.license
Normal file
2
web/messages/ru-RU.json.license
Normal file
@@ -0,0 +1,2 @@
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
SPDX-FileComment: Modified in the independent hardening fork. See docs/hardening/README.md and MODIFIED_FILES.md for source attribution and change notes.
|
||||
@@ -583,7 +583,12 @@
|
||||
"startFirstRequest": "开始第一个请求",
|
||||
"openRequestCount": "进行中 {open} / 共 {total}",
|
||||
"loadConversationsFailed": "加载请求列表失败",
|
||||
"createConversationFailed": "创建请求失败"
|
||||
"createConversationFailed": "创建请求失败",
|
||||
"dismissedTitle": "聊天窗口已关闭",
|
||||
"dismissedDescription": "您的支持请求尚未结束,您可以返回继续对话。",
|
||||
"returnToChat": "返回聊天",
|
||||
"sendUnavailable": "当前对话不可用,请返回对话或重试后再发送。",
|
||||
"sendInProgress": "正在发送消息,请稍候。"
|
||||
},
|
||||
"dashboardHome": {
|
||||
"rangeToday": "今天",
|
||||
@@ -3370,8 +3375,8 @@
|
||||
"statusReady": "已就绪,可正常接待请求",
|
||||
"statusNeedsSetup": "配置未就绪(已完成 {ready}/{total} 步)",
|
||||
"stepsProgress": "已就绪 {ready} / {total} 步",
|
||||
"quickSetupAll": "一键完成全部基础配置",
|
||||
"quickSetupRunning": "正在应用配置...",
|
||||
"quickSetupAll": "预览缺失的默认配置",
|
||||
"quickSetupRunning": "正在准备预览…",
|
||||
"quickFixSuccess": "配置已自动修复并重新检测",
|
||||
"refresh": "重新检测",
|
||||
"openSettings": "前往设置",
|
||||
@@ -3433,7 +3438,9 @@
|
||||
"channel_no_agent": "接入渠道未关联 AI 智能体。",
|
||||
"channel_agent_disabled": "接入渠道关联的 AI 智能体已被禁用或不存在。",
|
||||
"channel_zero_rollout": "接入渠道的 AI 智能体分流比例为 0%。",
|
||||
"no_end_to_end_path": "当前没有任何渠道能成功连通到空闲可用的人工坐席。"
|
||||
"no_end_to_end_path": "当前没有任何渠道能成功连通到空闲可用的人工坐席。",
|
||||
"agent_unpublished": "Agent 尚无已发布版本,请先在 Agent 设置中发布后再用于渠道。",
|
||||
"channel_agent_unpublished": "渠道指向未发布的 Agent。请发布该 Agent,或明确选择已发布的 Agent。"
|
||||
},
|
||||
"operatorBlockers": {
|
||||
"not_authenticated": "您尚未登录系统。",
|
||||
@@ -3446,22 +3453,22 @@
|
||||
"at_capacity": "您的当前接待会话量已达上限。"
|
||||
},
|
||||
"quickFixLabels": {
|
||||
"quick_setup_all": "一键完成全部基础配置",
|
||||
"ensure_team_and_schedule": "创建/启用客服组及 24/7 排班",
|
||||
"quick_setup_all": "预览缺失的默认配置",
|
||||
"ensure_team_and_schedule": "预览客服组设置",
|
||||
"enable_my_operator_profile": "启用我的坐席并设为空闲",
|
||||
"fix_ai_agent_handoff": "修复 AI 转人工模式并绑定客服组",
|
||||
"ensure_default_channel": "创建/修复默认 Web 渠道"
|
||||
},
|
||||
"simulator": {
|
||||
"title": "人工坐席路由模拟器",
|
||||
"description": "模拟客户通过指定渠道进线后的完整路由流转过程,逐级查看每个节点的调度决策。",
|
||||
"description": "只读检查当前仅人工路由的接待条件。不模拟 AI 行为或部分灰度,不会发送消息。",
|
||||
"selectChannelPlaceholder": "选择要模拟的渠道...",
|
||||
"runSimulation": "开始模拟分发",
|
||||
"running": "正在模拟...",
|
||||
"outcomeSuccess": "请求将成功分配给坐席:{operator}",
|
||||
"outcomeBlocked": "请求无法到达人工坐席",
|
||||
"outcomeSuccess": "当前符合条件的客服:{operator}",
|
||||
"outcomeBlocked": "未确认可送达人工客服",
|
||||
"outcomes": {
|
||||
"assigned_to_operator": "成功:会话将分配给处于空闲状态的就绪坐席。",
|
||||
"assigned_to_operator": "仅人工路由当前有符合条件的客服。这是只读检查,不保证实际送达。",
|
||||
"blocked_no_channel": "受阻:系统中没有可用渠道或指定的渠道不存在。",
|
||||
"blocked_channel_disabled": "受阻:该接入渠道已被禁用。",
|
||||
"blocked_zero_rollout": "受阻:该渠道的 AI 智能体分流比例为 0%。",
|
||||
@@ -3469,7 +3476,10 @@
|
||||
"blocked_ai_only_mode": "受阻:AI 智能体为纯 AI 模式,禁止转接人工。",
|
||||
"blocked_agent_no_teams": "受阻:AI 智能体未配置有效的转接客服组。",
|
||||
"queued_off_hours_no_schedule": "排队中:目标客服组当前无生效排班(非工作时间)。",
|
||||
"queued_no_eligible_operator": "排队中:当前处于工作排班内,但暂无可接待空闲坐席。"
|
||||
"queued_no_eligible_operator": "排队中:当前处于工作排班内,但暂无可接待空闲坐席。",
|
||||
"ai_execution_not_simulated": "未模拟 AI 行为,无法确认是否到达人工客服。",
|
||||
"partial_rollout_not_simulated": "未模拟部分灰度,无法确认是否到达人工客服。",
|
||||
"blocked_agent_unpublished": "未确认未发布 Agent 的人工路由,请先发布 Agent。"
|
||||
},
|
||||
"hops": {
|
||||
"channel": "接入渠道",
|
||||
@@ -3491,7 +3501,10 @@
|
||||
"blocked_agent_no_teams": "AI 智能体未关联有效客服组",
|
||||
"queued_off_hours_no_schedule": "当前时刻无生效中的工作排班(非工作时段)",
|
||||
"queued_no_eligible_operator": "当前客服组内暂无空闲且容量充足的坐席",
|
||||
"assigned_to_operator": "成功分配给符合条件的坐席"
|
||||
"assigned_to_operator": "成功分配给符合条件的坐席",
|
||||
"ai_execution_not_simulated": "未模拟 AI 行为,无法确认是否到达人工客服。",
|
||||
"partial_rollout_not_simulated": "未模拟部分灰度,无法确认是否到达人工客服。",
|
||||
"blocked_agent_unpublished": "未确认未发布 Agent 的人工路由,请先发布 Agent。"
|
||||
},
|
||||
"candidateTableTitle": "参评候选坐席明细",
|
||||
"colOperator": "坐席",
|
||||
@@ -3520,6 +3533,53 @@
|
||||
"headerIndicator": {
|
||||
"readyLabel": "接单就绪",
|
||||
"blockedLabel": "接单受阻 ({count})"
|
||||
},
|
||||
"preview": {
|
||||
"review": "预览设置更改",
|
||||
"title": "应用前确认具体更改",
|
||||
"description": "仅更改下列具名记录和字段,不会添加排班。未列出的配置及灰度比例保持不变。更改提交后可能分配等待中的会话。",
|
||||
"noChanges": "没有可安全自动应用的更改。请在对应设置中选择客服组、路由或工作时段。",
|
||||
"apply": "应用已确认的更改",
|
||||
"create": "创建",
|
||||
"update": "更新",
|
||||
"notApplied": "未应用已确认的更改。",
|
||||
"manageSchedules": "管理明确的工作时段"
|
||||
},
|
||||
"repairFields": {
|
||||
"name": "名称",
|
||||
"leader_user_id": "组长 ID",
|
||||
"status": "启用状态(0 启用,1 禁用)",
|
||||
"user_id": "用户 ID",
|
||||
"team_id": "客服组 ID / 新组名称",
|
||||
"team_ids": "路由客服组",
|
||||
"service_status": "接待状态(0 空闲,1 忙碌)",
|
||||
"auto_assign_enabled": "自动分配",
|
||||
"max_concurrent_count": "并发会话上限",
|
||||
"priority_level": "分配优先级",
|
||||
"receive_offline_message": "接收离线消息",
|
||||
"service_mode": "服务模式(1 仅 AI,2 仅人工,3 AI 优先)",
|
||||
"rollout_percent": "Agent 灰度比例(%)",
|
||||
"handoff_mode": "转人工模式(2 客服组队列)",
|
||||
"fallback_mode": "回退模式",
|
||||
"auto_handoff_on_failure": "失败时自动转人工",
|
||||
"reply_timeout_seconds": "回复超时(秒)",
|
||||
"max_steps": "AI 最大步骤数",
|
||||
"channel_id": "渠道标识",
|
||||
"channel_type": "渠道类型",
|
||||
"ai_agent_id": "Agent ID / 新 Agent 名称",
|
||||
"ai_agent_rollout_percent": "渠道灰度比例(%)",
|
||||
"config_json": "渠道配置"
|
||||
},
|
||||
"repairWarnings": {
|
||||
"schedules_unchanged": "未更改工作时段。请明确配置排班;非值班时段不是配置错误。",
|
||||
"active_team_required": "请先在客服组设置中选择或启用客服组,再关联新记录。",
|
||||
"disabled_configuration_preserved": "所选配置已禁用或灰度比例为零,已保持不变。",
|
||||
"agent_team_selection_required": "请在 Agent 设置中选择目标客服组;未自动添加任何组。",
|
||||
"channel_selection_required": "请在渠道设置中选择目标 Agent 和灰度比例。已保留现有渠道路由。",
|
||||
"existing_configuration_preserved": "已保留现有配置。请在对应设置中检查剩余的就绪问题。",
|
||||
"dispatch_failed": "更改已保存,但等待会话分配失败。请检查队列,不要重复应用修复。",
|
||||
"readiness_refresh_failed": "就绪状态刷新失败。请重新加载诊断以查看当前状态;已提交的更改未回滚。",
|
||||
"agent_publication_required": "创建渠道前,请先在 Agent 设置中发布目标 Agent。设置向导不会发布 Agent 或绕过发布要求。"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
2
web/messages/zh-CN.json.license
Normal file
2
web/messages/zh-CN.json.license
Normal file
@@ -0,0 +1,2 @@
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
SPDX-FileComment: Modified in the independent hardening fork. See docs/hardening/README.md and MODIFIED_FILES.md for source attribution and change notes.
|
||||
Reference in New Issue
Block a user