fs概述及基本使用

news/2024/11/19 19:24:58/

PRI是实际物理线路, sip trunk是ip虚拟连接
ACD(Automatic Call Distributor) 自动呼叫分配,也叫智能选择座席.  ACD掌握坐席状态,是否分配呼叫   若acd未拦截,则sip终端代理(话机)能判别当前状态、指示用户放音、回复响应
IVR(Interactive Voice Response) 交互式语音响应、电话语音菜单    freeswitch/conf/autoload_configs/ivr.conf.xml
CTI(computer telephony integration) 计算机电话集成  呼叫中心中间件  acd属于cti功能一部分
FS呼叫流程控制:xml dialplan ,嵌入式脚本

重新加载模块module_exists mod_da2; reload mod_da2
新增模块:modules.conf增加模块/去掉注释; 全部重新编译make && make install/指定重新编译在src/mod/的模块make && make install;   重启fs

freeswitch/conf   配置文件目录    配合find查找
    vars.xml        #全局变量配置文件   X-PRE-PROCESS标签     呼叫port
    freeswitch.xml  #将所有配置文件粘贴到一起  X-PRE-PROCESS预处理指令,做简单替换。不能注释,只能破坏。XPRE-PROCESS(见手册88)
    autoload_configs/switch.conf.xml        #freeswitch配置文件,快捷键文件     autoload_configs 在启动时装入配置文件    rtp监听port    
    autoload_configs/modules.conf.xml       #配置启动时加载哪些模块
    autoload_configs/event_socket.conf.xml  #记录fs端口密码       fs的port
    autoload_configs/acl.conf.xml           #ACL鉴权配置
    autoload_configs/ivr.conf.xml           #引入所有IVR语音菜单配置
    autoload_configs/callcenter.conf.xml    #呼叫中心排队策略配置
    autoload_configs/conference.conf.xml    #会议配置文件  DTMF按键控制功能,profile项
    autoload_configs/cdr_csv.conf.xml       #CSV话单配置文件  
    autoload_configs/lua.conf.xml           #LUA配置文件 如 自启动lua脚本,lua环境变量路径,lua绑定回调提供动态xml dialplan
    autoload_configs/local_stream.conf.xml  #sream流声音配置(music on hold, local_stream://moh)  
                                    静音流   silence_stream://2000[,1400] 舒适噪音2s,噪音数值1400(越小声音越大)
                                    铃音流   tone_stream://%(1000,4000,450);loop=3  1s通,4s断,450hz信号,循环3次
    lang/*/*.xml                            #phrase短语框架的语音 宏定义
    dialplan/            #拨号计划, 对进来的电话进行路由,出局路由、入局路由。  相当于路由表   
            出局用default路由,匹配号码会加前缀,如0,但在送出时会吃掉0,端口用5080(5080不用鉴权,呼叫本地注册用户用5060);出局的对端用户(入局端)路由用public
            来话注册在本服务用default路由,不在本服务用public路由
            bgapi originate sofia/external/6000@192.17.19.2 &echo       #呼叫别的系统用户
    directory/default/   #配置本地用户信息  params公共参数,variables公共变量,当重复出现在xml时,标签优先级为user>group>domain    user_context指定拨号计划
    sip_profiles/        #sip网关配置,如rtp、sip ip,编解码,媒体音     查询指定profile配置 sofia status profile internal
freeswitch/log/freeswitch.log    #日志
freeswitch/log/freeswitch.xml.fsxml  #内部所有xml文件的内存镜像  解析freeswitch.xml生成

X-PRE-PROCESS 预处理指令常用app命令:
include 包含文件,用于freeswitch.xml
set     设定全局变量, vars.xml(88页)  全局变量$$   (通道变量)临时变量$       在控制台可查询全局变量值,     如:global_getvar base_dir
        通道变量 与呼叫有关,影响呼叫流程且可以被动态改变,仅在channel生命周期有效; 全局变量 仅在预处理阶段被求值;

常用app命令:
log     打印日志
set     设定通道变量($),只对当前腿leg生效  +变量赋值     data="export_var=var1,var2..."等价于export同步变量到b-leg   
unset   取消变量定义          等价set data="var=_undef_"
info    打印全部通道变量
export  设定变量,对所有腿leg生效.        data="nolocal..."不对本地腿生效(channel),设置b-leg
hash    保存数据到hash表
bind_meta_app   在该channel上绑定DTMF(按键)
bridge  桥接另一条腿 +对象    bridge先判断对端用户是否注册;bridge成功会一直阻塞,一直等到有人挂机或错误挂机
    bridge场景:A呼B:A到fs建立a-leg,fs桥接到B建立b-leg。
        A主叫挂机;      a-leg,b-leg释放,拨号计划dialplan停止
        B被叫挂机;        b-leg释放,a-leg保留,继续dialplan的action。控制后续action的变量有:
                    Hangup_after_bridge            B接通正常挂机
                    Continue_on_fail            B未接通,拒接,在忙,久叫不应
    注意:!!! 只有(answer)应答后,才建立真正的流媒体 !!!
answer      应答      fs做被叫时,若要给主叫放音,必须先应答answer
playback    放音 +放音文件     必须先answer      仅针对单个channel声道
endless_playback    无限循环
loop_playback        指定次数循环
say                 统一放音接口,支持多语言      <action application="say" data="en NUMBER ITERATED 1234"/>
record      单腿录音(阻塞式)   必须先answer      单腿录音可由playback播放验证(双腿播放会先进行混音) 
record_session 录音(非阻塞,单双腿均可)    对应API uuid_record <channel-uid> start/stop <record-path>""
echo、park、hold     #回声;挂起;保持   
conference  会议      隐含answer
transfer    转接,重新转接到routing阶段,在dialplan路由   
sleep       等待(ms) +时间
ring_ready  在sip中给对方回180    振铃
pre—-answer 在sip中给对方回183    回铃音(早期媒体)
read        放音并等待接收DTMF按键(拨号按键,常用于自助服务)
        <minlen> <maxlen> <soundfile> <var name> <timeout> <terminators>   #如请输入您的身份证号码,按#号键结束
play_and_get_digits   与read类似,但更高级(手册154页)
ivr         电话语音菜单
speak       文字语音合成  ('engine|speaker|text')

拨号计划   目录:freeswitch/conf/dialplan/   路由收到的呼叫:对端号码需在fs注册,在拨号计划有extension路由
    核心三要素: Dialplan Context Extension
    结构:
        Context
            Extension           #扩展;电话分机
                Condition        #测试条件判断,满足则执行action     号码destination_number    时间wday hour
                    Action      #动作,满足最近Condition执行。   一般是先hunting所有,再execut;加上内联参数inline="true"立马执行,不用在execut阶段
                    anti-action #反动作, 不满足最近Condition执行
    在日志里的标识: mod_dialplan_xml.c:637 Processing 1018 <1018>->1019 in context msxf

通道变量(临时变量):
    查看该通道所有变量:  在拨号计划加入 application="info"。     #因为通道变量与呼叫有关,没有呼叫时无法查询。
测试条件  condition :
    配合 break 形成逻辑判断。   默认on-false(失败停止); on-true(成功停止); alway(都停止); never(都继续)
Action 调用app语句: 一般是先hunting所有action操作,再execut;但 加上内联参数inline="true"立马执行,不用在execut阶段。 --inline,app必须很快执行

在拨号计划dailplan中使用API: ${API(parms)}
${sofia_contact(user/1001)}   ${status()} 类似于函数调用,有参数的需放在括号内
<action application="bridge" data="${sofia_contact(user/$1)}"/>     
<action application="set" data="${res=${status()}}"/>

拨号计划的主要作用是在fs路由表查找对端的sip地址,如果知道对端的sip地址可直接呼叫(前提不要注册到fs上。在当前测试环境无法实现,话机必须注册到fs才能登录。硬电话或许可行?)。
查询sip地址:sofia_contact user/1018    
    sofia/internal-1/sip:1018@172.17.161.162:50055;ob;fs_nat=yes;fs_path=sip%3A1018%40183.230.169.152%3A57822%3Bob
直接呼叫sip:1018@172.17.161.162:50055即可    -- 注册到fs呼叫,还是会到fs走拨号计划

在docker家目录配置.fs_cli_conf, 快速链接fs      fs server0(见手册71页)      ip可配0网卡ip
[server0]
host => 10.247.104.158
port => 48021
password =>  Msxf_ClueCon
debug =>

freeswitch          启动服务
系统控制台 shutdown  关闭服务
后台启动:freeswitch -nc     关闭:freeswitch -stop

连接freeswitch服务:fs_cli    -P 端口 -p 密码     #配置在autoload_configs/event_socket.conf.xml
                   -x "command"  #执行一条语句后退出
#fs控制台(API)
status      查询freeswitch状态  F2
reloadxml   动态生效配置文件   F6
/help       帮助      /exit /event /log /filter /debug

sofia status    #查询各profile配置端口及状态  F5
sofia status profile internal       #查询指定profile配置信息
sofia status profile internal-1(名字) reg  #查询在指定profile注册用户信息
sofia_contact user/1018  #根据用户注册地址扩展成 sofia逻辑地址 和 nat地址   sofia_contact 1018@10.247.104.158 
sofia/internal-1/sip:1018@172.17.161.162:55674;ob;fs_nat=yes;fs_path=sip%3A1018%40183.230.169.152%3A46136%3Bo
originate user/1019 &echo    #呼叫1019,得先注册成功  originate用fs发起呼叫;user/1019呼叫字符串,找到sip地址;echo回音程序,充当channel另一端,自己和自己说话
                             #park "挂起"等待无声音;  hold "保持"等待保持音    echo、park、hold都是充当channel的另一端,实现“单腿通话”,用户和app通话
originate user/1019 &playback(/root/test.wav)     #playback(path)放音  record(path)录音            
originate user/1019 &bridge(user/1018)   #桥接  先originate建channel呼叫1019,1019接听后在该leg上调用bridge,建channel呼叫1018(建立桥接关系)  
sofia global siptrace on/off    #开启、关闭sip消息
sofia loglevel all 9  #设置sofia协议栈底层日志   sofia可查看命令帮助
originate user/1018,user/1019 &echo

originate user/1019 9196 XML msxf
解析:
    originate  Api,产生channel        originate不通会导致fs阻塞,建议加上bgapi originate。。。
    user/1019  呼叫用户1(呼叫字符串) 
    9192            呼叫用户2,在dialplan里的 destination_number
    9196 XML msxf   在默认的拨号xml文件,找context为msxf,destination_number涵盖9196的extension
此方式需要修改xml文件,并重新加载。对于小的测试过程,建议使用内联拨号计划(inline dialplan)。
例: originate  user/1000 playback:/tmp/tmp.wav,bridge:user/1001 inline
    #app默认以逗号分隔,有冲突时可修改m:^改为以^分隔。
    originate user/1000 ‘m:^playback:/tmp/tmp.wav^bridge:{a=true,b=false}user/1001’inline

originate用法
bgapi originate user/1019 &echo           #呼叫字符串格式:类型/参数/参数       user/1019 从本地注册用户查找该用户联系地址 
bgapi originate sofia/internal-1/sip:1018@183.230.169.152:21607 &echo           #sip的nat联系地址,非sofia地址(sofia_contact的fs_path部分,或信令的route)
bgapi originate user/1019 9196 XML msxf   #转入拨号计划 在xml里找context=msxf,destination_number=9196的分机号
bgapi originate user/1019 9196 XML msxf 'T wei' 12580 20  #自定义呼叫时的 self主叫名称 号码  invite超时秒数
bgapi originate sofia/internal-1/sip:1018@192.168.169.152:21607 &echo XML default 'T wei' 12580 20
bgapi originate {origination_caller_id_number=7777}user/1019 &bridge({origination_caller_id_number=7788}user/1018)   #使用通道变量设置两条腿的来电显示  
           origination_caller_id_number设置当前腿的来电显示(a,b腿)、 effective_caller_id_number设置另一条腿的来电显示(只能在a腿设置)
bgapi originate {ignore_early_media=true}sofia/gateway/gw/1389000000 &palyback(/tmp/a.wav)   #放音忽略183早期媒体
bgapi originate {instant_ringback=ture}{transfer_ringback=local_stream://moh}user/1019 &bridge(user/1018)
           transfer_ringback收到bleg180时播放播放回铃音  instant_ringback立即播放
bgapi originate user/1019 &ivr(msxf_ivr)        #ivr(ivr_menus下menu name)电话语音菜单       呼入可在拨号计划设置ivr  phrase:msxf_ivr_main_menu语音xml短语
bgapi originate user/1019 &lua(/tmp/a.lua)        #执行指定lua

FS只对呼入鉴权: 先ACL,失败再密码鉴权
    1.ACL访问控制列表 -- IP鉴权,不知道用户信息,只能用profile的context(对应拨号计划文件) freeswitch/conf/autoload_configs/acl.conf.xml   
    2.密码鉴权  -- 在directory找注册用户,使用 user_context 的拨号计划文件

常用事件说明
CUSTOM事件:模块内部事件,如sofia,conference,fifi。Event-Name永远为CUSTOM,具体事件以Event-Subclass区分。
Channel(状态)事件:跟channel状态有关,以CHANNEL_开头,事件携带变量以variable_开头
    来去话 -- CHANNEL_CREATE  uuid为Unique-ID
    sip收到100或180 -- CHANNEL_PROGRESS
    若收到183(Early Media)-- CHANNEL_PROGRESS_MEDIA
    应答 -- CHANNEL_ANSWER
    两个channel桥接成功 -- CHANNEL_BRIGE (仅在主动bridge产生,对端无)
    挂机 -- CHANNEL_HANGUP和CHANNEL_HANGUP_COMPLETE
    销毁channel – CHANNEL_DESTROY
  执行APP时:CHANNEL_EXECUTE     APP执行完毕:CHANNEL_EXECUTE_COMPLETE
Channel相关事件:与channel有关,不以CHANNEL_开头
    如PLAYBACK_START, PLAYBACK_STOP,RECORD_START,DTMF
系统事件:
    startup系统启动,shutdown系统关闭,module_load模块加载,module_unload,heartbeat心跳消息,API api产生,BACKGROUND_JOB bgapi产生

新增网关,新增用户话机拨打电话:
在freeswitch/conf/sip_profiles添加网关,重启fs生效。    Sofia profile rescan ReloadXML
在freeswitch/conf/directory/default下新增用户xml信息
freeswitch/conf/dialplan 修改拨号计划,让其他人可以呼叫到它
reloadxml 动态生效配置文件

注:sip注册话机若失败,可能和sip server\proxy 未配有关

curl ifconfig.me   #在内网root获取公网ip
STUN服务器(适用于锥形NAT):接收内网消息,响应内网被映射的外网地址端口
TURN(适用于对称NAT):中间人转发,固定服务器ip+port
ICE(锥形、对称NAT):提供多个候选地址(内网,stun,turn),选最优

#默认0-19
<extension name="local_extenstion">
          <condition field="destination_number" expression="^(101[0-9])$">
                     <action application="bridge" data="${sofia_contact(internal-1/$1$2)}"/>           # $1表示通配所匹配到的字符串,如1019
         </condition>
</extension>
#自定义号码
<extension name="139">
          <condition field="destination_number" expression="^(13[89]\d{8})$">
                     <action application="bridge" data="${sofia_contact(user/$1)}"/>
         </condition>
</extension>

查错过程:
A->B, fs无日志:呼叫未到fs,检查A的fsIP,防火墙设置等
   到fs,但不通:1.查dialplan拨号计划是否找到   2.返回的HangUp Cause挂机原因


http://www.ppmy.cn/news/238879.html

相关文章

FSL5.0使用教程

关于如何在Windows中安装可以参考我的博客&#xff1a;window下安装脑图像处理软件FSL 如有问题&#xff0c;欢迎加入交流群共同探讨&#xff1a;515574325 官方文档&#xff1a;https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/FslOverview 我用的是Ubantu16.04,安装的是fsl-compl…

电销机器人价格费用如何?对比过才知道

电话营销作为当前企业开发客户最直接的一种营销方式&#xff0c;虽然电话营销很多缺点有客户难寻、人员流动大、培训时间长、销售成本高等&#xff0c;但是丝毫不影响企业用它来拓客&#xff0c;而电销机器人就是针对这些出现的问题而研发&#xff0c;专门针对电话销售的人员拓…

小宝机器人_家用教育智能机器人

小宝机器人—"打令"机器人 小宝机器人官网排名小宝机器人官网排名下面我来为大家推荐小宝机器人高性价比的大品牌商家可以找茂名市齐聚机器人有限公司&#xff0c;经营各种智能产品的,一起来看看吧 小宝机器人它不仅是段子手、小管家、还是一只能行走会卖萌的小可爱…

一个智能机器人的外观设计需要花费多少钱?

设计一个智能机器人外观设计需要花费多少钱?针对一般中小企业来讲&#xff0c;设计成本相对性比较高。机器人的设计成本为10W—12W&#xff0c;加之接着的出模等。成本过高&#xff0c;早期担负的成本也非常大。 因而&#xff0c;很多初创公司会选择自己做机器人外观设计&…

ai人工智能机器人

随着时间的推移&#xff0c;人工智能的发展越来越成熟&#xff0c;智能时代也离人们越来越近&#xff0c;近几年人工智能越来越火爆&#xff0c;人工智能的应用已经开始渗透到各行各业&#xff0c;与生活交融&#xff0c;成为人们无法拒绝&#xff0c;无法失去的一个重要存在。…

智能语音机器人,铁打的机器,流水的价格

现如今人工智能大热&#xff0c;越来越多的产品打上了智能的标签来涨价&#xff0c;所以&#xff0c;当人们一听到“智能”两个字的时候&#xff0c;会第一时间觉得贵。那么&#xff0c;智能电话机器人&#xff0c;这种帮助企业在电销过程中筛选客户的工具&#xff0c;价格到底…

智能机器人

智能机器人之所以叫智能机器人&#xff0c;这是因为它有相当发达的“大脑”。在脑中起作用的是中央处理器&#xff0c;这种计算机跟操作它的人有直接的联系。最主要的是&#xff0c;这样的计算机可以进行按目的安排的动作。正因为这样&#xff0c;我们才说这种机器人才是真正的…

sterm机器人编程_STEAM智能编程机器人

设计师姓名&#xff1a;朱寓卿 指导老师&#xff1a;石元伍 联系方式&#xff1a;529989236qq.com — 设计阐述 — STEAM 编程机器人是一款针对 4-9 岁儿童开发的智能产品。故事背景是濒临灭绝的南极企鹅冒险&#xff0c;在 STEAM 编程学习的方式下试图向儿童说明全球变暖的严重…