|
@@ -2,16 +2,29 @@
|
|
|
# encoding:utf-8
|
|
|
|
|
|
import json
|
|
|
-from urllib.parse import urlparse
|
|
|
-from typing import Dict, Any, Optional
|
|
|
+from typing import Dict, Any, Optional, List
|
|
|
|
|
|
+from src.core.callcenter.constant import get_json_dict
|
|
|
from src.core.callcenter.exception import SipUriSyntaxException
|
|
|
from src.core.datasource import SIP_SERVER
|
|
|
from src.core.callcenter.esl.constant.esl_constant import SPLIT, SIP_HEADER
|
|
|
-from src.core.callcenter.enumeration import CallType, DeviceType
|
|
|
+from src.core.callcenter.enumeration import CallType, DeviceType, Direction, CdrType, NextType
|
|
|
|
|
|
|
|
|
-class AgentCallRequest:
|
|
|
+class BaseApi:
|
|
|
+ @classmethod
|
|
|
+ def from_json(cls, json_string):
|
|
|
+ data = get_json_dict(json_string)
|
|
|
+ return cls(**data)
|
|
|
+
|
|
|
+ def to_json_string(self):
|
|
|
+ return json.dumps(self, default=lambda x: x.__dict__, ensure_ascii=False)
|
|
|
+
|
|
|
+ def __repr__(self):
|
|
|
+ return self.to_json_string()
|
|
|
+
|
|
|
+
|
|
|
+class AgentCallRequest(BaseApi):
|
|
|
"""
|
|
|
呼叫请求对象
|
|
|
"""
|
|
@@ -39,16 +52,8 @@ class AgentCallRequest:
|
|
|
# 随路数据
|
|
|
self.follow_data = follow_data
|
|
|
|
|
|
- def to_json_string(self):
|
|
|
- return json.dumps(self.__dict__, ensure_ascii=False)
|
|
|
|
|
|
- @classmethod
|
|
|
- def from_json(cls, json_string):
|
|
|
- data = json.loads(json_string)
|
|
|
- return cls(**data)
|
|
|
-
|
|
|
-
|
|
|
-class AgentRequest:
|
|
|
+class AgentRequest(BaseApi):
|
|
|
def __init__(self, saas_id, agent_number, agent_name, out_id, agent_password, agent_type, phone_number, distribute,
|
|
|
agent_state, identity_type):
|
|
|
# 租户隔离
|
|
@@ -73,7 +78,7 @@ class AgentRequest:
|
|
|
self.identity_type = identity_type
|
|
|
|
|
|
|
|
|
-class AgentQueryRequest:
|
|
|
+class AgentQueryRequest(BaseApi):
|
|
|
def __init__(self, saas_id, agent_number, out_id, agent_type, agent_name, page=1, size=10):
|
|
|
# 租户隔离
|
|
|
self.saas_id = saas_id
|
|
@@ -89,11 +94,10 @@ class AgentQueryRequest:
|
|
|
self.size = size
|
|
|
|
|
|
|
|
|
-class AgentActionRequest:
|
|
|
+class AgentActionRequest(BaseApi):
|
|
|
"""
|
|
|
坐席操作
|
|
|
"""
|
|
|
-
|
|
|
def __init__(self, saas_id, agent_id, agent_number=None, out_id=None, identity_type=None, scene='manual',**kwargs):
|
|
|
self.saas_id =saas_id
|
|
|
# 坐席工号
|
|
@@ -107,26 +111,20 @@ class AgentActionRequest:
|
|
|
# 场景 manual:手动外呼; robot:机器人外呼; monitor:监听
|
|
|
self.scene = scene
|
|
|
|
|
|
- @classmethod
|
|
|
- def from_json(cls, data):
|
|
|
- return cls(**data)
|
|
|
|
|
|
-
|
|
|
-class HumanServiceQueryRequest:
|
|
|
+class HumanServiceQueryRequest(BaseApi):
|
|
|
"""人工组查询"""
|
|
|
+
|
|
|
def __init__(self, saas_id, service_id, agent_state, agent_ids: Dict[str, Any] = {}):
|
|
|
self.saasId = saas_id
|
|
|
self.serviceId = service_id
|
|
|
self.agentState = agent_state
|
|
|
self.agentIds = agent_ids
|
|
|
|
|
|
- @classmethod
|
|
|
- def from_json(cls, data):
|
|
|
- return cls(**data)
|
|
|
-
|
|
|
|
|
|
-class AgentMonitorData:
|
|
|
+class AgentMonitorData(BaseApi):
|
|
|
"""坐席状态信息"""
|
|
|
+
|
|
|
def __init__(self, saas_id=None, agent_num=None, agent_name=None, out_id=None,
|
|
|
check_state=None, online_state=None, check_in_time=None, check_out_time=None,
|
|
|
service_state=None, busy_time=None, idle_time=None, call_time=None, hang_time=None,
|
|
@@ -150,20 +148,14 @@ class AgentMonitorData:
|
|
|
self.check_scene = check_scene
|
|
|
|
|
|
|
|
|
-class AgentEventData:
|
|
|
+class AgentEventData(BaseApi):
|
|
|
def __init__(self, app_code, user_id, data: Dict[str, Any] = {}):
|
|
|
self.appCode = app_code
|
|
|
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:
|
|
|
+class AgentStateData(BaseApi):
|
|
|
def __init__(self, _s=None, _t=None, status=None, time=None, assign_time=None, phone_num=None):
|
|
|
self._s = _s
|
|
|
self._t = _t
|
|
@@ -172,11 +164,8 @@ class AgentStateData:
|
|
|
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:
|
|
|
+class HangupCallRequest(BaseApi):
|
|
|
def __init__(self, saas_id, call_id, agent_number):
|
|
|
# saasId(必填)
|
|
|
self.saas_id = saas_id
|
|
@@ -186,7 +175,7 @@ class HangupCallRequest:
|
|
|
self.agent_number = agent_number
|
|
|
|
|
|
|
|
|
-class CheckInCallRequest:
|
|
|
+class CheckInCallRequest(BaseApi):
|
|
|
"""检查是否在通话中实体"""
|
|
|
|
|
|
def __init__(self, saas_id, agent_number):
|
|
@@ -194,10 +183,10 @@ class CheckInCallRequest:
|
|
|
self.agent_number = agent_number
|
|
|
|
|
|
|
|
|
-class MakeCallContext:
|
|
|
+class MakeCallContext(BaseApi):
|
|
|
|
|
|
- def __init__(self,
|
|
|
- pbx_server=SIP_SERVER,
|
|
|
+ def __init__(self,
|
|
|
+ sip_server=SIP_SERVER,
|
|
|
route_gateway_name="gateway-fxo",
|
|
|
display: Optional[str] = None,
|
|
|
caller: Optional[str] = None,
|
|
@@ -213,7 +202,7 @@ class MakeCallContext:
|
|
|
service_id: Optional[str] = None,
|
|
|
call_type: Optional[int] = None):
|
|
|
# fs 地址
|
|
|
- self.pbx_server = pbx_server
|
|
|
+ self.sip_server = sip_server
|
|
|
# 线路名(非必传)
|
|
|
self.route_gateway_name = route_gateway_name
|
|
|
# 外显号(必传)
|
|
@@ -271,15 +260,15 @@ class MakeCallContext:
|
|
|
if self.service_id:
|
|
|
headers.append(f"{SIP_HEADER}service_id={self.service_id}")
|
|
|
|
|
|
- # if self.device_type == DeviceType.CUSTOMER:
|
|
|
- # headers += [
|
|
|
- # "RECORD_STEREO_SWAP=true"
|
|
|
- # ]
|
|
|
- # else:
|
|
|
- # headers += [
|
|
|
- # "RECORD_STEREO_SWAP=false",
|
|
|
- # "continue_on_fail=true"
|
|
|
- # ]
|
|
|
+ if self.device_type == DeviceType.CUSTOMER.code:
|
|
|
+ headers += [
|
|
|
+ "RECORD_STEREO_SWAP=true"
|
|
|
+ ]
|
|
|
+ else:
|
|
|
+ headers += [
|
|
|
+ "RECORD_STEREO_SWAP=false",
|
|
|
+ "continue_on_fail=true"
|
|
|
+ ]
|
|
|
|
|
|
if self.sip_header_map:
|
|
|
headers.extend([f"{SIP_HEADER}{k}={v}" for k, v in self.sip_header_map.items()])
|
|
@@ -287,10 +276,14 @@ class MakeCallContext:
|
|
|
return SPLIT.join(headers)
|
|
|
|
|
|
def get_called(self) -> str:
|
|
|
- if self.called_prefix and self.device_type == DeviceType.CUSTOMER:
|
|
|
+ if self.called_prefix and self.device_type == DeviceType.CUSTOMER.code:
|
|
|
return f"{self.called_prefix}{self.called}"
|
|
|
return self.called
|
|
|
|
|
|
+ def get_realm(self):
|
|
|
+ sip_uri = SipURI(self.sip_server)
|
|
|
+ return sip_uri.get_host()
|
|
|
+
|
|
|
|
|
|
class SipURI:
|
|
|
DEFAULT_PORT = -1
|
|
@@ -372,12 +365,12 @@ class SipURI:
|
|
|
return self.userinfo
|
|
|
|
|
|
|
|
|
-class AgentInfo:
|
|
|
- def __init__(self, sass_id=None, agent_number=None, realm=None, sip_server=None,
|
|
|
+class AgentInfo(BaseApi):
|
|
|
+ def __init__(self, saas_id=None, agent_number=None, realm=None, sip_server=None,
|
|
|
call_id=None, device_id=None, real_device_id=None, line_id=None, fs_user=None, domain=None,
|
|
|
service_time=0, max_ready_time=0, total_ready_time=0, ready_times=0, not_ready_times=0,
|
|
|
total_after_time=0, max_talk_time=0, total_talk_time=0, total_ring_times=0, total_answer_times=0):
|
|
|
- self.sass_id = sass_id
|
|
|
+ self.saas_id = saas_id
|
|
|
self.agent_number = agent_number
|
|
|
self.realm = realm
|
|
|
self.sip_server = sip_server
|
|
@@ -429,25 +422,18 @@ class AgentInfo:
|
|
|
"""
|
|
|
return self.fs_user is None or self.fs_user is True
|
|
|
|
|
|
- def to_json_string(self):
|
|
|
- return json.dumps(self.__dict__, ensure_ascii=False)
|
|
|
|
|
|
- @classmethod
|
|
|
- def from_json(cls, json_string):
|
|
|
- data = json.loads(json_string)
|
|
|
- return cls(**data)
|
|
|
-
|
|
|
-
|
|
|
-class CallInfo:
|
|
|
+class CallInfo(BaseApi):
|
|
|
def __init__(self, core_uuid=None, call_id=None, conference=None, saas_id=None, group_id=None,
|
|
|
hidden_customer=0, caller_display=None, caller=None, called_display=None, called=None,
|
|
|
number_location=None, agent_key=None, agent_name=None, login_type=None, ivr_id=None, task_id=None,
|
|
|
- media_host=None, cti_host=None, client_host=None, record=None, record2=None, record_time=None,
|
|
|
+ media_host=None, sip_server=None, client_host=None, record=None, record2=None, record_time=None,
|
|
|
call_time=None, call_type=None, direction=None, answer_flag=None, wait_time=None, answer_count=0,
|
|
|
hangup_dir=None, sdk_hangup=0, hangup_code=None, answer_time=None, end_time=None, talk_time=None,
|
|
|
frist_queue_time=None, queue_start_time=None, queue_end_time=None, overflow_count=0,
|
|
|
- uuid1=None, uuid2=None, cdr_notify_url=None, queue_level=None, device_list=[], device_info_map={},
|
|
|
- follow_data={}, process_data={}, next_commands=[], call_details=[]):
|
|
|
+ uuid1=None, uuid2=None, cdr_notify_url=None, queue_level=None, device_list=[],
|
|
|
+ device_info_map: Dict[str, Any] = {}, follow_data: Dict[str, Any] = {},
|
|
|
+ process_data: Dict[str, Any] = {}, next_commands=[], call_details=[]):
|
|
|
self.core_uuid = core_uuid # 通话唯一标识
|
|
|
self.call_id = call_id # 通话唯一标识
|
|
|
self.conference = conference # 会议号
|
|
@@ -465,7 +451,7 @@ class CallInfo:
|
|
|
self.ivr_id = ivr_id # ivr
|
|
|
self.task_id = task_id # 任务ID
|
|
|
self.media_host = media_host # 媒体
|
|
|
- self.cti_host = cti_host # 服务地址
|
|
|
+ self.sip_server = sip_server # 服务地址
|
|
|
self.client_host = client_host # 客户服务地址
|
|
|
self.record = record # 录音地址
|
|
|
self.record2 = record2 # 第三方存储地址
|
|
@@ -497,31 +483,96 @@ class CallInfo:
|
|
|
self.next_commands = next_commands # 执行下一步命令
|
|
|
self.call_details = call_details # 电话流程
|
|
|
|
|
|
- def to_json_string(self):
|
|
|
- return json.dumps(self.__dict__, ensure_ascii=False)
|
|
|
-
|
|
|
@classmethod
|
|
|
def from_json(cls, json_string):
|
|
|
- data = json.loads(json_string)
|
|
|
- return cls(**data)
|
|
|
+ data = get_json_dict(json_string)
|
|
|
+ device_list = [DeviceInfo(**x) for x in data.get('device_list', [])]
|
|
|
+ device_info_map: Dict[str, Any] = {key: DeviceInfo(**value) for key, value in data.get('device_info_map', {}).items()}
|
|
|
+ follow_data: Dict[str, Any] = {key: value for key, value in data.get('follow_data', {}).items()}
|
|
|
+ process_data: Dict[str, Any] = {key: value for key, value in data.get('process_data', {}).items()}
|
|
|
+ next_commands = [NextCommand(**x) for x in data.get('next_commands', [])]
|
|
|
+ call_details = [CallDetail(**x) for x in data.get('call_details', [])]
|
|
|
+
|
|
|
+ return cls(core_uuid=data.get('core_uuid'), call_id=data.get('call_id'), conference=data.get('conference'),
|
|
|
+ saas_id=data.get('saas_id'), group_id=data.get('group_id'),
|
|
|
+ hidden_customer=data.get('hidden_customer'), caller_display=data.get('caller_display'),
|
|
|
+ caller=data.get('caller'), called_display=data.get('called_display'), called=data.get('called'),
|
|
|
+ number_location=data.get('number_location'), agent_key=data.get('agent_key'),
|
|
|
+ agent_name=data.get('agent_name'), login_type=data.get('login_type'), ivr_id=data.get('ivr_id'),
|
|
|
+ task_id=data.get('task_id'), media_host=data.get('media_host'), sip_server=data.get('sip_server'),
|
|
|
+ client_host=data.get('client_host'), record=data.get('record'), record2=data.get('record2'),
|
|
|
+ record_time=data.get('record_time'), call_time=data.get('call_time'),
|
|
|
+ call_type=data.get('call_type'), direction=data.get('direction'),
|
|
|
+ answer_flag=data.get('answer_flag'), wait_time=data.get('wait_time'),
|
|
|
+ answer_count=data.get('answer_count'), hangup_dir=data.get('hangup_dir'),
|
|
|
+ sdk_hangup=data.get('sdk_hangup'), hangup_code=data.get('hangup_code'),
|
|
|
+ answer_time=data.get('answer_time'), end_time=data.get('end_time'), talk_time=data.get('talk_time'),
|
|
|
+ frist_queue_time=data.get('frist_queue_time'), queue_start_time=data.get('queue_start_time'),
|
|
|
+ queue_end_time=data.get('queue_end_time'), overflow_count=data.get('overflow_count'),
|
|
|
+ uuid1=data.get('uuid1'), uuid2=data.get('uuid2'), cdr_notify_url=data.get('cdr_notify_url'),
|
|
|
+ queue_level=data.get('queue_level'), device_list=device_list,
|
|
|
+ device_info_map=device_info_map, follow_data=follow_data, process_data=process_data,
|
|
|
+ next_commands=next_commands, call_details=call_details)
|
|
|
|
|
|
- # def __repr__(self):
|
|
|
- # return (f"CallInfo(core_uuid={self.core_uuid}, call_id={self.call_id}, conference={self.conference}, "
|
|
|
- # f"company_id={self.company_id}, group_id={self.group_id}, hidden_customer={self.hidden_customer}, "
|
|
|
- # f"caller_display={self.caller_display}, caller={self.caller}, called_display={self.called_display}, "
|
|
|
- # f"called={self.called}, number_location={self.number_location}, agent_key={self.agent_key}, "
|
|
|
- # f"agent_name={self.agent_name}, login_type={self.login_type}, ivr_id={self.ivr_id}, task_id={self.task_id}, "
|
|
|
- # f"media_host={self.media_host}, cti_host={self.cti_host}, client_host={self.client_host}, record={self.record}, "
|
|
|
- # f"record2={self.record2}, record_time={self.record_time}, call_time={self.call_time}, call_type={self.call_type}, "
|
|
|
- # f"direction={self.direction}, answer_flag={self.answer_flag}, wait_time={self.wait_time}, "
|
|
|
- # f"answer_count={self.answer_count}, hangup_dir={self.hangup_dir}, sdk_hangup={self.sdk_hangup}, "
|
|
|
- # f"hangup_code={self.hangup_code}, answer_time={self.answer_time}, end_time={self.end_time}, "
|
|
|
- # f"talk_time={self.talk_time}, frist_queue_time={self.frist_queue_time}, queue_start_time={self.queue_start_time}, "
|
|
|
- # f"queue_end_time={self.queue_end_time}, overflow_count={self.overflow_count}, uuid1={self.uuid1}, uuid2={self.uuid2}, "
|
|
|
- # f"cdr_notify_url={self.cdr_notify_url}, queue_level={self.queue_level})")
|
|
|
-
|
|
|
-
|
|
|
-class DeviceInfo:
|
|
|
+ def __str__(self):
|
|
|
+ return self.to_json_string()
|
|
|
+
|
|
|
+ def to_json_string(self):
|
|
|
+ new_dict = {
|
|
|
+ "core_uuid": self.core_uuid,
|
|
|
+ "call_id": self.call_id,
|
|
|
+ "conference": self.conference,
|
|
|
+ "saas_id": self.saas_id,
|
|
|
+ "group_id": self.group_id,
|
|
|
+ "hidden_customer": self.hidden_customer,
|
|
|
+ "caller_display": self.caller_display,
|
|
|
+ "caller": self.caller,
|
|
|
+ "called_display": self.called_display,
|
|
|
+ "called": self.called,
|
|
|
+ "number_location": self.number_location,
|
|
|
+ "agent_key": self.agent_key,
|
|
|
+ "agent_name": self.agent_name,
|
|
|
+ "login_type": self.login_type,
|
|
|
+ "ivr_id": self.ivr_id,
|
|
|
+ "task_id": self.task_id,
|
|
|
+ "media_host": self.media_host,
|
|
|
+ "sip_server": self.sip_server,
|
|
|
+ "client_host": self.client_host,
|
|
|
+ "record": self.record,
|
|
|
+ "record2": self.record2,
|
|
|
+ "record_time": self.record_time,
|
|
|
+ "call_time": self.call_time,
|
|
|
+ "call_type": self.call_type,
|
|
|
+ "direction": self.direction,
|
|
|
+ "answer_flag": self.answer_flag,
|
|
|
+ "wait_time": self.wait_time,
|
|
|
+ "answer_count": self.answer_count,
|
|
|
+ "hangup_dir": self.hangup_dir,
|
|
|
+ "sdk_hangup": self.sdk_hangup,
|
|
|
+ "hangup_code": self.hangup_code,
|
|
|
+ "answer_time": self.answer_time,
|
|
|
+ "end_time": self.end_time,
|
|
|
+ "talk_time": self.talk_time,
|
|
|
+ "frist_queue_time": self.frist_queue_time,
|
|
|
+ "queue_start_time": self.queue_start_time,
|
|
|
+ "queue_end_time": self.queue_end_time,
|
|
|
+ "overflow_count": self.overflow_count,
|
|
|
+ "uuid1": self.uuid1,
|
|
|
+ "uuid2": self.uuid2,
|
|
|
+ "cdr_notify_url": self.cdr_notify_url,
|
|
|
+ "queue_level": self.queue_level,
|
|
|
+ "device_list": [vars(x) for x in self.device_list],
|
|
|
+ "device_info_map": {key: vars(value) for key, value in self.device_info_map.items()},
|
|
|
+ "follow_data": {key: vars(value) for key, value in self.follow_data.items()},
|
|
|
+ "process_data": {key: vars(value) for key, value in self.process_data.items()},
|
|
|
+ "next_commands": [vars(x) for x in self.next_commands],
|
|
|
+ "call_details": [vars(x) for x in self.call_details],
|
|
|
+ }
|
|
|
+ print(new_dict)
|
|
|
+ return json.dumps(new_dict, default=lambda x: x.__dict__, ensure_ascii=False)
|
|
|
+
|
|
|
+
|
|
|
+class DeviceInfo(BaseApi):
|
|
|
def __init__(self, call_id=None, conference=None, device_id=None, agent_key=None, agent_name=None, device_type=None,
|
|
|
cdr_type=None, from_agent=None, caller=None, called=None, display=None, called_location=None,
|
|
|
caller_location=None, call_time=None, ring_start_time=None, ring_end_time=None, answer_time=None,
|
|
@@ -557,33 +608,13 @@ class DeviceInfo:
|
|
|
self.record_time = record_time # 录音时长
|
|
|
self.record_start_time = record_start_time # 录音开始时间
|
|
|
self.state = state # 当前设备状态
|
|
|
- self.apparent_number = apparent_number #外显号
|
|
|
- self.caller_display = caller_display # 主叫号
|
|
|
-
|
|
|
- def to_json_string(self):
|
|
|
- return json.dumps(self.__dict__, ensure_ascii=False)
|
|
|
-
|
|
|
- @classmethod
|
|
|
- def from_json(cls, json_string):
|
|
|
- data = json.loads(json_string)
|
|
|
- return cls(**data)
|
|
|
-
|
|
|
- # def __repr__(self):
|
|
|
- # return (f"DeviceInfo(call_id={self.call_id}, conference={self.conference}, device_id={self.device_id}, "
|
|
|
- # f"agent_key={self.agent_key}, agent_name={self.agent_name}, device_type={self.device_type}, "
|
|
|
- # f"cdr_type={self.cdr_type}, from_agent={self.from_agent}, caller={self.caller}, called={self.called}, "
|
|
|
- # f"display={self.display}, called_location={self.called_location}, caller_location={self.caller_location}, "
|
|
|
- # f"call_time={self.call_time}, ring_start_time={self.ring_start_time}, ring_end_time={self.ring_end_time}, "
|
|
|
- # f"answer_time={self.answer_time}, bridge_time={self.bridge_time}, end_time={self.end_time}, "
|
|
|
- # f"talk_time={self.talk_time}, sip_protocol={self.sip_protocol}, channel_name={self.channel_name}, "
|
|
|
- # f"hangup_cause={self.hangup_cause}, ring_cause={self.ring_cause}, sip_status={self.sip_status}, "
|
|
|
- # f"record={self.record}, record_time={self.record_time}, record_start_time={self.record_start_time}, "
|
|
|
- # f"state={self.state})")
|
|
|
+ self.apparent_number = apparent_number # 外显号
|
|
|
+ self.caller_display = caller_display # 主叫号
|
|
|
|
|
|
|
|
|
-class NextCommand:
|
|
|
+class NextCommand(BaseApi):
|
|
|
|
|
|
- def __init__(self, device_id, next_type, next_value):
|
|
|
+ def __init__(self, device_id, next_type, next_value=None):
|
|
|
# 记录执行设备
|
|
|
self.device_id = device_id
|
|
|
# 下一步执行命令
|
|
@@ -591,16 +622,8 @@ class NextCommand:
|
|
|
# 执行参数
|
|
|
self.next_value = next_value
|
|
|
|
|
|
- def to_json_string(self):
|
|
|
- return json.dumps(self.__dict__, ensure_ascii=False)
|
|
|
|
|
|
- @classmethod
|
|
|
- def from_json(cls, json_string):
|
|
|
- data = json.loads(json_string)
|
|
|
- return cls(**data)
|
|
|
-
|
|
|
-
|
|
|
-class CallDetail:
|
|
|
+class CallDetail(BaseApi):
|
|
|
def __init__(self, id=None, cts=None, start_time=None, end_time=None, call_id=None,
|
|
|
detail_index=None, transfer_type=None, transfer_id=None, reason=None,
|
|
|
month=None, ext1=None, ext2=None, status=None):
|
|
@@ -618,22 +641,8 @@ class CallDetail:
|
|
|
self.ext2 = ext2 # 扩展字段2
|
|
|
self.status = status # 状态
|
|
|
|
|
|
- def to_json_string(self):
|
|
|
- return json.dumps(self.__dict__, ensure_ascii=False)
|
|
|
-
|
|
|
- @classmethod
|
|
|
- def from_json(cls, json_string):
|
|
|
- data = json.loads(json_string)
|
|
|
- return cls(**data)
|
|
|
-
|
|
|
- # def __repr__(self):
|
|
|
- # return (f"CallDetail(id={self.id}, cts={self.cts}, start_time={self.start_time}, "
|
|
|
- # f"end_time={self.end_time}, call_id={self.call_id}, detail_index={self.detail_index}, "
|
|
|
- # f"transfer_type={self.transfer_type}, transfer_id={self.transfer_id}, reason={self.reason}, "
|
|
|
- # f"month={self.month}, ext1={self.ext1}, ext2={self.ext2}, status={self.status})")
|
|
|
|
|
|
-
|
|
|
-class RouteGateway:
|
|
|
+class RouteGateway(BaseApi):
|
|
|
def __init__(self, id=None, saas_id=None, cts=None, uts=None, name=None, media_host=None,
|
|
|
media_port=None, caller_prefix=None, called_prefix=None,
|
|
|
profile='gateway/gateway-fxo', sip_header1='P-LIBRA-CallId=#{[callId]}',
|
|
@@ -653,30 +662,11 @@ class RouteGateway:
|
|
|
self.sip_header3 = sip_header3 # SIP头3
|
|
|
self.status = status # 状态
|
|
|
|
|
|
- def to_json_string(self):
|
|
|
- return json.dumps(self.__dict__, ensure_ascii=False)
|
|
|
-
|
|
|
- @classmethod
|
|
|
- def from_json(cls, json_string):
|
|
|
- data = json.loads(json_string)
|
|
|
- return cls(**data)
|
|
|
-
|
|
|
- # def __repr__(self):
|
|
|
- # return (f"RouteGateway(id={self.id}, cts={self.cts}, uts={self.uts}, name={self.name}, "
|
|
|
- # f"media_host={self.media_host}, media_port={self.media_port}, caller_prefix={self.caller_prefix}, "
|
|
|
- # f"called_prefix={self.called_prefix}, profile={self.profile}, "
|
|
|
- # f"sip_header1={self.sip_header1}, sip_header2={self.sip_header2}, "
|
|
|
- # f"sip_header3={self.sip_header3}, status={self.status})")
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-#机器人外呼
|
|
|
+# 机器人外呼
|
|
|
class BotChatRequest:
|
|
|
- def __init__(self, nodeId=None, userId=None, sessionId=None, taskId=None, asrText=None, recordId=None, ext:Dict={}):
|
|
|
+ def __init__(self, nodeId=None, userId=None, sessionId=None, taskId=None, asrText=None, recordId=None,
|
|
|
+ ext: Dict = {}):
|
|
|
self.nodeId = nodeId # 节点id
|
|
|
self.userId = userId # 用户id
|
|
|
self.sessionId = sessionId # 会话id
|
|
@@ -699,11 +689,10 @@ class BotChatRequest:
|
|
|
# f"event_type={self.event_type}, asr_text={self.asr_text}, key_input={self.key_input})")
|
|
|
|
|
|
|
|
|
-
|
|
|
class ChatAction:
|
|
|
def __init__(self, actionCode=None, actionContent=None):
|
|
|
- self.actionCode = actionCode # normal:正常通话;hang:挂断;transfer:转人工
|
|
|
- self.actionContent = actionContent # 动作内容
|
|
|
+ self.actionCode = actionCode # normal:正常通话;hang:挂断;transfer:转人工
|
|
|
+ self.actionContent = actionContent # 动作内容
|
|
|
|
|
|
def to_json_string(self):
|
|
|
return json.dumps(self.__dict__, ensure_ascii=False)
|
|
@@ -718,10 +707,10 @@ class ChatAction:
|
|
|
|
|
|
class ChatContent:
|
|
|
def __init__(self, contentType=None, content=None, voiceUrl=None, voiceContent=None):
|
|
|
- self.contentType = contentType # 播放类型
|
|
|
- self.content = content # 播放内容
|
|
|
- self.voiceUrl = voiceUrl # 语音地址
|
|
|
- self.voiceContent = voiceContent # 语音文本
|
|
|
+ self.contentType = contentType # 播放类型
|
|
|
+ self.content = content # 播放内容
|
|
|
+ self.voiceUrl = voiceUrl # 语音地址
|
|
|
+ self.voiceContent = voiceContent # 语音文本
|
|
|
|
|
|
def to_json_string(self):
|
|
|
return json.dumps(self.__dict__, ensure_ascii=False)
|
|
@@ -737,13 +726,13 @@ class ChatContent:
|
|
|
|
|
|
|
|
|
class ChatMessage:
|
|
|
- def __init__(self, nodeId=None, contents=None, waitTime=None,
|
|
|
- action=None,inputType=None):
|
|
|
- self.nodeId = nodeId # 节点id
|
|
|
- self.contents = contents if contents is not None else [] # 内容列表
|
|
|
- self.waitTime = waitTime # 用户静默时长
|
|
|
- self.action = action # 动作代码
|
|
|
- self.inputType = inputType # dtmf类型
|
|
|
+ def __init__(self, nodeId=None, contents=None, waitTime=None,
|
|
|
+ action=None, inputType=None):
|
|
|
+ self.nodeId = nodeId # 节点id
|
|
|
+ self.contents = contents if contents is not None else [] # 内容列表
|
|
|
+ self.waitTime = waitTime # 用户静默时长
|
|
|
+ self.action = action # 动作代码
|
|
|
+ self.inputType = inputType # dtmf类型
|
|
|
|
|
|
def to_json_string(self):
|
|
|
return json.dumps({
|
|
@@ -788,4 +777,4 @@ class ChatResponse:
|
|
|
data=response_data,
|
|
|
message=data.get("message"),
|
|
|
code=data.get("code")
|
|
|
- )
|
|
|
+ )
|