Skip to content

Opensips blog

Заметки voip инженера

  • Готовые сервисы
    • PUSH NOTIFICATIONS API
  • Kamailio
  • Opensips
  • О себе и реквизиты

Asterisk. Annoucement. Dialplan. ChannelRedirect. Elastix.

2015-12-26 yooxyman

Менеджеры услышав сигнал автоответчика обычно кладут трубку, либо оставляют свои координаты. При большом количестве звонков таких ситуаций может возмникать приличное кол-во.

Задача: Записать заранее приветствие в нескольких вариантах, и затем воспроизводить его абонентку по нажатию на кнопки быстрого набора.

Проблема: Быстрый набор — это просто очередной INVITE с заранее запрограммированным кодом, поэтому, для астериска это выглядит как поступление нового звонка.

Решение: Я решил эту задачу как для DTMF так и для использования speed-dial.

Ключ к решению: Основная проблема это заставить астериск воспроизводить заранее записанное приветствие нужному абоненту, если просто внести в dialplan запись вида ##1, где номер приветствия то астериск его проиграет тому кто прислал вызов, а нам нужно воспроизвести его абоненту, да еще и в терминологии Asterisk в другой канал.

Коротенько: Записывать приветствия мы будем формата XXXX_N.wav , XXXX- номер эксентшина который записывает приветствие, а N — это номер самого приветствия, таким образом мы можем записывать несколько приветствий для одного экстеншина.

[custom-record] ; Context for recording voice messages
exten => _#*00X,1,Noop(${EXTEN})
same => n,Set(CHANNEL(language)=ru)
same => «»n,Set(MONITOR_FILENAME=${DIR}${CALLERID(num)}_${EXTEN:4})
same»» => n,Playback(beep)
same => n,Answer
same => n,Record(${MONITOR_FILENAME}:wav)
same => n,Playback(vm-msgsaved)
same => n,Playback(${MONITOR_FILENAME})
same => n,Playback(vm-goodbye)

Воспроизведение:  При звонке мы сохраняем данные кто звонил и имя канала куда позвонили   : ${CALLEDRID(num)} — ${CHANNEL}, Делать это нужно в время команды Dial поэтому используется pre_dial_handler, для Эластикс это просто Опции в разделе General Setting. Tt — дает возмоножсть пользоваться DTMF, а ^M(testsub) выполняет макрос testsub.

[macro-testsub]
exten => s,1,NoOp(${CHANNEL})
exten => s,n,NoOp(${MYVAR})
exten => s,n,Set(DB(br/${MYVAR})=${CHANNEL})
exten => s,n,NoOp(${DB(br/${MYVAR})})

Чтобы запомнить переменную кто звонил мы добавляем строчку «exten => s,n,Set(__MYVAR=${CALLERID(number)})»  в macro-user-callerid и отправляем этот макрос в файл extensions_override_elastix Это означает, что Эластикс будет читать его их этого файла, чтобы не случилось в конфигурации. __ — означает что эта переменная будем передана вновь создаваемому каналу командой Dial.

И теперь при получении кода ##N от пользователя мы просто смотрим есть такая переменная в DB Астериска, если есть, то переводим сохраненный ранее канал в место где начинается воспроизведение.

[transfer-context]
exten => «»_##X,1,NoOp(${DB(br/${CALLERID(num)})})
exten»» => «»_##X,2,ChannelRedirect(${DB(br/${CALLERID(num)})},transfer-context,${EXTEN},3)
exten»» => _##X,3,Playback(${DIR}${MYVAR}_${EXTEN:-1}) ;
exten => _##X,4,Hangup()

Таким образом никаких скриптов, все гибко, красиво, изящно.

Бай.

 

PS: http://asteriskfaqs.org/2010/09/09/asterisk-users/set-channel-variable-from-within-other-channel.html

PS: https://wiki.asterisk.org/wiki/display/AST/Function_DB

 

 

 

 

Posted in Asterisk, ChannelRedirect, Готовые решения

Навигация по записям

SOX. WAV. ASTERISK. BATCH. Конвертнуть файлы для астериска.
Asterisk. Annoucement. Dialplan. ChannelRedirect. Elastix. Part 2.

Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

My Profile

Eremin Pavel

Voip developer

P: 79227502213

E: eremina.net@gmail.com

Hire me on Freelancer.com

Облако

AMI (4) asterisk (18) centos (4) centos 7 (3) certbot (2) certificate (2) debian (2) duplicate (2) elastix (3) error (3) events (2) fail (3) freepbx (8) g729 (2) google (2) ios (2) issabel (4) issue (2) Kamailio (8) limit (2) Load (3) local (2) Mysql (8) nat (2) opensips (11) PAMI (2) performance (2) pjsip (2) provisioning (2) push (2) re-invite (2) rtpengine (2) SBC (2) server (2) ssh (2) ssl (2) tcp (2) timeout (2) tls (3) vmware (2) voip (2) wav (2) webrtc (2) windows (3) zoiper (2)

Свежие записи

  • asterisk 16. webrtc. sipml5
  • esxi useful command. vmware.
  • opensips as SBC
  • sipdump per day. compressed. heplify.
  • kamailio. siremis. xmlrpc. jsonrpc.

Управление

  • Войти
  • Лента записей
  • Лента комментариев
  • WordPress.org

© 2021 Opensips blog

Proudly powered by WordPress | Theme: x-blog by wpthemespace.com