IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> FreeSWITCH外呼系统-http 接口 -> 正文阅读

[PHP知识库]FreeSWITCH外呼系统-http 接口

http cli的原理是cti模块实现了一个http server 接收http get请求,执行FreeSWITCH命令后把执行结果返

回给http client,常用的使用场景包含http接口实现挂断指定的通话,http接口实现点击拨号(先呼叫坐席电话,座席接听后再呼叫客户电话),以及监听,强插,转接电话等功能。

配置
cti.conf.xml http_cli节点weixin@3307623172就是配置http server监听的IP和端口,以及接口的KEY。

<http_cli>




</http_cli>
http_server_domain 配置一个域名或者本机外网IP,可不配置。
http_server_ip 监听的IP,如果只限本机调用,可以配置 127.0.0.1。
http_server_port 监听的端口。
http_api_cli_key http接口调用是key参数,防止非法调用。
接口说明
例子 http://ip:88/cli?cmd=log&arg=测试&key=abc

key 必须和cti.conf.xml http_cli节点http_api_cli_key配置的value内容一致。
cmd FreeSWITCH的命令。
arg FreeSWITCH命令的参数。
每个字段都要求url编码,支持各种URL编码格式。

url编码说明 (参考来源 https://www.jianshu.com/p/9fd9bd197fd1)
RFC1738
https://www.ietf.org/rfc/rfc1738.txt
对字符串中除了-_.三个字符之外的所有非字母数字字符都替换成百分号(%)后跟两位十六进制数。

RFC3986
RFC-3986中采用统一的编码方式,字符的编码格式为:%HH(H为十六进制字符), 并没有对空格做特殊处理。按照RFC-3986规范,空格被编码成%20,而加号”+”被编码成%2B。

HTML4.01标准
编码方式是根据ContextType的不同而区别对待的,在form的ContextType是[x-www-form-urlencoded]的时候会对form中的键/值对进行编码,空格被转义成+,其他字符按照RFC1738标准处理成%HH的形式。

php urlencode()说明:
返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 ? RFC3986 编码(参见 rawurlencode())不同。

常用例子
点击拨号
例子1
最基本的例子呼叫分机1000,分机1000接听后,听到自己声音

key = abc
cmd = originate
arg = user/1000 &echo
http://127.0.0.1:88/cli?key=abc&cmd=originate&arg=user/1000 &echo
URL编码后
http://127.0.0.1:88/cli?key=abc&cmd=originate&arg=user%2f1000+%26echo

例子2
先呼叫分机user/1000,分机应答后,再呼叫手机 1380000000,
呼叫分机使用主叫clicktocall,呼叫手机使用主叫1000,并且手机接听时开始录音

key = abc
cmd = cti_originate
arg = {origination_caller_id_number=clicktocall}user/1000 &bridge({origination_caller_id_number=1000,record_filename=KaTeX parse error: Can't use function '$' in math mode at position 18: …ecordings_dir}/$?{strftime(%Y-%m…{recordings_dir}/KaTeX parse error: Expected '}', got 'EOF' at end of input: …ime(%Y-%m-%d)}/{uuid}.wav’}sofia/external/1380000000@网关IP)
http://127.0.0.1:88/cli?key=abc&cmd=cti_originate&arg={origination_caller_id_number=clicktocall}user/1000 &bridge({origination_caller_id_number=1000,execute_on_answer=’record_session $ r e c o r d i n g s d i r / 20200303 / {recordings_dir}/20200303/ recordingsd?ir/20200303/{uuid}.wav’}sofia/external/9999@180.76.224.191:35580)
URL编码后
http://127.0.0.1:88/cli?key=abc&cmd=originate&arg=%7bignore_early_media%3dtrue%2corigination_caller_id_number%3dclicktocall%7duser%2f1000+%26bridge(%7borigination_caller_id_number%3d1000%2cexecute_on_answer%3d%27record_session+%24%24%7brecordings_dir%7d%2f20200303%2f%24%7buuid%7d.wav%27%7dsofia%2fexternal%2f9999%40180.76.224.191%3a35580)

arg的格式是 {呼叫分机的变量}user/1000空格&bridge({呼叫手机的变量}sofia/external/手机@网关IP)

注意:

cti_originate 是 cti模块在originate函数扩展的,用来支持变量中执行函数。

cti_originate是同步函数,需要等线路返回183,或者接通才返回,如果需要里面返回需要用bgapi执行,cmd=bgapi, arg=cti_originate 呼叫参数。

如果先呼叫分机后呼叫手机,变量要分开设置,不要把呼叫手机用的变量设置到呼叫分机去了。

参数说明

origination_caller_id_number 设置主叫号码
origination_uuid 如果需要使用自定义的呼叫UUID,通过这个参数传给FS。
record_filename 写入CDR表的录音路径
execute_on_answer=’record_session KaTeX parse error: Can't use function '$' in math mode at position 27: …_dir}/20210303/$?{uuid}.wav’ 接通后…{recordings_dir}/日期目录/${uuid}.wav 这个是录音文件路径
或 者 或者 $后面的是变量,注意 originate { ${recordings_dir} 变量不能用在这个位置}user/abc KaTeX parse error: Expected '}', got 'EOF' at end of input: bridge{{recordings_dir} 变量只有这个位置才能生效}
$${recordings_dir} vars.xml 配置的录音文件路径 默认是 fs安装目录 recording
${caller_id_number} 来电号码
${uuid} 通话callid
${strftime(%Y-%m-%d)} 日期
ignore_early_media=true 忽略早期媒体,如果坐席使用手机接听,需要这个参数
absolute_codec_string=g729 指定g729编码
originate_timeout 呼叫超时(比如分机30秒不接听就停止呼叫),需要和ignore_early_media=true 一起使用。
呼叫一个手机号码,电话接通后播放一个录音
播放本地声音文件
http://127.0.0.1:88/cli?cmd=originate&arg={ignore_early_media=true,origination_caller_id_number=1390000000}sofia/external/1380000000@vosIP &playback(声音文件路径)
播放网络文件
http://127.0.0.1:88/cli?key=123456&cmd=bgapi&arg=originate {ignore_early_media=true,origination_caller_id_number=1390000000}sofia/external/abc@27.156.125.43:6066 ‘playback:file_string://http://ip/uploads/audio/20200526/getaudio493c5/202005261100135ecc863db4775.wav‘ inline
播放多个文件
http://127.0.0.1:88/cli?cmd=originate&arg={ignore_early_media=true,origination_caller_id_number=1390000000}sofia/external/1380000000@vosIP &playback(file_string://文件1.wav!文件2.wav)

播放tts声音
http://127.0.0.1:88/cli?key=abc&cmd=bgapi&arg=cti_originate {ignore_early_media=true,origination_caller_id_number=1390000000}user/123 ‘playback:file_string://http://127.0.0.1:9989/tts?text=这个测试是放音文字转语音测试‘ inline

对通话中双方播放声音
http://ip:88/cli?key=key&cmd=uuid_broadcast&arg=uuid 放音文件 放音方式

UUID: 通话的UUID

声音文件: 可以是FS服务器的本地文件,也可以是http连接的wav文件(8K16bit单声道)。

放音方式: [aleg|bleg|holdb|both] aleg 对A端放音,bleg对B段放音, holdb b端口播放hold, both双端放音, 不设置A端放音B端播放hold

例子

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 22:26:59  更:2022-04-07 22:27:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 16:01:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码