我正在使用星号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()
my cli show
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
我认为在":"之后的星号搜索文件格式,所以文件名与当前时间正在产生问题。是否有办法将当前时间保存为记录的文件名。提前致谢
你可以这样做:
Record(${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}.wav)
你的想法是对的。您需要将time中的":"替换为文件系统友好的字符。你有两种方法;一种是使用带有SED的SHELL进程来完成工作。或者,您可以使用AST中的REPLACE命令。
以下代码示例未经过测试。你需要阅读包含的链接和调整。我希望这能帮到你。
[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开始,分隔记录格式的":"被"。"取代。
推荐阅读:
http://www.voip-info.org/wiki/view/Asterisk + func +替换
http://www.voip-info.org/wiki/view/Asterisk + cmd +记录
wav文件前不使用逗号。如果你想用当前日期时间保存文件,那么使用这个变量${STRFTIME(${EPOCH},,%d-%m-%Y %H:%M:%S)}.wav
文件名不能有空格,否则星号解析错误
wav(format)前也要加逗号