klink0v (klink0v) wrote,
klink0v
klink0v

Башизмы: Asterisk AGI

Технический псто.

Возникла задачка записывать входящие телефонные вызовы. Asterisk, ага. Но просто записать мало. Надо ещё и по папочкам разложить для удобства дальнейшего поиска и прослушивания. "Заказчик" попросил сделать иерархическую структуру каталогов вида "Год" → "Месяц" → "День" → "ID_ответившего" (сверху вниз). А сам звуковой файл называть по шаблону "ЧЧММСС_НомерАбонента". Таким образом, мы сперва находим нужную дату, там открываем каталог со всеми принятыми данным сотрудником вызовами, после чего зная время и номер звонившего, можем отыскать требуемый файл.

Внутри Asterisk-а, понятно, используем приложение "MixMonitor", для раскладывания по папочкам написал несложный Bash-скрипт. Вот он.

Немного комментариев.

В первом цикле "while read" мы забираем у Asterisk-а все AGI-переменные, которые он нам хочет отдать через стандартный ввод. Попутно очищаем их значения от двоеточий и присваиваем "нормальным" bash-евским переменным вида "$agi_блаблабла".

Asterisk-у в MixMonitor-е говорим складывать все записи в некоторый временный файл, имя которого совпадает с именем инициирующего канала. Это делается как-то так.

После этого внутри башевского скрипта пресловутое имя канала можно узнать из переменной "$agi_channel" (которую до того нам отдали на стандартный ввод).

Потом спрашиваем у Asterisk-а какое он запускал приложение до того, как дёрнул наш скрипт. Если там было не "Dial", а что-то другое, то проходим мимо, ничего не делаем. Нам это не интересно.

Если же это был таки реальный разговор с реальным человеком, то спрашиваем (у стандартного вывода, где слушает Asterisk) в котором же часу стартовал этот достойный внимания звонок и кто на него ответил. Дату-время парсим при помощи стандартной утилиты "date" (у "голого" баша функции работы с текстом оставляют желать лучшего), а из имени SIP-канала "жадно" ("greedy") забираем только то, что между символами "/" (слэш) и "-" (минус).

Остаётся только создать директорию с желаемым именем, если таковой ещё не существует и положить туда файлик с записью. Попутно при помощи sox-а дописываем к нему заголовок (около 50 байт) с мета-информацией, дабы его могли без лишних вопросов воспроизводить распространённые медиапроигрыватели.

По осуществлении всех махинаций временный аудиофайл удаляем.

Усё.

Tags: bash, it, linux, администрирование
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 5 comments