Невозможно сохранить записанный файл с именем в качестве текущего времени

#asterisk #voip #audio-recording

#asterisk #voip #аудиозапись

Вопрос:

Я использую asterisk 11.9.0 и пытаюсь записать голос пользователя, но не могу сохранить запись пользователя с именем в качестве текущего времени, например (2014-06-19 14:40:04.wav) мой код

 [record]
exten => _X.,1,NoOp(----------Record-----------)
exten => _X.,n,Answer()
exten => _X.,n,set(__START=${CDR(start)})
exten => _X.,n,Playback(hello-world)
exten => _X.,n,Wait(1)
exten => _X.,n,Record(${START}:wav)
exten => _X.,n,Wait(1)
exten => _X.,n,Hangup()
 

мой cli показывает

  Executing [4759500@record:5] Record("DAHDI/i1/8826093338-18fe", "2014-06-19 14:40:04:wav") in new stack
    -- <DAHDI/i1/8826093338-18fe> Playing 'beep.gsm' (language 'yes')
[Jun 19 14:40:07] WARNING[19525]: file.c:1181 ast_writefile: No such format '40:04:wav'
[Jun 19 14:40:07] WARNING[19525]: app_record.c:320 record_exec: Could not create file 2014-06-19 14
    -- Executing [4759500@record:6] Wait("DAHDI/i1/8826093338-18fe", "2") in new stack
    -- Executing [4759500@record:7] Hangup("DAHDI/i1/8826093338-18fe", "") in new stack
 

Я думаю, что поиск asterisk для формата файла после «:», поэтому имя файла с текущим временем создает проблему.Есть ли какой-либо способ сохранить текущее время в качестве имени записанного файла.Заранее спасибо.

Ответ №1:

Вы можете сделать это:

 Record(${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}.wav)
 

Ответ №2:

У вас правильная идея. Вам нужно заменить «:» во времени символом, удобным для файловой системы. Вы можете сделать это одним из двух способов; один из них — использовать процесс оболочки с SED для выполнения работы. Или вы можете использовать команду REPLACE из AST.

Следующий пример кода не протестирован. Вам нужно будет прочитать включенные ссылки и настроить. Я надеюсь, что это поможет вам в вашем пути.

 [record]
exten => _X.,1,Verbose(2,----------Record-----------)
 same => n,Answer()
 same => n,set(__START=$[REPLACE(:,${CDR(start)}),-])
 same => n,Playback(hello-world)
 same => n,Wait(1)
 same => n,Record(${START}.wav)
 same => n,Wait(1)
 same => n,Hangup()
 

Обратите внимание, что начиная с Ast 1.2, «:» для обозначения формата записи заменяется на «.».

Рекомендуемое чтение:

Ответ №3:

Не используйте запятую перед файлом wav. Если вы хотите сохранить файл с текущей датой и временем, используйте эту переменную ${STRFTIME(${EPOCH},,%d-%m-%Y %H:%M:%S)}.wav

Ответ №4:

Вы должны использовать имена файлов без пробелов, иначе asterisk неправильно их проанализирует.

Вы также должны использовать запятую перед wav (формат)