【问题标题】:Writing a Lua script using FreeSWITCH's native PostgreSQL support?使用 FreeSWITCH 的原生 PostgreSQL 支持编写 Lua 脚本?
【发布时间】:2013-10-11 18:13:56
【问题描述】:

我正在学习如何使用 FreeSWITCH 的作者编写的 FreeSWITCH 1.2 书籍来使用 FreeSWITCH。

在第 7 章中,解释了如何使用 Lua 脚本以及连接到数据库。然而,我感觉这本书是在 FS 1.2.5 出来之前写的,并没有考虑到 PostgreSQL 的原生支持。结果是一个令人困惑的非工作示例代码。 这是本书过时的部分:http://books.google.ca/books?id=uISv9J6wt88C&lpg=PT295&dq=Freeswitch%20Connecting%20to%20a%20database%20with%20LuaSQL&pg=PT293#v=onepage&q&f=false

我想了解如何使用 Lua 将 FreeSWITCH 与某种数据库连接,但我找不到任何相关的论坛主题或资源。

谁能指出我正确的方向?

干杯!

【问题讨论】:

    标签: postgresql lua freeswitch


    【解决方案1】:

    自从我为 fs 编写 lua 以来已经有几个月了。但是,我清楚地记得无法轻松获得本机 postgresql 支持。我选择了 odbc 连接器并从 freeswitch 的脚本目录运行 lua 脚本。我在 CentOS 6.4 上获得 lua 脚本支持的步骤如下(对于其他 *nix 环境应该非常相似) 这假设您安装了一个功能齐全的 freeswitch 并在启用 mod_lua 的情况下运行。

    1) 安装 postgresql-odbc.x86_64(或等效)

    2)在/etc目录下创建/修改两个文件如下,第一个是odbc.ini,第二个是odbcinst.ini

    ODBC.INI:

        [freeswitch]
    Driver=/usr/lib64/psqlodbcw.so
    Description=Connection to LDAP/POSTGRESQL
    Servername=<ENTER SERVER IP HERE>
    Port=5432   
    Protocol=6.4
    FetchBufferSize=99
    Username=<ENTER USERNAME HERE> 
    Password=<ENTER PASSWORD HERE>
    Database=<ENTER DATABASE NAME HERE>
    ReadOnly=no
    Debug=1
    CommLog=1
    

    ODBCINST.INI:

    [PostgreSQL]
    Description = PostgreSQL driver for Linux & Win32
    Driver      = /usr/lib64/psqlodbcw.so
    

    您可能必须确保您的驱动程序指向正确的目录,然后您应该能够在“scripts”下的 root freeswitch 目录中创建一个 lua 脚本,这是一个示例脚本,请确保将 和 替换为您的以下示例中的 db 凭据:

    local dbh = freeswitch.Dbh("odbc://freeswitch:<DB USERNAME>:<DB PASSWORD>") -- connect to ODBC database 
    
    assert(dbh:connected()) -- exits the script if we didn't connect properly
    
    local sqluuid  =    env:getHeader("uuid")
    local sqlani   =    env:getHeader("sip_from_user")
    local sqldni   =    env:getHeader("sip_req_user")
    local sqlstart =    env:getHeader("start_stamp")
    local sqlstop  =    env:getHeader("end_stamp")
    local sqlpid   =    env:getHeader("presence_id")
    
    local myquery = string.format("INSERT INTO cdr (uuid, ani, destination_number, start_stamp, end_stamp, presence_id) VALUES ('%s', '%s', '%s', TIMESTAMP '%s', TIMESTAMP '%s', '%s')",
    sqluuid, sqlani, sqldni, sqlstart, sqlstop, sqlpid)
    
    dbh:query(myquery) 
    
    
    dbh:release() -- optional
    

    然后使用您的拨号方案调用此脚本:

    <action application="set" data="session_in_hangup_hook=true"/>
    <action application="lua" data="someluascript.lua"/>
    

    如果您遇到任何问题,请告诉我,我会尽力提供进一步帮助。

    【讨论】:

      猜你喜欢
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      • 2014-08-11
      • 1970-01-01
      • 2016-06-22
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多