Documentation ¶
Overview ¶
Copyright 2019-2020 Axetroy. All rights reserved. MIT license.
Copyright 2019-2020 Axetroy. All rights reserved. MIT license.
Copyright 2019-2020 Axetroy. All rights reserved. MIT license.
Copyright 2019-2020 Axetroy. All rights reserved. MIT license.
Index ¶
- Variables
- type AuthPayload
- type Client
- func (c *Client) Close() error
- func (c *Client) GetProfile() *schema.ProfilePublic
- func (c *Client) RegenerateUUID()
- func (c *Client) SetReady(ready bool)
- func (c *Client) UpdateProfile(profile schema.ProfilePublic)
- func (c *Client) WriteError(err error, data Message) error
- func (c *Client) WriteJSON(data Message) error
- type Matcher
- func (c *Matcher) AddWaiter(waiterSocketUUID string)
- func (c *Matcher) GetIdleWaiter() *string
- func (c *Matcher) GetMatcher() map[string][]string
- func (c *Matcher) GetMyUsers(waiterSocketUUID string) []string
- func (c *Matcher) GetMyWaiter(userSocketUUID string) *string
- func (c *Matcher) GetPendingLength() int
- func (c *Matcher) GetPendingQueue() []string
- func (c *Matcher) Join(userSocketUUID string, prepend ...bool) (*string, uint)
- func (c *Matcher) Leave(userSocketUUID string)
- func (c *Matcher) RemoveWaiter(waiterSocketUUID string)
- func (c *Matcher) SetUserClientFunc(fn func(id string) *Client)
- func (c *Matcher) SetWaiterClientFunc(fn func(id string) *Client)
- func (c *Matcher) ShiftPending() *string
- type Message
- type MessageImagePayload
- type MessageTextPayload
- type Pool
- type QueuePayload
- type RatePayload
- type TypeRequestUser
- type TypeRequestWaiter
- type TypeResponseUser
- type TypeResponseWaiter
Constants ¶
This section is empty.
Variables ¶
View Source
var ( UserPoll = NewPool() WaiterPoll = NewPool() )
View Source
var MatcherPool = NewMatcher()
Functions ¶
This section is empty.
Types ¶
type AuthPayload ¶ added in v0.7.0
type AuthPayload struct {
Token string `json:"token" validate:"required,min=0" comment:"身份令牌"`
}
type Client ¶
type Client struct { sync.RWMutex UUID string // Socket 连接的唯一标识符 LatestReceiveAt time.Time // 最近接收到的消息的时间,用于判断用户是否空闲 Closed bool // 连接是否已关闭 Ready bool // 该客户端是否已准备就绪,给客服端用的,ready = true 的时候系统才会分配用户 // contains filtered or unexported fields }
func (*Client) GetProfile ¶
func (c *Client) GetProfile() *schema.ProfilePublic
func (*Client) RegenerateUUID ¶ added in v0.7.0
func (c *Client) RegenerateUUID()
func (*Client) UpdateProfile ¶
func (c *Client) UpdateProfile(profile schema.ProfilePublic)
type Matcher ¶
type Matcher struct { sync.RWMutex Broadcast chan bool // 调度器,当收到通知时,就安排客服接待排队的用户 Max int // 一个客服最多接待多少个用户 // contains filtered or unexported fields }
func NewMatcher ¶
func NewMatcher() *Matcher
func (*Matcher) GetMatcher ¶
func (*Matcher) GetMyUsers ¶
获取这个客服当前服务的用户
func (*Matcher) GetMyWaiter ¶
获取当前接待我的客服
func (*Matcher) GetPendingLength ¶
func (*Matcher) GetPendingQueue ¶ added in v0.7.0
func (*Matcher) Join ¶
用户加入匹配池 返回接待的客服 UUID 如果返回空,那么说明没有找到合适的客服,加入等待队列 第二个参数用于插入到最前面的队列,出于最优先级 返回 int 代表出于队列的地 n 位
func (*Matcher) SetUserClientFunc ¶ added in v0.7.0
func (*Matcher) SetWaiterClientFunc ¶ added in v0.7.0
func (*Matcher) ShiftPending ¶
type Message ¶
type Message struct { Id string `json:"id,omitempty" validate:"omitempty" comment:"消息 ID"` // 每条消息的 ID,在写入数据库之后会有 From string `json:"from,omitempty" validate:"omitempty,uuid" comment:"发送者"` // 从谁发出来的 To string `json:"to,omitempty" validate:"omitempty,uuid" comment:"发送目标"` // 要发送的目标 ID,只有客服才需要带 target 字段,指明发送给谁 Type string `json:"type" validate:"required" comment:"会话类型"` // 会话类型 Payload interface{} `json:"payload,omitempty" validate:"omitempty" comment:"消息数据"` // 本次消息的数据 Date string `json:"date,omitempty" validate:"omitempty" comment:"时间戳"` // 消息的时间 OpID *string `json:"op_id,omitempty" validate:"omitempty,uuid" comment:"操作ID"` // 客户端发送的 UUID 用于标记该消息,服务端应该返回相同的 op_id,主要用于消息回执 }
来回传输的消息体
type MessageImagePayload ¶ added in v0.7.0
type MessageImagePayload struct {
Image string `json:"image" validate:"required,url,max=255" comment:"图片URL"`
}
type MessageTextPayload ¶ added in v0.7.0
type MessageTextPayload struct {
Text string `json:"text" validate:"required,max=255" comment:"消息体"`
}
type Pool ¶
type Pool struct { sync.RWMutex Broadcast chan Message // 广播频道 // contains filtered or unexported fields }
func (*Pool) GetWaiterFromUserID ¶ added in v0.7.0
获取连接
type QueuePayload ¶ added in v0.7.0
type QueuePayload struct {
Location uint `json:"location" validate:"required,int,min=0" comment:"位置"`
}
type RatePayload ¶ added in v0.7.0
type RatePayload struct {
Rate uint `json:"rate" validate:"required,int,min=1,max=5" comment:"评分"`
}
type TypeRequestUser ¶
type TypeRequestUser typeForWriteMessage // 用户发出的消息类型
const ( TypeRequestUserAuth TypeRequestUser = "auth" // 认证帐号 TypeRequestUserConnect TypeRequestUser = "connect" // 请求连接一个客服 TypeRequestUserDisconnect TypeRequestUser = "disconnect" // 请求和客服断开连接 TypeRequestUserMessageText TypeRequestUser = "message_text" // 发送文本消息 TypeRequestUserMessageImage TypeRequestUser = "message_image" // 发送图片 TypeRequestUserGetHistory TypeRequestUser = "get_history" // 请求获取用户聊天记录,应该返回 `message_history` TypeRequestUserRate TypeRequestUser = "rate" // 对于本次会话进行评价 )
用户可以发出的消息类型
func (TypeRequestUser) String ¶ added in v0.7.0
func (c TypeRequestUser) String() string
type TypeRequestWaiter ¶
type TypeRequestWaiter typeForWriteMessage // 客服发出的消息类型
const ( TypeRequestWaiterAuth TypeRequestWaiter = "auth" // 身份认证 TypeResponseWaiterAuthSuccess TypeRequestWaiter = "auth_success" // 身份认证 TypeRequestWaiterReady TypeRequestWaiter = "ready" // 客服已准备就绪,可以开始接收客人 TypeRequestWaiterUnReady TypeRequestWaiter = "unready" // 客服进入未就绪状态,意味着客服暂停接客 TypeRequestWaiterMessageText TypeRequestWaiter = "message_text" // 客服发出文本消息 TypeRequestWaiterMessageImage TypeRequestWaiter = "message_image" // 客服发出图片 TypeRequestWaiterDisconnect TypeRequestWaiter = "disconnect" // 请求断开连接 TypeRequestWaiterGetHistory TypeRequestWaiter = "get_history" // 请求获取用户聊天记录,应该返回 `message_history`, 需要指定 payload TypeRequestWaiterGetHistorySession TypeRequestWaiter = "get_history_session" // 请求获取客服的会话记录,应该返回 `session_history` TypeRequestWaiterRate TypeRequestWaiter = "rate" // 客服发送评分的操作 )
客服发出的消息类型
func (TypeRequestWaiter) String ¶ added in v0.7.0
func (c TypeRequestWaiter) String() string
type TypeResponseUser ¶
type TypeResponseUser typeForWriteMessage // 输出给用户的消息类型
const ( TypeResponseUserAuthSuccess TypeResponseUser = "auth_success" // 初始化,告诉用户当前的链接 ID TypeResponseUserNotConnect TypeResponseUser = "not_connect" // 尚未连接 TypeResponseUserConnectSuccess TypeResponseUser = "connect_success" // 连接成功,现在可以开始对话 TypeResponseUserMessageHistory TypeResponseUser = "message_history" // 用户的聊天记录 TypeResponseUserDisconnected TypeResponseUser = "disconnected" // 客服与用户断开连接 TypeResponseUserConnectQueue TypeResponseUser = "connect_queue" // 正在排队,请等待 TypeResponseUserMessageText TypeResponseUser = "message_text" // 用户收到文本消息 TypeResponseUserMessageTextSuccess TypeResponseUser = "message_text_success" // message_text 的回执 TypeResponseUserMessageImage TypeResponseUser = "message_image" // 用户收到的图片 TypeResponseUserMessageImageSuccess TypeResponseUser = "message_image_success" // message_image 的回执 TypeResponseUserIdle TypeResponseUser = "idle" // 当前连接出于空闲状态 TypeResponseUserError TypeResponseUser = "error" // 用户收到一个错误 TypeResponseUserRate TypeResponseUser = "rate" // 对于本次会话的评分 TypeResponseUserRateSuccess TypeResponseUser = "rate_success" // 用户评分之后的回执 )
用户收到的类型
func (TypeResponseUser) String ¶ added in v0.7.0
func (c TypeResponseUser) String() string
type TypeResponseWaiter ¶
type TypeResponseWaiter typeForWriteMessage // 输出给客服的消息类型
const ( TypeResponseWaiterMessageText TypeResponseWaiter = "message_text" // 客服收到文本消息 TypeResponseWaiterMessageTextSuccess TypeResponseWaiter = "message_text_success" // message_text 成功的回执 TypeResponseWaiterMessageImage TypeResponseWaiter = "message_image" // 客服收到的图片 TypeResponseWaiterMessageImageSuccess TypeResponseWaiter = "message_image_success" // message_image 成功的回执 TypeResponseWaiterNewConnection TypeResponseWaiter = "new_connection" // 有新连接 TypeResponseWaiterDisconnected TypeResponseWaiter = "disconnected" // 有新连接断开 TypeResponseWaiterKickOut TypeResponseWaiter = "kickout" // 被踢下线 TypeResponseWaiterUnready TypeResponseWaiter = "unready" // 客服进入未就绪状态 TypeResponseWaiterMessageHistory TypeResponseWaiter = "message_history" // 用户的聊天记录 TypeResponseWaiterSessionHistory TypeResponseWaiter = "session_history" // 客服的会话记录 TypeResponseWaiterRateSuccess TypeResponseWaiter = "rate_success" // 客服发起评分之后的回执 TypeResponseWaiterRateUserSuccess TypeResponseWaiter = "rate_user_success" // 用户评分之后的回执 TypeResponseWaiterError TypeResponseWaiter = "error" // 有新连接断开 )
客服收到的消息
func (TypeResponseWaiter) String ¶ added in v0.7.0
func (c TypeResponseWaiter) String() string
Click to show internal directories.
Click to hide internal directories.