Пример реализации приема заявок по телефону на Asterisk с отправкой в telegram.
Команда Record() производит запись разговора на текущем канале в звуковой файл с заданным именем. Параметр format определяет в каком звуковом формате сохранить запись и расширение файла для записи. Если Вы не определили полный путь к файлу, он будет сохранен в директории: /var/lib/asterisk/sounds. Если уже существует файл с таким же именем и расширением, то он будет перезаписан.
Если в имени файла содержится %d, то эти символы будут заменены порядковым номером, который будет увеличиваться на один каждый раз, когда будет производиться запись в этот файл, а полученное в результате имя файла будет помещено в переменную канала: ${RECORDED_FILE}.
Поддерживаемые форматы звуковых файлов: g723, g729, gsm, h263, ulaw, alaw, vox, wav, WAV (WAV - GSM формат wav файлов).
Команда Record, сгенерирует beep на канале, перед началом записи. Запись закончиться, если достигнуто время максимальной продолжительности записи или, если нажата кнопка '#' или соединение на канале завершено.
exclaim Убедитесь, что аудиопоток проходит через сервер Asterisk, т.е. Вам необходимо установить параметр canreinvite=no в файле конфигурации sip.conf, если это канал SIP, или использовать параметры t или T в Вашей команде Dial, или использовать трансляцию между звуковыми кодеками (абоненты используют различные кодеки для связи).
Коды возврата:
Возвращает -1, когда абонент повесил трубку.
Описание
Если имя файла содержит '%d', эти символы будут заменены на число, увеличивающееся каждый раз при записи файла. Используйте 'core show file formats' для просмотра доступных в вашей системе форматов. Для завершения записи и перехода к следующему приоритету пользователь может нажать '#'. Если пользователь прервет связь во время записи, все данные будут потеряны и приложение завершится.
Окончательное имя записанного файла будет установлено в переменную ${RECORDED_FILE}.
Окончательный статус команды будет установлен в переменную ${RECORD_STATUS}.
Возможные следующие значения:
DTMF - был получен завершающий DTMF сигнал ('#' или '*', в зависимости от опции 't').
SILENCE - прошло максимальное количество секунд тишины, после чего запись завершилась.
SKIP - Линия не ответила (если выбрана опция 's').
TIMEOUT - Достигнута максимальная длительность записи.
HANGUP - Связь на канале была разорвана.
ERROR - Произошла неустранимая ошибка, приведшая к записи предупреждения в журнал.
Синтаксис
Record(filename.format[,silence[,maxduration[,options]]])
Аргументы
format - Формат записываемого файла ((wav, gsm и т.д.)
silence - Количество секунд тишины, которое должно пройти перед возвратом.
maxduration - Максимальная продолжительность записи в секундах. Если отсутствует или равно '0', максимальная длительность не ограничена.
Options
'a' Добавляется к существующей записи, а не заменяет ее.
'n' Не отвечает на вызов, но все равно производит запись.
'q' Тихий режим (не воспроизводит звуковой сигнал).
's' Не производит запись, если линия еще не ответила.
't' Использует альтернативную кнопку '*' для завершения записи вместо значения по умолчанию '#'.
'x' Игнорирует все кнопки завершения и продолжает запись до разрывы связи.
'k' Сохранить записанный файл при разрыве связи.
'y' Завершить запись если получена любая цифра DTMF.
Создадим папку
mkdir /records/voicemail
chmod 777 /records/voicemail
Монтируем папку, например по NFS.
umount -f /mnt/777
mount -t nfs4 10.10.0.10:/777 /mnt/777
Изменения в extensions.conf
При звонке на 777 включается запись в папку файла с максимальной продолжительностью 60 секунд и период молчание 5 секунд.
exten => 777,1,Answer()
exten => 777,n,Playback(/var/lib/asterisk/sounds/music/asu_welcome)
exten => 777,n,Playback(/var/lib/asterisk/sounds/music/asu_next)
exten => 777,n,Set(fname=/mnt/777/${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${CALLERID(num)}-${EXTEN})
exten => 777,n,GoSub(records,s,1,(${CALLERID(num)},${EXTEN}))
exten => 777,n,Playback(/var/lib/asterisk/sounds/music/asu_fin)
exten => 777,n,GoSub(telegram,s,1,(${GOSUB_RETVAL},${CALLERID(num)}))
exten => 777,n,Hangup()
Контекст записи файла
[records]
exten => s,1,Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${ARG1}-${ARG2})
exten => s,n,Set(monopt=nice -n 19 /usr/local/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,Record(${DIR_RECORDS}${fname}.wav,5,60,k,y)
exten => s,n,System(${monopt})
exten => s,n,Verbose(5,${RECORD_STATUS})
exten => s,n,Return(${fname})
Контекст работы с telegram
[telegram]
exten => s,1,Set(telegram=curl -F chat_id="-1000000000000" -F document=@"${DIR_RECORDS}${ARG1}.mp3" -F caption="Заявка с номера : ${ARG2}" https://api.telegram.org/bot1234567890:AAAAAAAAAAAAAAAAAAAAAAAAA-BBBbbb/sendDocument)
exten => s,n,System(${telegram})
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.