-lang-en freeswitch-sounds-en-* freeswitch-sounds-music-*
freeswitch-lua freeswitch-xml-cdr
freeswitch-database-mariadb
systemctl enable freeswitch
4、使用内置mariadb数据库:注意,如果使用FS的mariadb支持就不能使用最新的mariadb,要用centos自带的,否则mysql
C connector版本不兼容!
yum install -y mariadb mariadb-sever
service mariadb start
systemctl enable mariadb
mysql_secure_installation
上面修改root用户密码,后面需要创建freeswitch的空数据库(建议用默认字符集)
5、修改FS配置文件,启用mariadb:里面默认启用的是pgsql,mariadb的被注释了,启用即可
vi
/etc/freeswitch/autoload_configs/pre_load_modules.conf.xml
6、修改FS配置文件,让FS的核心使用mariadb(mysql)数据库:需修改 core-db-dsn 或
odbc-dsn 数据库连接的相关信息,按上面自己设置的内容连接,连接串的格式为
mariadb://Server=localhost;Database=freeswitch;Uid=freeswitch;Pwd=pass;
vi
/etc/freeswitch/autoload_configs/switch.conf.xml
vi
/etc/freeswitch/autoload_configs/db.conf.xml
vi
/etc/freeswitch/sip_profiles/internal.xml
vi
/etc/freeswitch/sip_profiles/internal-ipv6.xml
7、启动FS
service freeswitch start
小记说明:测试运行正常,安装后配置文件中 mod_b64、mod_png、mod_av
这几个默认存在的模块都不可用,而且FS也没有相关的包,开发中需使用的ESL库(libesl.a)也不可用(没有相关包,安装了
freeswitch.devel
包也不包含,必须自己编译,所以,还是要下载源代码,又回到原点了)...,考虑到实际使用,看来源码编译安装还是不可替代的!所以吗,
yum安装,仅对一般使用者,对有扩展开发的还是不行!!
======FS1.10====== 源代码编译
======================
1、centos7.7 最小安装
2、FS的源代码编译基础环境,这里使用yum-builddep工具,基于FS的yum包依赖库批量安装,简单了很多:
yum install -y
https://files.freeswitch.org/repo/yum/centos-release/freeswitch-release-repo-0-1.noarch.rpm
epel-release yum-utils
yum-builddep -y freeswitch
yum install -y yum-plugin-ovl centos-release-scl
rpmdevtools git
yum install -y devtoolset-4-gcc*
scl enable devtoolset-4 'bash'
3、下面这个是对mod_av的补充,mod_av需要libavformat-dev,但centos没有,通过第三方yum库安装ffmpeg-devel包实现(yum的FS版本里面是没有mod_av、mod_b64、mod_png的,所以上面的安装也就没有):
rpm --import
http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh
http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
yum install -y ffmpeg-devel
4、开始安装:
cd /usr/local/src
git clone -b v1.10
https://github.com/signalwire/freeswitch.git
freeswitch
cd /usr/local/src/freeswitch
./bootstrap.sh -j
./configure --enable-portable-binary \
--prefix=/usr --localstatedir=/var --sysconfdir=/etc
\
--with-gnu-ld --with-python --with-erlang --with-openssl
\
--enable-core-odbc-support --enable-zrtp
make
make -j install
make -j cd-sounds-install
make -j cd-moh-install
5、OK,又回到了熟悉的状态,yum没有的模块都回来了
6、对FS1.10新添加的mariadb模块的编译安装:
cd
/usr/local/src/freeswitch/src/mod/databases/mod_mariadb
make
make install
================老版本安装小记========================
******************************
更新说明:freeswitch已经切换到新的版本周期(1.10.X),下面文字的说明都是针对1.8及1.6的版本,请注意!
基本来说,1.10.X版本已经可以yum安装,但yum安装会把各个模块都打成独立的包,而且默认安装的基本包里面会把一般你不用的都给默认安装了,如mod_signalwire
******************************
1、FS1.8 安装
FS 用yum在centos7.3无法安装,在centos7.1安装OK
(centos7.1可以yum安装,但安装后还是发现有缺失文件现象,折腾好多次了,其实还是编译安装靠谱些)
#这是centos7下面对 delta的补充安装,centos7需加上这个
yum provides '*/applydeltarpm'
yum install deltarpm
#需要erlang,对centos6和7都一样的,FS官方没有提这个,但如果没装就有部分模块会无法工作:(主要是ERlang和lua的模块,不要忘记erlang和lua也是FS的开发语言哦~)
wget
http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
rpm --import
http://packages.erlang-solutions.com/rpm/erlang_solutions.asc
yum install -y erlang lua*
#如果是yum安装,需要freeswitch的rpm支持,否则不需要
yum install -y
http://files.freeswitch.org/freeswitch-release-1-6.noarch.rpm
epel-release
#需要更多的支持环境,centos6和centos7是不同的,这下面的包在centos7下有些会找不到
yum install -y alsa-lib-devel autoconf automake bison
broadvoice-devel bzip2 curl-devel db-devel e2fsprogs-devel
flite-devel g722_1-devel gcc-c++ gdbm-devel gnutls-devel
ilbc2-devel ldns-devel libcodec2-devel libcurl-devel libedit-devel
libidn-devel libjpeg-devel libmemcached-devel libogg-devel
libsilk-devel libsndfile-devel libtheora-devel libtiff-devel
libtool libuuid-devel libvorbis-devel libxml2-devel lua-devel
lzo-devel mongo-c-driver-devel ncurses-devel net-snmp-devel
openssl-devel opus-devel pcre-devel perl perl-ExtUtils-Embed
pkgconfig portaudio-devel postgresql-devel python26-devel
python-devel soundtouch-devel speex-devel sqlite-devel
unbound-devel unixODBC-devel wget which yasm zlib-devel
yum install perl cpio curl curl-devel zlib-devel openssl-devel
expat-devel gettex-devel perl-devel build-essential tcl8.4 tk8.4
gettext -y
yum安装时可能会提示freeswitch的404错,是因为freeswitch已经停止了centos6的支持,不提供相关rpm文件了!----
如果这样,只能在 /etc/yum.repos.d 删除相关文件源定义,而后老老实实用源码编译安装 或
换centos7 了...
#centos7下支持环境安装,补充上面的(因为有些库在centos6和7的命名不同):
yum install -y python-devel gettext-devel tcl db4-devel tk
epel-release
#centos6的git版本过老,需要进行git升级,以拉取FS的源代码,不装yum的版本,因为那个版本也好老了:(这是为源码编译而进行的准备工作,yum安装不需要这个)
yum remove git
wget https://github.com/git/git/archive/master.tar.gz
tar -zxvf master.tar.gz
cd master
make configure
./configure --prefix=/usr/local/git
make && make install
ln -f /usr/local/git/bin/git /usr/bin/
git时提示ssl连接错误,则更新nss和curl:
yum update nss curl libcurl
补充说明,装上面的那么多东东,是因为直接装下面的会有若干个库加载不了,如果上面都装了下面就OK了(但已经装了好多好多东西是吧...
)
开始进入正式安装了:
==================下面是是yum方式,在centos7.1下成功,如果deltarpm没有安装,会导致有部分依赖库被跳过,fs程序运行异常,所以前面的安装要到位,否则下面安装是不会报错,系统跑起来就会经常莫名其妙出问题了)
yum install -y
http://files.freeswitch.org/freeswitch-release-1-8.noarch.rpm
epel-release
yum install -y freeswitch-config-vanilla freeswitch-lang-*
freeswitch-sounds-*
systemctl enable freeswitch
==================下面是编译方式(最好是用编译模式)
cd /usr/local/src
#这个是1.6生产环境版本,1.6已经过期,FS官方建议使用1.8
git clone -b v1.6
https://freeswitch.org/stash/scm/fs/freeswitch.git freeswitch
#这个是1.8生产环境版本
git clone -b v1.8
https://freeswitch.org/stash/scm/fs/freeswitch.git freeswitch
#这个是最新开发版:
git clone https://freeswitch.org/stash/scm/fs/freeswitch.git
freeswitch
cd /usr/local/src/freeswitch
./bootstrap.sh -j
./configure -C --enable-portable-binary --enable-sctp\
--prefix=/usr
--localstatedir=/var --sysconfdir=/etc \
--with-gnu-ld
--with-python --with-erlang --with-openssl \
--enable-core-odbc-support --enable-zrtp \
--enable-core-pgsql-support \
--enable-static-v8
--disable-parallel-build-v8
make -j (注:出现等待未结束的进程而死锁时,不用j参数重新编译)
报错 cJSON.c #pragma GCC diag.. 注释掉这几行 或 更新GCC
======centos6.8为GCC4.4.7,下面是更新gcc
wget http://people.centos.org/tru/devtools-2/devtools-2.repo
mv devtools-2.repo /etc/yum.repos.d
yum install devtoolset-2-gcc devtoolset-2-binutils
devtoolset-2-gcc-c++
mv /usr/bin/gcc /usr/bin/gcc-4.4.7
mv /usr/bin/g++ /usr/bin/g++-4.4.7
mv /usr/bin/c++ /usr/bin/c++-4.4.7
ln -s /opt/rh/devtoolset-2/root/usr/bin/gcc /usr/bin/gcc
ln -s /opt/rh/devtoolset-2/root/usr/bin/c++ /usr/bin/c++
ln -s /opt/rh/devtoolset-2/root/usr/bin/g++ /usr/bin/g++
gcc --version
报错/usr/local/src/freeswitch/libs/sofia-sip/libsofia-sip-ua/tport
tport_type_sctp.c:206:10: error: variable 'initmsg' has
initializer but incomplete type
=======修改代码struct sctp_initmsg initmsg = { 0
};为
typedef struct {
uint16_t sinit_num_ostreams;
uint16_t sinit_max_instreams;
uint16_t sinit_max_attempts;
uint16_t sinit_max_init_timeo;
} sctp_initmsg;
#define SCTP_INITMSG 2
sctp_initmsg initmsg = { 0 };
(注,这是我的原创修改,centos6下编译都会报这个错误的,我是化了很多时间才从linuxcore源代码的头文件定义中找到了相关的内容而后修改了这里的代码,错误的根本原因其实还就是因为centos6实在太老了...)
报错You must install libopus-dev to build mod_opus. Stop. 但确实已经
yum 安装 libopus-dev 或 opus-devel 后依然报错:
========删除opus,编译安装新版
yum remove opus
wget https://archive.mozilla.org/pub/opus/opus-1.3.1.tar.gz
tar xvfz opus-1.3.1.tar.gz
cd opus-1.3.1
./configure
make
make install
cp /usr/lib/pkgconfig/opus.* /usr/lib64/pkgconfig/
cd /usr/local/src/freeswitch
make clean
./configure ..... 重新配置以重新生成make文件
make
报错You must install libks to build mod_signalwire. 或
You must install signalwire-client-c:
========最简单就是在modules.conf.xml里面取消mod_signalwire.
make -j install
make -j cd-sounds-install
make -j cd-moh-install
+ Install non english sounds:
replace XX with language
+
+ (ru : Russian)
(fr : French)
+
+
------------------------------------
+
+
make cd-sounds-XX-install
+
+
make uhd-sounds-XX-install
+
+
make hd-sounds-XX-install
+
+
make sounds-XX-install
+
+
+
+ Upgrade to latest:
+
+
----------------------------------
+
+
make current
+
+
+
+ Rebuild all:
+
+
----------------------------------
+
+
make sure
+
+
+
+ Install/Re-install default
config: +
+
----------------------------------
+
+
make samples
+
=============================下面是运行
创建pid目录,因为下面是用普通用户运行FS,FS无法创建运行目录:
mkdir /var/run/freeswitch
启动: freeswitch //可用参数 -log /var/log/freeswitch -conf
/etc/freeswitch -db /usr/share/freeswitch
useradd freeswitch -g daemon -s /sbin/nologin -M
后台运行:freeswitch -u freeswitch -g daemon -nc -rp
修改权限,用freeswitch这个用户运行:
chown -R freeswitch:daemon /etc/freeswitch
chown -R freeswitch:daemon /var/lib/freeswitch
chown -R freeswitch:daemon /usr/share/freeswitch
chown -R freeswitch:daemon /var/log/freeswitch
chown -R freeswitch:daemon /var/run/freeswitch
下面是安装配置php7.2、nginx和mysql(基础安装):
这是centos7的:
rpm -Uvh
https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh
https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum -y install php72w php72w-common php72w-embedded php72w-fpm
php72w-gd php72w-mbstring php72w-mysql php72w-opcache php72w-pdo
php72w-xml
这是centos6的:
rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm
rpm -Uvh
http://mirrors.ustc.edu.cn/epel/epel-release-latest-6.noarch.rpm
yum -y install php71w php71w-common php71w-embedded php71w-fpm
php71w-gd php71w-mbstring php71w-mysqlnd php71w-opcache php71w-pdo
php71w-xml
yum -y install nginx mariadb mariadb-server
service nginx start #启动
chkconfig nginx on #设为开机启动
vi /etc/nginx/nginx.conf
==============
location / {
root /var/www;
index index.html index.php;
}
location ~ \.php$ {
root /var/www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME
$document_root$fastcgi_script_name;
include
fastcgi_params;
}
================
vi /etc/php-fpm.d/www.conf
=======修改user和group
user = freeswitch
group = daemon
==========================
service php-fpm start #启动
chkconfig php-fpm on #设为开机启动
/usr/sbin/nginx -s reload #修改配置文件后,平滑启动nginx
service mariadb start
chkconfig mariadb on
mysql_secure_installation #初始数据库安装
vi /etc/my.cnf
===========在[mysqld]标签下添加
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
===============================
vi /etc/my.cnf.d/client.cnf
==============在[client]中添加
default-character-set=utf8
==============================
vi /etc/my.cnf.d/mysql-clients.cnf
=====================在[mysql]中添加
default-character-set=utf8
===============================
##如果nginx和php运行发现错误,运行 getenforce 如果结果为enforcing 那就是开启了
selinux,需要设置:
##临时关闭selinux: setenforce 0
##永久关闭:vi /etc/selinux/config 设置disabled
同步的权限:
1、web的user和group 修改为 freeswich daemon
2、chown -R freeswitch:daemon /var/lib/php
3、chown -R freeswitch:daemon /var/www (web的根路径)
=============================
编译php的命令:(线程安全模式,apache2.4下)
wget https://www.php.net/distributions/php-7.3.5.tar.bz2
tar xfv wget
https://www.php.net/distributions/php-7.3.5.tar.bz2
cd php-7.3.5.tar.bz2
./configure --with-apxs2=/usr/local/httpd2.4.39/bin/apxs
--enable-mysqlnd --with-mysqli=mysqlnd --with-openssl
--with-pdo-mysql=mysqlnd --enable-mbstring --with-freetype-dir
--with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr
--enable-xml --with-curl --enable-opcache --enable-sockets
--enable-maintainer-zts
make && make install
cp php.ini-production /usr/local/lib/php.ini
需注意,php.ini中需要启用opcache模块,添加:
zend_extension=/usr/local/lib/php/extensions/no-debug-zts-20180731/opcache.so
修改httpd.conf,添加:
SetHandler application/x-httpd-php
/usr/local/httpd2.4.39/bin/apachectl restart
编译时出现错误 pthread_sigmask@@GLIBC_2.2.5' is defined in DSO
/lib64/libpthread.so.0 so try adding it to the ..
vi /etc/ld.so.conf 添加一行:/lib64
make clean 后重新编译
=========Freeswitch
使用相关说明====================
客户端:fs_cli -rRS
设置自动启动服务:
====================================
=========仅centos6下,在centos7下无效
cd /etc/init.d
touch freeswitch
chmod a+x freeswitch
vi freeswitch (====复制内包含的内容====)
================
#! /bin/sh
#
# freeswitch: Starts the freeswitch
Daemon
#
# chkconfig: 345 96 02
# processname: freeswitch
# description: Freeswitch fedora init script \
# config:
# Author: gled
# Source function library.
. /etc/init.d/functions
. /etc/sysconfig/network
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC='FreeSwitch Voice Switching System'
NAME=freeswitch
DAEMON=/usr/bin/$NAME
PIDFILE=/var/run/freeswitch/$NAME.pid
do_setlimits() {
ulimit -c unlimited
ulimit -d unlimited
ulimit -f unlimited
ulimit -i unlimited
ulimit -n 999999
ulimit -q unlimited
ulimit -u unlimited
ulimit -v unlimited
ulimit -x unlimited
ulimit -s 244
ulimit -l unlimited
return 0
}
base=${0##*/}
do_start() {
do_setlimits
$DAEMON -nc
RETVAL=$?
if [ $RETVAL = 0 ]; then
success $'$base startup'
else
failure $'$base startup'
fi
echo
return $RETVAL
}
do_stop() {
$DAEMON -stop
RETVAL=$?
[ $RETVAL = 0 ] && success $'$base shutdown' || failure
$'$base shutdown'
rm -f $LOCKFILE
echo
return $RETVAL
}
# See how we were called.
case '$1' in
start)
do_start
;;
stop)
do_stop
;;
restart)
do_stop
echo 'Waiting for daemon to exit...'
sleep 5
do_start
;;
*)
echo $'Usage: $0 {start|stop}'
exit 2
;;
esac
exit $RETVAL
==============================
下面是添加系统服务,以自动启动:
chkconfig --add freeswitch
chkconfig freeswitch on
#设置自动启动服务:===================centos7下面自启动
vi /usr/lib/systemd/system/freeswitch.service
=================
[Unit]
Description=FreeSWITCH
After=syslog.target network.target
After=mariadb.service
[Service]
Type=forking
PIDFile=/var/run/freeswitch/freeswitch.pid
User=root
Group=root
WorkingDirectory=/usr
#ExecStart=/usr/bin/freeswitch -u freeswitch -g daemon -nc
ExecStart=/usr/bin/fs.sh
ExecReload=/usr/bin/kill -HUP $MAINPID
ExecStop=/usr/bin/killall -9 freeswitch
[Install]
WantedBy=multi-user.target
======================
vi /usr/bin/fs.sh
=================
#!/bin/sh
mkdir /run/freeswitch
chown -R freeswitch:daemon /run/freeswitch
ulimit -c unlimited
ulimit -d unlimited
ulimit -f unlimited
ulimit -i unlimited
ulimit -n 999999
ulimit -q unlimited
ulimit -u unlimited
ulimit -v unlimited
ulimit -x unlimited
ulimit -s 244
ulimit -l unlimited
freeswitch -u freeswitch -g daemon -nc
======================
下面是添加系统服务,以自动启动:
chmod +x /usr/bin/fs.sh
systemctl daemon-reload
systemctl enable freeswitch.service
systemctl start freeswitch.service
设置防火墙Centos7:
firewall-cmd --permanent --zone=public --add-port=1719/udp
firewall-cmd --permanent --zone=public --add-port=1720/tcp
firewall-cmd --permanent --zone=public --add-port=3478/udp
firewall-cmd --permanent --zone=public --add-port=3479/udp
firewall-cmd --permanent --zone=public --add-port=5002/tcp
firewall-cmd --permanent --zone=public --add-port=5003/udp
firewall-cmd --permanent --zone=public --add-port=5060/udp
firewall-cmd --permanent --zone=public --add-port=5060/tcp
firewall-cmd --permanent --zone=public --add-port=5070/tcp
firewall-cmd --permanent --zone=public --add-port=5070/udp
firewall-cmd --permanent --zone=public --add-port=5080/udp
firewall-cmd --permanent --zone=public --add-port=5080/tcp
firewall-cmd --permanent --zone=public --add-port=8021/tcp
firewall-cmd --permanent --zone=public --add-port=5066/tcp
firewall-cmd --permanent --zone=public --add-port=7443/tcp
firewall-cmd --permanent --zone=public --add-port=16384-32768/udp
firewall-cmd --reload
设置防火墙Centos6:
iptables -A INPUT -p udp --dport 1719 -j ACCEPT
iptables -A INPUT -p tcp --dport 1720 -j ACCEPT
iptables -A INPUT -p udp --dport 3478 -j ACCEPT
iptables -A INPUT -p udp --dport 3479 -j ACCEPT
iptables -A INPUT -p tcp --dport 5002 -j ACCEPT
iptables -A INPUT -p udp --dport 5003 -j ACCEPT
iptables -A INPUT -p tcp --dport 5060 -j ACCEPT
iptables -A INPUT -p udp --dport 5060 -j ACCEPT
iptables -A INPUT -p tcp --dport 5070 -j ACCEPT
iptables -A INPUT -p udp --dport 5070 -j ACCEPT
iptables -A INPUT -p tcp --dport 5080 -j ACCEPT
iptables -A INPUT -p udp --dport 5080 -j ACCEPT
iptables -A INPUT -p tcp --dport 8021 -j ACCEPT
iptables -A INPUT -p tcp --dport 5066 -j ACCEPT
iptables -A INPUT -p tcp --dport 7443 -j ACCEPT
iptables -A INPUT -p udp --dport 16384:32768 -j
ACCEPT
/etc/rc.d/init.d/iptables save
service iptables restart
fs命令测试(在FS控制台或客户端运行):
FS> sofia status profile internal (显示整体信息,含多少用户已注册;)
FS> originate user/1000 &echo (拨打1000并执行echo程序)
FS> originate sofia/profile/internal/1000 9999
(相当于在软电话1000上拨打9999)
FS> originate sofia/profile/internal/1000 9999 XML default
(同上)
FS> sofia status profile internal reg 查看注册用户
编译安装后的系统目录:
prefix:
/usr
exec_prefix:
/usr
bindir:
${exec_prefix}/bin
confdir:
/etc/freeswitch
libdir:
/usr/lib
datadir:
/usr/share/freeswitch
localstatedir:
/var/lib/freeswitch
includedir:
/usr/include/freeswitch
certsdir:
/etc/freeswitch/tls
dbdir:
/var/lib/freeswitch/db
grammardir:
/usr/share/freeswitch/grammar
htdocsdir:
/usr/share/freeswitch/htdocs
fontsdir:
/usr/share/freeswitch/fonts
logfiledir:
/var/log/freeswitch
/usr/local/freeswitch/log
modulesdir:
/usr/lib/freeswitch/mod
pkgconfigdir:
/usr/lib/pkgconfig
recordingsdir:
/var/lib/freeswitch/recordings
imagesdir:
/var/lib/freeswitch/images
runtimedir:
/var/run/freeswitch
scriptdir:
/usr/share/freeswitch/scripts
soundsdir:
/usr/share/freeswitch/sounds
storagedir:
/var/lib/freeswitch/storage
cachedir:
/var/cache/freeswitch
------------------
测试号码 | 说明
------------------
9664 | 保持音乐
9196 | echo,回音测试
9195 | echo,回音测试,延迟5秒
9197 | milliwatte
extension,铃音生成
9198 | TGML 铃音生成示例
5000 | 示例IVR
4000 | 听取语音信箱
33xx |
电话会议,48K(其中xx可为00-99,下同)
32xx | 电话会议,32K
31xx | 电话会议,16K
30xx | 电话会议,8K
2000-2002 | 呼叫组
1000-1019 | 默认分机号
'F1' value='help'
'F2' value='status'
'F3' value='show channels'
'F4' value='show calls'
'F5' value='sofia status'
'F6' value='reloadxml'
'F7' value='console loglevel 0'
'F8' value='console loglevel 7'
'F9' value='sofia status profile internal'
'F10' value='sofia profile internal siptrace on'
'F11' value='sofia profile internal siptrace off'
'F12' value='version'
3、配置管理
=============!!下面配置文件项都少了第一个尖括号,注意!!!=====================
**设置语音编码
vars.xml可以设置系统默认使用的编码,为全局设置,下面两个变量,一个表示呼入,一个表示呼出。
默认没有用729,所以729编码通讯会报错,需启用
X-PRE-PROCESS cmd='set'
data='global_codec_prefs=G722,G729,G723,PCMA,PCMU,GSM'/>
X-PRE-PROCESS cmd='set'
data='outbound_codec_prefs=G722,G729,G723,PCMA,PCMU,GSM'/>
==================================
**设置中文语音
复制中文语音到 /usr/share/freeswitch/sounds,语音目录树为 zh/cn/yy/...
修改vars.xml,屏蔽英文音频资源的路径设置,添加(注意中文音频资源的路径设置,这是举例而已)
X-PRE-PROCESS cmd='set'
data='sound_prefix=$${sounds_dir}/zh/cn/yy'/>
X-PRE-PROCESS cmd='set'
data='default_language=zh'/>
X-PRE-PROCESS cmd='set' data='default_dialect=cn'/>
X-PRE-PROCESS cmd='set' data='default_voice=yy'/>
修改语音配置:
cd /etc/freeswitch/lang
cp -fr en zh
cd zh
mv en.xml zh.xml
vi zh.xml
language name='zh' say-module='zh'
sound-prefix='$${sounds_dir}/zh/cn/yy' tts-engine='cepstral'
tts-voice='yy'>
vi /etc/freeswitch/freeswitch.xml
section name='languages' `节点中增加一行
X-PRE-PROCESS cmd='include' data='lang/zh/*.xml'/>
cd /usr/local/src/freeswitch/src/mod/say/mod_say_zh
make && make install
FS> load mod _say_zh 动态加载
永久加载:/etc/freeswitch/autoload_configs/modules.conf.xml 中 load
module='mod_say_zh'/>前的注释去掉
==================================
**修改ivr
根据实际来 修改 /etc/freeswitch/ivr_menus ,配置ivr语音:
greet-long为进入ivr后首先播放的语音信息,若在timeout
时间内用户未输入信息,系统会播放greet-short信息,若用户一直未输入信息,系统在播放max-timeouts-1次greet-short语音后关闭该ivr。如果用户在timeout时间内输入了错误信息,系统会播放invalid-sound语音
=============================================================
**允许外部IP连接到event_socket,配置ESL的相关信息
vi /etc/freeswitch/autoload_configs/event_socket.conf.xml
这里是允许任意IP
configuration name='event_socket.conf' description='Socket
Client'>
settings>
param name='nat-map' value='false'/>
param name='listen-ip' value='::'/>
param name='listen-port' value='8021'/>
param name='password' value='newpassword'/>
param name='apply-inbound-acl'
value='any_v4.auto'/>
!---->
!---->
/settings>
/configuration>
或者========================
1. event_socket.conf.xml
加入允许的域,默认是domains,可以是自己的域:
param name='apply-inbound-acl' value='domains'/>
2. acl.conf.xml 按域加入ip地址或ip地址段:
list name='domains' default='deny'>
node type='allow' domain='$${domain}'/>
node type='allow' cidr='192.168.1.0/24'/>
node type='allow' cidr='127.0.0.1/24'/>
/list>
注:如果是要外部ip连接FS进行通话,直接让外部ip使用external端口即可,无需修改任何配置
=============================================================
**修改fs使用mysql
安装mysql:
yum install mysql-server
/usr/bin/mysql_secure_installation
chkconfig mysqld on
cd /usr
/usr/bin/mysqld_safe &
service mysqld start
mysql 修改默认数据引擎到
innodb,提高log文件大小,在centos6里面用新的innodb(ha_innodb_plugin,默认的innodb在centos6里面不可用):
[mysqld]
ignore-builtin-innodb
plugin-load=innodb=ha_innodb_plugin.so
# Disabling symbolic-links is recommended to prevent assorted
security risks
symbolic-links=0
default-storage-engine=INNODB
innodb_log_file_size = 512M
安装odbc:
yum install unixODBC-devel mysql-connector-odbc
===修改 /etc/odbc.ini,添加dsn,如freeswitch,注意路径和用户账号
[freeswitch]
Driver =
/usr/lib64/libmyodbc5.so
SERVER = localhost
PORT = 3306
DATABASE = freeswitch
USER = root
PASSWORD = limaoxiang
OPTION = 67108864
===修改 /etc/odbcinst.ini 检测驱动路径是否正确
=== OPTION = 67108864 即打开 FLAG_MULTI_STATEMENTS
(如果是windows,需要在设置dsn时启用 MULTI_STATEMENTS)
===isql -v freeswitch
=== 在/etc/freeswitch grep -ir dsn
而后修改相应的dsn配置,都可以修改为mysql:
vi autoload_configs/db.conf.xml
(修改odbc-dsn,后面的value部分修改为实际内容,如
value='freeswitch:root:limaoxiang' )、
vi autoload_configs/switch.conf.xml
(修改core-db-dsn,添加odbc-dsn)、
vi autoload_configs/voicemail.conf.xml
(修改odbc-dsn)、
vi autoload_configs/callcenter.conf.xml
(修改odbc-dsn)、
vi sip_profiles/internal.xml
(修改odbc-dsn)、
vi sip_profiles/internal-ipv6.xml
(修改odbc-dsn)、
vi autoload_configs/cidlookup.conf.xml
vi autoload_configs/nibblebill.conf.xml
vi autoload_configs/directory.conf.xml
vi autoload_configs/lcr.conf.xml
vi autoload_configs/easyroute.conf.xml
vi jingle_profiles/server.xml
vi skinny_profiles/internal.xml
每次修改xml后都需要重新在freeswitch控制台或者fs_cli下执行reloadxml,使得修改生效
====第一次启动,会自动创建数据库;多启动几次,一次可能不会全部创建完,尤其是使用了dsn后,需注意,如果数据库用的utf8格式,创建数据库会出错,最好用默认数据字符集!!必须开启MULTI_STATEMENTS
======================================================
|**CDR 存放到mysql中
cd
/usr/local/src/freeswitch/src/mod/event_handlers/mod_odbc_cdr
make && make install
配置odbc_cdr.conf.xml:
vi
/etc/freeswitch/autoload_configs/odbc_cdr.conf.xml
configuration name='odbc_cdr.conf' description='ODBC CDR
Configuration'>
settings>
param name='odbc-dsn'
value='freeswitch:root:limaoxiang'/>
!---->
!-- global value can be 'a-leg', 'b-leg', 'both'
(default is 'both') -->
param name='log-leg' value='both'/>
!-- value can be 'always', 'never', 'on-db-fail'
-->
param name='write-csv'
value='on-db-fail'/>
!-- location to store csv copy of CDR -->
param name='csv-path'
value='/var/log/freeswitch/odbc_cdr'/>
!-- if 'csv-path-on-fail' is set, failed INSERTs
will be placed here as CSV files otherwise they will be placed in
'csv-path' -->
param name='csv-path-on-fail'
value='/var/log/freeswitch/odbc_cdr/failed'/>
!-- dump SQL statement after leg ends -->
param name='debug-sql' value='false'/>
/settings>
tables>
!-- only a-legs will be inserted into this table
-->
table name='cdr_table_a_leg'
log-leg='a-leg'>
field name='CallId'
chan-var-name='call_uuid'/>
field name='orig_id'
chan-var-name='uuid'/>
field name='term_id'
chan-var-name='sip_call_id'/>
field name='ClientId'
chan-var-name='uuid'/>
field name='IP'
chan-var-name='sip_network_ip'/>
field name='IPInternal'
chan-var-name='sip_via_host'/>
field name='CODEC'
chan-var-name='read_codec'/>
field name='directGateway'
chan-var-name='sip_req_host'/>
field name='redirectGateway'
chan-var-name='sip_redirect_contact_host_0'/>
field name='CallerID'
chan-var-name='sip_from_user'/>
field name='TelNumber'
chan-var-name='sip_req_user'/>
field name='TelNumberFull'
chan-var-name='sip_to_user'/>
field name='sip_endpoint_disposition'
chan-var-name='endpoint_disposition'/>
field name='sip_current_application'
chan-var-name='current_application'/>
/table>
!-- only b-legs will be inserted into this table
-->
table name='cdr_table_b_leg'
log-leg='b-leg'>
field name='CallId'
chan-var-name='call_uuid'/>
field name='orig_id'
chan-var-name='uuid'/>
field name='term_id'
chan-var-name='sip_call_id'/>
field name='ClientId'
chan-var-name='uuid'/>
field name='IP'
chan-var-name='sip_network_ip'/>
field name='IPInternal'
chan-var-name='sip_via_host'/>
field name='CODEC'
chan-var-name='read_codec'/>
field name='directGateway'
chan-var-name='sip_req_host'/>
field name='redirectGateway'
chan-var-name='sip_redirect_contact_host_0'/>
field name='CallerID'
chan-var-name='sip_from_user'/>
field name='TelNumber'
chan-var-name='sip_req_user'/>
field name='TelNumberFull'
chan-var-name='sip_to_user'/>
field name='sip_endpoint_disposition'
chan-var-name='endpoint_disposition'/>
field name='sip_current_application'
chan-var-name='current_application'/>
/table>
!-- both legs will be inserted into this table
-->
table name='cdr_table_both'>
field name='CallId'
chan-var-name='uuid'/>
field name='orig_id'
chan-var-name='Caller-Unique-ID'/>
field name='TEST_id'
chan-var-name='sip_from_uri'/>
/table>
/tables>
/configuration>
FS> load mod_odbc_cdr 动态加载
永久加载:/etc/freeswitch/autoload_configs/modules.conf.xml 中添加
利用mod_odbc_query 可以实现提取数据库的内容,动态配置fs,如动态路由
利用mod_callcenter 实现呼叫中心功能,如坐席、队列、自动分配
================多域===========================
internal配置中必须禁用:
force-register-domain
force-subscription-domain
force-register-db-domain
================拨号计划========================
== 发送180 ring,开始振铃
== 暂停2秒,承上 这样才听得到振铃的声音,启下 让听2秒回铃音后回复200
== 发送200 OK 回应,摘机应答
== 前如有answer,再发200
OK并带SDP建立媒体通道播放。如没answer,则发送183,带SDP建立媒体通道,这时,播放媒体内容就成Early
Media
== 发送 bye 挂机
==设置回铃音;准备给A-leg播放,播放前会发送183进行媒体协商;因为不确定播放时间,用set,等待后继动作
==桥接;如果桥接时B-leg给180,因为前面ringback的存在,会获得183回应
== 发送180 振铃
== 桥接;忽略B-leg的早期媒体(也就是183),回应其180
== 发送180 振铃
== 发送媒体,这两句就是典型的 pre_answer(播放彩铃)