774056846 hai 4 días
pai
achega
b66d760413
Modificáronse 1 ficheiros con 18 adicións e 9 borrados
  1. 18 9
      src/core/callcenter/esl/client.py

+ 18 - 9
src/core/callcenter/esl/client.py

@@ -270,12 +270,15 @@ class InboundClient:
         delay_action = DelayAction(call_id=call_id, device_id=device_id)
         Cache.add_delay_message(DelayActionEnum.CALL_TIMEOUT_HANGUP.code, delay_action, timeouts=timeout)
 
-    def send_args(self, device_id, name, arg):
+    def send_args(self, device_id, name, arg, con=None):
         msg = ESL.ESLevent("sendmsg", device_id)
         msg.addHeader("call-command", EXECUTE)
         msg.addHeader("execute-app-name", name)
         msg.addHeader("execute-app-arg", arg)
-        self.con.sendEvent(msg)
+        if con:
+            con.sendEvent(msg)
+        else:
+            self.con.sendEvent(msg)
 
     def bridge_call(self, call_id, device_id1, device_id2):
         """桥接电话"""
@@ -303,16 +306,22 @@ class InboundClient:
         msg.addHeader("execute-app-name", HANGUP)
         msg.addHeader("execute-app-arg", NORMAL_CLEARING)
         msg.addHeader("async", "true")
+        _con = None
         try:
-            print("hangup_call挂机1 hangup call: %s, device: %s, ctiCauseEnum: %s"% (call_id, device_id, case_enum), flush=True)
-            arg = ''.join([EslEventUtil.SIP_H_P_LIBRA_HANGUP_CAUSE,"=", case_enum.description])
-            print("hangup_call挂机2 hangup call: %s, device: %s, arg: %s"% (call_id, device_id, arg), flush=True)
-            self.send_args(device_id, SET,  arg)
-            print("hangup_call挂机3 hangup call: %s, device: %s, arg: %s"% (call_id, device_id, arg), flush=True)
-            self.con.sendEvent(msg)
-            print("hangup_call挂机4 hangup call: %s, device: %s, arg: %s"% (call_id, device_id, arg), flush=True)
+            _con = ESL.ESLconnection(self.host, self.port, self.password)
+            if _con.connected():
+                print("hangup_call挂机1 hangup call: %s, device: %s, ctiCauseEnum: %s" % (call_id, device_id, case_enum), flush=True)
+                arg = ''.join([EslEventUtil.SIP_H_P_LIBRA_HANGUP_CAUSE, "=", case_enum.description])
+                print("hangup_call挂机2 hangup call: %s, device: %s, arg: %s" % (call_id, device_id, arg), flush=True)
+                self.send_args(device_id, SET, arg, con=_con)
+                print("hangup_call挂机3 hangup call: %s, device: %s, arg: %s" % (call_id, device_id, arg), flush=True)
+                _con.sendEvent(msg)
+                print("hangup_call挂机4 hangup call: %s, device: %s, arg: %s" % (call_id, device_id, arg), flush=True)
         except:
             traceback.print_exc()
+        finally:
+            if _con:
+                _con.disconnect()
 
     def broadcast(self, uuid, path, smf):
         builder = [