event socket创建过程

usr/local/freeswitch/bin/freeswitch 运行freeswitch/media/sf_share/freeswitch-1.6.20 文件安装目录

外连

1. nc -l -k localhost 8040 启动监听
2. nc localhost 8040 开启终端监听
3. ctrl+c退出B终端,电话拨打1234,链接到8040,
4. 回到A终端输入connect然后打两下回车,会出现Event-Name: CHANNEL_DATACore-UUID: 5ed01200-5c09-11e9-8ae3-6733192b29d4...
5. 测试播放一段音乐sendmsgcall-command:executeexecute-app-name:playbackexecute-app-arg:local_stream://moh
6. 结束,把上面得playback改为hangup再发一遍,电话就挂断了

内连

freeswitch启动后会启动一个ecventsocket tcp server,ip,端口和密码都可以在conf/autoloadconfigs/eventsocket.conf.xml 中配置

1. 使用nc localhost 8021链接freeswitch,会出现Content-Type: auth/request
2. 输入 “auth ClueCon”按两下回车,显示以下表示成功Content-Type: command/replyReply-Text: +OK accepted
3. 可以使用命令控制freeswitch1. api version 查看freeswitch版本2. api status   查看状态3. api sofia status 查看sofia状态4. event plain ALL订阅所有事件5. 订阅某一个事件event plain <事件名称>event plain CHANNEL_CREATE

event socket命令

1. auth <密码> 第一个需要发送得命令,用于向freeswitch认证,例: auth ClueCon
2. api <command> <args> 其中command和args分别是freeswitch实际得命令和参数
3. bgapi <command> <args> api执行时间比较长,有一段时间会得不到响应,可以使用bgapi将命令放到后面执行;1. 会建立一个任务(job),并返回job-UUID;2. 执行完成后fs会产生一个BACKGROUND_JOB事件,事件中带了job-UUID和命令执行结果3. fs允许自己提供job-UUID(要保证全局唯一)4. linger和nolinger1. 当channel挂断时,fs会断开与socket得连接,可能有一些channel相关得事件还没有发送过去避免这种“丢失”事件,tcp server告诉fs在断开之后逗留(“linger”)一段时间,等待把所有事件发完linger <seconds> 延时10秒 linger 102. linger开启后悔了,使用nolinger命令撤销,没有参数
5. event [type] <events> 1. event用于订阅事件,type(时间类型)有plain、json、xml三种,默认plain(纯文本)2. events可以指定事件得名字,ALL表示订阅全部事件,事件之间用空格隔开3. 订阅CUSTOM事件(自定义事件),它具体的类型是在Subclass中指定得,如指定订阅Subclass为"sofia::register"事件:1. event plain CUSTOM sofia::register2. 可以一次订阅多个 event plain CUSTOM sofia::register sofia::unregister3. 使用多个event命令混合订阅event plain CHANNEL_ANSWER CUSTOM sofia::register sofia::unregister4. 参数中一旦出现CUSTOM后面就不能跟普通得事件类型了5. CUSTOM事件只能逐一订阅,不能使用ALL6. HEARTBEAT是一个特殊事件,每20秒产生一次,用于回报fs得当前状态,当20秒没有收到fs事件,可以认为网络或fs异常
6. myevents1. 主要用于outbound模式,在outbound模式中,外部得TCP server可以通过myevents订阅与该channel相关得所有事件2. 使用格式myevents <type><UUID>myeventsmyevents jsonmyevents xmlmyevents 289dwd-af35-47de-9a58-754191454d0d2
7. divert_events1. 作为InputCallback产生的,当channel通过setInputCallback()函数安装了相关的回调函数并遇到某些事件,如收到用户按键(DTMF)或语音识别的结果(DETECTED_SPEECH),产生InputCallback时间,默认是在嵌入式脚本的回调函数捕捉,通过使用diver_events,可以将这些时间转发到Event Socket,外部程序中也能收到相关事件
8. filter1. filter用于安装一个过滤器,只做“虑入”,把符合条件的过滤进来,可以同时使用多个过滤器2. 格式:filter <EventHeader> <ValueToFilter>3. 例如:订阅所有事件,只接受匹配主叫号码1001事件event plain allevent filter Caller-Caller-ID-Name 10014. 取消过滤器先接受三个过滤器event plain allfilter Unique-id uuid1filter Unique-id uuid2filter Unique-id uuid3filter delete  取消所有的过滤器filter delete Unique-ID uuid2  取消与uuid2相关的过滤器liru
9. nixevent与noevent1. nixevent与event相反,是取消订阅事件nixevent CHANNEL_CREATEnixevent all2. noevent相当于“nixevent all”取消所有event订阅
10. log订阅日志1. 格式:log <level>1. level包含(数目越高越详细):0-CONSOLE1-ALERT2-CRIT3-ERR4-WARNING5-NOTICE6-INFO7-DEBUG2. log info 或 log 6
11. nolog log的反义词,关闭使用log命令订阅的日志
12. exit 告诉fs关闭socket连接
13. sendevent1. 通过sendevent可以向fs的事件系统发送事件2. 格式:sendevent <event-name>例如发送MESSAGE消息sendevent SEND_MESSAGEprofile: internaluser: 1002host: 192.168.0.126content-type: text/plaincontent-length: 10hello 1002

使用ESL开发

创建独立的ESL应用

1.创建目录和分离esl源文件1. 创建一个myesl目录,然后创建一个myesl.c的文件。2. 直接把fs源码目录下的testclient.c中的内容原样复制过来。3. 将/usr/local/freeswitch/lib目录下的libesl.a 拷贝到源码/media/sf_share/freeswitch-1.6.20/libs/esl目录下4. 创建一个MakeFile文件,保存在myesl.c相同的目录,内容如下ESLPATH = /media/sf_share/freeswitch-1.6.20/libs/eslCFLAGS  = -I$(ESLPATH)/src/includeLIBESL  = $(ESLPATH)/.libs/libesl.a#LIBESL  = $(ESLPATH)/libesl.aall: myesl charge acdmyesl: myesl.cgcc $(CFLAGS) -o myesl myesl.c $(LIBESL) -ldl -lm -lpthread4. 然后make编译生成myesl运行文件,然后执行1. make myesl.c 编译2. ./myesl      执行
2.在https://github.com/seven1240/myesl中有ESL书写的案例1. ESL空中充值服务charge.c2. acd呼叫中心  acd.c3. inbuound模式实现IVR  icharge.c步骤:1. 编辑charge.c等案例文件,在main函数中设置连接的地址为:“127.0.0.1”,端口号为8021。2. 修改Makefeile如下ESLPATH = /media/sf_share/freeswitch-1.6.20/libs/eslCFLAGS  = -I$(ESLPATH)/src/includeLIBESL  = $(ESLPATH)/.libs/libesl.aall: myesl charge acdmyesl: myesl.cgcc $(CFLAGS) -o myesl myesl.c $(LIBESL) -ldl -lm -lpthreadcharge: charge.cgcc $(CFLAGS) -o charge charge.c $(LIBESL) -ldl -lm -lpthread acd: acd.cgcc $(CFLAGS) -o acd acd.c $(LIBESL) -ldl -lm -lpthread3. 在myesl目录下make编译,会执行all后面的所有的.c文件,生成对应的可执行文件4. 配置freeswitch设置连接1. vi ../autoload_configs/event_socket.conf.xml2. 默认的监听地址配置<param name="listen-ip" value="192.168.0.126"/>3. 去掉下面的注释<!-- <param name="apply-inbound-acl" value="lan"/> -->4. freeswitch中重启mod_event_socket模块5. diaplan中添加socket<!--eventsockt外连配置--><extension name="socket"><condition field="destination_number" expression="^12345$"><action application="socket" data="127.0.0.1:8040 async full"/></condition></extension>5. 执行可执行文件,设置监听6. 手机拨打12345建立连接,执行esl内部操作
3.java  esl_client的使用配置下载地址:https://github.com/esl-client/esl-client1. 下载项目到本地2. 复制项目的src文件到IntelliJ Idea的gradle项目目录下3. 修改idea的sources->language level选择84. IDEA Error:java: Compilation failed: internal java compiler error错误解决办法:File-->Setting...-->Build,Execution,Deployment-->Compiler-->Java Compiler 设置相应Module的target bytecode version的合适版本(跟你jkd版本一致)5. 运行文件main函数,注意连接地址为freeswitch地址(192.168.0.1)

freeswitch实战三(eventSocket)相关推荐

  1. 云计算Python自动化运维开发实战 三、python文件类型

    为什么80%的码农都做不了架构师?>>>    云计算Python自动化运维开发实战 三.python文件类型 导语: python常用的有3种文件类型 1. 源代码     py ...

  2. 【Qt】数据库实战(三)

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 增删改查操作 04. 名字绑定和位置绑定 05. 程序示例 06. 批处理操作 07. 事务操作 08. 附录 01. 概 ...

  3. [python opencv 计算机视觉零基础到实战] 三、numpy与图像编辑

    一.学习目标 了解图片的通道与数组结构 了解使用numpy创建一个图片 了解使用numpy对图片的一般操作方法 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的hell ...

  4. OpenCV C++案例实战三《二维码检测》

    OpenCV C++案例实战三<二维码检测> 前言 一.二维码检测 二.二维码识别 1.通过findContours找到轮廓层级关系 三.二维码绘制 四.源码 总结 前言 本文将使用Ope ...

  5. 实战三:手把手教你实现物体识别

                                 实战三:手把手教你实现物体识别 一.基于Haad+Adaboost实现人脸识别 1.原理介绍(参考下面的博客文章) http://www.cn ...

  6. pytorch快速入门与实战——三、Unet实现

    专栏目录:pytorch(图像分割UNet)快速入门与实战--零.前言 pytorch快速入门与实战--一.知识准备(要素简介) pytorch快速入门与实战--二.深度学习经典网络发展 pytorc ...

  7. WiFi基础学习到实战(三:WiFi网络“物理层”)

    欢迎大家一起学习探讨通信之WLAN.上节我们对802.11标准基于OSI模型,在"数据链路层"的定义进行了解,数据传送经过LLC层被封装为一个MSDU,通过MAC层封装为一个MPD ...

  8. Mysql 编程实战三之计算两个日期的工作日数

    Mysql 编程实战三之计算两个日期的工作日数 1.需求 求出两个日期中的工作日数. 2.实现 代码如下: delimiter // drop procedure if exists getworkd ...

  9. 06.简书项目实战三:详情页面和登录功能实现

    简书项目实战三:详情页面和登录功能实现 1. 详情页面布局 这部分的布局比之前的简单多了,就一个标题加上主要内容而已. export default class Detail extends Comp ...

最新文章

  1. GPU上的图像和信号处理
  2. 有多少状元能够成才?(zz)
  3. 解决Dynamic Web Module 3.0 Requires Java 1.6 or newer
  4. swagger报错 java.lang.NumberFormatException: For input string: ““
  5. Linux学习之CentOS(五)--让我有些郁闷的mount命令
  6. IndexedDB:浏览器里内置的数据库
  7. MySQL 表分区 Partition
  8. 大华工业相机使用说明_大华C900系列SSD | 极速传输,不负美名
  9. 算法:回溯十 挑选卡片pickup cards
  10. linux三剑客之sed命令,linux三剑客之sed命令
  11. JsonUtils工具类,拿来使用即可
  12. 先科机顶盒一直出现android,网络电视机顶盒停留在开机界面,无法开机的解决办法...
  13. linux镜像添加驱动,添加raid驱动到initrd.img
  14. [渝粤教育] 西南科技大学 翻译 在线考试复习资料
  15. (翻译)简化模式(Reduce)
  16. 万事开头难!迈出第一步……
  17. 目标检测和分类的评价指标
  18. 苹果xr配置_看看下面这些对比,你就知道苹果x和xr哪个好?
  19. 第四章:软件总体设计(4)此章结完
  20. 计算机试题四北京网络教育,网络教育统考计算机模拟真题选择题(四)

热门文章

  1. SQL Server 2019 (15.x) 新特性概要
  2. 人工智能的伦理问题-结题作业
  3. Meta云游戏架构解析,目标是降低AR/VR游戏门槛
  4. 当物联网技术进入了玩具世界……
  5. 2020年自考计算机应用基础有填空题吗,2020年四川自考《计算机应用基础》模拟题(一)...
  6. 技术分享 | 咬文嚼字之驱动表 outer表
  7. multipartfile 获取音频时长_2020年中国在线音频市场发展现状及趋势解读
  8. b级计算机考试在线试题及答案,全国计算机一级考试试题及答案
  9. word计算机系统解决问题,电脑提示Microsoft Office Word遇到问题需要关闭的解决方法...
  10. 【OpenCV学习】(十三)机器学习