# docker一键运行阿里云SDM(MRCP)和FreeSWITCH ## 版本 FreeSWITCH 1.10.10 SDM单机版(支持100路asr并发+100路tts并发) ## 系统要求 linux docker docker compose (安装docker engine时会自动安装好) lua5.1 luarocks jq openssl ## 业务要求 在阿里云开通“智能语音交互”业务,完成创建项目并生成AccessKeyID和AccessKeySecret,需要得到AccessKeyID、AccessKeySecret和appkey这几个参数(注意AccessKey要具有使用智能语音交互的权限)。 ## 使用方法 初次使用时,当确定满足系统要求和业务要求的情况下,直接执行 ```sh ./install.sh ``` 如果没有执行权限就手动加一下`chmod +x install.sh`。 安装过程中会要求填入阿里云的AccessKeyID、AccessKeySecret、appkey参数,这些参数以后可以在`sdm/data/nls-cloud-sdm/conf/`中的配置文件中修改。 安装过程会随机生成FreeSWITCH的ESL密码和默认SIP密码,这些参数以后可以在`switch/conf/`中的配置文件中修改。 安装程序会自动启动容器。 ### 进入fs_cli ```sh ./fs_cli.sh ``` 如果没有执行权限就手动加一下`chmod +x fs_cli.sh`。 如果执行后无法进入请检查: - 检查switch容器是否启动; - 检查.fs_cli_conf中的密码和端口是否与event_socket.conf.xml中一致; - 也有可能是FreeSWITCH服务还没有完全启动好。 ### 重启服务 无论修改sdm配置还是switch配置,都得在服务重启后才会生效(fs_cli中也有reloadxml等重载配置的命令) ```sh # 重启sdm和switch ./restart.sh # 重启sdm ./restart.sh sdm # 重启switch ./restart.sh switch ``` > 在switch/scripts中写的lua脚本修改后不需要重启服务就能生效。 ## 默认端口 这个包完全修改了FreeSWITCH的默认端口号,具体如下: | 业务 | 端口号 | |---|---| | internal_sip_port | 62260 | | internal_tls_port | 62261 | | external_sip_port | 62280 | | external_tls_port | 62281 | | ws-binding | 62266 | | wss-binding | 62243 | | event_socket | 62221 | | rtp-start-port | 30000 | | rtp-end-port | 39999 | | (mrcp)rtp-port-min | 20000 | | (mrcp)rtp-port-max | 29999 | 除了FreeSWITCH外,SDM也是以host模式启动,其占用的端口都是阿里云出厂时的默认值: | 业务 | 端口号 | |---|---| | SIP | 7010 | | MRCP | 1544、1554 | | RTP | 10000 - 20000 | ## 测试演示 ### 分机注册 容器启动后,通过SIP端口使用1001-1019分机号和安装时生成的默认SIP密码,应该可以正确注册成功。 ### 回声演示 分机注册成功后,用分机呼叫9196,应该可以启动回声应答(你说什么它同时给你放什么)。 ### TTS演示 进入fs_cli,执行下面的命令 ```sh bgapi originate user/1001 &lua(demo/tts.lua) ``` 1001应该可以接到电话,电话接起来后可以听到“你好,我是机器人XXX,很高兴认识你……”。 ### ASR演示 进入fs_cli,执行下面的命令 ```sh bgapi originate user/1001 &lua(demo/asr.lua) ``` 1001应该可以接到电话,电话接起来后可以跟机器人做“复读游戏”,你说一句,它用asr识别后再用tts给你复读一句。 > 如果asr.lua执行出错,请按照`switch/scripts/demo/asr.lua`中的注释安装lua依赖包再试试。 ## 开发建议 请不要把业务代码提交到这个仓库里来,建议你把仓库接到你的业务目录中后直接删除.git目录,让你的业务仓库接管后面的代码管理工作。 安装成功后删除switch/sounds/sounds.tar.bz2文件可以节省一点磁盘空间。