web.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. #!/usr/bin/env python3
  2. # encoding:utf-8
  3. import json
  4. import threading
  5. from logging.config import dictConfig
  6. import src.core.callcenter.cache as Cache
  7. from src.core.callcenter.agent import AgentService
  8. from src.core.callcenter.constant import success
  9. from src.core.callcenter.enumeration import CallType
  10. from src.core.callcenter.esl.client import InboundClient
  11. from flask import Flask, request, render_template_string
  12. from src.core.callcenter.call import CallService
  13. from src.core.callcenter.model import MakeCallRequest, AgentInfo, AgentActionRequest, HangupCallRequest
  14. dictConfig({
  15. "version": 1,
  16. "disable_existing_loggers": False, # 不覆盖默认配置
  17. "formatters": { # 日志输出样式
  18. "default": {
  19. "format": "%(asctime)s - %(module)s.%(lineno)d - %(levelname)s - %(threadName)s: %(message)s"
  20. }
  21. },
  22. "handlers": {
  23. "console": {
  24. "class": "logging.StreamHandler", # 控制台输出
  25. "level": "DEBUG",
  26. "formatter": "default",
  27. },
  28. "log_file": {
  29. "class": "logging.handlers.RotatingFileHandler",
  30. "level": "INFO",
  31. "formatter": "default", # 日志输出样式对应formatters
  32. "filename": "./logs/flask.log", # 指定log文件目录
  33. "maxBytes": 20*1024*1024, # 文件最大20M
  34. "backupCount": 10, # 最多10个文件
  35. "encoding": "utf8", # 文件编码
  36. },
  37. },
  38. "root": {
  39. "level": "INFO", # # handler中的level会覆盖掉这里的level
  40. "handlers": ["console", "log_file"],
  41. },
  42. }
  43. )
  44. app = Flask(__name__)
  45. app.config['SECRET_KEY'] = ''
  46. client = InboundClient(app.logger)
  47. call_service = CallService(client, app.logger)
  48. agent_service = AgentService(client, app.logger)
  49. @app.route('/')
  50. def index():
  51. return render_template_string("""<!DOCTYPE html>
  52. <html lang="en">
  53. <head>
  54. <meta charset="UTF-8">
  55. <title>SocketIO Example</title>
  56. <script src="https://cdn.socket.io/4.0.0/socket.io.min.js"></script>
  57. </head>
  58. <body>
  59. <h1>SocketIO Test</h1>
  60. <script>
  61. var socket = io('/ws/cs-im');
  62. socket.on('response', function(msg) {
  63. alert(msg);
  64. });
  65. socket.on('login', function(msg) {
  66. alert('Received from server: ' + msg);
  67. });
  68. socket.emit('login', {'appCode':'1111','userId':'1111','token':'1111'});
  69. </script>
  70. </body>
  71. </html>""")
  72. @app.route('/open/agent/get-cdn-url', methods=['POST'])
  73. def get_cdn_url():
  74. """获取cdn地址"""
  75. return 'Hello World!'
  76. @app.route('/open/agent/get-init-config', methods=['POST'])
  77. def get_init_config():
  78. """获取初始化配置"""
  79. return 'Hello World!'
  80. @app.route('/open/agent/check-in', methods=['POST'])
  81. def check_in():
  82. """坐席签入"""
  83. param = AgentActionRequest.from_json(json_object=request.json())
  84. return agent_service.checkin(param)
  85. @app.route('/open/agent/check-out', methods=['POST'])
  86. def check_out():
  87. """坐席签出"""
  88. param = AgentActionRequest.from_json(json_object=request.json())
  89. return agent_service.checkin(param)
  90. return 'Hello World!'
  91. @app.route('/open/agent/busy', methods=['POST'])
  92. def busy():
  93. """坐席置忙"""
  94. param = AgentActionRequest.from_json(json_object=request.json())
  95. return agent_service.checkin(param)
  96. return 'Hello World!'
  97. @app.route('/open/agent/idle', methods=['POST'])
  98. def idle():
  99. """坐席置闲"""
  100. param = AgentActionRequest.from_json(json_object=request.json())
  101. return agent_service.checkin(param)
  102. return 'Hello World!'
  103. @app.route('/open/agent/turn-on', methods=['POST'])
  104. def turn_on():
  105. """接通"""
  106. param = AgentActionRequest.from_json(json_object=request.json())
  107. return agent_service.checkin(param)
  108. return 'Hello World!'
  109. @app.route('/open/agent/hang-up', methods=['POST'])
  110. def hang_up():
  111. """挂断"""
  112. param = AgentActionRequest.from_json(json_object=request.json())
  113. return agent_service.checkin(param)
  114. return 'Hello World!'
  115. @app.route('/open/agent/agent-state', methods=['POST'])
  116. def agent_state():
  117. """获取坐席状态"""
  118. return 'Hello World!'
  119. @app.route('/open/agent/manual-call', methods=['POST'])
  120. def manual_call():
  121. """外呼"""
  122. # agentId: string
  123. # vccId: string
  124. # password: string
  125. # scene: string
  126. # ctiFlowId?: string
  127. # monitorScene?: string
  128. # called: string
  129. # circuitUid: string
  130. # ext?: object
  131. # callId: string
  132. data = request.json()
  133. agent = Cache.get_agent_info(data.get('agentId'))
  134. req = MakeCallRequest(saas_id=data.get('vccId'), call_type=CallType.OUTBOUND_CALL, caller=agent.agent_number, called=data.get('called'), follow_data=data.get('ext'))
  135. res = call_service.call(req, agent)
  136. return success(res)
  137. @app.route('/open/agent/manual-hang', methods=['POST'])
  138. def manual_hang():
  139. """挂断"""
  140. data = request.json()
  141. agent = Cache.get_agent_info(data.get('agentId'))
  142. req = HangupCallRequest(saas_id=data.get('vccId'), call_id=data.get('callId'), agent_number=agent.agent_number)
  143. call_service.hangup(req)
  144. return success()
  145. @app.route('/open/agent/listen', methods=['POST'])
  146. def listen():
  147. """发起监听"""
  148. return 'Hello World!'
  149. @app.route('/open/agent/reload-phone', methods=['POST'])
  150. def reload_phone():
  151. """重新获取分机信息"""
  152. return 'Hello World!'
  153. @app.route('/open/monitor/load-agent-group-data', methods=['POST'])
  154. def load_agent_group_data():
  155. """获取监控组成员信息"""
  156. return 'Hello World!'
  157. @app.route('/open/human-service/member-active', methods=['POST'])
  158. def member_active():
  159. """机器人外呼-签入人工组"""
  160. return 'Hello World!'
  161. @app.route('/open/num/generate', methods=['POST'])
  162. def num_generate():
  163. """获取 cti 流程 ID"""
  164. return 'Hello World!'