Интеграция AMI Asterisk + 1С входящие/исходящие #784917


#0 by Vladislava-smile
Добрый день, кто сталкивался - подскажите как определять входящий вызов или исходящий. Библиотеку подкрутила, 1с - ка отлавливает события AMI. Из событий VarSet параметры value, Channel, ID гружу в ТЗ При снятии трубки по Bridge есть Channel1 и Channel2 и ID1 и ID2. Ищу в ТЗ файл записи. Как я думала, если найден по Channel1 и ID1, то номером клиента является CallerID1, а звонок входящий, но нет ((( По Hangup с отбором ТЗ чиститься.
#1 by ADirks
Лучше беги от этой шляпы куда подальше Разбирать протоколы от астериска - это то ещё развлечение. кстати, там ещё там перевод звонка бывает... Ну а если не убежать, то берёшь полные протоколы, и куришь их, пока из ушей не полезет. у нас вот, к примеру, такое накурилось
#2 by Vladislava-smile
- примерно то же самое и у меня, как я понимаю у Вас в базе у пользователей прописан свой внутренний номер (МойТелефон). Я думала, что по средствам астериска есть какой-то способ определять тип звонка. Но все равно спасибо.
#3 by ADirks
ну да, у нас такой вот частный случай, потому я и говорю "например" Думаю, что есть более правильные способы, но лезть слишком глубоко ни желания ни времени не было.
#4 by Fedor-1971
Получи трассу звонка в текстовом виде. Примерно такую: Дальше несколько способов: 1.Анализируешь:        CallerIDNum: - Номер с которого набирали        Exten: - набранный номер и определяешь если короткий 1, то звонок исходящий, если 2, то звонок входящий 2. Правильно называешь контексты звонка Например, Context: для входящих всегда начинаем с IN, для исходящих OUT. В обеих случаях будет проблема если нужно определить внутренний звонок был входящим или исходящим, и выход только один - как-то зафиксировать номер сотрудника, относительно которого проверяем (например, сохранить его в справочнике)
#5 by Serginio1
#6 by Serginio1
#7 by Йохохо
но если вы поймали dialbegin, там же сразу понятно кто дайял бегин
#8 by Vladislava-smile
- спасибо, буду пробовать.
#9 by Fedor-1971
при неизвестном номере сотрудника - нет
#10 by Fedor-1971
9+ Трасса исходящего звонка К стати, в надо опираться не на Exten, а на DestCallerIDNum - номер куда звонили, в данном случае нашему сотруднику Всё зависит от версии Asterisk и библиотеки захвата событий AMI. Так что, успехов в анализе
#11 by Fragster
я забил и купил
#12 by Йохохо
исходящего? "DialString: SIP/3001" это чистый астериск или поверх еще что то? "Context: from-Mango"
#13 by Fedor-1971
Это правильно. Есть много готовых решений. Плюс в том, что какую-то поддержку от поставщика получить всё-таки удастся (пока деньги не заплачены и не подписан акт внедрения).
#14 by Fedor-1971
DialString: SIP/oTrunk553, практически чистый лог, контексты и номера игрушечные, на боевой нормально названы контексты
#15 by Йохохо
нет такой строки DialString: SIP/oTrunk553
#16 by Fedor-1971
таки и строки из в трассе нет
#17 by Йохохо
#18 by Йохохо
#19 by Fedor-1971
Да, лопухнулся. Это входящий. обрати внимание, что при настройке Dial(sip, sip, sip ...) Hungup то же будет несколько и ты почистишь ТЗ до завершения звонка
#20 by Йохохо
кажется минимум два надо ловить
#21 by Fedor-1971
надёжно отследить звонок можно только так: DialBegin (иногда их несколько) - BridgeEnter (может быть несколько) - Hangup (может быть несколько). Пишем данные в РС с измерениями Linkedid (от первого BridgeEnter) и датой звонка - обеспечит уникальность звонка за день. После того как положили трубку (BridgeLeave - их то же может быть несколько) будут идти ещё некоторое время события закрытия канала, поэтому просто пишем события в РС и если нужно, отображаем пользователю. Как показывает опыт эксплуатации - на начальном этапе: "мы хотим ВСЁ и сразу прямо On-Line", а по факту: "достаточно загрузить лог звонков за вчерашний день".
#22 by Йохохо
а оно отловит так звонок на ринг групп с стратегией ринг ол и пропущенный менеджером?
#23 by Fedor-1971
Если ни кто трубку не взял, будет запись с признаком "Недозвон" (есть DialBegin - Hangup  но внутри нет событий для регистрации, трубку сотрудники не поднимали), если кто-то трубку поднял - ему зарегистрируется звонок, остальным в группе ничего не регистрируется. Можно посмотреть трассу звонка на группу и определить события вызова адресатов группы (Queue скорее всего) и если нужно  можно писать в РС и эту информацию, только придётся добавить в измерения "Внутренний номер"
#24 by CodeFinder
Я делал на Django + soap по 1с. Звонки по call файлам.
#25 by APXi
А какую компоненту лучше использовать для связи с астериском?
#26 by CodeFinder
если звонить call файлы.
#27 by APXi
А если еще смотреть кто куда звонит, занят/не занят и т.д.?
#28 by CodeFinder
астериск ведет базу логов. подключаешся как ко внешней базе и поехали. яндекси cdr
#29 by Vladislava-smile
Товарищи, вопрос с входящими решен с помощью события: ... Теперь встал вопрос с исходящими вызовами из 1с. ТекстКоманды = "Action: Originate" + CRLF + Софтфон срабатывает, но после поднятия трубки не проиходит дальнейшего звонка. Что не так?
#30 by Vladislava-smile
Если просто звонить с софтфона - звонок идет
#31 by Shved_72
офф: никто не дружил 1с в керио-оператор?
#32 by Vladislava-smile
- так он вроде платный, нет?
#33 by Vladislava-smile
- да и зачем?
#34 by Shved_72
платный. хотя там тоже Астерикс "AMI (интерфейс управления сервером Asterisk) — интеграция с другими системами управления взаимоотношениями с клиентами (CRM)."
#35 by Vladislava-smile
и что? Зачем мне это? я уже прикрутила все через библиотеку к 1с. Может у кого пример есть? Или в каких логах посмотреть?
#36 by trdm
С астериксом не возился, но делал ч/з коммуникейшинАссистент. Та еще гемороища. И не любая станция подходит.
#37 by Йохохо
вроде все верно. -> не нравится, вроде в конец надо еще 1 пустую строку добавить, один црлф. А что на софтфоне после поднятия трубки?
#38 by Йохохо
уберите это, потом можно так попробовать "Callerid: " + СокрЛП(ВходящийНомерТелефона) + CRLF
#39 by Fedor-1971
Проверяй на консоли Астериска: возможно твой контекст просто не имеет выхода наружу (имеет смысл специально сделать отдельный контекст для звонков из 1С, т.е. с софтофона -одни правила набора, а из 1С другие, с полными префиксами разрешенных направлений звонка, т.к. пользователь их не набирает). Как тест без консоли: набери внутренний номер. У меня Asnc=false и CallerID=внутренний номер
#40 by Йохохо
почему внутренний?) для отладки можно позвонить через ssh, это ж линукс
#41 by Fedor-1971
CallerID - кто звонит, т.е. внутренний номер.
#42 by Vladislava-smile
- тишина, вообще никаких действий нет
#43 by Fedor-1971
41+ Exten: - куда звоним
#44 by Йохохо
убрали строки?
#45 by Vladislava-smile
- ничего не изменилось (
#46 by Йохохо
проверьте контекст "Context: from-internal" он такой у внутренних? у внешнего абонента есть звонок? шел есть на астериск?
#47 by Йохохо
если астер вообще чужой, еще бы права ами пользователя проверить, есть ли право звонить
#48 by Fedor-1971
нужно посмотреть в консоль сервера астериск (строка запуска: "asterisk -rvvvv", т.е. подробная информация об установке соединения) посмотреть что происходит на стороне астериска CallerID - просто внутренний номер телефона, а не тот на который звоним "CallerID:" + СокрЛП(ВнутреннийНомерПользователя) + CRLF + "Exten: " + СокрЛП(ВходящийНомерТелефона) + CRLF + тут точно номер на который звоним?
#49 by Vladislava-smile
звонок идет из софтфона
#50 by Fedor-1971
контекст от софтофона = from-internal
#51 by Vladislava-smile
"Exten: " + СокрЛП(ВходящийНомерТелефона) + CRLF + тут точно номер на который звоним? Абсолютно точно - по отладчику проверяла.
#52 by Fedor-1971
а CallerID? контексты точно одинаковые на софтофоне и при звонке из 1С
#53 by Fedor-1971
52+ всю строку инициализации звонка сюда можно выложить?
#54 by Йохохо
точно
#55 by Vladislava-smile
#56 by Йохохо
таймаут не скопипастился?
#57 by Vladislava-smile
а он и ним и без него не пашет
#58 by Vladislava-smile
В софтфоне идет отображение как входящего звонка 104
#59 by Йохохо
позвоните на внутренний
#60 by Fedor-1971
таймаут нужен - иначе астериск тупо кладёт трубку в канале, типа пользователь не ответил, Async:false - ждём когда пользователь снимет трубку на софтофоне правильно, Звоним себе, когда сняли трубку - инициируем вызов внешненго номера
#61 by Vladislava-smile
- никаких изменений
#62 by Vladislava-smile
- вернула
#63 by Йохохо
я бы контекст проверил, т.к. вроде все верно
#64 by Fedor-1971
можно попробовать софтофон: MicroSIP, и как-бы пора добраться до консоли астериск и контекстов
#65 by Йохохо
или cygwin + nmap =) го хц
#66 by Vladislava-smile
- попробую MicroSIP, спасибо
#67 by Vladislava-smile
а где его проверять?
#68 by Fedor-1971
на сервере Астериска, в файлах extension*.* находишь [fom_internal] и смотришь куда из него можно звонить и можно ли вообще, в файлах sip*.* (pjsip*.*) ищешь [внутренний номер телефона] и смотришь контекст. Если сама не настраивала, лучше дёрни админа и вместе с ним глянете на настройки и консоль сервера.
#69 by Йохохо
или попросите вывод "sip show peer 104" из консоли астериска asterisk -r , строка Context
#70 by Vladislava-smile
(68, 69) - спасибо, так и сделаю
#71 by Vladislava-smile
Если убрать контекст или поставить office, тогда звонок идет, НО поле Exten при Event: Newchannel не заполнено (если звонить из 1С), но если звонить из микросипа, тогда поле заполнено. Почему?
#72 by Vladislava-smile
Спросила у админа, он сказал, что астериске все поля заполняются и контекст стоит office
#73 by Vladislava-smile
Вот что я получаю: CallerIDNum: CallerIDName: AccountCode: Exten: CallerIDNum: CallerIDName: AccountCode: Exten:
#74 by Fedor-1971
не парься, NewChannel начинается на Originate, т.е. с вызова своего софтофона, Async=true параллельно отправляет вызов на внешний номер. Опирайся на: UniqueID: 1479362841.249 - он одинаковый до конца звонка по нему записывай события в регистр сведений и сможешь отследить когда началась обработка звонка (NewChannel), подняли трубку (Bridge ), положили трубку(Hungup)- если надо, то кто первый положил трубку) Дальше анализируй Bridge по "CallerID1: 104" и "CallerID2: 89144004946" для определения направления звонка (или можно опереться на контекст, но его может поменять админ без всяких мыслей, что он где-то используется) Завершение звонка: последнее событие Hungup c "CallerIDNum: 104"
#75 by Vladislava-smile
да я так и сделал все уже, просто не понятно почему??? Ладно, тема закрыта, Fedor-1971, отдельное спасибо )
#76 by Fedor-1971
потому что, вызов инициирует сервер Астериск, поэтому первое событие не содержит ни каких данных о телефонах, за то определяет UniqueID.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С