diff --git a/controller/agent.go b/controller/agent.go index 318d1479..56ba731b 100644 --- a/controller/agent.go +++ b/controller/agent.go @@ -8,7 +8,6 @@ import ( ) func (c *Controller) GetAgentSession(ctx context.Context, session *auth_manager.Session, domainId, userId int64) (*model.AgentSession, model.AppError) { - v, err := c.app.AgentCC(ctx, session.Domain(domainId), userId) if err != nil { return nil, err diff --git a/model/cc_agent.go b/model/cc_agent.go index 25ff30d4..6286aff5 100644 --- a/model/cc_agent.go +++ b/model/cc_agent.go @@ -251,6 +251,7 @@ type AgentSession struct { Status string `json:"status" db:"status"` StatusPayload *string `json:"status_payload" db:"status_payload"` StatusComment *string `json:"status_comment" db:"status_comment"` + OnlineStatus *Lookup `json:"online_status" db:"online_status"` LastStatusChange int64 `json:"last_status_change" db:"last_status_change"` StatusDuration int64 `json:"status_duration" db:"status_duration"` OnDemand bool `json:"on_demand" db:"on_demand"` @@ -282,8 +283,8 @@ func (a *AgentCC) Valid() AppError { return nil } -func (a AgentSession) ToMap() map[string]interface{} { - out := make(map[string]interface{}) +func (a AgentSession) ToMap() map[string]any { + out := make(map[string]any) data, _ := json.Marshal(a) _ = json.Unmarshal(data, &out) return out diff --git a/store/sqlstore/cc_agent_store.go b/store/sqlstore/cc_agent_store.go index f469f9c2..90b3a07a 100644 --- a/store/sqlstore/cc_agent_store.go +++ b/store/sqlstore/cc_agent_store.go @@ -711,7 +711,8 @@ func (s SqlAgentStore) GetSession(ctx context.Context, domainId, userId int64) ( FROM directory.wbt_user aud WHERE aud.id = any(a.auditor_ids)) auditor, a.screen_control, - exists(select 1 from call_center.socket_session_view ss where ss.user_id = a.user_id and ss.pong < 65 and application_name = 'desc_track') as desc_track + exists(select 1 from call_center.socket_session_view ss where ss.user_id = a.user_id and ss.pong < 65 and application_name = 'desc_track') as desc_track, + call_center.cc_get_lookup(os.id, os.name) as online_status from call_center.cc_agent a left join call_center.cc_team t on t.id = a.team_id LEFT JOIN LATERAL ( SELECT jsonb_agg(json_build_object('channel', c.channel, 'state', c.state, 'open', 0, 'max_open', c.max_opened, @@ -724,6 +725,7 @@ from call_center.cc_agent a 'timeout', call_center.cc_view_timestamp(c.timeout))) AS x FROM call_center.cc_agent_channel c WHERE c.agent_id = a.id) ch ON true + left join call_center.cc_online_skills os on os.id = a.status_id where a.user_id = :UserId and a.domain_id = :DomainId`, map[string]any{ "UserId": userId, "DomainId": domainId, diff --git a/wsapi/agent.go b/wsapi/agent.go index 62863c81..08531dfb 100644 --- a/wsapi/agent.go +++ b/wsapi/agent.go @@ -35,19 +35,18 @@ func (api *API) subscribeAgentsStatus(ctx context.Context, conn *app.WebConn, re return nil, h.SubscribeSessionAgentStatus(conn, int(agentId)) } -func (api *API) getAgentSession(ctx context.Context, conn *app.WebConn, req *model.WebSocketRequest) (map[string]interface{}, model.AppError) { - var userId int64 - var domainId int64 - var ok bool - if userId, ok = req.Data["user_id"].(int64); !ok { - userId = conn.UserId +func (api *API) getAgentSession(ctx context.Context, conn *app.WebConn, req *model.WebSocketRequest) (map[string]any, model.AppError) { + userID, ok := req.Get("user_id").(int64) + if !ok { + userID = conn.UserId } - if domainId, ok = req.Data["domain_id"].(int64); !ok { - domainId = conn.DomainId + domainID, ok := req.Get("domain_id").(int64) + if !ok { + domainID = conn.DomainId } - sess, err := api.ctrl.GetAgentSession(ctx, conn.GetSession(), domainId, userId) + sess, err := api.ctrl.GetAgentSession(ctx, conn.GetSession(), domainID, userID) if err != nil { return nil, err }