Browse Source

feat:init

余尚辉 5 tháng trước cách đây
mục cha
commit
2adee3ce02

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

@@ -4,7 +4,7 @@
 from .config import BaseConfig
 from flask import Flask, request, render_template_string
 from flask_sqlalchemy import SQLAlchemy
-
+from flask_cors import CORS
 db = SQLAlchemy()
 
 
@@ -14,7 +14,7 @@ def create_app():
     _app.config.from_object(BaseConfig)
 
     db.init_app(_app)
-
+    CORS(_app)
     # with app.app_context():
     #     from . import views  # Import routes
 

+ 23 - 19
src/core/callcenter/agent.py

@@ -54,29 +54,32 @@ class AgentOperService:
         db.session.commit()
 
     def checkin(self, req: AgentActionRequest):
-        agent = _get_agent(req.saas_id, req.agent_id)
-        if not agent or agent.agent_state == AgentState.DISABLE.code:
-            raise BizException(BizErrorCode.ERROR_NOT_FOLLOW_CHECK_IN)
-        phone = _get_phone(req.saas_id, agent.phone_num)
-
-        agent_monitor = _get_agent_monitor(req.saas_id, agent.agent_number)
-
-        agent_monitor.check_scene = req.scene
-        self.agent_monitor_service.update_checkin(agent_monitor)
-        self.agent_actionlog_service.insert_check_state(agent_monitor, AgentCheck.IN, AgentLogState.CHECKIN)
-        self.agent_state_service.checkin(agent.saas_id, agent.out_id, agent.phone_num)
-
-        if req.scene == AgentScene.MANUAL.code:
-            # 如果是手动外呼增加置闲
-            self._handle_idle(req.scene, agent)
-        return self._push_event_for_checkin(agent, agent_monitor, phone, req.scene)
+       try:
+           agent = _get_agent(req.saas_id, req.agent_id)
+           if not agent or agent.agent_state == AgentState.DISABLE.code:
+               raise BizException(BizErrorCode.ERROR_NOT_FOLLOW_CHECK_IN)
+           phone = _get_phone(req.saas_id, agent.phone_num)
+           agent_monitor = _get_agent_monitor(req.saas_id, agent.agent_num)
+
+           agent_monitor.check_scene = req.scene
+           self.agent_monitor_service.update_checkin(agent_monitor)
+           self.agent_actionlog_service.insert_check_state(agent_monitor, AgentCheck.IN, AgentLogState.CHECKIN)
+           self.agent_state_service.checkin(agent.saas_id, agent.out_id, agent.phone_num)
+
+           if req.scene == AgentScene.MANUAL.code:
+               # 如果是手动外呼增加置闲
+               self._handle_idle(req.scene, agent)
+           return self._push_event_for_checkin(agent, agent_monitor, phone, req.scene)
+       except Exception as e:
+           self.logger.error(traceback.format_exc())
+           raise e
 
     def checkout(self, req: AgentActionRequest):
         agent = _get_agent(req.saas_id, req.agent_id)
         if not agent or agent.agent_state == AgentState.DISABLE.code:
             raise BizException(BizErrorCode.AGENT_DISABLE_NOT_ALLOW_OPERATE)
 
-        agent_monitor = _get_agent_monitor(req.saas_id, agent.agent_number)
+        agent_monitor = _get_agent_monitor(req.saas_id, agent.agent_num)
         if not agent_monitor or agent_monitor.service_state == AgentServiceState.CALLING.code:
             raise BizException(BizErrorCode.AGENT_CALLING_NOT_ALLOW_OPERATE)
 
@@ -124,7 +127,7 @@ class AgentOperService:
 
     def turn_on(self, req: AgentActionRequest):
         agent = _get_agent(req.saas_id, req.agent_id)
-        agent_monitor = _get_agent_monitor(req.saas_id, agent.agent_number)
+        agent_monitor = _get_agent_monitor(req.saas_id, agent.agent_num)
         agent_scene = AgentScene.get_by_code(req.scene)
         if not agent_monitor:
             raise BizException(BizErrorCode.RECORD_NOT_EXIST_ERROR)
@@ -367,6 +370,7 @@ class AgentMonitorService:
         agent_monitor.service_state = AgentServiceState.LOGOUT.code
         agent_monitor.heart_state = AgentHeartState.DEFAULT.code
         agent_monitor.heart_time = datetime.utcnow()
+        print("update_checkout", agent_monitor.check_out_time)
         db.session.commit()
 
     def update_idle(self, agent_monitor):
@@ -572,7 +576,7 @@ class AgentStateService:
 
     def busy_hash(self, saas_id, agent_id, phone_num, service_id):
         cache_agent_map = self.get_cache_agent_map(saas_id, service_id)
-        state_data = cache_agent_map[phone_num]
+        state_data = cache_agent_map.get(phone_num)
         key = self._key(saas_id, service_id)
         if state_data is None:
             return

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

@@ -12,7 +12,7 @@ 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, description=""):
         data = {
             'eventName': DownEvent.ON_AGENT_WORK_REPORT.code,
             'ext': {'workStatus': work_status.code,
@@ -23,7 +23,7 @@ class PushHandler:
                     }
         }
         self.logger.info("flowId:[%s] OnAgentWorkReport push:[%s].", flow_id, json.dumps(data))
-        common_down_data(user_id, data)
+        common_down_data(user_id, json.dumps(data))
     def push_on_agent_report(self, saas_id, out_id, scene: AgentScene, service_state: AgentServiceState):
        pass
 

+ 52 - 33
src/core/callcenter/views.py

@@ -65,16 +65,7 @@ def get_cdn_url():
 def get_init_config():
     """获取初始化配置"""
     try:
-        print("Request Object: %s", request)
-        print("Headers: %s", request.headers)
-        print("JSON Data: %s", request.get_json())
-        print("Data: %s", request.data)
-        print("Method: %s", request.method)
-        print("URL: %s", request.url)
-
         data = request.get_json()
-        print("Parsed Data: %s", data)
-
         param = AgentActionRequest.from_json(data=data)
         res = agent_service.get_and_check(param)
         return success_response(res)
@@ -87,60 +78,88 @@ def get_init_config():
 @app.route('/open/agent/check-in', methods=['POST'])
 def check_in():
     """坐席签入"""
-    data = request.get_json()
-    param = AgentActionRequest.from_json(data=data)
-    res = agent_oper_service.checkin(param)
-    return success_response(res)
+    try:
+        data = request.get_json()
+        param = AgentActionRequest.from_json(data=data)
+        res = agent_oper_service.checkin(param)
+        return success_response(res)
+    except Exception as e:
+        print("Exception occurred: %s", str(e))
+        return {"error": "An error occurred", "details": str(e)}, 500
 
 
 @app.route('/open/agent/check-out', methods=['POST'])
 def check_out():
     """坐席签出"""
-    data = request.get_json()
-    param = AgentActionRequest.from_json(data=data)
-    return agent_oper_service.checkout(param)
+    try:
+        data = request.get_json()
+        param = AgentActionRequest.from_json(data=data)
+        return agent_oper_service.checkout(param)
+    except Exception as e:
+        print("Exception occurred: %s", str(e))
+        return {"error": "An error occurred", "details": str(e)}, 500
 
 
 @app.route('/open/agent/busy', methods=['POST'])
 def busy():
     """坐席置忙"""
-    data = request.get_json()
-    param = AgentActionRequest.from_json(data=data)
-    return agent_oper_service.busy(param)
+    try:
+        data = request.get_json()
+        param = AgentActionRequest.from_json(data=data)
+        return agent_oper_service.busy(param)
+    except Exception as e:
+        print("Exception occurred: %s", str(e))
+        return {"error": "An error occurred", "details": str(e)}, 500
 
 
 @app.route('/open/agent/idle', methods=['POST'])
 def idle():
     """坐席置闲"""
-    data = request.get_json()
-    param = AgentActionRequest.from_json(data=data)
-    return agent_oper_service.idle(param)
+    try:
+        data = request.get_json()
+        param = AgentActionRequest.from_json(data=data)
+        return agent_oper_service.idle(param)
+    except Exception as e:
+        print("Exception occurred: %s", str(e))
+        return {"error": "An error occurred", "details": str(e)}, 500
 
 
 @app.route('/open/agent/turn-on', methods=['POST'])
 def turn_on():
     """接通"""
-    data = request.get_json()
-    param = AgentActionRequest.from_json(data=data)
-    return agent_oper_service.checkin(param)
+    try:
+        data = request.get_json()
+        param = AgentActionRequest.from_json(data=data)
+        return agent_oper_service.checkin(param)
+    except Exception as e:
+        print("Exception occurred: %s", str(e))
+        return {"error": "An error occurred", "details": str(e)}, 500
 
 
 @app.route('/open/agent/hang-up', methods=['POST'])
 def hang_up():
     """挂断"""
-    data = request.get_json()
-    param = AgentActionRequest.from_json(data=data)
-    res = call_service.hangup(param)
-    return success_response(res)
+    try:
+        data = request.get_json()
+        param = AgentActionRequest.from_json(data=data)
+        res = call_service.hangup(param)
+        return success_response(res)
+    except Exception as e:
+        print("Exception occurred: %s", str(e))
+        return {"error": "An error occurred", "details": str(e)}, 500
 
 
 @app.route('/open/agent/agent-state', methods=['POST'])
 def agent_state():
     """获取坐席状态"""
-    data = request.get_json()
-    param = HumanServiceQueryRequest.from_json(data)
-    res = agent_service.watch_agent_state(param)
-    return success_response(res)
+    try:
+        data = request.get_json()
+        param = HumanServiceQueryRequest.from_json(data)
+        res = agent_service.watch_agent_state(param)
+        return success_response(res)
+    except Exception as e:
+        print("Exception occurred: %s", str(e))
+        return {"error": "An error occurred", "details": str(e)}, 500
 
 
 @app.route('/open/agent/manual-call', methods=['POST'])

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

@@ -5,7 +5,7 @@ from src.core.callcenter.views import app
 from flask import request, session
 from flask_socketio import SocketIO, Namespace, join_room, leave_room, emit
 
-socketio = SocketIO(app)
+socketio = SocketIO(app, cors_allowed_origins="*")
 
 
 def common_down_data(user_id, data, namespace='/ws/cs-im'):

+ 4 - 3
src/core/datasource.py

@@ -15,12 +15,13 @@ 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.110.203"
 MYSQL_PASSWORD = 'EKoAe3H8xybQKrFPApXM'
 
 if SERVE_HOST != "192.168.100.159":
-    SIP_SERVER = SERVE_HOST
-    MYSQL_PASSWORD = "12345678"
+    # SIP_SERVER = SERVE_HOST
+    # MYSQL_PASSWORD = "12345678"
+    SIP_SERVER = "pbx.fuxicarbon.com"
 else:
     SIP_SERVER = "pbx.fuxicarbon.com"
 

+ 1 - 0
src/core/server.py

@@ -4,6 +4,7 @@
 from src.core.callcenter.views import app
 from src.core.callcenter.ws import socketio
 
+
 if __name__ == '__main__':
     socketio.run(app, host='0.0.0.0', port=8000, allow_unsafe_werkzeug=True, debug=True)
     # app.run(host='127.0.0.1', port=8000, debug=True)