FreeSwitch(十):基本技能

2023-10-13 19:30
文章标签 freeswitch 基本技能

本文主要是介绍FreeSwitch(十):基本技能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、通话设置

1、安装freeswitch,启动控制台,用sofia status命令查看freeswitch监听的IP和本电脑ip。

2、软电话设置freeswitch的ip.口令1234.

3、 FreeSwitch配置文件设置电脑IP。

    <param name="rtp-ip" value="192.168.67.149"/>
    <param name="sip-ip" value="192.168.67.149"/>
    <param name="ext-rtp-ip" value="192.168.67.149"/>
    <param name="ext-sip-ip" value="192.168.67.149"/>

4、拨号计划:

<extension name="public_extensions">  
<condition field="destination_number"  expression="^(02062161257)$">  
<action application="bridge" data="{absolute_codec_string=PCMA,ignore_early_media=false}user/1198"/>
  </condition>   

 </extension>

二、调试

1、show channels命令来找到当前通话的 Channel的UUD。

show channels

2、使用 uuid debug media命令查看调试输出。其中,该命令的第一个参数是Channel的UUID,接下来是欲调试的方向。方向有read和 write两种(即读和写,也即收和发,都是相对于 FREESWITCH而言的,下同),也可以使用both参数表示双向都调试。最后一个参数是on或of,分别表示打开或关闭调试。

uuid_debug_media ID号 both on

3、直接使用如下回拨命令进行录音,如果一切正常,说明Aice端没有问题了。

freeswitch> originate user/1002 &record(/tmp/test. wav)

4、FREESWITCH也支持现场抓包,使用下列命令可以在 FREESWITCH控制台上实时看到SIP消息,如:

freeswitch> sofia profile internal siptrace on
freeswitch> sofia profile external siptrace on

上面的命令可以开启不同 Profile的SIP抓包。当a-leg和b-leg分别在不同的 Profile上时可以分别来看,避免消息太多造成干扰。当然,初学者可能不知道实际的SIP消息应该走哪个 Profile,这时可以使用以下命令打开所有 Profile I的抓包

freeswitch> sofia global siptrace on

当然,也可以随时关闭抓包

freeswitch> sofia global siptrace off

5、SIP协议栈底层的问题(那么可能是SIP兼容性的问题或 FREESWITCH本身的BUG),就要打开底层协议栈的调试信息。开启 Sofia协议栈底层的调试器的方法是使用以下命令

freeswitch> sofia loglevel all 9

可以使用以下命令关闭所有底层的调试:

freeswitch> sofia loglevel all 0

Sofia层的日志信息会有很多,如果你比较熟悉的话(一般是开发者),也可以仅打开某一类的日志,如:

freeswitch> sofia loglevel nua 9

三、 使用外部工具抓包

1、打开电话机1001,拨通1002.

2、freeswitch 端口9021  文件路径/usr/local/freeswitch/conf/autoload_configs/,所以在服务器中开启cli控制台:

    fs_cli -P 9021

3、tcpdump抓包

(1)ifconfig查看本机网卡:ens33

(2)tcpdump是经典的抓包工具。比如下面的命令可以仅抓取5060端口上的SIP包:
         tcpdump -ng-s0-a-vvv-i etho port 5060
其中,-n、q表示不进行域名翻译及减少输出内容;-80表示不限制包长,即争取抓最大的长度;-A表示以ASCI方式输出,这样用眼看起来比较直观;-v表示显示的详细程度,“v”越多则越详细;-i表示使用指定的网卡;por5060表示过滤器,这里我们只关心5060
端口上的SIP包。另外,可以使用-w将结果写入文件中,如下列命令将结果写入/mp/dump.pcap文件中

         tcpdump-ng-s 0-i etho -w/tmp/dump pcap port 5060
(3)当还需要分析RTP流时,可以将port5060简单改成udp,这样就可以抓取所有的
UDP包:
        tcpdump-nq-s0-i etho -w/tmp/dump pcap udp
        有时候,如果你是在服务器上抓包,并想只抓某个用户的包,可以根据用户的IP地址来进行过滤。当然这需要先找到用户实际的IP地址,通过如下命令可以找到用户1002的Contact地址:
        freeswitchlocalhost> sofia status profile internal reg 1002

四、originate命令

1、freeswitch> originate user/1000 &echo
        上述命令中的user/1000就是呼叫字符串。它表示从本地的注册用户中査找该用户的联系地址。呼叫字符串的格式是“类型/参数/参数”,其中第一部分是字符串的类型。

2、    通过逗号(,)或竖线符号(1)将多个呼叫字符串隔开,以达到同振或顺振的目的。如下面命令可同时呼叫1000和1001,两个话机都会振铃,哪个先接听则接通哪个,另一路会自动挂断,这种呼叫方式称为“同振”:
freeswitch> originate user/1000, user/1001 &echo
        下列命令就是“顺振”,即第一个号码呼叫失败则呼叫第二个
freeswitch> originate user/1000luser/1001 &echo

3、    originate的第2个参数是一个 exten(可以认为是一个分机号),或者是一个“&”符号加上App。对于后者,我们已经很熟悉了,整个命令的作用是向外发起一个呼叫,建立一个Channel,对方接听后在本端执行一个App,如上面的echo对于前者,与上述的情况类似,在向外发起一个呼叫并等待对方接听后, FREESWITCH就与对方建立了一个 Channel, Channel I的远端当然是接听电话的用户。在本端与上述App的情形不同的是,它会将 Channel 3转人 Dialplan去路由,路由要查找的目的地就是 exten。也就是说,在用户接听后,这种情况跟用户呼人的处理是一样的,都是进人 Dialplan进行路由,如在默认的配置中,下面的两条命令基本上是等价的
freeswitch> originate user/1000 9196
freeswitch> originate user/1000 &echo
        前者在1000接听后进人 Dialplan,找到9196这个 exten,然后再执行echo接下来再看第3个参数,它是 Dialplan的类型,如果不设置,默认就是XML。我们在第8章曾讲到过 inline Dialplan,因此也可以在这里试一下,它与上面的例子也是等价的:
freeswitch> originate user/1000 echo inline
        第4个参数是 Dialplan的 Context,对于 inline Dialplan,它会忽略 Context,而对于XML则是有效的,如:
freeswitch> originate user/1000 1001 XML public

4、    我们也可以在发起呼叫时自行指定主叫号码,而不使用默认值,如:
freeswitch> originate user/1000 &echo XML default,Seven Du 7777

5、    通过使用通道变量,下列命令也能改变主号名称和号码:
freeswitch> originate origination caller id name=' Seven Du'r origination caller id number=7777]user/1000 &echo
        多个通道变量之间使用逗号隔开,有时候有的通道变量里会有逗号,可能造成冲突,因而下面的命令都达不到你想要的效果:
freeswitch> originate absolute codec string=G729, PCMU)user/1000 &echo
freeswitch> originate [ absolute codec string="G729, PCMU, user/1000 &echo
        上述命令的本意是在呼叫时,在SDP里向对方提供G729和PCMU编码,但我们执行上述命令,却在日志中看到PCMU被丢掉了:
freeswitch> originate (absolute codec string=G729, PCMU)user/1000 &echo
[DEBUG] switch ivr originate.c: 2060 Parsing global variables
[ DEBUG] switch event.c: 1615 Parsing variable [absolute codec string]=[G729]
        所以,我们需要对 Codec字符串里的逗号进行转义,可以使用一个反斜杠来进行转义,如:
freeswitch> originate f absolute codec string=G729\, PCMU)user/1000 &ech
        或者,使用“”进行转义,用别的符号代替逗号分隔符,如:
freeswitch> originate (absolute codec string=A: G729: PCMU)user/1000 echo
        其中,“”后面跟冒号表示以后要用冒号代替逗号, FREESWITCH在遇到冒号时就会把它用逗号替换回来,这样就可以避免因为逗号冲突而导致错误e。有时候,这些通道变量参数可能是程序里自动生成的,因而计算何时该用逗号可能要多费一些代码,所以 FREESWITCH也支持将不同的变量写到不同的大括号中,如
freeswitch> originate (var1=1)(var=2)(var3=3)user/1000 echo
        还有一类通道变量是在方括号中定义的,称为局部通道变量。它唯一作用于某一条腿。在先呼叫某一用户的办公分机时,如果超时,则通过网关gw1呼叫其手机号,如果再超时则通过网关gw2呼叫:
freeswitch> originate (varl=1] [leg timeout-10]user/1000 1
[leg timeout-20] sofia/gateway/gw1/1380000000 1
[leg timeout=20] sofia/gateway/gw2/1380000000
        其中, leg timeout只应用于靠近它的那一条腿上,它用于定义呼叫超时,即等待对方返回媒体(如183或200)的超时时间。而varl=1是全局的,每条腿都会有这个变量。通过使用局部的通道变量,就可以为不同的腿(不同的网关或不同的呼叫路径)定义不
同的参数,如这里使用leg_ timeout为不同的腿定义不同的超时时间。
6、     有时候,有些 Early Media对我们没有意义,如我们在主动外呼的应用中(如电话自动催费)希望用户真正接听以后オ对他放音,或进入IVR,这时怎么办?有一个参数可以帮我们做到,如下:
freeswitch> originate (ignore early media=true)sofia/gateway/gw/13800000000
&playback(/tmp/test. wav)
        通过指定 ignore early media变量, FREESWITCH在发起呼叫时会忽略对方返回的 Early Media,直到等到收到正常的应答信号(如200OK)才返回。

7、  我们使用 originate命令发起一个呼叫,接通1000和1001两个号码
freeswitch> originate user/1000 &bridge(user/1001)
        当上述 originate命令发起呼叫时,建立一个 Channel,然后呼叫1000,1000接听后,在该 Channel上(它相当于a-leg)执行 bridge App, bridge会再建立另一个 Channel(即bleg,来呼叫1001。此时,1000和1001这两个 Channel在信令上建立了桥接关系。1001接听后, bridge会把它们的媒体也桥接起来,此时进入正常通话。实际上,在 FREESWITCH内部, originate和 bridge都是调用同一个函数来实现的,为了简单起见,我们使用如下伪代码 originate(session, new session, dial string);当 originate调用该函数时, session为空,因此相当于调用:originate(NULL, new session, "user/1000");这时它就建立了一个新的 session,即 new session,我们称之为 session a。这里user/1000为呼叫字符串,如果该呼叫字符串包含有{ origination caller id_ number=-1000,则会以1000作为主叫号码(由于主、被叫号码相同,看起来相当于1000呼1000),否则使用默认的000000作为主叫号码。如果a接听了,在调用 bridge时, bridge会进行如下函数调用:originate(session a, new session, "user/1001")i上述函数调用也会建立一个新的 new session(b-leg)来呼叫1001,但与第一次调用不同的是,这次它有参照物了。

8、    我们使用命令呼叫1000和1001两个号码,在1000上显示7777,在1001上显示888下面两种方法是等价的
freeswitch> originate origination caller id number-77771user/1000  &bridge((origination caller id number=8888]user/1001)
freeswitch> originate foriginatioin caller id number=7777)effective caller  id number=8888)user/1000  &bridge(user/1001)
 

这篇关于FreeSwitch(十):基本技能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/205367

相关文章

计算机视觉工程师所需的基本技能

一、编程技能 熟练掌握编程语言 Python:在计算机视觉领域广泛应用,有丰富的库如 OpenCV、TensorFlow、PyTorch 等,方便进行算法实现和模型开发。 C++:运行效率高,适用于对性能要求严格的计算机视觉应用。 数据结构与算法 掌握常见的数据结构(如数组、链表、栈、队列、树、图等)和算法(如排序、搜索、动态规划等),能够优化代码性能,提高算法效率。 二、数学基础

freeswitch借助fail2ban屏蔽骚扰注册

fail2ban屏蔽fs中的骚扰注册 背景Fail2Ban安装配置 背景 在阿里云上部了一套fs满足公网业务需要。布置好后打开fs_cli看了一眼,全是来自公网的骚扰注册,足见公网环境的风险(不过aws似乎情况稍好)。 Fail2Ban 使用Fail2Ban来防御注册骚扰的主要原因是,Fail2Ban已经和freeswitch有了很好的集成。Fail2Ban的工作原

顶顶通热词模型配置热词方法(mod_cti基于FreeSWITCH)

文章目录 前言热词文件模型下载实时热词模型(对接mod_cti)一句话热词模型(对接mod_vad) 前言 在语音转文字时,如果在您的业务领域有一些特有的词,默认识别效果较差的时候可以考虑使用热词模型功能,把这些词添加到一个热词文件中,可以改善这些词的识别结果。这种方式配置后,就可以生效。 也可以处理同音词,例如:王小明和王晓铭,通常普通模型会识别成 “王小明”,如果把

freeswitch python 模块Demo

freeswitch python 模块Demo 说明: 首次发表日期:2024-08-26freeswitch相关文档: https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Modules/mod_python_1048940/ 注意:我将freeswitch安装在/opt/freeswitch目录,文件或目录地

freeswitch 32秒自动挂断问题

freeswitch 32秒自动挂断问题 说明: 首次发表日期:2024-08-23参考: https://serverfault.com/questions/1008661/freeswitch-drops-calls-after-32-secondshttps://blog.csdn.net/qq_32110203/article/details/141126033https://stac

ubuntu 18.04 server源码编译安装freeswitch 1.10.11——筑梦之路

前言 这里主要编译支持语音通话、视频通话、短信、webrtc功能的PBX。 安装编译工具包和依赖包 sudo apt-get updatesudo apt-get install -y autoconf git libtool g++ zlib1g-dev libjpeg-dev libcurl4-openssl-dev libspeex-dev libldns-dev libedit-de

ubuntu 18.04 server源码编译安装freeswitch 1.10.7支持音视频通话、收发短信——筑梦之路

软件版本说明 ubuntu版本18.04:https://releases.ubuntu.com/18.04.6/ubuntu-18.04.6-live-server-amd64.iso freeswitch 版本1.10.7:https://files.freeswitch.org/freeswitch-releases/freeswitch-1.10.7.-release.tar.gz s

顶顶通呼叫中心中间件-机器人测试流程(mod_cti基于FreeSWITCH)

感兴趣的话可以点后面链接添加联系方式顶顶通小孙   一、打开ccadmin-web并且创建分机 1、登录ccadmin-web 登录地址:http://ddcti.com:88 登录之后根据下图去登录ccadmin-web系统。 2、创建分机 点击呼叫中心 -> 点击分机设置 -> 点击新增,点击新增后还需要查看后面的图片去配置分机名称和分机密码。 二、注册分机

FreeSWITCH 网关配置

给个例子: <gateway name="gw1">     <param name="register" value="false"/>     <param name="register-transport" value="udp"/>     <param name="caller-id-in-from" value="true"/>     <param name="realm" val

centos 7无需token编译安装freeswitch 1.10.11 ——筑梦之路

准备工作 安装编译工具和依赖包 yum update -ysudo yum install epel-release vim tcpdump net-tools.x86_64 -ysudo yum install gcc-c++ sqlite-devel zlib-devel libcurl-devel pcre-devel speex-devel ldns-devel libedit