微信企业机器人创建

This commit is contained in:
2026-07-26 08:16:56 +08:00
parent f053908acb
commit 34532dc9bf
26 changed files with 1963 additions and 4 deletions
@@ -14,6 +14,7 @@ export const HQ_PERMISSION_CATALOG = [
{ key: 'tickets', label: '工单中心', group: '业务' },
{ key: 'tech_support', label: '技术支持', group: '业务' },
{ key: 'invoices', label: '发票管理', group: '业务' },
{ key: 'wecom_bots', label: '企微机器人', group: '业务' },
{ key: 'resources', label: 'OSS 资源库', group: '业务' },
{ key: 'logs', label: '日志', group: '业务' },
{ key: 'hq_permissions', label: '权限分配', group: '管理' },
@@ -88,6 +89,7 @@ export const HQ_ROLE_DEFAULT_PERMISSIONS: Record<string, HqPermissionKey[]> = {
'tickets',
'tech_support',
'invoices',
'wecom_bots',
'resources',
'logs',
'system_settings_wechat_mini',
+1
View File
@@ -23,4 +23,5 @@ export * from './city-partner';
export * from './city-warehouse';
export * from './fulfillment-provider';
export * from './system-config';
export * from './wecom-bot';
export * from './legal';
+107
View File
@@ -0,0 +1,107 @@
/** 企业微信智能机器人能力权限 */
export const WECOM_BOT_PERMISSIONS = [
'ticket.create',
'user.view_sms',
'delivery.view',
'support_ticket.create',
'support_ticket.progress',
'handbook.query',
] as const;
export type WecomBotPermission = (typeof WECOM_BOT_PERMISSIONS)[number];
export const WECOM_BOT_PERMISSION_LABELS: Record<WecomBotPermission, string> = {
'ticket.create': '创建售后工单',
'user.view_sms': '查用户(短信验证)',
'delivery.view': '查快递信息',
'support_ticket.create': '创建技术支持工单',
'support_ticket.progress': '查看开发进度',
'handbook.query': '查询使用手册',
};
/** 预置机器人角色(创建时可选;权限可按角色带出默认值后自定义) */
export const WECOM_BOT_ROLES = [
'CUSTOMER_SERVICE',
'TECH_SUPPORT',
'TEAM_ASSISTANT',
'CUSTOM',
] as const;
export type WecomBotRole = (typeof WECOM_BOT_ROLES)[number];
export const WECOM_BOT_ROLE_LABELS: Record<WecomBotRole, string> = {
CUSTOMER_SERVICE: '客服机器人',
TECH_SUPPORT: '技术支持机器人',
TEAM_ASSISTANT: '团队助手',
CUSTOM: '自定义',
};
export const WECOM_BOT_ROLE_DEFAULT_PERMISSIONS: Record<WecomBotRole, WecomBotPermission[]> = {
CUSTOMER_SERVICE: ['ticket.create', 'user.view_sms', 'delivery.view'],
TECH_SUPPORT: ['support_ticket.create', 'support_ticket.progress'],
TEAM_ASSISTANT: ['handbook.query'],
CUSTOM: [],
};
export function parseWecomBotPermissions(
raw?: string | string[] | null,
): WecomBotPermission[] {
const set = new Set<string>(WECOM_BOT_PERMISSIONS);
const list = Array.isArray(raw)
? raw
: String(raw ?? '')
.split(/[,\s]+/)
.map((s) => s.trim())
.filter(Boolean);
return [...new Set(list.filter((s): s is WecomBotPermission => set.has(s)))];
}
export function resolveWecomBotPermissions(
role: WecomBotRole,
override?: string | string[] | null,
): WecomBotPermission[] {
const parsed = parseWecomBotPermissions(override);
if (parsed.length) return parsed;
return [...WECOM_BOT_ROLE_DEFAULT_PERMISSIONS[role]];
}
export type WecomBotDto = {
id: string;
name: string;
role: WecomBotRole;
botId: string;
/** 列表/详情不返回明文;仅表示是否已配置 */
secretConfigured: boolean;
avatarUrl: string | null;
welcome: string | null;
permissions: WecomBotPermission[];
enabled: boolean;
sortOrder: number;
createdAt: string;
updatedAt: string;
};
export type CreateWecomBotRequest = {
name: string;
role: WecomBotRole;
botId: string;
secret: string;
avatarUrl?: string | null;
welcome?: string | null;
permissions?: WecomBotPermission[];
enabled?: boolean;
sortOrder?: number;
};
export type UpdateWecomBotRequest = {
name?: string;
role?: WecomBotRole;
botId?: string;
/** 空或不传表示不修改 */
secret?: string;
avatarUrl?: string | null;
welcome?: string | null;
permissions?: WecomBotPermission[];
enabled?: boolean;
sortOrder?: number;
};