FreeSwitch(十二):基本功能与实现

一、mod_info呼叫队列

1.1、呼叫停泊与取回

        一般来说,普通的电话呼叫会使用 bridge App来桥接两条腿。但在电话分配中,一般采用停泊与取回的方式进行电话搭接。顾名思义,停泊跟泊车类似,即在有来话时,先将来话停靠在一个泊位上(一般还会放点音乐),然后通过某种算法找到一个空闲的座席,该座席拨打一个与该泊位相关的号码,就可以将该泊位上的电话取回,双方进行通话。

        fifo是一个“生产者一一消费者”模型,即来话( Caller)相当于生产者( Producer),而座席( Agent)则称为消费者( Consumer),它对来话进行服务即相当于“消费”生产者生产的内容。

        打电话的人停泊,接电话的人取回。

1.2、配置坐席

        静态坐席:一般情况下,fifo是不需要配置的,如果在呼叫中需要一个fifo, FREESWITCH就会自动创建(如上面的fifo名字可以改成任意的其他字符串)。但有时候,我们也可能希望配置一些静态的座席用于呼叫分配。当将队列中的来话分配到座席时,ffo使用轮循的方式分配,因而它是“公平”的,即不会出现某些座席“忙死”而其他座席“饿死的情况。

        动态坐席:在实际的呼叫中心应用中,座席的配置往往是动态的,即一个话务员上班时,会执行一个“签入”的动作,说明他(她)上班了,准备好接电话了;而在中途休息时,或者下班时执行“签出”,这样队列里再有电话进来就不会分配到该座席了。

       offhook:以上配置的座席中,不管是静态配置的还是动态配置的,都称为 onhook(挂机)座席。这种座席的特点是当队列中来了电话后再去呼叫座席。而与之相对的另一种座席称为offhook(摘机)座席,这种座席会事先呼入队列并等待(一般听等待音乐),当有来电时就可以立即接听,省去了呼叫座席的时间,因而能更迅速为客户提供服务。这在比较繁忙的呼叫中心中也有助于提高效率。

1.3 FIFO

        在 mod fifo中,有许多相关的通道变量可以改变它的行为。通过有效地使用这些通道变量,往往能配置出比较实用的功能。
如每个ffo都有10个优先级队列,在进行人fifo前,可以使用ffo_ priority变量指定来话的优先级,高优先级的来话将排在队列的前面(默认的优先级是5):

<action application="set"data="fifo priority=l"/>
<action application="fi fo" data="book in"/>

        在队列中有多个电话排队时,座席这一端也可以随意取出一个电话进行接听。当然,如果达到这种效果需要通过其他手段获取到队列中所有成员的UID,如下面的设置中,我们在从队列中取出(out)电话前先把 fifo bridge uuid变量设置为想取出的 Channel的UUID,然后就可以取出与特定的UUID相关联的通话了:

<action application=set"data="fifo bridge uuid=9c3alfee-fae2-4355-bceb-5064f2107983"/>
<action application="fi fo "data="book out"/>

        在fifo应用中,通话中的两条腿都是独立建立的,只有这样才能进行桥接(即 bridge)。因而,在普通的通话中靠a-leg上的变量去影响b-leg的做法(如,使用 export将变量设置到未来的b-leg上)在这里就不适用了。那么,为了在b-leg上设置我们想要的通道变量,可以在向b-leg发起呼叫的呼叫字符串上做文章。如下面的设置可以在呼叫1007时将主叫号码改为7777:

<member>( origination call id name=7777]user/1007</member>

          也可以设置与其他业务系统中的座席工号进行关联,如

<member>(my worker number=1234) user/1007</member>

         当然,这里的座席成员除了是本地用户外,也可以是外部系统的号码,如通过某网关能打通的一个手机号:

<member>sofia/gateway/pstn/139xxxxxxxx</member> 

二、mod_callcenter实现呼叫中心应用

 2.1、坐席的配置与管理

(1)静态坐席配置

        mod callcenter J默认的配置文件是 conf/autoload configs/ callcenter.conf.xml,其中配置了一个 support@ default队列,部分配置如下:

<queue name=""support@default">
<param name="strategy"value="longest-idle-agent"/>
<param name=moh-sound"value="SS[hold music)"/>
</queue>

        其中, strategy参数指定了队列的分配方式,它的值( value) longest-idl- agent T说明要优先选择等待时间最长的座席分配。接着,我们来配置一个座席,它的名字是1005@ default,配置如下

<agent name="1005@default"type="callback"
contact="[call timeout=10]user/1005
status="Available"max-no-answer="3"wrap-up-time="10"
reject-delay-time="10" busy-delay-time="60"/>

        在该座席的配置中,name指定座席的名字,它的值为1005@ default,以后都可使用该名字引用这个座席;type指定座席的类型; contact为座席的呼叫字符串,用于在有来话时呼叫该座席; status为座席的初始状态;max-no- answer定义座席呼叫失败的次数,如果超过这个值,则将座席状态设为 On Break; reject-delay-time为座席拒接后再次选到该座席的最短时长;busy- delay-time为如果该座席忙,则再次尝试选到该座席的最短时间。然后,还需要配置tier,以将座席与队列关联起来。如下面的配置将三个座席与队列support(@default关联起来了。

<tier agent="1005@default"queue="support@default"level="1"position="1"/>
<tier agent="100 6(default"queue="support@de fault"level="1"position="1"/>
<tier agent="1007@default"queue="supportedefault"level="1"position="1">

        上述设置完成后,就可以重新加载模块使之生效了

freeswitch> reload mod callcenter

(2)动态配置坐席

mod callcenter提供了一个 callcenter_ config的API命令,用于管理与该模块相关的各种资源。比如,可以使用如下命令手工将座席签入:

freeswitch> callcenter config agent set status 1005(default '"

当然,上述的签入命令用于座席已正确配置的基础上。通过把座席的状态变成 Available,该座席就准备好接听电话了。下列命令将该座席的状态置为 Logged Out,因此,就不会再有电话分配到该座席了。

freeswitch> callcenter config agent set status 1005@ Logged Out

可以用以下命令列出当前所有的座席

freeswitch> callcenter config agent list

当然,如果座席本身没有在配置文件中配置,也可以使用命令添加。比如,下列命令添加一个名字为1007@ default的座席

freeswitch> callcenter config agent add 1007@default callback

当然,还需要用下列命令给它设置相关的参数,如 contact:

freeswitch> callcenter config agent set contact 1007@default user/1007 

三、数据库

3.1、默认数据库有什么

 (1)核心数据库:FREESWITCH默认使用 SQLITE嵌入式数据库,因而不需要任何配置就能工作。默认的数据库存储位置是 Freeswitch安装目录下的db目录,默认的核心数据库名称是core.db。

 其中, sqlite3命令用于打开 Sqlite数据库。 tables命令会显示数据库中所有的表,各表的作用如下:

FREESWITCH的show命令的大部分内容都是基于这些表的,如 show channels即查询Channels表。当 FREESWITCH中有通话时,可以使用如下SQL语句进行查询:

sqlite> select *from channels

也可以使用. schema命令看表的结构,如下列命令就显示了 calls表的结构:

sqlite>.schema calls 

(2) 除核心数据库外,很多外部模块也都使用数据库存储数据。最典型的就是 mod sofia模块。mod sofia模块中的每一个 Profile都使用一个单独的数据库,如我们可以通过下面命令看到每个数据库:

3.2 ODBC 

为了让 FREESWITCH支持ODBC,在编译前需要安装 UNIXODBC的开发包,并安装相应的数据库驱动。在 Centos、 Ubuntu或 Debian上的安装 UNIXODBC的方式分别如下:

yum install UNIXODBC unixodbc-devel

如果使用 MYSQL,则需要安装 MYSQL数据库的ODBC驱动程序 MYODBC。在不同的系统上可以使用以下命令安装

yum install mysql-connector-odbc

通过/etc/ odbcinst.ini可以配置数据库的驱动:

MYSQL的ODBC驱动有一个r版本,如果在你使用的平台上存在这个版本,则必须使用该版本的,如
Driver=/usr/1ib64/odbc/libmyodbc r so
MYSQL的ODBC驱动以及客户端库在多线程环境中使用时可能会有问题(如内存泄露),而 FREESWITCH是一个典型的多线程系统,因而在生产环境中使用前,需要多做测试,并精心选择一个ODBC版本与 MYODBC版本的有效组合接下来需要在/etc/ odbc. ini中配置DSN。下面的配置中,DSN(即数据源的名称)为freeswitch,我们以后可以以这个名字引用它。注意该配置为64位平台上的例子,如果使用32位的系统,则可能需要将/usr/lib64替换为/んsr/lib。另外,里面的 OPTION=67108864一行非常重要一 Freeswitch会将多条SQL语句放到一起执行,以提高效率,如果没有该选项则会出错( MYODBC3.51.18及以后的版本才支持该选项)。

、、

当然,也可以把核心数据库放到ODBC数据库中,这个可以通过配置 switch.conf.xml中的如下选项实现
<param name="core-db-dsn"value="odbc: //freeswitch: username: password"/>
其中,dsn为ODBC的 Data Source Name,即数据源的名称,在这里,我们使用了上面配置的名称 freeswitch; username和 password分别为连接数据库的用户名和密码。当然,如果把用户名和密码配置到odbc.ini中,则可以直接这样写:
<param name="core-db-dsn"value="odbc: //freeswitch: "/
另外,我们也可以在 mod sofia的配置文件(如 internal.xml)或 mod fifo的配置文件fifo.conf.xml中使用如下参数开启对ODBC的支持:
<param name="odbc-dsn"value="odbc: //freeswitch: username: password"/>


 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值