`
linyu19872008
  • 浏览: 282349 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

freeswitch用户整合(使用mysql数据库的用户表)

 
阅读更多

freeswitch是一款强大的voip服务器,可以语音和视频。但是它默认是采用/directory文件夹下的xml来配置用户的,对于整合到现有系统或者使用数据库保存用户信息的系统都是非常不方便的,所以,本文主要描述一种方法,解决freeswitch用户整合的问题。


完成这一任务需要三步,配置unixodbc,将用户验证转接到lua脚本,修改拨号计划使得拨通所有号码

 


 

 

开发环境:centos 6.2 64位,  freeswitch,  linphone,mysql


1  首先安装unixodbc

    unixODBC是一个可以让你在Unix/Linux系统下使用ODBC来连接数据库的组件,就像java中的mysql-connector-java-5.1.6-bin.jar一样,负责连接数据库的。


yum install unixODBC-devel.x86_64

yum install mysql-connector-odbc.x86_64


安装后修改两个文件:/etc/odbc.ini,/etc/odbcinst.ini


/etc/odbc.ini  配置要连接的数据库信息


[freeswitch]

Driver          = /usr/lib64/libmyodbc5.so

SERVER       = ip

PORT           = 3306

DATABASE    = database

USER            = user

PASSWORD   = password


/etc/odbcinst.ini 修改mysq的部分,将驱动包指向正确,这要根据你本身的包安装路径配置


# Example driver definitions


# Driver from the postgresql-odbc package

# Setup from the unixODBC package

[PostgreSQL]

Description     = ODBC for PostgreSQL

Driver          = /usr/lib/psqlodbc.so

Setup           = /usr/lib/libodbcpsqlS.so

Driver64        = /usr/lib64/psqlodbc.so

Setup64         = /usr/lib64/libodbcpsqlS.so

FileUsage       = 1



# Driver from the mysql-connector-odbc package

# Setup from the unixODBC package

[MySQL]

Description     = ODBC for MySQL

Driver          = /usr/lib64/libmyodbc5.so

Setup           = /usr/lib64/libodbcmyS.so

Driver64        = /usr/lib64/libmyodbc5.so

Setup64         = /usr/lib64/libodbcmyS.so

FileUsage       = 1



修改之后,执行  isql -v freeswitch
如果出现
[root@test etc]# isql -v freeswitch
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> 
则代表你的unixodbc配置成功了

2  修改用户注册部分,转接到lua脚本进行注册验证

修改freeswitch/conf/autoload_configs/lua.conf.xml


<configuration name="lua.conf" description="LUA Configuration">

  <settings>


    <!--

    Specify local directories that will be searched for LUA modules

    These entries will be pre-pended to the LUA_CPATH environment variable

    -->

    <!-- <param name="module-directory" value="/usr/lib/lua/5.1/?.so"/> -->

    <!-- <param name="module-directory" value="/usr/local/lib/lua/5.1/?.so"/> -->


    <!--

    Specify local directories that will be searched for LUA scripts

    These entries will be pre-pended to the LUA_PATH environment variable

    -->

    <!-- <param name="script-directory" value="/usr/local/lua/?.lua"/> -->

    <!-- <param name="script-directory" value="$${base_dir}/scripts/?.lua"/> -->


    <!--<param name="xml-handler-script" value="/dp.lua"/>-->

    <!--<param name="xml-handler-bindings" value="dialplan"/>-->

    <param name="xml-handler-script" value="gen_dir_user_xml.lua" />

    <param name="xml-handler-bindings" value="directory" />

    <!--

        The following options identifies a lua script that is launched

        at startup and may live forever in the background.

        You can define multiple lines, one for each script you

        need to run.

    -->

    <!--<param name="startup-script" value="startup_script_1.lua"/>-->

    <!--<param name="startup-script" value="startup_script_2.lua"/>-->

  </settings>

</configuration>

让lua脚本接管用户注册验证,这里默认调用的脚本是freeswitch/script/gen_dir_user_xml.lua
脚本内容如下:
freeswitch.consoleLog("NOTICE","lua take the users...\n");
-- gen_dir_user_xml.lua
-- example script for generating user directory XML

-- comment the following line for production:
--freeswitch.consoleLog("notice", "Debug from gen_dir_user_xml.lua, provided params:\n" .. params:serialize() .. "\n")

local req_domain = params:getHeader("domain")
local req_key    = params:getHeader("key")
local req_user   = params:getHeader("user")
local req_password   = params:getHeader("pass")

local dbh = freeswitch.Dbh("freeswitch","user","password");
freeswitch.consoleLog("NOTICE","start connect DB...\r\n");
assert(dbh:connected());
dbh:query("select password from Users where id="..req_user,function(row)
        freeswitch.consoleLog("NOTICE",string.format("%s\n",row.password))
        req_password=string.format("%s",row.password)
end);
dbh:release();

freeswitch.consoleLog("NOTICE","info:"..req_domain.."--"..req_key.."--"..req_user.."--"..req_password.."\n");



--assert (req_domain and req_key and req_user,
--"This example script only supports generating directory xml for a single user !\n")
if req_domain ~= nil and req_key~=nil and req_user~=nil then
    XML_STRING =
    [[<?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <document type="freeswitch/xml">
      <section name="directory">
        <domain name="]]..req_domain..[[">
          <params>
        <param name="dial-string"
        value="{presence_id=${dialed_user}@${dialed_domain}}${sofia_contact(${dialed_user}@${dialed_domain})}"/>
          </params>
          <groups>
        <group name="default">
          <users>
            <user id="]] ..req_user..[[">
              <params>
            <param name="password" value="]]..req_password..[["/>
            <param name="vm-password" value="]]..req_password..[["/>
              </params>
              <variables>
            <variable name="toll_allow" value="domestic,international,local"/>
            <variable name="accountcode" value="]] ..req_user..[["/>
            <variable name="user_context" value="default"/>
            <variable name="directory-visible" value="true"/>
            <variable name="directory-exten-visible" value="true"/>
            <variable name="limit_max" value="15"/>
            <variable name="effective_caller_id_name" value="Extension ]] ..req_user..[["/>
            <variable name="effective_caller_id_number" value="]] ..req_user..[["/>
            <variable name="outbound_caller_id_name" value="${outbound_caller_name}"/>
            <variable name="outbound_caller_id_number" value="${outbound_caller_id}"/>
            <variable name="callgroup" value="techsupport"/>
              </variables>
            </user>
          </users>
        </group>
          </groups>
        </domain>
      </section>
    </document>]]
else
    XML_STRING =
    [[<?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <document type="freeswitch/xml">
      <section name="directory">
      </section>
    </document>]]
end

-- comment the following line for production:
freeswitch.consoleLog("notice", "Debug from gen_dir_user_xml.lua, generated XML:\n" .. XML_STRING .. "\n");


修改freeswitch/conf/directory中的一部分内容,使得通过xml验证用户的功能失效,这样lua才能真正接管用户注册
删除的内容如下:
<group name="default">
        <users>
          <X-PRE-PROCESS cmd="include" data="default/*.xml"/>
        </users>
 </group>


3  修改拨号计划
修改freeswitch/conf/dialplan/default.xml
修改如下内容,好让所有的拨号通过以下的条件
 <extension name="Local_Extension">
       <!--<condition field="destination_number" expression="^(10[01][0-9])$">-->
       <condition field="destination_number" expression="^(.*)$">

完成以上步骤,就基本完成了用户整合的全部内容,但是要注意一点,第一步配置unixodbc之后,要重新编译下freeswitch的源码,即在/usr/local/src/freeswitch下执行 configure&&make install,然后重启freeswitch。
还有就是每次修改xml后都需要重新在freeswitch控制台或者fs_cli下执行reloadxml,使得修改生效,修改lua脚本,则不需要如上操作。

  • 大小: 23.4 KB
分享到:
评论
1 楼 ogogo1981 2013-04-02  
呵呵,

相关推荐

    关于freeswitch的mod_odbc_cdr模块在话单写入mysql库失败时无法写本地csv话单文件的bug的修复

    mod_odbc_cdr是freeswitch的一个模块,该模块负责将话单实时写入mysql数据库。按照设计话单将在写入数据库失败时,写入本地文本文件,但是测试时发现该功能无法满足。经修改、测试无误,特此分享。

    FreeSWITCH1224.sql

    该数据库脚本是mysql,包含freeswitch使用的数据库表,通话记录表,windows上使用odbc连接mysql需要设置multistateam

    freeswitch之mod_callcenter介绍

    - 描述:如果提供了这个参数,`mod_callcenter`将使用指定的ODBC数据库,而不是默认行为。 - 示例配置:`&lt;param name="odbc-dsn" value="dsn:user:pass"/&gt;` - 作用:通过提供数据库连接信息,使模块能够与外部...

    mysql-odbc-5.3.12-winx64

    mysql-odbc-5.3.12 windows下安装包 64位,配置freeswitch进行mysql数据库 连接使用

    freeswitch+webctr+web电话

    **MySQL替代默认的sqlsite**,在Freeswitch的部署中,通常使用SQL数据库来存储用户信息、呼叫记录和其他元数据。默认情况下,Freeswitch可能使用其内置的sqlite数据库(称为sqlsite)。然而,对于大型系统或高并发...

    FreeSWITCH简要使用教程V1.1

    用户可以根据需求加载或卸载不同的模块,如媒体处理、数据库连接等。 3. **语言友好**:FreeSWITCH提供了API和命令行接口,支持Lua、JavaScript、Perl、Python等编程语言,方便开发者进行脚本编写和自动化控制。 4...

    OpenSips与freeswitch群集搭建

    接着使用`opensipsdbctl create`命令创建数据库结构。在MySQL中,还需要为OpenSips用户赋予相应的权限。 启动脚本的复制和修改是必要的,以便正确地指向OpenSips的安装位置,并设置启动参数。通过运行`/etc/init.d/...

    freeswitch-1.10.3.tar.gz

    - **ODBC MySQL** 集成允许FreeSwitch与MySQL数据库进行交互,方便存储和检索用户信息、通话记录等数据。通过ODBC接口,可以实现与其他数据库系统的兼容,扩展性强大。 4. **参考资料** 如果在编译安装过程中遇到...

    FreeSwitch配置和使用手册(DOC).doc

    FreeSwitch配置和使用手册 1. FreeSwitch 简介 FreeSwitch是一个强大的开源通信平台,设计用于处理各种媒体通信,包括语音、视频和文本。它不仅能够作为个人软电话客户端,还可以作为企业级PBX(Private Branch ...

    freeswitch模块对接使用阿里语音合成

    通过这样的对接,Freeswitch能够在处理通信任务时,灵活地使用阿里云的TTS服务,为用户提供更加人性化的语音交互体验。这不仅适用于电话系统,还可以应用于智能家居、智能客服等多种场景,充分体现了Freeswitch的...

    FreeSWITCH 1.8 使用手册

    FreeSWITCH 1.8 manual, a very comprehensive introduction, English text version , PDF file . 最新版 高清晰 文本电子版: FreeSWITCH-1.8使用手册, 介绍的很全面,英文版本

    freeswitch xml_curl模块使用

    例如,你可以创建一个数据库连接,查询用户数据,然后构造对应的XML结构,最后通过XML_CURL模块将生成的XML推送到Freeswitch。 3. **替代本地配置** 传统上,Freeswitch的配置信息存储在本地的XML文件中,如`...

    mod_cdr_mysql:FreeSWITCH 模块 CDR MYSQL

    mod_cdr_mysql FreeSWITCH 模块 CDR MYSQL apt-get 安装 libmysql++-dev ... 使用您的数据库设置编辑文件 cdr_mysql.conf。 将 cdr_mysql.conf 文件添加到 autoloadconfig 文件夹。 重启 FreeSWITCH

    FreeSWITCH中文语音包 (2017-11整合)

    这个"FreeSWITCH中文语音包 (2017-11整合)"是针对中国用户特别定制的资源集合,旨在为FreeSWITCH用户提供完整的中文语音支持。 此语音包的主要功能在于提供中文IVR服务,IVR是一种自动电话交互系统,能够让用户通过...

    Freeswitch权威指南,freeswitch权威指南 pdf,C,C++

    8. **模块化设计**:FreeSWITCH采用模块化结构,用户可以根据需求选择和配置不同的模块,如数据库连接、媒体处理、会议桥等。 阅读《FreeSWITCH权威指南》,你将学习到如何安装和配置FreeSWITCH,如何编写脚本和...

    freeswitch-1.10.0.-release.tar.gz

    而ODBC和MySQL则是数据存储和管理的关键组件,ODBC作为一个标准接口,使得FreeSwitch可以与多种数据库系统交互,而MySQL则是一种广泛应用的关系型数据库,适合处理大量通话记录和用户数据。 编译FreeSwitch 1.10.0...

    FreeSWITCH简要使用教程V1.1_freeswitch学习资料_freeswitch_

    3. **模块化设计**:FreeSWITCH采用模块化设计,用户可以根据需求选择并配置不同的模块,如数据库连接、语音识别、会议桥等,实现高度定制化的通信系统。 4. **API与语言支持**:FreeSWITCH提供了丰富的API接口,...

    FreeSwitch配置和使用手册.doc

    - **软电话连接**:配置好FreeSwitch后,用户可以使用支持SIP的软电话应用程序(如Linphone, Zoiper等)连接到FreeSwitch服务器,进行语音和视频通话。 4. **FreeSwitch的配置文件说明** FreeSwitch的配置文件...

    Freeswitch DTMF

    在这个压缩包文件中,可能包含了一系列与设置和使用Freeswitch DTMF相关的代码、配置文件或文档。为了更好地理解和利用这些资源,我们需要了解以下几个关键知识点: 1. **DTMF原理**:DTMF信号由两个不同频率的音频...

Global site tag (gtag.js) - Google Analytics