为何FreeSwitch的api命令在FS_CLI中无法执行?
为什么FreeSwitch Inbound Socket可执行
api命令但FS_CLI不行? 这是因为**api是ESL(事件套接字层)协议的专属指令前缀,并非FreeSwitch原生的API命令**,两者的交互逻辑完全不同:
FS_CLI的交互逻辑:
FS_CLI直接对接FreeSwitch的原生API命令集,你在show api里看到的列表(比如msleep、acl、bgapi)就是所有可直接执行的命令。在FS_CLI中,你不需要加任何前缀,直接输入命令本身即可运行。你测试里的错误是因为加了多余的api前缀,正确的执行方式是:freeswitch@my-pc> msleep 2000这会直接调用FreeSwitch的
msleepAPI命令,而非用api前缀包裹。Inbound Socket(ESL)的交互逻辑:
ESL协议是一套专门用于和FreeSwitch通信的套接字协议,它有自己的指令语法。当你通过Telnet连接到8021端口时,所有要触发FreeSwitch原生API命令的请求,都必须用api作为前缀来标识——这是ESL协议规定的格式,用来告诉FreeSwitch:“接下来的内容是要执行的原生API命令”。所以api msleep 2000是符合ESL协议的合法请求,能被正确解析并执行对应的msleep命令。FS_CLI的底层封装:
虽然FS_CLI底层基于socket实现,但它已经帮你封装了ESL协议的细节。当你在FS_CLI输入命令时,它会自动把命令按照ESL协议的格式(即加上api前缀)发送给FreeSwitch,所以你不需要手动添加这个前缀,直接输入原生API命令即可。
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

