Hal De 3 роки тому
батько
коміт
4fb17b23bf
2 змінених файлів з 24 додано та 11 видалено
  1. 21 10
      app/app.py
  2. 3 1
      app/cel.py

+ 21 - 10
app/app.py

@@ -411,15 +411,22 @@ async def celCallback(mngr: Manager, msg: Message):
         await db.execute(query='update cdr set transfer_from=(select distinct linkedid from cdr where uniqueid=:first) where linkedid=:second;',values={'first': f,'second': s})
       if ("c2c_start_time" in app.cache['cel_calls'][lid]):
         call = app.cache['cel_calls'][lid]
+        start = datetime.strptime(call["c2c_start_time"],"%Y-%m-%d %H:%M:%S")
+        end = datetime.strptime(msg.EventTime,"%Y-%m-%d %H:%M:%S")
         _cb = {'webhook_name': "c2c_end",
-               'asteriskCallId':msg.LinkedID,
-               'start_time': call["c2c_start_time"],
-               'end_time': msg.EventTime,
+               'callId':msg.LinkedID,
+               'speakingTime': 0,
+               'waitingTime': (end-start).total_seconds(),
+               'answered': False,
                'ANumber': call["c2c_user"],
                'BNumber': call["c2c_phone"]}
         if "answer_time" in call:
-         _cb["answer_time"]=call["answer_time"]
+          answer = datetime.strptime(call["answer_time"],"%Y-%m-%d %H:%M:%S")
+          _cb["answered"] = True
+          _cb['waitingTime'] = (answer-start).total_seconds()
+          _cb['speakingTime'] = (end-answer).total_seconds()
         app.logger.warning('c2c cb {}'.format(_cb))
+        reply = await doCallback(call["c2c_device"], _cb)
       app.cache['cel_calls'].pop(lid, False)
       app.cache['cel_queue_calls'].pop(lid, False)
       
@@ -440,15 +447,19 @@ async def celCallback(mngr: Manager, msg: Message):
         _cb[vn] = vv
       reply = await doCallbackPostfix(callback_type,postfix, _cb)
     if (msg.EventName == 'USER_DEFINED') and (msg.UserDefType == 'START_C2C'):
-        app.logger.warning('c2c event {}'.format(msg))
         app.cache['cel_calls'][lid]["c2c_start_time"]=msg.EventTime
-        app.cache['cel_calls'][lid]["c2c_user"] = msg.CallerIDnum
+        device = msg.CallerIDnum 
+        app.cache['cel_calls'][lid]["c2c_device"] = device
+        if device in app.cache['usermap']:
+          app.cache['cel_calls'][lid]["c2c_user"] = app.cache['usermap'][device]
+        else:
+          app.cache['cel_calls'][lid]["c2c_user"] = device
         app.cache['cel_calls'][lid]["c2c_phone"] = msg.Exten
         _cb = {'webhook_name': "c2c_start",
-             'asteriskCallId':msg.LinkedID,
-             'start_time': msg.EventTime,
-             'ANumber': msg.CallerIDnum,
+             'callId':msg.LinkedID,
+             'ANumber': app.cache['cel_calls'][lid]["c2c_user"],
              'BNumber': msg.Exten}
+        reply = await doCallback(device, _cb)
         app.logger.warning('c2c cb {}'.format(_cb))
 
 async def getCDR(start=None,
@@ -1263,7 +1274,7 @@ class Originate_test(Resource):
     device = device.replace('{}&'.format(user), '')
     _act = { 'Action':'Originate',
              'Channel':'PJSIP/{}'.format(device),
-             'Context':'form-internal-c2c',
+             'Context':'from-internal-c2c-test',
              'Exten':number,
              'Priority': '1',
              'Async':'true',

+ 3 - 1
app/cel.py

@@ -4,7 +4,7 @@ import re
 from datetime import datetime
 from datetime import timedelta as td
 
-fieldsFilter = ('id', 'linkedid', 'appdata', 'lastdata')
+fieldsFilter = ('id', 'linkedid', 'appdata')
 
 class CdrChannel:
   def __init__(self, chanData):
@@ -52,6 +52,8 @@ class CdrEvents:
       return
     if (event.lastapp == 'Return' and (event.billsec==0 or not event.dstchannel)):
       return
+    if (event.lastapp == 'Dial' and event.lastdata.startswith("Local")):
+      return
     if (event.lastapp == 'Return'):
       event.lastapp='Dial'
       event.duration=event.billsec