| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296 |
- package service
- import "time"
- // BroadcastHub 描述 WebSocket Hub 的广播能力。
- type BroadcastHub interface {
- BroadcastMessage(conversationID uint, messageType string, data interface{})
- BroadcastToAllAgents(messageType string, data interface{})
- }
- // InitConversationInput 对话初始化需要的输入数据。
- type InitConversationInput struct {
- VisitorID uint
- Website string
- Referrer string
- Browser string
- OS string
- Language string
- IPAddress string
- ChatMode string // 对话模式:human(人工客服)、ai(AI客服)
- AIConfigID *uint // AI 配置 ID(访客选择的模型配置,AI 模式时必需)
- }
- // InitConversationResult 对话初始化后的返回结果。
- type InitConversationResult struct {
- ConversationID uint
- Status string
- }
- // UpdateConversationContactInput 更新访客联系信息时需要的参数。
- type UpdateConversationContactInput struct {
- ConversationID uint
- Email *string
- Phone *string
- Notes *string
- }
- // ConversationSummary 用于会话列表展示的概要信息。
- type ConversationSummary struct {
- ID uint
- ConversationType string // visitor | internal
- VisitorID uint
- AgentID uint
- Status string
- ChatMode string // human | ai
- CreatedAt time.Time
- UpdatedAt time.Time
- LastMessage *LastMessageSummary
- UnreadCount int64
- LastSeenAt *time.Time // 最后活跃时间,用于判断在线状态
- HasParticipated bool // 当前用户是否参与过该会话(是否发送过消息)
- }
- // LastMessageSummary 会话最后一条消息的摘要信息。
- type LastMessageSummary struct {
- ID uint
- Content string
- SenderIsAgent bool
- MessageType string
- IsRead bool
- ReadAt *time.Time
- CreatedAt time.Time
- }
- // ConversationDetail 在会话概要基础上附加访客信息。
- type ConversationDetail struct {
- ConversationSummary
- Website string
- Referrer string
- Browser string
- OS string
- Language string
- IPAddress string
- Location string
- Email string
- Phone string
- Notes string
- LastSeen *time.Time
- }
- // CreateMessageInput 创建消息时需要的参数。
- type CreateMessageInput struct {
- ConversationID uint
- Content string
- SenderID uint
- SenderIsAgent bool
- // 文件相关字段(可选)
- FileURL *string // 文件URL
- FileType *string // 文件类型:image, document
- FileName *string // 原始文件名
- FileSize *int64 // 文件大小(字节)
- MimeType *string // MIME类型
- // 回复数据源开关(仅 AI 模式有效):不传或 nil 时使用默认(知识库+大模型开,联网关)
- UseKnowledgeBase *bool // 是否使用知识库检索,默认 true
- UseLLM *bool // 无知识库匹配时是否用大模型回复,默认 true
- UseWebSearch *bool // 是否允许联网搜索(需本回合 NeedWebSearch 或策略触发),默认 false
- NeedWebSearch bool // 本回合是否请求联网搜索(如用户点击「联网搜索」),默认 false
- }
- // CreateAgentInput 创建客服或管理员账号需要的参数。
- type CreateAgentInput struct {
- Username string
- Password string
- Role string
- }
- // MarkMessagesReadResult 消息标记已读后的返回信息。
- type MarkMessagesReadResult struct {
- ConversationID uint
- MessageIDs []uint
- UnreadCount int64
- ReadAt time.Time
- }
- // UpdateProfileInput 更新个人资料时需要的参数。
- type UpdateProfileInput struct {
- UserID uint
- Nickname *string
- Email *string
- ReceiveAIConversations *bool // 是否接收 AI 对话(可选)
- }
- // ProfileResult 个人资料信息。
- type ProfileResult struct {
- ID uint `json:"id"`
- Username string `json:"username"`
- Role string `json:"role"`
- AvatarURL string `json:"avatar_url"`
- Nickname string `json:"nickname"`
- Email string `json:"email"`
- ReceiveAIConversations bool `json:"receive_ai_conversations"` // 是否接收 AI 对话
- }
- // UserSummary 用户列表摘要信息(不包含密码)。
- type UserSummary struct {
- ID uint `json:"id"`
- Username string `json:"username"`
- Role string `json:"role"`
- Nickname string `json:"nickname"`
- Email string `json:"email"`
- AvatarURL string `json:"avatar_url"`
- ReceiveAIConversations bool `json:"receive_ai_conversations"`
- CreatedAt time.Time `json:"created_at"`
- UpdatedAt time.Time `json:"updated_at"`
- }
- // CreateUserInput 创建用户输入。
- type CreateUserInput struct {
- Username string // 用户名(必需)
- Password string // 密码(必需)
- Role string // 角色:"admin" 或 "agent"(必需)
- Nickname *string // 昵称(可选)
- Email *string // 邮箱(可选)
- }
- // UpdateUserInput 更新用户输入。
- type UpdateUserInput struct {
- UserID uint // 用户ID(必需)
- Role *string // 角色(可选)
- Nickname *string // 昵称(可选)
- Email *string // 邮箱(可选)
- ReceiveAIConversations *bool // 是否接收 AI 对话(可选)
- }
- // UpdatePasswordInput 更新密码输入。
- type UpdatePasswordInput struct {
- UserID uint // 用户ID(必需)
- OldPassword *string // 旧密码(可选,管理员修改其他用户密码时不需要)
- NewPassword string // 新密码(必需)
- IsAdmin bool // 是否是管理员操作(必需)
- }
- // FAQSummary FAQ(常见问题)摘要信息。
- type FAQSummary struct {
- ID uint `json:"id"`
- Question string `json:"question"` // 问题
- Answer string `json:"answer"` // 答案
- Keywords string `json:"keywords"` // 关键词(用于搜索)
- CreatedAt time.Time `json:"created_at"` // 创建时间
- UpdatedAt time.Time `json:"updated_at"` // 更新时间
- }
- // CreateFAQInput 创建 FAQ 输入。
- type CreateFAQInput struct {
- Question string // 问题(必需)
- Answer string // 答案(必需)
- Keywords string // 关键词(可选,用逗号或空格分隔)
- }
- // UpdateFAQInput 更新 FAQ 输入。
- type UpdateFAQInput struct {
- Question *string // 问题(可选)
- Answer *string // 答案(可选)
- Keywords *string // 关键词(可选)
- }
- // OnlineAgent 在线客服信息(供访客查看)。
- type OnlineAgent struct {
- ID uint `json:"id"` // 客服ID
- Nickname string `json:"nickname"` // 昵称
- AvatarURL string `json:"avatar_url"` // 头像URL
- }
- // DocumentSummary 文档摘要信息。
- type DocumentSummary struct {
- ID uint `json:"id"`
- KnowledgeBaseID uint `json:"knowledge_base_id"`
- Title string `json:"title"`
- Content string `json:"content"`
- Summary string `json:"summary"`
- Type string `json:"type"`
- Status string `json:"status"`
- EmbeddingStatus string `json:"embedding_status"`
- CreatedAt time.Time `json:"created_at"`
- UpdatedAt time.Time `json:"updated_at"`
- }
- // CreateDocumentInput 创建文档输入。
- type CreateDocumentInput struct {
- KnowledgeBaseID uint // 知识库 ID(必需)
- Title string // 文档标题(必需)
- Content string // 文档内容(必需)
- Summary string // 文档摘要(可选)
- Type string // 文档类型(可选,默认:document)
- Status string // 文档状态(可选,默认:draft)
- Metadata map[string]interface{} // 元数据(可选)
- }
- // UpdateDocumentInput 更新文档输入。
- type UpdateDocumentInput struct {
- Title *string // 文档标题(可选)
- Content *string // 文档内容(可选)
- Summary *string // 文档摘要(可选)
- Type *string // 文档类型(可选)
- Status *string // 文档状态(可选)
- Metadata *map[string]interface{} // 元数据(可选)
- }
- // DocumentListResult 文档列表查询结果。
- type DocumentListResult struct {
- Documents []DocumentSummary `json:"documents"` // 文档列表
- Total int64 `json:"total"` // 总记录数
- Page int `json:"page"` // 当前页码
- PageSize int `json:"page_size"` // 每页大小
- TotalPage int `json:"total_page"` // 总页数
- }
- // KnowledgeBaseSummary 知识库摘要信息。
- type KnowledgeBaseSummary struct {
- ID uint `json:"id"`
- Name string `json:"name"`
- Description string `json:"description"`
- DocumentCount int64 `json:"document_count"` // 文档数量(统计信息)
- RAGEnabled bool `json:"rag_enabled"` // 是否参与 RAG(对 AI 开放)
- CreatedAt time.Time `json:"created_at"`
- UpdatedAt time.Time `json:"updated_at"`
- }
- // CreateKnowledgeBaseInput 创建知识库输入。
- type CreateKnowledgeBaseInput struct {
- Name string // 知识库名称(必需)
- Description string // 知识库描述(可选)
- }
- // UpdateKnowledgeBaseInput 更新知识库输入。
- type UpdateKnowledgeBaseInput struct {
- Name *string // 知识库名称(可选)
- Description *string // 知识库描述(可选)
- RAGEnabled *bool // 是否参与 RAG(可选)
- }
- // MessageAttachment 当前用户消息的附件(用于多模态:识图等)
- type MessageAttachment struct {
- FileURL string // 文件 URL(创建消息时返回的 file_url)
- FileType string // image / document
- MimeType string // 如 image/jpeg
- }
- // GenerateAIResponseInput 生成 AI 回复时的选项(数据源开关等)。
- type GenerateAIResponseInput struct {
- UseKnowledgeBase *bool // 是否使用知识库,默认 true
- UseLLM *bool // 无知识库时是否用大模型回复,默认 true
- UseWebSearch *bool // 是否允许联网,默认 false
- NeedWebSearch bool // 本回合是否请求联网(如用户点击按钮),默认 false
- Attachment *MessageAttachment // 当前条消息的附件(如图片),用于多模态识图
- }
- // GenerateAIResponseResult 生成 AI 回复的结果(内容 + 使用的数据源标记)。
- type GenerateAIResponseResult struct {
- Content string // 合成的一条回复
- SourcesUsed string // 逗号分隔,如 "knowledge_base" / "knowledge_base,llm" / "llm,web",供前端展示
- // 生图时返回生成图片的 URL,写入 AI 消息的 file_url
- GeneratedFileURL *string
- // GenerationFailed 为 true 表示大模型调用失败,内容为兜底话术(仍返回 err==nil 时由 message 层写入 is_ai_generation_failed)
- GenerationFailed bool
- }
|