types.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. package service
  2. import "time"
  3. // BroadcastHub 描述 WebSocket Hub 的广播能力。
  4. type BroadcastHub interface {
  5. BroadcastMessage(conversationID uint, messageType string, data interface{})
  6. BroadcastToAllAgents(messageType string, data interface{})
  7. }
  8. // InitConversationInput 对话初始化需要的输入数据。
  9. type InitConversationInput struct {
  10. VisitorID uint
  11. Website string
  12. Referrer string
  13. Browser string
  14. OS string
  15. Language string
  16. IPAddress string
  17. ChatMode string // 对话模式:human(人工客服)、ai(AI客服)
  18. AIConfigID *uint // AI 配置 ID(访客选择的模型配置,AI 模式时必需)
  19. }
  20. // InitConversationResult 对话初始化后的返回结果。
  21. type InitConversationResult struct {
  22. ConversationID uint
  23. Status string
  24. }
  25. // UpdateConversationContactInput 更新访客联系信息时需要的参数。
  26. type UpdateConversationContactInput struct {
  27. ConversationID uint
  28. Email *string
  29. Phone *string
  30. Notes *string
  31. }
  32. // ConversationSummary 用于会话列表展示的概要信息。
  33. type ConversationSummary struct {
  34. ID uint
  35. VisitorID uint
  36. AgentID uint
  37. Status string
  38. CreatedAt time.Time
  39. UpdatedAt time.Time
  40. LastMessage *LastMessageSummary
  41. UnreadCount int64
  42. LastSeenAt *time.Time // 最后活跃时间,用于判断在线状态
  43. HasParticipated bool // 当前用户是否参与过该会话(是否发送过消息)
  44. }
  45. // LastMessageSummary 会话最后一条消息的摘要信息。
  46. type LastMessageSummary struct {
  47. ID uint
  48. Content string
  49. SenderIsAgent bool
  50. MessageType string
  51. IsRead bool
  52. ReadAt *time.Time
  53. CreatedAt time.Time
  54. }
  55. // ConversationDetail 在会话概要基础上附加访客信息。
  56. type ConversationDetail struct {
  57. ConversationSummary
  58. Website string
  59. Referrer string
  60. Browser string
  61. OS string
  62. Language string
  63. IPAddress string
  64. Location string
  65. Email string
  66. Phone string
  67. Notes string
  68. LastSeen *time.Time
  69. }
  70. // CreateMessageInput 创建消息时需要的参数。
  71. type CreateMessageInput struct {
  72. ConversationID uint
  73. Content string
  74. SenderID uint
  75. SenderIsAgent bool
  76. // 文件相关字段(可选)
  77. FileURL *string // 文件URL
  78. FileType *string // 文件类型:image, document
  79. FileName *string // 原始文件名
  80. FileSize *int64 // 文件大小(字节)
  81. MimeType *string // MIME类型
  82. }
  83. // CreateAgentInput 创建客服或管理员账号需要的参数。
  84. type CreateAgentInput struct {
  85. Username string
  86. Password string
  87. Role string
  88. }
  89. // MarkMessagesReadResult 消息标记已读后的返回信息。
  90. type MarkMessagesReadResult struct {
  91. ConversationID uint
  92. MessageIDs []uint
  93. UnreadCount int64
  94. ReadAt time.Time
  95. }
  96. // UpdateProfileInput 更新个人资料时需要的参数。
  97. type UpdateProfileInput struct {
  98. UserID uint
  99. Nickname *string
  100. Email *string
  101. ReceiveAIConversations *bool // 是否接收 AI 对话(可选)
  102. }
  103. // ProfileResult 个人资料信息。
  104. type ProfileResult struct {
  105. ID uint `json:"id"`
  106. Username string `json:"username"`
  107. Role string `json:"role"`
  108. AvatarURL string `json:"avatar_url"`
  109. Nickname string `json:"nickname"`
  110. Email string `json:"email"`
  111. ReceiveAIConversations bool `json:"receive_ai_conversations"` // 是否接收 AI 对话
  112. }
  113. // UserSummary 用户列表摘要信息(不包含密码)。
  114. type UserSummary struct {
  115. ID uint `json:"id"`
  116. Username string `json:"username"`
  117. Role string `json:"role"`
  118. Nickname string `json:"nickname"`
  119. Email string `json:"email"`
  120. AvatarURL string `json:"avatar_url"`
  121. ReceiveAIConversations bool `json:"receive_ai_conversations"`
  122. CreatedAt time.Time `json:"created_at"`
  123. UpdatedAt time.Time `json:"updated_at"`
  124. }
  125. // CreateUserInput 创建用户输入。
  126. type CreateUserInput struct {
  127. Username string // 用户名(必需)
  128. Password string // 密码(必需)
  129. Role string // 角色:"admin" 或 "agent"(必需)
  130. Nickname *string // 昵称(可选)
  131. Email *string // 邮箱(可选)
  132. }
  133. // UpdateUserInput 更新用户输入。
  134. type UpdateUserInput struct {
  135. UserID uint // 用户ID(必需)
  136. Role *string // 角色(可选)
  137. Nickname *string // 昵称(可选)
  138. Email *string // 邮箱(可选)
  139. ReceiveAIConversations *bool // 是否接收 AI 对话(可选)
  140. }
  141. // UpdatePasswordInput 更新密码输入。
  142. type UpdatePasswordInput struct {
  143. UserID uint // 用户ID(必需)
  144. OldPassword *string // 旧密码(可选,管理员修改其他用户密码时不需要)
  145. NewPassword string // 新密码(必需)
  146. IsAdmin bool // 是否是管理员操作(必需)
  147. }
  148. // FAQSummary FAQ(常见问题)摘要信息。
  149. type FAQSummary struct {
  150. ID uint `json:"id"`
  151. Question string `json:"question"` // 问题
  152. Answer string `json:"answer"` // 答案
  153. Keywords string `json:"keywords"` // 关键词(用于搜索)
  154. CreatedAt time.Time `json:"created_at"` // 创建时间
  155. UpdatedAt time.Time `json:"updated_at"` // 更新时间
  156. }
  157. // CreateFAQInput 创建 FAQ 输入。
  158. type CreateFAQInput struct {
  159. Question string // 问题(必需)
  160. Answer string // 答案(必需)
  161. Keywords string // 关键词(可选,用逗号或空格分隔)
  162. }
  163. // UpdateFAQInput 更新 FAQ 输入。
  164. type UpdateFAQInput struct {
  165. Question *string // 问题(可选)
  166. Answer *string // 答案(可选)
  167. Keywords *string // 关键词(可选)
  168. }
  169. // OnlineAgent 在线客服信息(供访客查看)。
  170. type OnlineAgent struct {
  171. ID uint `json:"id"` // 客服ID
  172. Nickname string `json:"nickname"` // 昵称
  173. AvatarURL string `json:"avatar_url"` // 头像URL
  174. }