ВидеоКонф(ВКС)  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Не работает перевод с IVR

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

Не работает перевод с IVR

Сообщение Elektronik » 31 июл 2019, 18:28

Добрый день форумчане!

Прошло 4000 лет и руководство выделило денюшку на телефоны, ура!
Наконец то будем допиливать Asterisk до конца с новым рвением, уже в продакшене.
Сори за прилюдию, а теперь к теме вопроса.
Не работает перевод с IVR. Забито слепой перевод через #, перевод с предупреждением *. Перевод работает корректно. (с внутренних на внутренние переводится, так же корректно работает перевод, если звонящий набрал в тоновом режиме номер, попал на вызываемого, вызываемый нормально переводит и через # и через * (имеется ввиду во время проигрывания бекграунда вводим прямой номер, например 100).)
Но если звонок поступает с IVR, получается попадает в очередь (например на секретаря), то от туда не переводится. Вместо этого просто играют DTMF сигналы.
Вроде t стоит, должно работать, но не работает, может что то не учел в очередях, я с ними слаб (я вообще слаб так то :)) )
Ниже конфиги, Если надо еще что то -- скажите.
Надеюсь на помощь, а то мы уже почти в продакшене, а тут такой косяк, не переводятся входящие...

[Показать] Спойлер: extensions.conf
[general]
static=yes
writeprotect=yes

[globals]

;Если 0, запись разговоров отключена
;Если 1, запись разговоров включена с одновременной конвертацией в MP3
;Если 2, запись разговоров включена и выполняется запись в формат WAV. Преобразование в MP3 формат должно быть выполнено скриптом "proc_records.sh"
RECORDING=1;
;Путь к папке с записями разговоров
DIR_RECORDS=/records/callrecords/;

[default]

; MixMonitor
[macro-recording]
exten => s,1,GoToIf($["${RECORDING}" = "1"]?mp3)
exten => s,n,GoToIf($["${RECORDING}" = "2"]?wav:no)
exten => s,n(mp3),Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${ARG1}-${ARG2});
exten => s,n,Set(monopt=nice -n 19 /usr/bin/lame -b 32 --silent "${DIR_RECORDS}${fname}.wav" "${DIR_RECORDS}${fname}.mp3" && rm -f "${DIR_RECORDS}${fname}.wav" && chmod o+r "${DIR_RECORDS}${fname}.mp3");
exten => s,n,Set(CDR(filename)=${fname}.mp3);
exten => s,n,Set(CDR(realdst)=${ARG2});
exten => s,n,Set(CDR(remoteip)=${CHANNEL(recvip)});
exten => s,n,MixMonitor(${DIR_RECORDS}${fname}.wav,b,${monopt});
exten => s,n,Goto(no);
exten => s,n(wav),Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${ARG1}-${ARG2});
exten => s,n,Set(CDR(filename)=${fname}.wav);
exten => s,n,Set(CDR(realdst)=${ARG2});
exten => s,n,Set(CDR(remoteip)=${CHANNEL(recvip)});
exten => s,n,MixMonitor(${DIR_RECORDS}${fname}.wav,b);
exten => s,n,Goto(no);
exten => s,n(no),Verbose(Exit record);

[outcoling]
exten => _X.,1,Macro(recording,${CALLERID(num)},${EXTEN}) ;_X., означает, что для ЛЮБЫХ исходящих номеров начинает определятся название файла

exten => _xxx,2,Dial(SIP/${EXTEN},,t&m)
exten => _X.,2,Dial(SIP/ntel/${EXTEN})
exten => _X.,3,Hangup()
exten => 700,3,Goto(menu,s,1) ;если мы изнутри позвоним на этот номер, то мы сможем проверить работу нашего голосового меню.

[incoming]

exten => _x.,1,Set(CALLERID(num)=8${CALLERID(num)}) ;добавляем 8 к входящему, что бы корректно перезванивать
exten => _x.,2,Macro(recording,${CALLERID(num)},${EXTEN}) ;запуск макроса на запись
exten =>_x.,3,Goto(menu,s,1) ;перевод на меню menu ivrsaga
exten => _X.,4,Hangup()

[menu]
exten => s,1,Background(/var/lib/asterisk/moh/ivr/ivrsaga) ;здесь ловится звонок из контекста incoming и проигрывается записанное нами приветствие.
exten => 1,1,Dial Queue(managers,,,,120,t&m) ; 1 нажал, в отдел продаж попал
exten => 2,1,Dial Queue(buh,,,,120,t&m) ; 2 нажал, в бухгалтерию попал
exten => 3,1,Dial Queue(logistic,,,,120,t&m) ; 3 нажал, в логистику попал
exten => 4,1,Dial(SIP/170,,,,120,t&m) ; 4 нажал, к юристу попал
exten => 5,1,Dial(SIP/100,,,,120,t&m) ;5 нажал, в IT-отдел попал
exten => 0,1,Queue(secretar,,,,120,t&m) ; 0 нажал, на секретаря попал Queue(secretar,,,,120,t&m)

exten => _XXX,1,Dial(SIP/${EXTEN},30,t&m) ; набор трехзначного внутреннего номера
exten => _XXX,n,Voicemail(${EXTEN}@default)
exten => _XXX,n,Set(dstNUM=${EXTEN}) ;Задаем переменную для передачи в голосовую почту
exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status)}" = ""]?num-not-exist,1) ;Проверяем статус пира, существует или нет
exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status):0:2}" = "UN"]?num-not-connected,1) ;Проверяем статус пира, подключен или нет
exten => _XXX,n,ChanIsAvail(SIP/${EXTEN},s) ;Проверяем канал на занятость
exten => _XXX,n,NoOp(=========== ChanIsAvail STATUS: ${AVAILSTATUS} ===========) ;Выводим в лог значение функции ChanIsAvail, нужно только для отладки, можно удалить строку
exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 2]?num-BUSY,1) ;Если функция возвращает 2 или 3, значит абонент занят
exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 3]?num-BUSY,1) ;Если функция возвращает 2 или 3, значит абонент занят
exten => _XXX,n,Goto(num-${DIALSTATUS},1) ;Обрабатываем остальные статусы
exten => num-not-exist,1,Wait(2)
exten => num-not-exist,n,Playback(invalid) ;Если номера не существует говорим "Ошибочный номер, попробуйте еще раз"
exten => num-not-connected,1,Wait(2)
exten => num-not-connected,n,Playback(ss-noservice) ;Если номер не подключен, говорим "Набранный вами номер отключен, проверьте номер и повторите попытку
exten => num-BUSY,1,Wait(2)
exten => num-BUSY,n,Playback(vm-isonphone) ;Если номер занят, говорим "Занято"
exten => num-NOANSWER,1,Wait(2)
exten => num-NOANSWER,n,Voicemail(${dstNUM},u) ;Если номер не отвечает, включаем голосовую почту
exten => num-CHANUNAVAIL,1,Wait(2)
exten => num-CHANUNAVAIL,n,Playback(vm-isunavail) ;Если еще по какой-то причине будет статус CHANUNAVAIL, говорим, что номер не доступен в данный момент
exten => t,1,Dial(SIP/100,15) ;Если в голосовом меню не выбрали внутренний номер, адресуем звонок секретарю

exten => s,n,WaitExten(5) ;если человек не нажал ничего, ждем 5 секунд и
exten => s,n,Queue(secretar,,,,120,t&m) ; переводим на секретаря? ждем 30 сек
exten => s,n,Voicemail(100@default) ; если нет ответа секретаря 30 сек переводим на автоответчик 100@default

[Показать] Спойлер: queues.conf
[general]

persistentmembers = yes

monitor-type = MixMonitor
strategy = ringall

[secretar]
member => SIP/101


;(SIP/150&SIP/151&SIP/152&SIP/153&SIP/154&SIP/155&SIP/156&SIP/157&SIP/158&SIP/159&SIP/160,,t&m) ; 1 нажал, в отдел продаж попал
[managers]
member => SIP/150
member => SIP/151
member => SIP/152
member => SIP/153
member => SIP/154
member => SIP/155
member => SIP/156
member => SIP/157
member => SIP/158
member => SIP/159
member => SIP/160

;(SIP/140&SIP/141&SIP/142&SIP/143&SIP/144&SIP/145&SIP/146&SIP/147&SIP/148,,t&m) ; 2 нажал, в бухгалтерию попал
[buh]
member => SIP/140
member => SIP/141
member => SIP/142
member => SIP/143
member => SIP/144
member => SIP/145
member => SIP/146
member => SIP/147
member => SIP/148

;(SIP/131&SIP/132&SIP/133&SIP/134,,t&m) ; 3 нажал, в логистику попал
[logistic]
member => SIP/131
member => SIP/132
member => SIP/133
member => SIP/134


Номер секретаря в очереди один, так специально сделано, что бы не передавало занято звонящим, если секретарь на обоих линиях (мб это не правильное решение, подскажите, как правильно, если я и тут косякнул).

Надеюсь на помощь! А то у меня гугл сломался, сам пока не могу найти решение. есть еще параметр T, но судя по описанию (T: Разрешает звонящему пользователю перевести звонок), можно хакнуть систему, нажав #номергвадемалы, и перевести себя же на любой номер. мб я ошибаюсь и тут :)
Аватар пользователя
Elektronik
 
Сообщений: 56
Зарегистрирован: 16 окт 2017, 13:42
Откуда: Москва

Re: Не работает перевод с IVR

Сообщение ded » 31 июл 2019, 18:37

Код: выделить все
[menu]
exten => s,1,Background(/var/lib/asterisk/moh/ivr/ivrsaga) ;здесь ловится звонок из контекста incoming и проигрывается записанное нами приветствие.
exten => s,n,WaitExten(5) ;если человек не нажал ничего, ждем 5 секунд и
exten => s,n,Dial(SIP/100,120,t) ; вызываем секретаря? ждем 120 сек
exten => s,n,Voicemail(100@default) ; если нет ответа секретаря 30 сек переводим на автоответчик 100@default

exten => 1,1,Dial Queue(managers,,,,120,t&m) ; 1 нажал, в отдел продаж попал
exten => 2,1,Dial Queue(buh,,,,120,t&m) ; 2 нажал, в бухгалтерию попал
exten => 3,1,Dial Queue(logistic,,,,120,t&m) ; 3 нажал, в логистику попал
exten => 4,1,Dial(SIP/170,,,,120,t&m) ; 4 нажал, к юристу попал
exten => 5,1,Dial(SIP/100,,,,120,t&m) ;5 нажал, в IT-отдел попал
exten => 0,1,Dial(SIP/100,120,t) ; 0 нажал, на секретаря попал
ded
 
Сообщений: 15822
Зарегистрирован: 26 авг 2010, 19:00

Re: Не работает перевод с IVR

Сообщение Elektronik » 31 июл 2019, 19:01

Сделал так. блок видимо сунул не туда...но.
Получилось, да не получилось. Спасибо Дед, но вопрос вроде как решен, но не решен. Надо ехать, раб.день закончен...завтра с утра еще подумаю, если ничего не придумаю, отпишусь. И если придумаю, отпишусь по результатам :)
Аватар пользователя
Elektronik
 
Сообщений: 56
Зарегистрирован: 16 окт 2017, 13:42
Откуда: Москва

Re: Не работает перевод с IVR

Сообщение Elektronik » 01 авг 2019, 14:08

ded писал(а):
Код: выделить все
[menu]
exten => s,1,Background(/var/lib/asterisk/moh/ivr/ivrsaga) ;здесь ловится звонок из контекста incoming и проигрывается записанное нами приветствие.
exten => s,n,WaitExten(5) ;если человек не нажал ничего, ждем 5 секунд и
exten => s,n,Dial(SIP/100,120,t) ; вызываем секретаря? ждем 120 сек
exten => s,n,Voicemail(100@default) ; если нет ответа секретаря 30 сек переводим на автоответчик 100@default

exten => 1,1,Dial Queue(managers,,,,120,t&m) ; 1 нажал, в отдел продаж попал
exten => 2,1,Dial Queue(buh,,,,120,t&m) ; 2 нажал, в бухгалтерию попал
exten => 3,1,Dial Queue(logistic,,,,120,t&m) ; 3 нажал, в логистику попал
exten => 4,1,Dial(SIP/170,,,,120,t&m) ; 4 нажал, к юристу попал
exten => 5,1,Dial(SIP/100,,,,120,t&m) ;5 нажал, в IT-отдел попал
exten => 0,1,Dial(SIP/100,120,t) ; 0 нажал, на секретаря попал


немного не верно. Dial не надо ставить перед Queue, выдает ошибку [Aug 1 12:20:00] WARNING[14193][C-000000b7]: pbx.c:2864 pbx_extension_helper: No application 'Dial Queue' for extension (menu, 3, 1) и сбрасывает звонок, ну тут все понятно русским по белому написано почему.

Вот лог звонка, попадаю в очередь, берется трубка, вместо перевода просто звучит DTMF сигнал.
[Показать] Спойлер: log
== Using SIP RTP CoS mark 5
> 0x7fdd64037a90 -- Strict RTP learning after remote address set to: 109.71.241.71:17964
-- Executing [6487@incoming:1] Set("SIP/ntel-0000017a", "CALLERID(num)=89151276136") in new stack
-- Executing [6487@incoming:2] Macro("SIP/ntel-0000017a", "recording,89151276136,6487") in new stack
-- Executing [s@macro-recording:1] GotoIf("SIP/ntel-0000017a", "1?mp3") in new stack
-- Goto (macro-recording,s,3)
-- Executing [s@macro-recording:3] Set("SIP/ntel-0000017a", "fname=1564651410.624-2019-08-01-12_23-89151276136-6487") in new stack
-- Executing [s@macro-recording:4] Set("SIP/ntel-0000017a", "monopt=nice -n 19 /usr/bin/lame -b 32 --silent "/records/callrecords/1564651410.624-2019-08-01-12_23-89151276136-6487.wav" "/records/callrecords/1564651410.624-2019-08-01-12_23-89151276136-6487.mp3" && rm -f "/records/callrecords/1564651410.624-2019-08-01-12_23-89151276136-6487.wav" && chmod o+r "/records/callrecords/1564651410.624-2019-08-01-12_23-89151276136-6487.mp3"") in new stack
-- Executing [s@macro-recording:5] Set("SIP/ntel-0000017a", "CDR(filename)=1564651410.624-2019-08-01-12_23-89151276136-6487.mp3") in new stack
-- Executing [s@macro-recording:6] Set("SIP/ntel-0000017a", "CDR(realdst)=6487") in new stack
-- Executing [s@macro-recording:7] Set("SIP/ntel-0000017a", "CDR(remoteip)=109.71.241.71") in new stack
-- Executing [s@macro-recording:8] MixMonitor("SIP/ntel-0000017a", "/records/callrecords/1564651410.624-2019-08-01-12_23-89151276136-6487.wav,b,nice -n 19 /usr/bin/lame -b 32 --silent "/records/callrecords/1564651410.624-2019-08-01-12_23-89151276136-6487.wav" "/records/callrecords/1564651410.624-2019-08-01-12_23-89151276136-6487.mp3" && rm -f "/records/callrecords/1564651410.624-2019-08-01-12_23-89151276136-6487.wav" && chmod o+r "/records/callrecords/1564651410.624-2019-08-01-12_23-89151276136-6487.mp3"") in new stack
== Begin MixMonitor Recording SIP/ntel-0000017a
-- Executing [s@macro-recording:9] Goto("SIP/ntel-0000017a", "no") in new stack
-- Goto (macro-recording,s,16)
-- Executing [s@macro-recording:16] Verbose("SIP/ntel-0000017a", "Exit record") in new stack
Exit record
-- Executing [6487@incoming:3] Goto("SIP/ntel-0000017a", "menu,s,1") in new stack
-- Goto (menu,s,1)
-- Executing [s@menu:1] BackGround("SIP/ntel-0000017a", "/var/lib/asterisk/moh/ivr/ivrsaga") in new stack
-- <SIP/ntel-0000017a> Playing '/var/lib/asterisk/moh/ivr/ivrsaga.ulaw' (language 'ru')
> 0x7fdd64037a90 -- Strict RTP switching to RTP target address 109.71.241.71:17964 as source
> 0x7fdd64037a90 -- Strict RTP learning complete - Locking on source address 109.71.241.71:17964
-- Executing [3@menu:1] Queue("SIP/ntel-0000017a", "logistic,,,,120,t&m") in new stack
-- Started music on hold, class 'default', on channel 'SIP/ntel-0000017a'
== Using SIP RTP CoS mark 5
-- Called SIP/131
== Using SIP RTP CoS mark 5
-- Called SIP/132
== Using SIP RTP CoS mark 5
-- Called SIP/133
[Aug 1 12:23:40] WARNING[14267][C-000000bb]: chan_sip.c:6278 create_addr: Purely numeric hostname (134), and not a peer--rejecting!
-- SIP/131-0000017b is ringing
-- SIP/132-0000017c is ringing
-- SIP/133-0000017d is ringing
> 0x7fdd2003bc00 -- Strict RTP learning after remote address set to: 10.0.10.31:5022
-- SIP/133-0000017d answered SIP/ntel-0000017a
-- Stopped music on hold on SIP/ntel-0000017a
[Aug 1 12:23:42] WARNING[14267][C-000000bb]: res_agi.c:2230 launch_script: Failed to execute '/var/lib/asterisk/agi-bin/t&m': File does not exist.
-- Channel SIP/133-0000017d joined 'simple_bridge' basic-bridge <c20ef537-f909-434f-91d4-94f0c0b727e0>
-- Channel SIP/ntel-0000017a joined 'simple_bridge' basic-bridge <c20ef537-f909-434f-91d4-94f0c0b727e0>
> 0x7fdd2003bc00 -- Strict RTP switching to RTP target address 10.0.10.31:5022 as source
> 0x7fdd2003bc00 -- Strict RTP learning complete - Locking on source address 10.0.10.31:5022
-- Channel SIP/133-0000017d left 'simple_bridge' basic-bridge <c20ef537-f909-434f-91d4-94f0c0b727e0>
-- Channel SIP/ntel-0000017a left 'simple_bridge' basic-bridge <c20ef537-f909-434f-91d4-94f0c0b727e0>
== Spawn extension (menu, 3, 1) exited non-zero on 'SIP/ntel-0000017a'
== MixMonitor close filestream (mixed)
== Executing [nice -n 19 /usr/bin/lame -b 32 --silent "/records/callrecords/1564651410.624-2019-08-01-12_23-89151276136-6487.wav" "/records/callrecords/1564651410.624-2019-08-01-12_23-89151276136-6487.mp3" && rm -f "/records/callrecords/1564651410.624-2019-08-01-12_23-89151276136-6487.wav" && chmod o+r "/records/callrecords/1564651410.624-2019-08-01-12_23-89151276136-6487.mp3"]
== End MixMonitor Recording SIP/ntel-0000017a
-- Registered SIP '131' at 10.0.10.30:5062
-- Registered SIP '131' at 10.0.10.30:5060

видим ошибку WARNING[14267][C-000000bb]: res_agi.c:2230 launch_script: Failed to execute '/var/lib/asterisk/agi-bin/t&m': File does not exist.

исправил диалплан, вместо t&m поставил t,m , сделал dialplan reload
теперь выдает ошибку [Aug 1 12:46:45] WARNING[14546][C-000000c2]: app_macro.c:310 _macro_exec: No such context 'macro-m' for macro 'm'. Was called by 3@outcoling
значит он не видит макрос, после "," должен быть макрос.
Убрал "m"

[Aug 1 12:50:33] WARNING[14602][C-000000c3]: res_agi.c:2230 launch_script: Failed to execute '/var/lib/asterisk/agi-bin/t': File does not exist.

убрал лишние запятые по аналогии с exten => s,n,Dial(SIP/101,120,t)

ошибка пропала, но с очереди так же не переводит, вместо действия слышим DTMF...

у кого указан прямой номер (100, 101, 170), перевод звонков работает, а те, которые поймали звонок из очереди -- перевод не работает :(

видимо синтаксис у Queue отличается от Dial. пойду дальше искать...

Текущая версия dialplan
[Показать] Спойлер: dialplan
[general]
static=yes
writeprotect=yes

[globals]

;Если 0, запись разговоров отключена
;Если 1, запись разговоров включена с одновременной конвертацией в MP3
;Если 2, запись разговоров включена и выполняется запись в формат WAV. Преобразование в MP3 формат должно быть выполнено скриптом "proc_records.sh"
RECORDING=1;
;Путь к папке с записями разговоров
DIR_RECORDS=/records/callrecords/;

[default]

; MixMonitor
[macro-recording]
exten => s,1,GoToIf($["${RECORDING}" = "1"]?mp3)
exten => s,n,GoToIf($["${RECORDING}" = "2"]?wav:no)
exten => s,n(mp3),Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${ARG1}-${ARG2});
exten => s,n,Set(monopt=nice -n 19 /usr/bin/lame -b 32 --silent "${DIR_RECORDS}${fname}.wav" "${DIR_RECORDS}${fname}.mp3" && rm -f "${DIR_RECORDS}${fname}.wav" && chmod o+r "${DIR_RECORDS}${fname}.mp3");
exten => s,n,Set(CDR(filename)=${fname}.mp3);
exten => s,n,Set(CDR(realdst)=${ARG2});
exten => s,n,Set(CDR(remoteip)=${CHANNEL(recvip)});
exten => s,n,MixMonitor(${DIR_RECORDS}${fname}.wav,b,${monopt});
exten => s,n,Goto(no);
exten => s,n(wav),Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${ARG1}-${ARG2});
exten => s,n,Set(CDR(filename)=${fname}.wav);
exten => s,n,Set(CDR(realdst)=${ARG2});
exten => s,n,Set(CDR(remoteip)=${CHANNEL(recvip)});
exten => s,n,MixMonitor(${DIR_RECORDS}${fname}.wav,b);
exten => s,n,Goto(no);
exten => s,n(no),Verbose(Exit record);

[outcoling]
exten => _X.,1,Macro(recording,${CALLERID(num)},${EXTEN}) ;_X., означает, что для ЛЮБЫХ исходящих номеров начинает определятся название файла
exten => _xxx,2,Dial(SIP/${EXTEN},,t&m)
exten => _X.,2,Dial(SIP/ntel/${EXTEN})
exten => _X.,3,Hangup()
exten => 700,3,Goto(menu,s,1) ;если мы изнутри позвоним на этот номер, то мы сможем проверить работу нашего голосового меню.
exten => 500,3,Log(NOTICE, Dialing out from ${CALLERID(all)} to VoiceMail (500))
;Если нужно предоставить возможность попадать в свой ящик голосовой почты с других номеров (с запросом номера и пароля) то нужно добавить вот такую секцию (здесь номером голосовой почты является 500):
;exten => 500,n, VoiceMailMain(@voicemailcontext) ;с авторизацией
;Если нужно автоматом попадать в свой ящик без авторизации:
exten => 500,n,VoiceMailMain(0${CALLERID(num)}@default,s) ;без авторизации
exten => 500,n, Hangup


[incoming]
exten => _x.,1,Set(CALLERID(num)=8${CALLERID(num)}) ;добавляем 8 к входящему, что бы корректно перезванивать
exten => _x.,2,Macro(recording,${CALLERID(num)},${EXTEN}) ;запуск макроса на запись
exten =>_x.,3,Goto(menu,s,1) ;перевод на меню menu ivrsaga
exten => _X.,4,Hangup()

[menu]
exten => s,1,Background(/var/lib/asterisk/moh/ivr/ivrsaga) ;здесь ловится звонок из контекста incoming и проигрывается записанное нами приветствие.
exten => s,n,WaitExten(5) ;если человек не нажал ничего, ждем 5 секунд и
exten => s,n,Dial(SIP/101,120,t) ; вызываем секретаря? ждем 120 сек
exten => s,n,Voicemail(101@default) ; если нет ответа секретаря 120 сек переводим на автоответчик 101@default

exten => 1,1,Queue(managers,120,t) ; 1 нажал, в отдел продаж попал
exten => 2,1,Queue(buh,120,t) ; 2 нажал, в бухгалтерию попал
exten => 3,1,Queue(logistic,120,t) ; 3 нажал, в логистику попал
exten => 4,1,Dial(SIP/170,120,t) ; 4 нажал, к юристу попал
exten => 5,1,Dial(SIP/100,120,t) ;5 нажал, в IT-отдел попал
exten => 0,1,Dial(SIP/101,120,t) ; 0 нажал, на секретаря попал Queue(secretar,,,,120,t,m)

exten => _XXX,1,Dial(SIP/${EXTEN},30,t&m) ; набор трехзначного внутреннего номера
exten => _XXX,n,Voicemail(${EXTEN}@default)
exten => _XXX,n,Set(dstNUM=${EXTEN}) ;Задаем переменную для передачи в голосовую почту
exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status)}" = ""]?num-not-exist,1) ;Проверяем статус пира, существует или нет
exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status):0:2}" = "UN"]?num-not-connected,1) ;Проверяем статус пира, подключен или нет
exten => _XXX,n,ChanIsAvail(SIP/${EXTEN},s) ;Проверяем канал на занятость
exten => _XXX,n,NoOp(=========== ChanIsAvail STATUS: ${AVAILSTATUS} ===========) ;Выводим в лог значение функции ChanIsAvail, нужно только для отладки, можно удалить строку
exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 2]?num-BUSY,1) ;Если функция возвращает 2 или 3, значит абонент занят
exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 3]?num-BUSY,1) ;Если функция возвращает 2 или 3, значит абонент занят
exten => _XXX,n,Goto(num-${DIALSTATUS},1) ;Обрабатываем остальные статусы
exten => num-not-exist,1,Wait(2)
exten => num-not-exist,n,Playback(invalid) ;Если номера не существует говорим "Ошибочный номер, попробуйте еще раз"
exten => num-not-connected,1,Wait(2)
exten => num-not-connected,n,Playback(ss-noservice) ;Если номер не подключен, говорим "Набранный вами номер отключен, проверьте номер и повторите попытку
exten => num-BUSY,1,Wait(2)
exten => num-BUSY,n,Playback(vm-isonphone) ;Если номер занят, говорим "Занято"
exten => num-NOANSWER,1,Wait(2)
exten => num-NOANSWER,n,Voicemail(${dstNUM},u) ;Если номер не отвечает, включаем голосовую почту
exten => num-CHANUNAVAIL,1,Wait(2)
exten => num-CHANUNAVAIL,n,Playback(vm-isunavail) ;Если еще по какой-то причине будет статус CHANUNAVAIL, говорим, что номер не доступен в данный момент
exten => t,1,Dial(SIP/100,15) ;Если в голосовом меню не выбрали внутренний номер, адресуем звонок секретарю


У кого то есть мысли?
Аватар пользователя
Elektronik
 
Сообщений: 56
Зарегистрирован: 16 окт 2017, 13:42
Откуда: Москва

Re: Не работает перевод с IVR

Сообщение Wapo » 01 авг 2019, 14:14

А гед у вас Answer перед переходом в меню?
Аватар пользователя
Wapo
 
Сообщений: 795
Зарегистрирован: 02 мар 2011, 18:53

Re: Не работает перевод с IVR

Сообщение ded » 01 авг 2019, 14:24

Elektronik писал(а):немного не верно. Dial не надо ставить перед Queue,
Так это я из вашего контекста скопировал, который вы опубликовали выше.

Книгу не хотите почитать, чтобы с синтаксисом ближе познакомиться?
ded
 
Сообщений: 15822
Зарегистрирован: 26 авг 2010, 19:00

Re: Не работает перевод с IVR

Сообщение Elektronik » 01 авг 2019, 14:28

Wapo писал(а):А гед у вас Answer перед переходом в меню?


вот и я думаю. у всех есть answer, а у меня нету, а почему тогда работает? :)

Проблему вроде решил, просто не правильная очередность в аргументах, сначала t, потом время. но для очереди время не канает, очередь по своему как то, 13 сек идет вызов на телефон (из очереди), сбрасывается, опять начинается вызов. надо копать queues.conf...

http://asterisk.ru/knowledgebase/Asterisk%20cmd%20Queue

Queue(queuename[|options[|URL][|announceoverride][|timeout][|AGI])

exten => 5,1,Queue(it,t,120) ;5 нажал, в IT-отдел попал

вот так перевод из очереди работает.
Аватар пользователя
Elektronik
 
Сообщений: 56
Зарегистрирован: 16 окт 2017, 13:42
Откуда: Москва

Re: Не работает перевод с IVR

Сообщение Elektronik » 01 авг 2019, 14:33

ded писал(а):
Elektronik писал(а):немного не верно. Dial не надо ставить перед Queue,
Так это я из вашего контекста скопировал, который вы опубликовали выше.

Книгу не хотите почитать, чтобы с синтаксисом ближе познакомиться?


читал, давно, без практики оно в голове не задерживается.

я же asterisk настраиваю не первый год :) руководство не давало движения вопросу, не выделяли бабосики на телефоны. на стенде вроде работает все, а что то не учитываю, а телефоны купили, поставил, и косяки мои начинают потихоньку вылезать, соответсвенно разбираюсь и правлю... будущее телефонии давно читал, когда только начинал знакомиться...
Аватар пользователя
Elektronik
 
Сообщений: 56
Зарегистрирован: 16 окт 2017, 13:42
Откуда: Москва

Re: Не работает перевод с IVR

Сообщение Elektronik » 02 авг 2019, 16:44

Итоговое меню получилось такое, может кому пригодится.

[menu]
exten => s,1,Background(/var/lib/asterisk/moh/ivr/ivrsaga) ;здесь ловится звонок из контекста incoming и проигрывается записанное нами приветствие.
exten => s,n,WaitExten(5) ;если человек не нажал ничего, ждем 5 секунд и
exten => s,n,Dial(SIP/101,120,t&m) ; вызываем секретаря? ждем 120 сек
exten => s,n,Voicemail(101@default) ; если нет ответа секретаря 120 сек переводим на автоответчик 101@default

exten => 1,1,Queue(managers,t) ; 1 нажал, в отдел продаж попал
exten => 2,1,Queue(buh,t) ; 2 нажал, в бухгалтерию попал
exten => 3,1,Queue(logistic,t) ; 3 нажал, в логистику попал
exten => 4,1,Dial(SIP/170,60,t&m) ; 4 нажал, к юристу попал
exten => 4,n,Voicemail(170@default) ;через 60 сек переадресация на автоответчик
exten => 5,1,Dial(SIP/100,60,t&m) ;5 нажал, в IT-отдел попал
exten => 5,n,Voicemail(100@default) ;через 60 сек переадресация на автоответчик
exten => 0,1,Dial(SIP/101,120,t&m) ; 0 нажал, на секретаря попал Queue(secretar,,,,120,t,m
exten => 0,n,Voicemail(101@default) ;через 120 сек переадресация на автоответчик
Аватар пользователя
Elektronik
 
Сообщений: 56
Зарегистрирован: 16 окт 2017, 13:42
Откуда: Москва

Re: Не работает перевод с IVR

Сообщение ded » 02 авг 2019, 18:34

exten => 0,1,Dial(SIP/101,120,t&m)
Неверный синтаксис?
ded
 
Сообщений: 15822
Зарегистрирован: 26 авг 2010, 19:00

След.

Вернуться в Вопросы новичков

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27

© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH