回呼(Call back)业务

MYVOIPAPP技术支持团队

support@myvoipapp.com

索引

1. 概述

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

回呼网络拓扑

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

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

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

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

1.1 业务描述

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

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

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

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

2. 配置

我们需要进行以下配置:

2.1 Callback业务

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

回呼配置对话框

配置项 描述

应用服务器地址

应用服务器IP地址,允许为空。

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

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

本地监听端口*

本地UDP端口。MSS打开该端口接收来在AS的消息。

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

外线模式

指示MSS应该采用外线模式连接VOIP运营商。

缺省主叫

如果是外线模式,该项可以为空,那么外呼呼叫的主叫号码是外线号码。

如果不是外线模式,就意味着MSS将采用”服务器-服务器“的方式连接VoIP运营商网络,此时应设置'缺省主叫号码', 或者在REQUEST消息中携带'caller1'/'caller2'参数,否则MSS将呼叫设置为‘匿名呼叫’(可能被VOIP运营商或者网关拒绝)。

2.2 外线

在上述配置中,如果采用外线模式,我们必须配置外线连接VoIP运营商。

请点击菜单"数据 / 外线"进行配置。需要强调的是,外线必须设置"其他分机可以使用该外线进行呼叫", 这样回呼业务逻辑才能使用该外线发起外呼呼叫。

外线配置

请参考MSS用户手册了解更多细节。

3. AS-MSS接口

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

IF demo flow

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

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

IIF消息 = Method: SP Parameters.

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

3.1 方法(Method)

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

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

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

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

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

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

字符串

MSS语音ID

可选参数,指示MSS给用户1播放音乐。缺省的"ann1"是00080002。你可以在MSS中加载自定义语音,并用这个参数指示MSS播放给用户1。

ann_id2

字符串

MSS语音ID

可选参数,指示MSS给用户2播放音乐。你可以在MSS中加载自定义语音,并用这个参数指示MSS播放给用户2。

ann_digit2

字符串

>0

可选参数,用于指示MSS给用户2播放数字音。

record_call - - 可选参数。如果REQUEST消息中携带了该参数,MSS将监听当前呼叫,并保存相应的语音流。
fob_nbr1 字符串 少于32个字符 前转号码1。第二路呼叫被叫忙时,MSS将尝试试呼此号码。
fob_nbr2 字符串 少于32个字符 前转号码2。‘fob_nbr1’呼叫被叫忙时,MSS将尝试试呼此号码。
fob_nbr3 字符串 少于32个字符 前转号码3。‘fob_nbr2’呼叫被叫忙时,MSS将尝试试呼此号码。

示例:

REQUEST: id=1234;user1=100;user2=101;duration=3600;

这是AS向MSS指令CALLBACK业务。该呼叫采用‘1234’作为标识。在这个请求中,第一个被叫号码是‘100’,第二个被叫号码是‘101’。第一个被叫应答呼叫后,整个呼叫过程最多持续3600秒。

3.2.2 ACK消息中的参数

参数 类型 长度 描述

id

字符串

少于32个字符

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

sid

整数

>0

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

code

字符串

少于32个字符

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

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

示例:

3.2.3 RESPONSE消息中的参数

参数 类型 长度 描述

id

字符串

少于32个字符

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

sid

整数

>0

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

real_duration

整数

-

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

示例:

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

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

3.2.4 RELEASE消息中的参数

参数 类型 长度 描述

id

字符串

少于32个字符

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

sid

整数

>0

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

示例:

RELEASE: id=1234;sid=5678;

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

4. 常见问题

4.1 您能提供一个演示程序向MSS发送回呼请求吗?

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

callback.php.zip