Files
2026-02-04 18:36:40 +08:00

195 lines
6.2 KiB
TypeScript

import { Assistant, CallLog, KnowledgeBase, Voice, Workflow, AutoTestAssistant, TestType, TestMethod } from '../types';
export const mockVoices: Voice[] = [
{ id: 'v1', name: 'Xiaoyun', vendor: 'Ali', gender: 'Female', language: 'zh', description: 'Gentle and professional.' },
{ id: 'v2', name: 'Kevin', vendor: 'Volcano', gender: 'Male', language: 'en', description: 'Deep and authoritative.' },
{ id: 'v3', name: 'Abby', vendor: 'Minimax', gender: 'Female', language: 'en', description: 'Cheerful and lively.' },
{ id: 'v4', name: 'Guang', vendor: 'Ali', gender: 'Male', language: 'zh', description: 'Standard newscast style.' },
{ id: 'v5', name: 'Doubao', vendor: 'Volcano', gender: 'Female', language: 'zh', description: 'Cute and young.' },
];
export const mockAssistants: Assistant[] = [
{
id: '1',
name: 'Customer Support Bot',
callCount: 154,
opener: 'Hello, how can I help you today?',
prompt: 'You are a helpful customer service agent.',
knowledgeBaseId: 'kb1',
language: 'en',
voice: 'v3',
speed: 1.0,
hotwords: ['refund', 'order'],
interruptionSensitivity: 500,
},
{
id: '2',
name: 'Sales Agent',
callCount: 89,
opener: 'Hi! Are you interested in our new product?',
prompt: 'You are an energetic sales representative.',
knowledgeBaseId: 'kb2',
language: 'zh',
voice: 'v1',
speed: 1.1,
hotwords: ['price', 'discount'],
interruptionSensitivity: 300,
},
];
export let mockWorkflows: Workflow[] = [
{
id: 'wf1',
name: 'Lead Qualification Agent',
nodeCount: 11,
createdAt: '2024-03-01 10:00',
updatedAt: '2024-03-05 14:30',
nodes: [
{
name: "introduction",
type: "conversation",
isStart: true,
metadata: { position: { x: 100, y: 100 } },
prompt: "You are Morgan from GrowthPartners. Start with: 'Hello, this is Morgan from GrowthPartners. We help businesses improve their operational efficiency through custom software solutions. Do you have a few minutes to chat about how we might be able to help your business?' Use a friendly, consultative tone.",
messagePlan: { firstMessage: "Hello, this is Morgan from GrowthPartners. Do you have a few minutes to chat about how we might be able to help your business?" }
},
{
name: "need_discovery",
type: "conversation",
metadata: { position: { x: 400, y: 150 } },
prompt: "Conduct need discovery by asking about: 1) Their business and industry, 2) Current systems/processes they use, 3) Biggest challenges with current approach...",
variableExtractionPlan: {
output: [
{ type: "string", title: "industry", description: "the user's industry or business type" },
{ type: "string", title: "company_size", description: "approximate number of employees" }
]
}
}
],
edges: [
{ from: "introduction", to: "need_discovery" }
]
},
{
id: 'wf2',
name: '售后退款流程',
nodeCount: 5,
createdAt: '2024-03-01 10:00',
updatedAt: '2024-03-05 14:30',
nodes: [],
edges: []
},
];
export const mockKnowledgeBases: KnowledgeBase[] = [
{
id: 'kb1',
name: 'Product Manuals',
creator: 'Admin',
createdAt: '2023-10-15',
documents: [
{ id: 'd1', name: 'User Guide v1.pdf', size: '2.4 MB', uploadDate: '2023-10-15' },
{ id: 'd2', name: 'Warranty Info.docx', size: '1.1 MB', uploadDate: '2023-10-16' },
],
},
{
id: 'kb2',
name: 'Sales Scripts',
creator: 'Sales Lead',
createdAt: '2023-11-01',
documents: [
{ id: 'd3', name: 'Objection Handling.pdf', size: '500 KB', uploadDate: '2023-11-01' },
],
},
];
export const mockCallLogs: CallLog[] = [
{
id: 'c1',
source: 'external',
status: 'connected',
startTime: '2023-11-20 10:30:00',
duration: '5m 23s',
agentName: 'Customer Support Bot',
},
{
id: 'c2',
source: 'debug',
status: 'connected',
startTime: '2023-11-20 11:15:00',
duration: '1m 10s',
agentName: 'Sales Agent',
},
{
id: 'c3',
source: 'external',
status: 'missed',
startTime: '2023-11-20 12:00:00',
duration: '0s',
agentName: 'Customer Support Bot',
},
];
export const mockAutoTestAssistants: AutoTestAssistant[] = [
{
id: 'at1',
name: '退款流程压力测试',
type: TestType.FIXED,
method: TestMethod.TEXT,
targetAssistantId: '1',
fixedWorkflowSteps: ['你好,我要退款', '订单号是123456', '谢谢'],
intelligentPrompt: '',
createdAt: '2024-03-10 09:00'
},
{
id: 'at2',
name: '愤怒的客户模拟',
type: TestType.INTELLIGENT,
method: TestMethod.AUDIO,
targetAssistantId: '1',
fixedWorkflowSteps: [],
intelligentPrompt: '你是一个非常愤怒的客户,因为订单延迟了一周。你需要表达你的不满,并要求立即解决。你的语气必须很冲,不接受简单的道歉。',
createdAt: '2024-03-11 14:20'
}
];
export interface DashboardStats {
totalCalls: number;
answerRate: number;
avgDuration: string;
humanTransferCount: number;
trend: { label: string; value: number }[];
}
export const getDashboardStats = (timeRange: 'week' | 'month' | 'year', assistantId: string): DashboardStats => {
const multiplier = assistantId === 'all' ? 1 : (assistantId === '1' ? 0.6 : 0.4);
const rangeMultiplier = timeRange === 'week' ? 1 : (timeRange === 'month' ? 4 : 52);
const baseCalls = Math.floor(100 * rangeMultiplier * multiplier);
const transfers = Math.floor(baseCalls * 0.15);
let points = 7;
if (timeRange === 'month') points = 30;
if (timeRange === 'year') points = 12;
const trend = Array.from({ length: points }, (_, i) => {
let label = `Day ${i + 1}`;
if (timeRange === 'year') {
const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
label = months[i];
}
return {
label,
value: Math.floor(Math.random() * 50 * multiplier) + 10
};
});
return {
totalCalls: baseCalls,
answerRate: 85 + Math.floor(Math.random() * 10),
avgDuration: `${Math.floor(2 + Math.random() * 3)}m ${Math.floor(Math.random() * 60)}s`,
humanTransferCount: transfers,
trend
};
};