| 
    
        
     
     | 
    
  | 
Интеграция AMI Asterisk + 1С входящие/исходящие | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        Vladislava-smile    
     11.11.16 
            ✎
    09:50 
 | 
         
        Добрый день, кто сталкивался - подскажите как определять входящий вызов или исходящий.
 
        Библиотеку подкрутила, 1с - ка отлавливает события AMI. Из событий VarSet параметры value, Channel, ID гружу в ТЗ При снятии трубки по Bridge есть Channel1 и Channel2 и ID1 и ID2. Ищу в ТЗ файл записи. Как я думала, если найден по Channel1 и ID1, то номером клиента является CallerID1, а звонок входящий, но нет ((( По Hangup с отбором ТЗ чиститься.  | 
|||
| 
    1
    
        ADirks    
     11.11.16 
            ✎
    10:03 
 | 
         
        Лучше беги от этой шляпы куда подальше
 
        Разбирать протоколы от астериска - это то ещё развлечение. кстати, там ещё там перевод звонка бывает... Ну а если не убежать, то берёшь полные протоколы, и куришь их, пока из ушей не полезет. у нас вот, к примеру, такое накурилось стрСобытие = сзПакет.Получить("Event"); Если стрСобытие = "Cdr" Тогда UniqueID = сзПакет.Получить("UniqueID"); Если UniqueID = идСоединение Тогда _Звонок_Завершение(сзПакет); КонецЕсли; ИначеЕсли стрСобытие = "Newchannel" Тогда Если стрСостояние = "" Тогда Channel = сзПакет.Получить("Channel"); идСоединение = сзПакет.Получить("Uniqueid"); УстановитьФильтрСобытий(стрФильтр_Channel()); КонецЕсли; ИначеЕсли стрСобытие = "Dial" Тогда _Звонок_Dial(сзПакет); ИначеЕсли стрСобытие = "Bridge" Тогда State = сзПакет.Получить("Bridgestate"); CallerID1 = сзПакет.Получить("CallerID1"); CallerID2 = сзПакет.Получить("CallerID2"); ИД = сзПакет.Получить("Uniqueid1"); Channel1 = сзПакет.Получить("Channel1"); Channel2 = сзПакет.Получить("Channel2"); _ВЛог("Bridge: State = "+State+", стрСостояние = "+стрСостояние+", CallerID1 = "+CallerID1+", CallerID2 = "+CallerID2+", Channel1 = "+Channel1+", "+Channel); Если (State = "Link") И (CallerID2 = МойТелефон) Тогда //входящий Если (идСоединение <> ИД) ИЛИ (стрСостояние = "") Тогда Channel = Channel2; идСоединение = ИД; стрСостояние = сост_Входящий; Номер1 = УнифицированныйНомерТелефона(CallerID1); Номер2 = МойТелефон; УстановитьФильтрСобытий(стрФильтр_Channel()); ... КонецЕсли; ИначеЕсли (State = "Link") И ((CallerID1 = МойТелефон) ИЛИ (Channel1 = Channel)) Тогда //исходящий //!!! если приходит повторное событие, то нужно его проигнорировать !!! Если (идСоединение <> ИД) ИЛИ (стрСостояние = "") Тогда Channel = Channel1; идСоединение = ИД; стрСостояние = сост_Исходящий; Номер1 = МойТелефон; Номер2 = УнифицированныйНомерТелефона(CallerID2); УстановитьФильтрСобытий(стрФильтр_Channel()); ... КонецЕсли; КонецЕсли; ИначеЕсли стрСобытие = "Hangup" Тогда _Звонок_Завершение(сзПакет); КонецЕсли;  | 
|||
| 
    2
    
        Vladislava-smile    
     11.11.16 
            ✎
    10:11 
 | 
         
        (1) - примерно то же самое и у меня, как я понимаю у Вас в базе у пользователей прописан свой внутренний номер (МойТелефон). Я думала, что по средствам астериска есть какой-то способ определять тип звонка. Но все равно спасибо.     
         | 
|||
| 
    3
    
        ADirks    
     11.11.16 
            ✎
    10:21 
 | 
         
        (2) ну да, у нас такой вот частный случай, потому я и говорю "например"
 
        Думаю, что есть более правильные способы, но лезть слишком глубоко ни желания ни времени не было.  | 
|||
| 
    4
    
        Fedor-1971    
     11.11.16 
            ✎
    10:48 
 | 
         
        (0) Получи трассу звонка в текстовом виде. Примерно такую:
 
        - 06.09.2016 12:57:46
Дальше несколько способов: 1.Анализируешь: CallerIDNum: - Номер с которого набирали Exten: - набранный номер и определяешь если короткий 1, то звонок исходящий, если 2, то звонок входящий 2. Правильно называешь контексты звонка Например, Context: для входящих всегда начинаем с IN, для исходящих OUT. В обеих случаях будет проблема если нужно определить внутренний звонок был входящим или исходящим, и выход только один - как-то зафиксировать номер сотрудника, относительно которого проверяем (например, сохранить его в справочнике)  | 
|||
| 
    5
    
        Serginio1    
     11.11.16 
            ✎
    10:49 
 | 
||||
| 
    6
    
        Serginio1    
     11.11.16 
            ✎
    10:50 
 | 
||||
| 
    7
    
        Йохохо    
     11.11.16 
            ✎
    10:56 
 | 
         
        (4) но если вы поймали dialbegin, там же сразу понятно кто дайял бегин     
         | 
|||
| 
    8
    
        Vladislava-smile    
     11.11.16 
            ✎
    10:57 
 | 
         
        (4) - спасибо, буду пробовать.     
         | 
|||
| 
    9
    
        Fedor-1971    
     11.11.16 
            ✎
    11:00 
 | 
         
        (7) при неизвестном номере сотрудника - нет     
         | 
|||
| 
    10
    
        Fedor-1971    
     11.11.16 
            ✎
    11:03 
 | 
         
        9+ Трасса исходящего звонка
 
        - 06.09.2016 12:49:32
К стати, в (4) надо опираться не на Exten, а на DestCallerIDNum - номер куда звонили, в данном случае нашему сотруднику Всё зависит от версии Asterisk и библиотеки захвата событий AMI. Так что, (8) успехов в анализе  | 
|||
| 
    11
    
        Fragster    
     гуру 
    11.11.16 
            ✎
    11:04 
 | 
         
        я забил и купил https://telefon.miko.ru/     
         | 
|||
| 
    12
    
        Йохохо    
     11.11.16 
            ✎
    11:08 
 | 
         
        (10) исходящего? "DialString: SIP/3001" это чистый астериск или поверх еще что то? "Context: from-Mango"     
         | 
|||
| 
    13
    
        Fedor-1971    
     11.11.16 
            ✎
    11:09 
 | 
         
        (11) Это правильно. Есть много готовых решений. Плюс в том, что какую-то поддержку от поставщика получить всё-таки удастся (пока деньги не заплачены и не подписан акт внедрения).     
         | 
|||
| 
    14
    
        Fedor-1971    
     11.11.16 
            ✎
    11:12 
 | 
         
        (12) DialString: SIP/oTrunk553, практически чистый лог, контексты и номера игрушечные, на боевой нормально названы контексты     
         | 
|||
| 
    15
    
        Йохохо    
     11.11.16 
            ✎
    11:14 
 | 
         
        (14) нет такой строки DialString: SIP/oTrunk553     
         | 
|||
| 
    16
    
        Fedor-1971    
     11.11.16 
            ✎
    11:17 
 | 
         
        (15) таки и строки из (12) в трассе нет     
         | 
|||
| 
    17
    
        Йохохо    
     11.11.16 
            ✎
    11:17 
 | 
         
        DestUniqueid: 1473155368.13593
 
        DestLinkedid: 1473155368.13583 DialString: SIP/3001  | 
|||
| 
    18
    
        Йохохо    
     11.11.16 
            ✎
    11:19 
 | 
         
        Context: from-Mango
 
        DestContext: All-1C это входящий  | 
|||
| 
    19
    
        Fedor-1971    
     11.11.16 
            ✎
    11:25 
 | 
         
        (17)(18) Да, лопухнулся. Это входящий.
 
        (0) обрати внимание, что при настройке Dial(sip, sip, sip ...) Hungup то же будет несколько и ты почистишь ТЗ до завершения звонка  | 
|||
| 
    20
    
        Йохохо    
     11.11.16 
            ✎
    11:39 
 | 
||||
| 
    21
    
        Fedor-1971    
     11.11.16 
            ✎
    12:23 
 | 
         
        (20) надёжно отследить звонок можно только так: 
 
        DialBegin (иногда их несколько) - BridgeEnter (может быть несколько) - Hangup (может быть несколько). Пишем данные в РС с измерениями Linkedid (от первого BridgeEnter) и датой звонка - обеспечит уникальность звонка за день. После того как положили трубку (BridgeLeave - их то же может быть несколько) будут идти ещё некоторое время события закрытия канала, поэтому просто пишем события в РС и если нужно, отображаем пользователю. Как показывает опыт эксплуатации - на начальном этапе: "мы хотим ВСЁ и сразу прямо On-Line", а по факту: "достаточно загрузить лог звонков за вчерашний день".  | 
|||
| 
    22
    
        Йохохо    
     11.11.16 
            ✎
    12:36 
 | 
         
        (21) а оно отловит так звонок на ринг групп с стратегией ринг ол и пропущенный менеджером?     
         | 
|||
| 
    23
    
        Fedor-1971    
     11.11.16 
            ✎
    13:39 
 | 
         
        (22) Если ни кто трубку не взял, будет запись с признаком "Недозвон" (есть DialBegin - Hangup  но внутри нет событий для регистрации, трубку сотрудники не поднимали),
 
        если кто-то трубку поднял - ему зарегистрируется звонок, остальным в группе ничего не регистрируется. Можно посмотреть трассу звонка на группу и определить события вызова адресатов группы (Queue скорее всего) и если нужно можно писать в РС и эту информацию, только придётся добавить в измерения "Внутренний номер"  | 
|||
| 
    24
    
        CodeFinder    
     11.11.16 
            ✎
    13:42 
 | 
         
        Я делал на Django + soap по 1с. Звонки по call файлам.     
         | 
|||
| 
    25
    
        APXi    
     11.11.16 
            ✎
    13:57 
 | 
         
        А какую компоненту лучше использовать для связи с астериском?     
         | 
|||
| 
    26
    
        CodeFinder    
     11.11.16 
            ✎
    13:57 
 | 
         
        (25) если звонить call файлы.     
         | 
|||
| 
    27
    
        APXi    
     11.11.16 
            ✎
    14:00 
 | 
         
        А если еще смотреть кто куда звонит, занят/не занят и т.д.?     
         | 
|||
| 
    28
    
        CodeFinder    
     11.11.16 
            ✎
    14:02 
 | 
         
        (27) астериск ведет базу логов. подключаешся как ко внешней базе и поехали. яндекси cdr     
         | 
|||
| 
    29
    
        Vladislava-smile    
     16.11.16 
            ✎
    08:06 
 | 
         
        Товарищи, вопрос с входящими решен с помощью события:
 
        Если Событие = "Newchannel" тогда НовЗапись = ТЗСобытийVarSet.Добавить(); НовЗапись.Uniqueid = СтруктураПолей.Получить("Uniqueid"); Если СтруктураПолей.Получить("Context") = "incall" тогда НовЗапись.Телефон = "8" + СтруктураПолей.Получить("CallerIDNum"); НовЗапись.ВидЗвонка = Перечисления.ВидЗвонка.Входящий; Иначе НовЗапись.Телефон = СтруктураПолей.Получить("Exten"); НовЗапись.ВидЗвонка = Перечисления.ВидЗвонка.Исходящий; КонецЕсли; ИначеЕсли Событие = "VarSet" тогда ... Теперь встал вопрос с исходящими вызовами из 1с. ТекстКоманды = "Action: Originate" + CRLF + "Channel: SIP/" + СокрЛП(ВнутреннийНомерПользователя) + CRLF + "Context: from-internal" + CRLF + "Exten: " + СокрЛП(ВходящийНомерТелефона) + CRLF + "Priority: 1" + CRLF+ "Callerid: " + ВнутреннийНомерПользователя + "->" + СокрЛП(ВходящийНомерТелефона) + CRLF + "Timeout: 30000" + CRLF + "Async: true" + CRLF; Asterisk._АстерискВыполнитьКоманду(ТекстКоманды); Софтфон срабатывает, но после поднятия трубки не проиходит дальнейшего звонка. Что не так?  | 
|||
| 
    30
    
        Vladislava-smile    
     16.11.16 
            ✎
    08:09 
 | 
         
        Если просто звонить с софтфона - звонок идет     
         | 
|||
| 
    31
    
        Shved_72    
     16.11.16 
            ✎
    08:26 
 | 
         
        офф: никто не дружил 1с в керио-оператор?     
         | 
|||
| 
    32
    
        Vladislava-smile    
     16.11.16 
            ✎
    08:28 
 | 
         
        (31) - так он вроде платный, нет?     
         | 
|||
| 
    33
    
        Vladislava-smile    
     16.11.16 
            ✎
    08:29 
 | 
         
        (31) - да и зачем?     
         | 
|||
| 
    34
    
        Shved_72    
     16.11.16 
            ✎
    08:33 
 | 
         
        платный. хотя там тоже Астерикс
 
        "AMI (интерфейс управления сервером Asterisk) — интеграция с другими системами управления взаимоотношениями с клиентами (CRM)." http://www.kerio.ru/products/kerio-operator/features  | 
|||
| 
    35
    
        Vladislava-smile    
     16.11.16 
            ✎
    08:39 
 | 
         
        (34) и что? Зачем мне это? я уже прикрутила все через библиотеку к 1с. Может у кого пример есть? Или в каких логах посмотреть?     
         | 
|||
| 
    36
    
        trdm    
     16.11.16 
            ✎
    08:41 
 | 
         
        С астериксом не возился, но делал ч/з коммуникейшинАссистент.
 
        Та еще гемороища. И не любая станция подходит.  | 
|||
| 
    37
    
        Йохохо    
     16.11.16 
            ✎
    08:48 
 | 
         
        (29) вроде все верно. -> не нравится, вроде в конец надо еще 1 пустую строку добавить, один црлф. А что на софтфоне после поднятия трубки?     
         | 
|||
| 
    38
    
        Йохохо    
     16.11.16 
            ✎
    08:56 
 | 
         
        "Callerid: " + ВнутреннийНомерПользователя + "->" + СокрЛП(ВходящийНомерТелефона)
 
        "Async: true" + CRLF; уберите это, потом можно так попробовать "Callerid: " + СокрЛП(ВходящийНомерТелефона) + CRLF  | 
|||
| 
    39
    
        Fedor-1971    
     16.11.16 
            ✎
    08:56 
 | 
         
        (29) Проверяй на консоли Астериска: возможно твой контекст просто не имеет выхода наружу (имеет смысл специально сделать отдельный контекст для звонков из 1С, т.е. с софтофона -одни правила набора, а из 1С другие, с полными префиксами разрешенных направлений звонка, т.к. пользователь их не набирает). 
 
        Как тест без консоли: набери внутренний номер. У меня Asnc=false и CallerID=внутренний номер  | 
|||
| 
    40
    
        Йохохо    
     16.11.16 
            ✎
    08:59 
 | 
         
        (39) почему внутренний?)
 
        для отладки можно позвонить через ssh, это ж линукс  | 
|||
| 
    41
    
        Fedor-1971    
     16.11.16 
            ✎
    09:01 
 | 
         
        (40) CallerID - кто звонит, т.е. внутренний номер.     
         | 
|||
| 
    42
    
        Vladislava-smile    
     16.11.16 
            ✎
    09:02 
 | 
         
        (37) - тишина, вообще никаких действий нет     
         | 
|||
| 
    43
    
        Fedor-1971    
     16.11.16 
            ✎
    09:03 
 | 
         
        41+ Exten: - куда звоним     
         | 
|||
| 
    44
    
        Йохохо    
     16.11.16 
            ✎
    09:03 
 | 
         
        (42) убрали строки?     
         | 
|||
| 
    45
    
        Vladislava-smile    
     16.11.16 
            ✎
    09:04 
 | 
         
        (38) - ничего не изменилось (     
         | 
|||
| 
    46
    
        Йохохо    
     16.11.16 
            ✎
    09:06 
 | 
         
        (45) проверьте контекст "Context: from-internal" он такой у внутренних? у внешнего абонента есть звонок?
 
        шел есть на астериск?  | 
|||
| 
    47
    
        Йохохо    
     16.11.16 
            ✎
    09:08 
 | 
         
        если астер вообще чужой, еще бы права ами пользователя проверить, есть ли право звонить     
         | 
|||
| 
    48
    
        Fedor-1971    
     16.11.16 
            ✎
    09:09 
 | 
         
        (42) нужно посмотреть в консоль сервера астериск (строка запуска: "asterisk -rvvvv", т.е. подробная информация об установке соединения) посмотреть что происходит на стороне астериска
 
        (45) CallerID - просто внутренний номер телефона, а не тот на который звоним "CallerID:" + СокрЛП(ВнутреннийНомерПользователя) + CRLF + "Exten: " + СокрЛП(ВходящийНомерТелефона) + CRLF + тут точно номер на который звоним?  | 
|||
| 
    49
    
        Vladislava-smile    
     16.11.16 
            ✎
    09:09 
 | 
         
        (47) звонок идет из софтфона     
         | 
|||
| 
    50
    
        Fedor-1971    
     16.11.16 
            ✎
    09:10 
 | 
         
        (49) контекст от софтофона = from-internal     
         | 
|||
| 
    51
    
        Vladislava-smile    
     16.11.16 
            ✎
    09:10 
 | 
         
        (48) "Exten: " + СокрЛП(ВходящийНомерТелефона) + CRLF + тут точно номер на который звоним?
 
        Абсолютно точно - по отладчику проверяла.  | 
|||
| 
    52
    
        Fedor-1971    
     16.11.16 
            ✎
    09:11 
 | 
         
        (51) а CallerID? контексты точно одинаковые на софтофоне и при звонке из 1С     
         | 
|||
| 
    53
    
        Fedor-1971    
     16.11.16 
            ✎
    09:12 
 | 
         
        52+ всю строку инициализации звонка сюда можно выложить?     
         | 
|||
| 
    54
    
        Йохохо    
     16.11.16 
            ✎
    09:12 
 | 
         
        (51) точно     
         | 
|||
| 
    55
    
        Vladislava-smile    
     16.11.16 
            ✎
    09:14 
 | 
         
        Action: Originate
 
        Channel: SIP/104 Context: from-internal Exten: 89144004946 Priority: 1 Callerid: 104  | 
|||
| 
    56
    
        Йохохо    
     16.11.16 
            ✎
    09:15 
 | 
         
        (55) таймаут не скопипастился?     
         | 
|||
| 
    57
    
        Vladislava-smile    
     16.11.16 
            ✎
    09:16 
 | 
         
        (55) а он и ним и без него не пашет     
         | 
|||
| 
    58
    
        Vladislava-smile    
     16.11.16 
            ✎
    09:18 
 | 
         
        В софтфоне идет отображение как входящего звонка
 
        104(104)(104)  | 
|||
| 
    59
    
        Йохохо    
     16.11.16 
            ✎
    09:18 
 | 
         
        позвоните на внутренний     
         | 
|||
| 
    60
    
        Fedor-1971    
     16.11.16 
            ✎
    09:19 
 | 
         
        (57) таймаут нужен - иначе астериск тупо кладёт трубку в канале, типа пользователь не ответил, Async:false - ждём когда пользователь снимет трубку на софтофоне
 
        (58) правильно, Звоним себе, когда сняли трубку - инициируем вызов внешненго номера  | 
|||
| 
    61
    
        Vladislava-smile    
     16.11.16 
            ✎
    09:20 
 | 
         
        (59) - никаких изменений     
         | 
|||
| 
    62
    
        Vladislava-smile    
     16.11.16 
            ✎
    09:21 
 | 
         
        (60) - вернула     
         | 
|||
| 
    63
    
        Йохохо    
     16.11.16 
            ✎
    09:21 
 | 
         
        я бы контекст проверил, т.к. вроде все верно     
         | 
|||
| 
    64
    
        Fedor-1971    
     16.11.16 
            ✎
    09:25 
 | 
         
        (61) можно попробовать софтофон: MicroSIP, и как-бы пора добраться до консоли астериск и контекстов     
         | 
|||
| 
    65
    
        Йохохо    
     16.11.16 
            ✎
    09:30 
 | 
         
        (64) или cygwin + nmap =) го хц     
         | 
|||
| 
    66
    
        Vladislava-smile    
     16.11.16 
            ✎
    10:29 
 | 
         
        (64) - попробую MicroSIP, спасибо     
         | 
|||
| 
    67
    
        Vladislava-smile    
     16.11.16 
            ✎
    10:29 
 | 
         
        (63) а где его проверять?     
         | 
|||
| 
    68
    
        Fedor-1971    
     16.11.16 
            ✎
    10:39 
 | 
         
        (67) на сервере Астериска, 
 
        в файлах extension*.* находишь [fom_internal] и смотришь куда из него можно звонить и можно ли вообще, в файлах sip*.* (pjsip*.*) ищешь [внутренний номер телефона] и смотришь контекст. Если сама не настраивала, лучше дёрни админа и вместе с ним глянете на настройки и консоль сервера.  | 
|||
| 
    69
    
        Йохохо    
     16.11.16 
            ✎
    11:20 
 | 
         
        или попросите вывод "sip show peer 104" из консоли астериска asterisk -r , строка Context     
         | 
|||
| 
    70
    
        Vladislava-smile    
     17.11.16 
            ✎
    06:04 
 | 
         
        (68, 69) - спасибо, так и сделаю     
         | 
|||
| 
    71
    
        Vladislava-smile    
     17.11.16 
            ✎
    08:10 
 | 
         
        Если убрать контекст или поставить office, тогда
 
        звонок идет, НО поле Exten при Event: Newchannel не заполнено (если звонить из 1С), но если звонить из микросипа, тогда поле заполнено. Почему?  | 
|||
| 
    72
    
        Vladislava-smile    
     17.11.16 
            ✎
    08:10 
 | 
         
        Спросила у админа, он сказал, что астериске все поля заполняются и контекст стоит office     
         | 
|||
| 
    73
    
        Vladislava-smile    
     17.11.16 
            ✎
    09:08 
 | 
         
        Вот что я получаю:
 
        Event: Newchannel Privilege: call,all Channel: SIP/104-000000f9 ChannelState: 0 ChannelStateDesc: Down CallerIDNum: CallerIDName: AccountCode: Exten: Context: office Uniqueid: 1479362841.249 Event: VarSet Privilege: dialplan,all Channel: SIP/104-000000f9 Variable: MIXMONITOR_FILENAME Value: /var/record/2016/11/17/1479362841.249-2016-11-17-16_07-104-89144004946.wav Uniqueid: 1479362841.249 Event: Newchannel Privilege: call,all Channel: SIP/sipout-000000fa ChannelState: 0 ChannelStateDesc: Down CallerIDNum: CallerIDName: AccountCode: Exten: Context: incall Uniqueid: 1479362842.250 Event: Dial Privilege: call,all SubEvent: Begin Channel: SIP/104-000000f9 Destination: SIP/sipout-000000fa CallerIDNum: 104 CallerIDName: <unknown> ConnectedLineNum: 104 ConnectedLineName: <unknown> UniqueID: 1479362841.249 DestUniqueID: 1479362842.250 Dialstring: sipout/89144004946 Event: Bridge Privilege: call,all Bridgestate: Link Bridgetype: core Channel1: SIP/104-000000f9 Channel2: SIP/sipout-000000fa Uniqueid1: 1479362841.249 Uniqueid2: 1479362842.250 CallerID1: 104 CallerID2: 89144004946 Event: Hangup Privilege: call,all Channel: SIP/sipout-000000fa Uniqueid: 1479362842.250 CallerIDNum: 89144004946 CallerIDName: <unknown> ConnectedLineNum: 104 ConnectedLineName: <unknown> Cause: 16 Cause-txt: Normal Clearing Event: Hangup Privilege: call,all Channel: SIP/104-000000f9 Uniqueid: 1479362841.249 CallerIDNum: 104 CallerIDName: <unknown> ConnectedLineNum: 104 ConnectedLineName: <unknown> Cause: 16 Cause-txt: Normal Clearing  | 
|||
| 
    74
    
        Fedor-1971    
     17.11.16 
            ✎
    09:20 
 | 
         
        (71) не парься, NewChannel начинается на Originate, т.е. с вызова своего софтофона, Async=true параллельно отправляет вызов на внешний номер.
 
        Опирайся на: UniqueID: 1479362841.249 - он одинаковый до конца звонка по нему записывай события в регистр сведений и сможешь отследить когда началась обработка звонка (NewChannel), подняли трубку (Bridge ), положили трубку(Hungup)- если надо, то кто первый положил трубку) Дальше анализируй Bridge по "CallerID1: 104" и "CallerID2: 89144004946" для определения направления звонка (или можно опереться на контекст, но его может поменять админ без всяких мыслей, что он где-то используется) Завершение звонка: последнее событие Hungup c "CallerIDNum: 104"  | 
|||
| 
    75
    
        Vladislava-smile    
     17.11.16 
            ✎
    09:30 
 | 
         
        (74) да я так и сделал все уже, просто не понятно почему???
 
        Ладно, тема закрыта, Fedor-1971, отдельное спасибо )  | 
|||
| 
    76
    
        Fedor-1971    
     17.11.16 
            ✎
    09:37 
 | 
         
        (75) потому что, вызов инициирует сервер Астериск, поэтому первое событие не содержит ни каких данных о телефонах, за то определяет UniqueID.     
         | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |