make mod_mariadb-install
安装 FreeSwitch mod_mariadb 模块
apt-get install -y libmariadb-dev mariadb-client
配置加载mysql
/usr/local/freeswitch/conf/autoload_configs/pre_load_modules.conf.xml
配置
/usr/local/freeswitch/conf/autoload_configs/switch.conf.xml
/usr/local/freeswitch/conf/sip_profiles/internal.xml
/usr/local/freeswitch/conf/autoload_configs/directory.conf.xml
<param name="core-db-dsn" value="mariadb://Server=172.0.0.1;Port=3306;Database=freeswitch_test;Uid=root;Pwd=123456"/>
配置
/usr/local/freeswitch/conf/autoload_configs/voicemail.conf.xml
/usr/local/freeswitch/conf/autoload_configs/callcenter.conf.xml
<param name="odbc-dsn" value="mariadb://Server=172.0.0.1;Port=3306;Database=freeswitch_test;Uid=root;Pwd=123456"/> ```
配置重启fs后,fs在启动日志中会报错,找不到对应的表
可以通过观察是否自动创造表来验证配置成功与否。
效果如下图
![最终效果](https://img-blog.csdnimg.cn/0882979fb9044e33950c25b9841ccde2.png)
2022-11-24 补充
freeswitch切换远程mysql后,mod_callcenter 中queue 进线分配策略为random时,sql会报错
[ERR] mod_callcenter.c:697 SQL ERR: [SELECT instance_id, name, status, contact, no_answer_count, max_no_answer, reject_delay_time, busy_delay_time, no_answer_delay_time, tiers.state, agents.last_bridge_end, agents.wrap_up_time, agents.state, agents.ready_time, tiers.position, tiers.level, agents.type, agents.uuid, external_calls_count FROM agents LEFT JOIN tiers ON (agents.name = tiers.agent) WHERE tiers.queue = ‘1582929384610889728’ AND (agents.status = ‘Available’ OR agents.status = ‘On Break’ OR agents.status = ‘Available (On Demand)’) ORDER BY level, random()] FUNCTION freeswitch_test.random does not exist
freeswitch 原生支持 PostgreSQL ,在random分配坐席时,会调用 random() 方法,而mysql不支持 random()
百度PostgreSQL的 random() 方法的作用后,在mysql中找到了平替 -> rand(),有兴趣的网友可以自行对比
解决方法:
找到mod_callcenter.c 源代码文件
./freeswitch/src/mod/applications/mod_callcenter/mod_callcenter.c
修改 random() 为 rand() ,重新编译 mod_callcenter
make mod_callcenter-install