如何通过终端在FreeSWITCH中录制通话?需修改拨号计划吗?
嘿,这个问题我熟!在FreeSWITCH里录制通话有两种常见方式:一种是终端手动触发录制(无需改拨号计划),另一种是通过拨号计划配置自动录制(需要修改配置)。下面给你详细拆解每一种实现方式:
一、终端手动录制通话(无需修改拨号计划)
这种方式适合临时录制某一通特定通话,步骤很简单:
- 先进入FreeSWITCH的CLI终端,在系统终端执行命令:
fs_cli - 找到目标通话的UUID:输入
show calls命令,会列出当前所有活跃通话,找到你要录制的那通的UUID(一串类似550f1b8a-xxxx-xxxx-xxxx-xxxxxx的字符) - 启动录制:执行命令
uuid_record <通话UUID> start <录制文件路径>,比如:
👉 注意:存储路径必须是FreeSWITCH进程有权限写入的目录,否则会录制失败uuid_record 550f1b8a-1234-5678-9abc-def123456789 start /usr/local/freeswitch/recordings/my_call.wav - 停止录制:需要结束时,执行
uuid_record <通话UUID> stop,录制文件就会保存到你指定的路径了 - 小技巧:如果想实时监听录制内容,可以在启动命令后加
listen参数:uuid_record <UUID> start /path/to/file.wav listen
二、通过拨号计划配置自动录制(需要修改拨号计划)
如果需要对特定号码、前缀或者所有通话自动录制,就得修改拨号计划配置了。默认的拨号计划文件路径是/usr/local/freeswitch/conf/dialplan/default.xml(如果用了自定义上下文,就对应修改相应的配置文件)。
1. 全局自动录制所有通话
在<context name="default">标签内,添加一个全局扩展,让所有通话都自动录制:
<extension name="auto-record-all-calls"> <condition field="destination_number" expression=".*"> <action application="record_session" data="/usr/local/freeswitch/recordings/${uuid}.wav"/> </condition> </extension>
- 解释:
record_session是FreeSWITCH内置的录制应用,${uuid}会自动替换为当前通话的UUID,避免文件名重复 - 修改完成后,在FreeSWITCH CLI执行
reloadxml命令,让配置生效
2. 特定号码/前缀自动录制
比如只想录制拨打1000的通话,就可以添加这样的扩展:
<extension name="record-1000-calls"> <condition field="destination_number" expression="^1000$"> <!-- 先启动录制 --> <action application="record_session" data="/usr/local/freeswitch/recordings/1000_${uuid}.wav"/> <!-- 再执行桥接动作(根据你的业务需求调整) --> <action application="bridge" data="user/1000"/> </condition> </extension>
同样,修改后执行reloadxml让配置生效。
三、录制的进阶小细节
- 录制格式:默认是WAV格式,也可以指定MP3(需要FreeSWITCH编译时支持MP3模块),只需要把文件名后缀改成
.mp3即可,比如record_session /path/to/file.mp3 - 录制方向:默认是混合录制双方声音(mix模式),如果只想录制单方,可以用
record_session的mono参数(单声道),或者用uuid_record的leg a/leg b参数指定录制A腿(主叫)或B腿(被叫) - 权限问题:录制目录的权限要给对,一般FreeSWITCH进程的用户是
freeswitch,可以用命令chown -R freeswitch:freeswitch /usr/local/freeswitch/recordings来设置读写权限
内容的提问来源于stack exchange,提问作者andu




