Пользовательское действие IVR в Asterisk

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

Требование: я хотел бы написать простой пункт меню IVR, который будет запускать скрипт (Bash или Python). Например, позвоните на компьютер Asterisk и запросите перезапуск службы на другом компьютере Linux. Детали «другого Linux-бокса» будут жестко запрограммированы в пункте меню IVR, и их не нужно будет указывать как часть взаимодействия с IVR - просто перезапустите службу X на блоке Y. Я немного обеспокоен и не уверен, как можно это сделать с помощью пароль (даже если он жестко запрограммирован в версии).

Предыстория: я новичок в Asterisk и установил его из дистрибутива AsteriskNow, и я все еще изучаю продукт. Основные функции УАТС работают и управляются через FreePBX. Asterisk не является нашей основной целью разработки, а скорее инструментом в наборе инструментов. В основном мы работаем с .NET, но обладаем навыками Unix.

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

15.12.2008 08:46:12
3 ОТВЕТА
РЕШЕНИЕ

Страница Asterisk AGI содержит ссылки на приложения на многих языках программирования. Если вы делаете в основном .NET, возможно, настериск или старый MONO-TONE помогут.

2
15.12.2008 09:04:26

Будете ли вы настраивать Asterisk только для этого или он будет заниматься другими вещами, такими как АТС, IVR и т. Д.?

Если вы делаете другие вещи с Asterisk, то настройте скрытое расширение (которое не рекламируется в меню IVR), которое вы можете набрать после подключения; в этом расширении вы можете проверить идентификатор вызывающего абонента и сравнить его с вашим номером, чтобы только вы могли выполнить сценарий (вы можете повысить безопасность, запрашивая PIN-код, чтобы вам было легче отдыхать, если вы не можете найти Ваш телефон).

Что-то вроде этого:

exten => 9999,1,GotoIf($["${CALLERID(num)}" = "yournumber"]?4)
exten => 9999,2,Playback(sorry)
exten => 9999,3,Hangup
exten => 9999,4,Read(Pin,please-enter-pin,4)
exten => 9999,5,AGI(your-script)

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

exten => 9999,5,GotoIf($["Pin" != "1234"]?2)
exten => 9999,6,AGI(your-script)

2
20.02.2009 18:59:32
Спасибо за ответ. Я видел это только сегодня, но все еще применимо. Это хорошее и простое решение.
Philip Fourie 23.08.2009 15:29:24

Звездочка не всегда ждет ввода пользователя. Только во время команд Background, WaitExten, Read. Если вы используете Playback (), Asterisk игнорирует любой DTMF во время воспроизведения аудиофайла.

Вы можете заменить «Воспроизведение» на «Чтение» (), но для тайм-аута чтения необходимо установить очень низкое значение, иначе после каждого аудиофайла, воспроизводимого с помощью функции «Чтение» («Read»), будет отсутствовать тишина. Если вы используете Read (), то вы должны проверить значение, введенное пользователем, чтобы проверить выход, что-то вроде этого ...

Вместо

exten => x,n,Playback(yourfile) 
exten => x,n,somethingelse...

тебе нужно

exten => x,n,Read(Exit,yourfile,1)
exten => x,n,GotoIf($["${Exit}" = "0"]?0,1) 
exten => x,n,somethingelse...
4
16.07.2016 06:25:00