Asterisk настройка FollowMe

Asterisk настройка FollowMe

В сегодняшней статье мы расскажем про модуль Asterisk FollowMe, который выполняет роль переадресации вызовов. Отличительная особенность модуля заключается в том, что с его помощью можно выполнять переадрессацию на несколько направлений одновременно. Также можно настроить сценарии обзвона сотрудников, которые работают дистанционно, например для распределенного Колл-центра.

Конфигурационный файл /etc/asterisk/followme.conf используется для назначения глобальных параметров general и уникальных адресатов followmeid, которые могут выполняться из диалплана приложением FollowMe.
Приоритет может быть использован только один раз, т.е. в одной строке, но не в разных (для одного пользователя). Отдельные строки с одинаковым приоритетом будут игнорироваться. Параллельные вызовы на разные номера (два и больше), должны описываться в одной строке при помощи оператора ‘&’.
  • [имя или номер] используется для вызова приложением FollowMe;
  • context ⇒ <context name> – контекст, из которого будут вызываться заданные номера folowme;
  • number ⇒ <number>,[<timeout>],[<priority>] – адресат, время посылки вызова, приоритет.
Простое распределение по порядку строк:
[followmeid_simple]
context=from-internal
number => 9981138,15
number => 1234,20
number => 3216111,45

Сперва вызывается номер 9981138 в течении 15-ти секунд, затем номер 1234 в течении 20 секунд и после номер 3216111 в течении 45 секунд.

Сортировка по приоритетам:
[followmeid_sorted]
context=from-internal
number => 9981138,35,2
number => 1234,20,1
number => 3216111,50,3

Сначала вызывается номер 1234 (приоритет 1), затем 9981138 (2) и последним 3216111 (3).

Параллельные вызовы:
[followmeid_parallel]
context=full_outbound_access
number => 1234&9981138,35,1
number => 3216111,50,2
Сперва вызываются номера 1234 и 9981138 одновременно, затем 3216111.

followme.conf

Убедитесь, что app_followme.so загружен.

*CLI> module load app_followme.so
Loaded app_followme.so
 == Parsing '/etc/asterisk/followme.conf': Found followme.conf
 == Registered application 'FollowMe'
 Loaded app_followme.so => (Find-Me/Follow-Me Application)

[general]

Глобальные параметры FollowMe

featuredigittimeout=>5000

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

enable_callee_prompt=>true
Включить голосовое объявление вызываемому абоненту, с предложением принять или отказаться от переадресованного вызова. По умолчанию – включено.
takecall=>1
Общее, по умолчанию ‘1’, значение DTMF кода подтверждения приема вызова. Может состоять из одной или нескольких цифр.
declinecall=>2
По умолчанию ‘2’, значение DTMF кода, отказа от ответа на вызов.
call_from_prompt=>followme/call-from
Глобальное значение для сообщения «Входящий звонок от».
norecording_prompt=>followme/no-recording
Фраза по умолчанию для сообщения “Зарегистрирован входящий звонок”.
options_prompt=>followme/options
Глобальное значение по умолчанию для сообщения “Пожалуйста, нажмите 1, чтобы принять звонок или 2, если вы не хотите его принимать”.
pls_hold_prompt=>followme/pls-hold-while-try
Значение по умолчанию для сообщения “Пожалуйста, оставайтесь на линии, происходит соединение”.
status_prompt=>followme/status
Глобальное значение по умолчанию для сообщения “Абонент не отвечает, сейчас система попытается связаться по альтернативным каналам”.
sorry_prompt=>followme/sorry
Сообщение по умолчанию “Извините, в данный момент соединение невозможно”
connecting_prompt=>

Глобальное имя звукового файла по умолчанию для сообщения “Пожалуйста, поздоровайтесь с вызывающим абонентом”. Установка пустой строки пропускает воспроизведение приглашения. По умолчанию имя файла приглашения отсутствует.

[default]

Конфигурация уникального идентификатора для вызова приложением FollowMe

musicclass=>default

Музыка на удержании для воспроизведения ожидающему абоненту.

context=>default

Контекст для вызова адресатов по умолчанию.

followme number=>01233456,25
Адресат FollowMe. Формат:

number⇒ <number to call[&2nd #[&…]]>[,<таймаут в секундах,s>[,<порядок выбора адресатов>]]

enable_callee_prompt=>true
Включить приглашение вызывающему абоненту. По умолчанию действует глобальная установка из раздела [general].
takecall=>1
Общее, по умолчанию ‘1’, значение DTMF кода, подтверждения приема вызова. Может состоять из одной или нескольких цифр. По умолчанию действует глобальная установка из раздела [general].
declinecall=>2
Общее, по умолчанию ‘2’, значение DTMF кода, отказа от ответа на вызов. По умолчанию, как задано в [general]. Назначить сообщения отличные от заданных по умолчанию в [general].
call_from_prompt=>followme/call-from
norecording_prompt=>followme/no-recording
options_prompt=>followme/options
pls_hold_prompt=>followme/pls-hold-while-try
status_prompt=>followme/status
sorry_prompt=>followme/sorry

app_followme

Данное приложение позволяет перевести вызывающего абонента на указанные номера. Команда ссылается на профили <followmeid> заданные в followme.conf. Если указанный <followmeid> не найден, приложение возвращает вызов и диалплан выполняется со следующего приоритета. Возвращает ‘-1’ при отбое. Синтаксис:
FollowMe(followmeid[,options])
Аргументы:
Options
  • a: Записать имя вызывающего абонента для объявления вызываемой стороне.
  • B([[context^]exten^]priority[(arg1[^…][^argN])]): Перед выполнением исходящего вызова выполнить GoSub по указанному контексту, используя текущий канал.
  • b([[context^]exten^]priority[(arg1[^…][^argN])]): Перед выполнением исходящего вызова выполнить GoSub по указанному контексту, в новом канале.
  • d: Выключить объявление ‘Please hold while we try and connect your call’
  • I: Игнорировать любые запросы на изменение текущего вызова.
  • l: Отключить оптимизацию локального вызова. Видимо равносильно действию опции ‘/n’ канала Local (Local/${EXTEN}@from-internal/n).
  • N: Не отвечать на входящий вызов, пока мы не готовы соединить вызывающего абонента. Игнорируется если вызов уже отвечен (например командой Answer). Если вызов не отвечен опции ‘a’ и ‘s’ игнорируется, в то время как опция ‘d’ считается включенной, даже если не задана явно.
  • n: Проиграть сообщение о недоступности абонента, если он отказался принимать вызов.
  • s: Проиграть ‘The party you’re calling isn’t at their desk’ до начала переадресации.

Примеры

Пример 1:
extensions.conf:

exten => _4411,1,Answer
exten => _4411,2,Dial(SIP/${EXTEN},12,t)
exten => _4411,3,GotoIf($["${DIALSTATUS}" = "NOANSWER"]?:4:5)
exten => _4411,4,Followme(${EXTEN})
exten => _4411,5,VoiceMail(${EXTEN})
exten => _4411,6,Hangup

followme.conf:

[4411]
context => default
number => 4410,30
number => 4420,30
Пример 2:

extensions.conf:

exten => 1111,1,Dial(PJSIP/1111,15,tr)
exten => 1111,n,FollowMe(4444)
exten => 1111,n,Wait(1)
exten => 1111,n,Playback(beep)
exten => 1111,n,Goto(1)
exten => 2222,1,Dial(PJSIP/2222},15,tr)
exten => 2222,n,FollowMe(UserTest,san)
exten => 2222,n,Goto(4444,1)

exten => 4444,1,Dial(PJSIP/4444,15,tr)
exten => 4444,n,FollowMe(${EXTEN},s)
exten => 4444,n,Voicemail(UserTest)
exten => 4444,n,Hangup

followme.conf:

[4444]
music => default
context => default
number => 1965751234,5
number => 17182025678,20
number => 1234
number => 5678

[UserTest]
number => 09876&210,40,2 ; вызываются одновременно 09876 и 210 в течении 40-ка секунд.
number => 543,30,1 ; но сначала вызывается 543 в течении 30 секунд.

Пример 3: FollowMe без использования приложения app_followme.

[incoming]
exten => 300,1,Answer()
exten => 300,2,Dial(DAHDI/1,30,grM(call-screening^${CALLERIDNUM}^${CONTEXT}^${EXTEN}^${PRIORITY}))
exten => 300,3,Hangup()
exten => 300,103,NoOp(${EXTEN}::${PRIORITY})
exten => 300,104,VoiceMail(u${EXTEN}@default)
exten => 300,105,Hangup()
exten => t,1,Playback(connection-timed-out)
exten => t,2,Playback(goodbye)
exten => t,3,Hangup()

[macro-call-screening]
exten => s,1,NoOp(${ARG2}::${ARG3}::${ARG4}::)
exten => s,2,Playback(vm-youhave)
exten => s,3,Playback(letters/a)
exten => s,4,Playback(call)
exten => s,5,Playback(from)
exten => s,6,SayDigits(${ARG1})
exten => s,7,Read(ACCEPTCALL|1-yes-2-no|1) ; (repeatoptions)
exten => s,8,GotoIf($["${ACCEPTCALL}" = ""] ?t,1)
exten => s,9,GotoIf($[${ACCEPTCALL} = 2] ?s,11)
exten => s,10,GotoIf($[${ACCEPTCALL} = 1] ?s,14:s,2)
exten => s,11,Set(NEWPRIORITY=$[${ARG4} + 101])
exten => s,12,Set(MACRO_RESULT=GOTO:${ARG2}^${ARG3}^${NEWPRIORITY})
exten => s,13,Goto(s,16)
exten => s,14,Playback(auth-thankyou)
exten => s,15,Set(MACRO_RESULT=)
exten => s,16,NoOp(End of macro)
exten => t,1,Playback(connection-timed-out)
exten => t,2,Goto(s,2)

Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.