Bläddra i källkod

坐席sdk接口开发,checkin 自测通

刘威 4 månader sedan
förälder
incheckning
ecdcbd92ef

+ 22 - 20
src/core/callcenter/agent.py

@@ -1,5 +1,7 @@
 #!/usr/bin/env python3
 # encoding:utf-8
+
+import traceback
 from src.core.callcenter.constant import START_AGENT_NUM
 from src.core.callcenter.enumeration import AgentState, AgentCheck, AgentHeartState, AgentServiceState, AgentLogState, \
     AgentScene, BizErrorCode, WorkStatus, DownEvent, HumanState
@@ -62,7 +64,6 @@ class AgentOperService:
         if req.scene == AgentScene.MANUAL.code:
             # 如果是手动外呼增加置闲
             self._handle_idle(req.scene, agent)
-
         return self._push_event_for_checkin(agent, agent_monitor, phone, req.scene)
 
     def checkout(self, request: AgentActionRequest):
@@ -106,7 +107,7 @@ class AgentOperService:
     def _push_event_for_checkin(self, agent, agent_monitor, phone, scene):
         """坐席签入事件推送"""
         agent_scene = AgentScene.get_by_code(scene)
-        self.push_handler.push_on_agent_work_report(agent.saas_id, "", agent.out_id, agent_scene, WorkStatus.LOGIN_SUCCESS)
+        self.push_handler.push_on_agent_work_report(agent.saas_id, "", agent.out_id, "", agent_scene, WorkStatus.LOGIN_SUCCESS)
 
         event_data = AgentEventData(agent.saas_id, agent.out_id)
         event_data.data = {'eventName': DownEvent.ON_INITAL_SUCCESS.code,
@@ -117,12 +118,12 @@ class AgentOperService:
                                    'sipServer': phone.sip_server
                                    }
                            }
-        return event_data
+        return event_data.__dict__
 
     def _push_event_for_idle(self, agent, scene):
         """坐席置闲事件推送"""
         agent_scene = AgentScene.get_by_code(scene)
-        self.push_handler.push_on_agent_work_report(agent.saas_id, "", agent.out_id, agent_scene, WorkStatus.AGENT_READY)
+        self.push_handler.push_on_agent_work_report(agent.saas_id, "", agent.out_id, "", agent_scene, WorkStatus.AGENT_READY)
 
 
 class AgentService:
@@ -281,29 +282,29 @@ class AgentMonitorService:
             res.append(data)
         return res
 
-    def update_check_in(self, agent_monitor):
+    def update_checkin(self, agent_monitor):
         agent_monitor.check_state = AgentCheck.IN.code
-        agent_monitor.check_in_time = datetime.utcnow
+        agent_monitor.check_in_time = datetime.utcnow()
         agent_monitor.heart_state = AgentHeartState.NORMAL.code
-        agent_monitor.heart_time = datetime.utcnow
+        agent_monitor.heart_time = datetime.utcnow()
         db.session.commit()
 
-    def update_check_out(self, agent_monitor):
+    def update_checkout(self, agent_monitor):
         agent_monitor.check_state = AgentCheck.OUT.code
-        agent_monitor.check_out_time = datetime.utcnow
+        agent_monitor.check_out_time = datetime.utcnow()
         agent_monitor.service_state = AgentServiceState.LOGOUT.code
         agent_monitor.heart_state = AgentHeartState.DEFAULT.code
-        agent_monitor.heart_time = datetime.utcnow
+        agent_monitor.heart_time = datetime.utcnow()
         db.session.commit()
 
     def update_idle(self, agent_monitor):
         agent_monitor.service_state = AgentServiceState.IDLE.code
-        agent_monitor.idle_time = datetime.utcnow
+        agent_monitor.idle_time = datetime.utcnow()
         db.session.commit()
 
     def update_busy(self, agent_monitor):
         agent_monitor.service_state = AgentServiceState.BUSY.code
-        agent_monitor.busy_time = datetime.utcnow
+        agent_monitor.busy_time = datetime.utcnow()
         db.session.commit()
 
     def update_dialing(self, agent_monitor):
@@ -312,12 +313,12 @@ class AgentMonitorService:
 
     def update_calling(self, agent_monitor):
         agent_monitor.service_state = AgentServiceState.CALLING.code
-        agent_monitor.call_time = datetime.utcnow
+        agent_monitor.call_time = datetime.utcnow()
         db.session.commit()
 
     def update_processing(self, agent_monitor):
         agent_monitor.service_state = AgentServiceState.REPROCESSING.code
-        agent_monitor.hang_time = datetime.utcnow
+        agent_monitor.hang_time = datetime.utcnow()
         db.session.commit()
 
     def update_session_id(self, agent_monitor, session_id):
@@ -326,7 +327,7 @@ class AgentMonitorService:
 
     def update_heart_error(self, agent_monitor):
         agent_monitor.heart_state = AgentHeartState.ABNORMAL.code
-        agent_monitor.heart_time = datetime.utcnow
+        agent_monitor.heart_time = datetime.utcnow()
         db.session.commit()
 
     def _get_day_start(self):
@@ -351,7 +352,7 @@ class AgentActionLogService:
         if agent_log_enum:
             action_log.event_type = agent_log_enum.code
             action_log.event_desc = agent_log_enum.description
-        now = datetime.utcnow
+        now = datetime.utcnow()
         pre_date = None
         if agent_monitor.check_state == AgentCheck.IN.code:
             pre_date = agent_monitor.check_in_time
@@ -368,7 +369,7 @@ class AgentActionLogService:
     def insert_service_state(self, agent_monitor, agent_service_state: AgentServiceState, agent_log_enum: AgentLogState,
                              task_id=None, service_id=None):
         if agent_monitor.service_state == agent_service_state.code:
-            self.logger.info("agent action log insert service state same %s %s", agent_monitor.service_state, agent_service_state.getValue())
+            self.logger.info("agent action log insert service state same %s %s", agent_monitor.service_state, agent_service_state.code)
 
         action_log = AgentActionLog()
         action_log.saas_id = agent_monitor.saas_id
@@ -382,7 +383,7 @@ class AgentActionLogService:
         if agent_log_enum:
             action_log.event_type = agent_log_enum.code
             action_log.event_desc = agent_log_enum.description
-        now = datetime.utcnow
+        now = datetime.utcnow()
         pre_date = None
         if agent_monitor.service_state == AgentServiceState.IDLE.code:
             pre_date = agent_monitor.idle_time
@@ -426,8 +427,8 @@ class AgentStateService:
         key = self._check_in_key(saas_id)
         state_data = AgentStateData()
         state_data.status = HumanState.DEFAULT.code
-        state_data.time = datetime.utcnow.timestamp()
-        self.redis_handler.redis.hset(key, phone_num, json.dumps(state_data))
+        state_data.time = datetime.utcnow().timestamp()
+        self.redis_handler.redis.hset(key, phone_num, state_data.to_json_string())
         self.redis_handler.redis.expire(key, self._get_expire_time())
 
     def checkout(self, saas_id, agent_id, phone_num):
@@ -480,6 +481,7 @@ def _get_newest_agent_number(saas_id):
 def _get_agent_monitor(saas_id, agent_number):
     monitor = AgentMonitor.query.filter(AgentMonitor.saas_id == saas_id,
                                         AgentMonitor.agent_num == agent_number).first()
+    print('_get_agent_monitor', saas_id, agent_number, monitor)
     return monitor
 
 

+ 16 - 25
src/core/callcenter/api.py

@@ -151,33 +151,24 @@ class AgentEventData:
         self.userId = user_id
         self.data = data
 
+    def __repr__(self):
+        return self.to_json_string()
+
+    def to_json_string(self):
+        return json.dumps(self.__dict__, ensure_ascii=False)
+
 
 class AgentStateData:
-    def __init__(self):
-        self._s = 0
-        self._t = 0
-        self.status = 0
-        self.time = 0
-        self.assign_time = 0
-        self.phone_num = ""
-
-    @property
-    def status(self):
-        return self._s
-
-    @status.setter
-    def status(self, value):
-        self._s = value
-        self.status = value
-
-    @property
-    def time(self):
-        return self._t
-
-    @time.setter
-    def time(self, value):
-        self._t = value
-        self.time = value
+    def __init__(self, _s=None, _t=None, status=None, time=None, assign_time=None, phone_num=None):
+        self._s = _s
+        self._t = _t
+        self.status = status
+        self.time = time
+        self.assign_time = assign_time
+        self.phone_num = phone_num
+
+    def to_json_string(self):
+        return json.dumps(self.__dict__, ensure_ascii=False)
 
 
 class HangupCallRequest:

+ 2 - 2
src/core/callcenter/enumeration.py

@@ -133,8 +133,8 @@ class WorkStatus(Enum):
     MULTI_IN_CONFERENCE = (28, "会议后座席振铃前状态")
     ANSWER_COMPENSATE = (101, "坐席接通补偿!")
 
-    def __init__(self, work_status=None, description=None):
-        self.work_status = work_status
+    def __init__(self, code=None, description=None):
+        self.code = code
         self.description = description
 
 

+ 2 - 2
src/core/callcenter/push.py

@@ -12,11 +12,11 @@ class PushHandler:
     # def push_on_agent_report(self, saas_id, out_id, scene: AgentScene, service_state: AgentServiceState):
     #     pass
 
-    def push_on_agent_work_report(self, saas_id, flow_id, user_id, call_id, scene: AgentScene, work_status: WorkStatus, description):
+    def push_on_agent_work_report(self, saas_id, flow_id, user_id, call_id, scene: AgentScene, work_status: WorkStatus):
         data = {
             'eventName': DownEvent.ON_AGENT_WORK_REPORT.code,
             'ext': {'workStatus': work_status.code,
-                    'description': description,
+                    'description': work_status.description,
                     'callId': call_id,
                     'ctiFlowId': flow_id,
                     'scene': scene.code

+ 2 - 2
src/core/callcenter/ws.py

@@ -8,8 +8,8 @@ from flask_socketio import SocketIO, Namespace, join_room, leave_room, emit
 socketio = SocketIO(app)
 
 
-def common_down_data(user_id, data):
-    emit('common_down_data', data, room=user_id)
+def common_down_data(user_id, data, namespace='/ws/cs-im'):
+    emit('common_down_data', data, room=user_id, namespace=namespace)
 
 
 def common_down_cmd(user_id, data):

+ 4 - 1
src/core/datasource.py

@@ -15,11 +15,14 @@ from src.core import singleton
 from redis import StrictRedis, ConnectionPool
 
 SERVE_HOST = os.environ.get("SERVE_HOST")
-SERVE_HOST = "192.168.100.195"
+SERVE_HOST = "192.168.124.6"
 MYSQL_PASSWORD = 'EKoAe3H8xybQKrFPApXM'
 
 if SERVE_HOST != "192.168.100.159":
+    SIP_SERVER = SERVE_HOST
     MYSQL_PASSWORD = "12345678"
+else:
+    SIP_SERVER = "pbx.fuxicarbon.com"
 
 # RADIS_HOST = os.environ.get("REDIS_HOST", "10.0.0.24")
 #

+ 3 - 1
src/core/voip/bot.py

@@ -10,6 +10,8 @@ import traceback
 
 import pjsua2 as pj
 from enum import Enum
+
+from src.core.datasource import SIP_SERVER
 from src.core.voip.constant import *
 
 import requests
@@ -431,7 +433,7 @@ class ToTextBotAgent:
 
 class BotAgent:
 
-    def __init__(self, logger, user_part_range=range(1001, 1019), host="pbx.fuxicarbon.com", port="5060", password="slibra@#123456"):
+    def __init__(self, logger, user_part_range=range(1001, 1019), host=SIP_SERVER, port="5060", password="slibra@#123456"):
         self.logger = logger
         self.user_part_range, self.host, self.port, self.password = user_part_range, host, port, password
         self.user_part_pool = queue.Queue(maxsize=len(user_part_range))