Эти настройки крайне важны. Необходимо настроить использование API Asterisk.
Подробное описание доступно на странице.
[general] enabled = yes port = 5038 bindaddr = 0.0.0.0 allowmultiplelogin = yes webenabled = yes httptimeout = 60 [1cami] ; имя пользователя AMI secret = PASSWORD1cami ; пароль пользователя AMI deny=0.0.0.0/0.0.0.0 permit=0.0.0.0/0.0.0.0 read = call,cdr,user write = call,originate,reporting ;;; Дополнительные опции для ASTERISK 11+ ;;; Начало ;;;; eventfilter=!Event: Newexten eventfilter=!Event: DeviceStateChange eventfilter=!Event: NewConnectedLine eventfilter=!Event: Newchannel eventfilter=!Event: SoftHangupRequest eventfilter=!Event: HangupRequest eventfilter=!Event: BridgeDestroy eventfilter=!Event: MusicOnHoldStop eventfilter=!Event: NewCallerid eventfilter=!Event: LocalBridge ;;; Дополнительные опции для ASTERISK 11+ ;;; Конец ;;;; [getvar1c] ; дополнительная "локальная" учетная запись ; Она используется в скрипте "/var/www/admin/1c/getvar/index.php" ; Если меняете логин и пароль - необходимо сменить их и в скрипте secret = dfsdfsdjfSSS33fksd deny=0.0.0.0/0.0.0.0 permit=127.0.0.1/255.255.255.255 read = call,cdr,user write = call,originate,reporting
[general] enabled=yes enablestatic=yes bindaddr=0.0.0.0 bindport=8088 prefix=asterisk
[general] ; Необходимо настроить парковку: parkext => 700 parkpos => 701-720 context => parkedcalls parkinghints = yes [featuremap] blindxfer => ## ; Это лишь пример значения. Можно установить свое. disconnect => *0 ; Это лишь пример значения. Можно установить свое. ; ОБЯЗАТЕЛЬНО включите опцию "atxfer" atxfer => ** ; Это лишь пример значения. Можно установить свое.
[general] enable=yes
; ; Asterisk Channel Event Logging (CEL) ; [general] enable=yes apps=all events=BRIDGE_START,BRIDGE_END ; asterisk 13 ;events=BRIDGE_EXIT,BRIDGE_ENTER
; ; Asterisk Call Management CDR ; [general] enabled = yes [mappings] ; В AMI event CDR будем возвращать дополнительную информацию ; Имя файла записи разговора ${CDR(recordingfile)} - переменная dialplan, нужно ее определить recordingfile => recordingfile ; Идентификатор звонка ; Имя файла записи разговора ${CDR(linkedid)} - переменная dialplan, определена в Asterisk 1.8+ linkedid => linkedid
; настройка соединения [PT1C_asteriskcdrdb] enabled=>yes dsn=>MySQL-asteriskcdrdb pooling=>no limit=>10 pre-connect=>yes username=>root; имя пользователя базы данных password=>123 ; пароль пользователя базы данных
[PT1C_Global] connection=PT1C_asteriskcdrdb table=PT1C_cdr alias recordingfile=>recordingfile alias start=>calldate
[PT1C_cel] connection=PT1C_asteriskcdrdb loguniqueid=yes table=cel
[general] callcounter=yes callevents=yes ; call-limit - не рекомендуем использовать этот параметр. По возможности его следует заменить на busylevel.
Обратите внимание на параметр call-limit, см. документацию…
[globals] ; Необходимо описать параметры подключения к базе данных MySQL AMPDBENGINE=mysql AMPDBNAME=asteriskcdrdb AMPDBHOST=127.0.0.1 AMPDBUSER=root AMPDBPASS=123 ; пароль пользователя базы данных MySQL ; Установите контекст для переадресаций. ; Панель телефонии будет его использовать при переводах. TRANSFER_CONTEXT=internal [internal] ; ОБЯЗАТЕЛЬНО включите контекст парковки в те контексты, ; которые используют SIP учетные записи телефонов сотрудников; include => parkedcalls [internal-hint] ; необходимо описать хинты для отслеживания состояния каналов exten => 231,hint,SIP/160-231 ;231 - добавочный номер; 160-231 - имя учетной записи SIP (sip.conf) exten => 232,hint,SIP/232 ;232 - добавочный номер; 232 - имя учетной записи SIP (sip.conf) [miko_ajam] ; ... пример контекста описан в файле ; "dialplan_miko_ajam/test_sample_configs/extensions.conf" [miko_ajam_fax_tx] ; ... пример контекста описан в файле ; "dialplan_miko_ajam/test_sample_configs/extensions.conf" ; Пример входящего контекста [SIP-PROVIDER-incoming] exten => _X!,1,NoOp(--- Incoming call ---) ; Для определения внешней линии (модуль статистики) same => n,Set(__FROM_DID=${EXTEN}); EXTEN - номер, на который звонит клиент same => n,Set(__FROM_CHAN=${CHANNEL}); Канал клиента same => n,Set(CDR(did)=${FROM_DID}) ; Для работы функции перехвата нужно вызвать UserEvent "Interception" same => n,UserEvent(Interception,CALLERID: ${CALLERID(num)},chan1c: ${CHANNEL}) ; далее произвольный dialplan для обработки входящего звонка
При настройке записи разговоров, в поле таблицы CDR «recordingfile» должно сохраняться имя файла записи разговора.
Пример реализации записи разговоров:
exten => 1000,n,Set(RecFile=${STRFTIME(${EPOCH},,%Y-%m/%d)}/in_${CDR(src)}_${STRFTIME(${EPOCH},,%Y-%m-%d-%H-%M-%S)}.gsm) exten => 1000,n,Set(CDR(recordingfile)=${RecFile}) exten => 1000,n,MixMonitor(${RecFile})
При отправке / получении факсимильных сообщений необходимо фиксировать эту информацию.
; при отправке exten => h,n,Set(CDR(recordingfile)=${faxfile}) exten => h,n,Set(CDR(userfield)=SendFAX)
; при получении exten => h,n,Set(CDR(recordingfile)=${faxfile}) exten => h,n,Set(CDR(userfield)=ReceiveFAX)
Если необходима работы этой функции, следует выполнить рекомендации, описанные в инструкциях.
На текущий момент функция может работать только с АТС Askozia 5 и более ранних версиях.
Для настройки функции в собственной сборке asterisk потребуются правки со стороны панели телефонии в 1С.
Пример dialplan (extensions,conf) для внутреннего номера 104:
[internal] exten => 104,1,Set(dstnum=${EXTEN}); exten => 104,n,Set(fw=${DB(CF/${dstnum})}) exten => 104,n,Set(dstcontext=internal) exten => 104,n,ExecIf($["${fw}x" != "x"]?Goto(${dstcontext},${fw},1) exten => 104,n,Dial(SIP/${EXTEN},20,Tte) exten => 104,n,Hangup exten => 74922293045,1,Dial(SIP/TEST-PROVIDER/${EXTEN},20,Tte)
Теперь детальнее:
; Для того, чтобы поместить в базу данных Asterisk ; информацию о заменяющем номере можно выполнить команду: ; database put CF 104 74922293045 ; Команду можно выполнить в CLI консоли Asterisk ; Аналог этой команды выполняет панель телефонии для 1С при установке статуса "Отошел" / "На мобильном". ; Определяем номер, на который осуществляется вызов. Set(dstnum=${EXTEN}); Номер назначения, к примеру внутренний номер сотрудника. ; Получаем значение резервного номера из AstDB Set(fw=${DB(CF/${dstnum})}) ; Устанавливаем контекст назначания. В нем должен быть определен "fw" - резервный номер. Set(dstcontext=internal) ; Если полученное значение не пустое, то выполняем переадресацию в контекст назначения: ExecIf($["${fw}x" != "x"]?Goto(${dstcontext},${fw},1) ; Согласно текущему примеру, в контексте internal должен быть определен exten 74922293045. ; Проверка ; dialplan show 74922293045@internal
Для настройки ранних версий asterisk необходимо поправить файл /etc/asterisk/features.conf:
[general] ; Необходимо настроить парковку: parkext => 700 ; Не актуально для asterisk13 parkpos => 701-720 ; Не актуально для asterisk13 context => parkedcalls ; Не актуально для asterisk13 parkinghints = yes ; Не актуально для asterisk13
Для asterisk13 опции были перенесены в файл /etc/asterisk/res_parking.conf
[general] parkeddynamic = yes [default] context => parkedcalls parkedcallreparking = caller parkedcalltransfers = caller parkext => 700 findslot => next comebacktoorigin=no comebackcontext = parkedcallstimeout parkpos => 701-720
Опишем контекст, в котором будет описана логика возврата с парковки по таймауту.
[internal] ; ОБЯЗАТЕЛЬНО включите контекст парковки в те контексты, ; которые используют SIP учетные записи телефонов сотрудников; include => parkedcalls [parkedcallstimeout] exten => s,1,NoOp(This is all that happens to parked calls if they time out.) same => n,Goto(internal,${PARKER:4},1) same => n,Hangup()
Проверка. Выполняем команду в CLI asterisk «parking show»:
~ # asterisk -rx 'parking show' Parking General Options ----------------------- Dynamic Parking : yes Parking Lot: default -------------------------------------------------------------------------- Parking Extension : 700 Parking Context : parkedcalls Parking Spaces : 701-720 Parking Time : 45 sec Comeback to Origin : no Comeback Context : parkedcallstimeout Comeback Dial Time : 30 sec MusicOnHold Class : Enabled : yes Dynamic : no