浅谈基于SIP协议搭建外呼系统

首先给大家说明一下这篇博文是来自于我所写的《通信行业外呼系统架构设计分析》一文中的一部分内容,而我讲其拆开到此处是为了大家更好的去理解如何搭建一个SIP通话系统。

⭐SIP协议介绍以及产生的背景

SIP(Session Initiation Protocol)协议,又叫会话初始协议。说起SIP,要从电话网开始说起,传统的电话网是通过电话线进行连接,由一个一个程控电话交换机组成一个全球的电话网络。比如我们从中国打电话到美国,要经过很多个这样的程控电话交换机,如图1.1.1和图1.1.2所示:

传统电话网

图1.1.1 传统电话网

程控电话交换机呼叫过程

图1.1.2 程控电话交换机呼叫过程

这些程控电话交换机,隶属于不同程控电话交换局,每一通电话都在这些程控电话局进行交换,从而产生网间结算的费用,这就是为什么我们拨打国际长途电话非常昂贵的原因。
伴随着互联网的出现,人们开始思考,如果我们利用免费的互联网来拨打电话,这就可以将昂贵的电话费降下来,甚至变成免费。于是就有了SIP协议,其设计初衷就是基于互联网的会话控制协议SCP(Session Control Protocol),具有灵活、易于实现、便于扩展的优点。

SIP协议应用层面的介绍

要想使用SIP协议来实现通过互联网来拨打电话,我们需要以下几样东西,如图1.2.1所示:
⭐1.SIP终端(既可以是集成SIP协议的电话机,也可以是手机APP,也可以是PC电脑上安装的一个软件程序,只要能实现打电话的功能都能归到此类)。
⭐2.SIP服务器(主要是用来提供基于SIP协议的服务,通常放在机房内为企业提供电话服务,也可以部署在互联网上的云服务器,作为一个虚拟的服务器,为整个互联网上的用户提供电话服务)。
⭐3.SIP网关(因为互联网和电话网是属于两个完全不一样的电话网络,如果要使用SIP电话拨打在电话网中的电话,就要跨越两种不同的网络,此时就需要网关,即网关的作用是连接互联网和电话网)。
实现互联网拨打电话的硬件

图1.2.1 实现互联网拨打电话的硬件

下面我们来介绍一下他们之间是如何工作的:
首先,SIP电话必须是SIP服务器下的一个合法用户,比如SIP服务器上有一个电话号码为6000密码为1234的一个用户,此时我们需要SIP终端告诉SIP服务器它就是6000这个用户,SIP终端会配置SIP服务器的IP地址、用户名(6000)、密码(1234),然后向服务器进行注册,SIP服务器向数据库进行查询,发现确实有6000这个用户,并且密码也是正确的,于是就会返回一个注册成功的消息(200OK),这时一个SIP终端就成功注册到了SIP服务器上,如图1.2.2所示:
SIP终端向SIP服务器注册

图1.2.2 SIP终端向SIP服务器注册

接下来,我们尝试拨打服务器上另一个电话看看(6001),当我们呼叫时,用户名为6000的IP电话机会向SIP服务器发起一个invite的消息来告诉SIP服务器自己要呼叫用户名为6001的IP电话机,SIP服务器发现6001是自己提供服务的用户,就将invite的消息发送给用户名为6001的IP电话机,当用户名为6001的IP电话机接收到invite的消息后,话机振铃,并发送振铃消息180Ringing给用户名为6000的IP电话机,告诉其自己正在振铃等待人的接听,而用户名为6000的IP电话机会听到回铃声,当用户名为6001的IP电话机接通后会发一条200OK的信息来告诉用户名为6000的电话机自己已被接通,随后用户名为6000的SIP电话会发送一条ACK确认消息表示通话可以接通。
这样一个基于SIP协议的电话呼叫就建立起来了,整个语音是通过网络来进行传输,当要完成通话时,任何一方挂机,发送一个BYE消息即可。
具体流程见图1.2.3.
SIP电话通话流程

图1.2.3 SIP电话通话流程

上述我们介绍的是两个SIP电话之间的通信,那么我们要呼叫一个手机号或者是一个电话号,如何实现呢?这时候我们就要通过之前所说的网关设备,因为手机号和电话号已经不是本地的SIP的一个号码了,已经是跨越另外一个网段,即电话网上的用户。
当我们呼叫一个手机号时,SIP服务器发现这不是一个SIP的号码,是一个手机号,那么SIP服务器会把手机号码路由到网关上,网关是与电话网对接的,这时候网关将SIP协议转换成电话网呼叫的协议去呼叫这个手机号,然后呼叫接通后,SIP电话与手机建立通话,基于ip的语音由网关实时转换成电话网可以识别的语音信号,这就是基于SIP协议呼叫中网关的作用,具体如图1.2.4所示:
SIP终端运用网关通话流程

图1.2.4 SIP终端运用网关通话流程

运营商分类

而使上述整套系统可以成功运作起来,我们还需要运营商的线路资源,因此我们需要选择合适的运营商。市面上存在的运营商大致分为两类,分别是实商和虚商。所谓的实商其实就是传统的三大运营商(中国移动、中国电信、中国联通),虚商是指虚拟网络运营商,是指那些没有基础网络而经营电信或者电信的增值业务的厂商。虚拟运营商利用传统运营商等基础电信运营商的网络设施或产品,将业务细化、个性化,通过业务代理或者分销等方式向用户提供各种电信增值服务。
所以也就是说,虚拟运营商是没有自己的网络的,只是租赁运营商的网络资源来进行重新设计和销售,但话说回来,虚拟运营商比运营商能更接近终端客户。