MYVOIPAPP

回呼(Call back)业务

1. 概述

我们首先讨论回呼业务的基本网络拓扑结构。

回呼网络拓扑

在回呼业务中,有三个基本的网络元素:

应用服务器(AS): AS负责用户接口、计费以及数据存储。它们指示miniSIPServer建立呼叫连接。

miniSIPServer(MSS): miniSIPServer负责接收来自AS的指令,并发起、维护以及释放VoIP呼叫连接。

对端SIP服务器(PSS): 由VoIP运营商提供,或者是指VoIP网关。PSS负责与传统电话网络、移动网络的呼叫和媒体连接。

1.1 业务描述

回呼业务不由用户终端(例如SIP话机)发起呼叫,而是由AS发起呼叫。AS指示miniSIPServer在两个被叫号码(实际就是两个真实用户)之间建立VoIP连接。

miniSIPServer接收到指令后,首先向用户1发起呼叫。用户应答呼叫后,miniSIPServer开始呼叫用户2。用户2接通后,miniSIPServer合并两端呼叫,在用户1和用户2之间建立连接。

呼叫释放后,miniSIPServer将呼叫信息,例如通话时长等,报告给AS。

在整个过程中,AS可以发送命令给miniSIPServer取消或者释放当前callback呼叫。

2. 配置

请点击菜单'业务 / 回呼'进行配置。

回呼配置对话框

配置项 描述

应用服务器地址

默认值为“127.0.0.1”,可以配置为空。

如果配置为空,则 miniSIPServer 对 AS 的消息不进行 IP 地址鉴权,允许任何一个 AS 都可以向当前 miniSIPServer 发起回呼流程。

如果配置地址,则 miniSIPServer 只允许该地址的 AS 能向当前 miniSIPServer 发起回呼流程,拒绝其他 AS 的请求。

本地监听端口*

miniSIPServer 打开该本地 UDP 端口接收来在 AS 的消息;如果该端口设置为0,则 miniSIPServer 不会打开端口。

如果该项进行了修改,需要重启启动 miniSIPServer 才能生效。

缺省主叫号码

REQUEST消息中没有携带'caller1'参数,miniSIPServer 将使用“缺省主叫号码”作为第一路呼叫的主叫号码,如果该号码配置为空,则使用“anonymous”作为第一路呼叫的主叫号码。

3. AS-MSS接口

下图描述了AS与miniSIPServer之间一次简单的callback业务消息流程。

IF demo flow

这个内部接口(IIF)基于UDP。miniSIPServer会打开UDP端口准备接收AS的命令,并通过该接口上报内部状态给AS。缺省情况下,miniSIPServer采用UDP5080端口与AS通信。

IIF是文本消息。一个IIF消息可以是来自AS的请求消息,也可以是miniSIPServer反馈给AS的响应消息。

IIF消息 = Method: SP Parameters.

"Method" 必须是大写, 而"Parameters"必须是小写

3.1 方法(Method)

当前版本有四种methods: REQUEST, ACK, RELEASE以及RESPONSE。

REQUEST消息用于AS指令miniSIPServer发起回呼业务。

ACK是个响应消息,用于指示AS:miniSIPServer已经收到并解析REQUEST消息,准备发起呼叫会话。

RELEASE消息由AS发送,用于指令miniSIPServer释放当前callback呼叫。

RESPONSE消息来自miniSIPServer,它包含当前呼叫最终的通话时长。

3.2 参数(Parameter)

Parameters包含两个部分:参数名以及参数值,采用下面的格式:

Parameter = "parameter name=parameter value".

Parameters之间采用';'进行分割。

例如:"id=1234;user1=100;user2=101"。这个例子有三个参数:'id', 'user1'以及'user2'。

下面章节详细描述IIF methods中各Parameters的细节。

3.2.1 REQUEST消息中的参数
参数 类型 长度 描述

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秒。

3.2.2 ACK消息中的参数
参数 类型 长度 描述

id

字符串

少于32个字符

回呼会话标识。与REQUEST消息中的ID是同一个参数。

sid

整数

>0

由miniSIPServer分配的回呼业务标识。

code

字符串

少于32个字符

向AS反馈REQUEST消息的处理情况。

目前只有两个值:ok或者fail。

示例:

  • ACK: id=1234;sid=5678;code=ok;
  • ACK: id=1234;code=fail;
3.2.3 RESPONSE消息中的参数
参数 类型 长度 描述

id

字符串

少于32个字符

呼叫会话标识。与REQUEST消息中的id是同一个参数。

sid

整数

>0

由miniSIPServer分配的回呼业务标识。与ACK消息中的sid是同一个参数。

real_duration

整数

-

当前呼叫最终通话时长,单位秒。

示例:

RESPONSE: id=1234;sid=5678;real_duration=180;

呼叫双发通话了大约180秒,然后呼叫就释放了。

3.2.4 RELEASE消息中的参数
参数 类型 长度 描述
id 字符串 少于32个字符 呼叫会话标识。与REQUEST消息中的id是同一个参数。
sid 整数 >0 由miniSIPServer分配的回呼业务标识。与ACK消息中的sid是同一个参数。

示例:

RELEASE: id=1234;sid=5678;

AS指示miniSIPServer释放id为'1234,sid为'5678'的回呼呼叫。

4. 常见问题
4.1 您能提供一个演示程序向miniSIPServer发送回呼请求吗?

嗯, 关键点就是打开一个UDP端口发送文本字符串. 请参考附件'callback.php.zip'. 我们用PHP语言编写了一个演示程序. 这个演示程序仅仅向miniSIPServer发送回呼请求, 并不等待服务器的响应消息. 您可以根据自己的需求进行更新, 或者使用其他语言重写.

callback.php.zip