我们首先讨论回呼业务的基本网络拓扑结构。
在回呼业务中,有三个基本的网络元素:
应用服务器(AS): AS负责用户接口、计费以及数据存储。它们指示miniSIPServer建立呼叫连接。
miniSIPServer(MSS): miniSIPServer负责接收来自AS的指令,并发起、维护以及释放VoIP呼叫连接。
对端SIP服务器(PSS): 由VoIP运营商提供,或者是指VoIP网关。PSS负责与传统电话网络、移动网络的呼叫和媒体连接。
回呼业务不由用户终端(例如SIP话机)发起呼叫,而是由AS发起呼叫。AS指示miniSIPServer在两个被叫号码(实际就是两个真实用户)之间建立VoIP连接。
miniSIPServer接收到指令后,首先向用户1发起呼叫。用户应答呼叫后,miniSIPServer开始呼叫用户2。用户2接通后,miniSIPServer合并两端呼叫,在用户1和用户2之间建立连接。
呼叫释放后,miniSIPServer将呼叫信息,例如通话时长等,报告给AS。
在整个过程中,AS可以发送命令给miniSIPServer取消或者释放当前callback呼叫。
请点击菜单'业务 / 回呼'进行配置。
配置项 | 描述 |
---|---|
应用服务器地址 |
默认值为“127.0.0.1”,可以配置为空。 如果配置为空,则 miniSIPServer 对 AS 的消息不进行 IP 地址鉴权,允许任何一个 AS 都可以向当前 miniSIPServer 发起回呼流程。 如果配置地址,则 miniSIPServer 只允许该地址的 AS 能向当前 miniSIPServer 发起回呼流程,拒绝其他 AS 的请求。 |
本地监听端口* |
miniSIPServer 打开该本地 UDP 端口接收来在 AS 的消息;如果该端口设置为0,则 miniSIPServer 不会打开端口。 如果该项进行了修改,需要重启启动 miniSIPServer 才能生效。 |
缺省主叫号码 |
REQUEST消息中没有携带'caller1'参数,miniSIPServer 将使用“缺省主叫号码”作为第一路呼叫的主叫号码,如果该号码配置为空,则使用“anonymous”作为第一路呼叫的主叫号码。 |
下图描述了AS与miniSIPServer之间一次简单的callback业务消息流程。
这个内部接口(IIF)基于UDP。miniSIPServer会打开UDP端口准备接收AS的命令,并通过该接口上报内部状态给AS。缺省情况下,miniSIPServer采用UDP5080端口与AS通信。
IIF是文本消息。一个IIF消息可以是来自AS的请求消息,也可以是miniSIPServer反馈给AS的响应消息。
IIF消息 = Method: SP Parameters.
"Method" 必须是大写, 而"Parameters"必须是小写。
当前版本有四种methods: REQUEST, ACK, RELEASE以及RESPONSE。
REQUEST消息用于AS指令miniSIPServer发起回呼业务。
ACK是个响应消息,用于指示AS:miniSIPServer已经收到并解析REQUEST消息,准备发起呼叫会话。
RELEASE消息由AS发送,用于指令miniSIPServer释放当前callback呼叫。
RESPONSE消息来自miniSIPServer,它包含当前呼叫最终的通话时长。
Parameters包含两个部分:参数名以及参数值,采用下面的格式:
Parameter = "parameter name=parameter value".
Parameters之间采用';'进行分割。
例如:"id=1234;user1=100;user2=101"。这个例子有三个参数:'id', 'user1'以及'user2'。
下面章节详细描述IIF methods中各Parameters的细节。
参数 | 类型 | 长度 | 描述 |
---|---|---|---|
id |
字符串 |
少于32个字符 |
由AS分配的呼叫对话标识 |
user1 |
字符串 |
少于32个字符 |
用户1。第一路呼叫的被叫号码。 |
user2 |
字符串 |
少于32个字符 |
用户2。 第二路呼叫的被叫号码。 |
caller1 |
字符串 |
少于32个字符 |
可选参数, 第一路呼叫中的主叫号码 |
caller2 |
字符串 |
少于32个字符 |
可选参数, 第二路呼叫中的主叫号码 |
duration |
整数 |
>=0 |
指示当前会话最多持续多长时间,单位为秒。 |
ann_id1 |
字符串 |
miniSIPServer语音ID |
可选参数,指示miniSIPServer给用户1播放音乐。缺省的"ann1"是00080003(普通回铃音)。你可以在 miniSIPServer 中加载自定义语音,并用这个参数指示miniSIPServer播放给用户1。 |
ann_id2 |
字符串 |
miniSIPServer语音ID |
可选参数,指示miniSIPServer给用户2播放音乐。你可以在miniSIPServer中加载自定义语音,并用这个参数指示miniSIPServer播放给用户2。 |
ann_digit2 |
字符串 |
>0 |
可选参数,用于指示miniSIPServer给用户2播放数字音。 |
record_call | - | - | 可选参数。如果REQUEST消息中携带了该参数,miniSIPServer将监听当前呼叫,并保存相应的语音流。 |
fob_nbr1 | 字符串 | 少于32个字符 | 前转号码1。第二路呼叫被叫忙时,miniSIPServer将尝试试呼此号码。 |
fob_nbr2 | 字符串 | 少于32个字符 | 前转号码2。‘fob_nbr1’呼叫被叫忙时,miniSIPServer将尝试试呼此号码。 |
fob_nbr3 | 字符串 | 少于32个字符 | 前转号码3。‘fob_nbr2’呼叫被叫忙时,miniSIPServer将尝试试呼此号码。 |
示例:
REQUEST: id=1234;user1=100;user2=101;duration=3600;
这是AS向miniSIPServer指令CALLBACK业务。该呼叫采用‘1234’作为标识。在这个请求中,第一个被叫号码是‘100’,第二个被叫号码是‘101’。第一个被叫应答呼叫后,整个呼叫过程最多持续3600秒。
参数 | 类型 | 长度 | 描述 |
---|---|---|---|
id |
字符串 |
少于32个字符 |
回呼会话标识。与REQUEST消息中的ID是同一个参数。 |
sid |
整数 |
>0 |
由miniSIPServer分配的回呼业务标识。 |
code |
字符串 |
少于32个字符 |
向AS反馈REQUEST消息的处理情况。 目前只有两个值:ok或者fail。 |
示例:
参数 | 类型 | 长度 | 描述 |
---|---|---|---|
id |
字符串 |
少于32个字符 |
呼叫会话标识。与REQUEST消息中的id是同一个参数。 |
sid |
整数 |
>0 |
由miniSIPServer分配的回呼业务标识。与ACK消息中的sid是同一个参数。 |
real_duration |
整数 |
- |
当前呼叫最终通话时长,单位秒。 |
示例:
RESPONSE: id=1234;sid=5678;real_duration=180;
呼叫双发通话了大约180秒,然后呼叫就释放了。
参数 | 类型 | 长度 | 描述 |
---|---|---|---|
id | 字符串 | 少于32个字符 | 呼叫会话标识。与REQUEST消息中的id是同一个参数。 |
sid | 整数 | >0 | 由miniSIPServer分配的回呼业务标识。与ACK消息中的sid是同一个参数。 |
示例:
RELEASE: id=1234;sid=5678;
AS指示miniSIPServer释放id为'1234,sid为'5678'的回呼呼叫。
嗯, 关键点就是打开一个UDP端口发送文本字符串. 请参考附件'callback.php.zip'. 我们用PHP语言编写了一个演示程序. 这个演示程序仅仅向miniSIPServer发送回呼请求, 并不等待服务器的响应消息. 您可以根据自己的需求进行更新, 或者使用其他语言重写.