@@ -211,11 +211,30 @@ private function addDataToQueue(array $data):void
211
211
$ data ['CRM_ENTITY_ID ' ] = $ contactsData ['b24id ' ]??'' ;
212
212
$ data ['CRM_ENTITY_TYPE ' ] = $ contactsData ['contactType ' ]??'' ;
213
213
}
214
- $ arg = $ this ->b24 ->telephonyExternalCallRegister ($ data );
214
+
215
+ $ callId = &$ this ->tmpCallsData [$ data ['linkedid ' ]]['CALL_ID ' ];
216
+ if (empty ($ callId )){
217
+ [$ arg , $ key ] = $ this ->b24 ->telephonyExternalCallRegister ($ data );
218
+ if (!empty ($ key )){
219
+ // Это Метод register
220
+ $ callId = $ key ;
221
+ }
222
+ }elseif (stripos ($ callId ,Bitrix24Integration::API_CALL_REGISTER ) === false ){
223
+ $ this ->tmpCallsData [$ data ['linkedid ' ]]['ARR_REGISTER_ ' .$ data ['UNIQUEID ' ]] = $ data ;
224
+ $ this ->tmpCallsData [$ data ['linkedid ' ]]['ARGS_REGISTER_ ' .$ data ['UNIQUEID ' ]] = $ this ->b24 ->telephonyExternalCallRegister ($ data );
225
+ $ data ['CALL_ID ' ] = $ callId ;
226
+ $ arg = $ this ->b24 ->telephonyExternalCallShow ($ data );
227
+ }else {
228
+ $ this ->tmpCallsData [$ data ['linkedid ' ]]['ARR_REGISTER_ ' .$ data ['UNIQUEID ' ]] = $ data ;
229
+ $ this ->tmpCallsData [$ data ['linkedid ' ]]['ARGS_REGISTER_ ' .$ data ['UNIQUEID ' ]] = $ this ->b24 ->telephonyExternalCallRegister ($ data );
230
+ $ data ['CALL_ID ' ] = '$result[ ' .$ callId .'][CALL_ID] ' ;
231
+ $ arg = $ this ->b24 ->telephonyExternalCallShow ($ data );
232
+ }
215
233
if (count ($ arg ) > 0 ) {
216
234
// Основная очередь запросов.
217
- $ this ->q_req = array_merge ($ arg , $ this ->q_req );
235
+ $ this ->q_req = array_merge ($ this ->q_req , $ arg );
218
236
}
237
+ unset($ callId );
219
238
}
220
239
} else {
221
240
// Дополнительная очередь ожидания.
@@ -264,16 +283,17 @@ public function checkPreAction(&$data): bool
264
283
private function createTmpCallData ($ data ):void
265
284
{
266
285
$ this ->tmpCallsData [$ data ['linkedid ' ]] = [
267
- 'wait ' => true ,
268
- 'events ' => [],
269
- 'search ' => -1 , // -1 - запрос не отправлен, 0 - запрос отправлен, 1 ответ получен
270
- 'lead ' => -1 ,
271
- 'list-lead ' => -1 ,
272
- 'company ' => -1 ,
273
- 'data ' => $ data ,
274
- 'crm-data ' => [],
275
- 'inbox_tube ' => $ data ['inbox_tube ' ]??'' ,
276
- 'responsible ' => ''
286
+ 'wait ' => true ,
287
+ 'events ' => [],
288
+ 'search ' => -1 , // -1 - запрос не отправлен, 0 - запрос отправлен, 1 ответ получен
289
+ 'lead ' => -1 ,
290
+ 'list-lead ' => -1 ,
291
+ 'company ' => -1 ,
292
+ 'data ' => $ data ,
293
+ 'crm-data ' => [],
294
+ 'inbox_tube ' => $ data ['inbox_tube ' ]??'' ,
295
+ 'responsible ' => '' ,
296
+ 'CALL_ID ' => '' ,
277
297
];
278
298
$ phone = $ data ['PHONE_NUMBER ' ] ?? '' ;
279
299
if (empty ($ phone )){
@@ -411,17 +431,14 @@ private function syncProcContacts()
411
431
}
412
432
}
413
433
}
414
-
415
434
$ response = $ this ->b24 ->sendBatch ($ syncProcReqCompany );
416
435
if (!empty ($ response )){
417
436
ConnectorDb::invoke (ConnectorDb::FUNC_UPDATE_LINKS , [$ response ['result ' ]['result ' ]??[]], false );
418
437
}
419
-
420
438
$ response = $ this ->b24 ->sendBatch ($ syncProcReqContact );
421
439
if (!empty ($ response )) {
422
440
ConnectorDb::invoke (ConnectorDb::FUNC_UPDATE_LINKS , [$ response ['result ' ]['result ' ]??[]], false );
423
441
}
424
-
425
442
// Это дочерний процесс, завершаем его.
426
443
exit (0 );
427
444
}
@@ -474,11 +491,13 @@ public function executeTasks(): void
474
491
$ tmpArr = [$ this ->q_req ];
475
492
foreach ($ this ->q_pre_req as $ data ) {
476
493
if ('action_hangup_chan ' === $ data ['action ' ]) {
477
- $ cdr = ConnectorDb::invoke (ConnectorDb::FUNC_FIND_CDR_BY_UID ,[$ data ['UNIQUEID ' ]]);
478
- if ($ cdr ) {
479
- $ data ['CALL_ID ' ] = $ cdr ->call_id ;
480
- $ data ['USER_ID ' ] = (int )$ cdr ->user_id ;
481
- $ tmpArr [] = $ this ->b24 ->telephonyExternalCallHide ($ data );
494
+ $ callId = $ this ->tmpCallsData [$ data ['linkedid ' ]]['CALL_ID ' ];
495
+ if (!empty ($ callId )) {
496
+ $ data ['CALL_ID ' ] = $ callId ;
497
+ $ data ['USER_ID ' ] = $ this ->tmpCallsData [$ data ['linkedid ' ]]['ARR_REGISTER_ ' .$ data ['UNIQUEID ' ]]['USER_ID ' ]??'' ;
498
+ if (!empty ($ data ['USER_ID ' ])){
499
+ $ tmpArr [] = $ this ->b24 ->telephonyExternalCallHide ($ data );
500
+ }
482
501
}
483
502
} elseif ('action_dial_answer ' === $ data ['action ' ]) {
484
503
$ cdr = null ;
@@ -552,7 +571,7 @@ public function executeTasks(): void
552
571
$ tmpArr [] = $ this ->b24 ->crmDealUpdate ($ dealId , $ userId , $ data ['linkedid ' ]);
553
572
}
554
573
} elseif ('telephonyExternalCallFinish ' === $ data ['action ' ]) {
555
- $ tmpArr [] = $ this ->b24 ->telephonyExternalCallFinish ($ data );
574
+ $ tmpArr [] = $ this ->b24 ->telephonyExternalCallFinish ($ data, $ this -> tmpCallsData );
556
575
}
557
576
}
558
577
$ this ->q_req = array_merge (...$ tmpArr );
@@ -585,7 +604,14 @@ public function postReceivingResponseProcessing(array $result): void
585
604
}
586
605
587
606
if ($ actionName === Bitrix24Integration::API_CALL_REGISTER ) {
588
- $ this ->b24 ->telephonyExternalCallPostRegister ($ key , $ partResponse );
607
+ $ resultRegister = $ this ->b24 ->telephonyExternalCallPostRegister ($ key , $ partResponse );
608
+ if (!empty ($ resultRegister )){
609
+ [$ linkedId , $ callId ] = $ resultRegister ;
610
+ $ this ->b24 ->logger ->writeInfo ("Update call_id for $ linkedId - $ callId " );
611
+ $ this ->tmpCallsData [$ linkedId ]['CALL_ID ' ] = $ callId ;
612
+ }else {
613
+ $ this ->b24 ->logger ->writeInfo ("fail Update call_id for $ key " );
614
+ }
589
615
} elseif (in_array ($ actionName ,[Bitrix24Integration::API_CRM_CONTACT_COMPANY ,Bitrix24Integration::API_CRM_COMPANY_CONTACT ], true )) {
590
616
ConnectorDb::invoke (ConnectorDb::FUNC_UPDATE_LINKS , [[$ key => $ partResponse ]], false );
591
617
} elseif (in_array ($ id ,['init ' , 'update ' ], true )){
0 commit comments