前段时间抽时间对市面上流行的云通讯/云呼叫中心运营平台做了考察,现对相关情况进行汇总和对比,以便网梭科技相应云平台的技术架构借鉴。
考察内容:
l 帐号体系,比如是否分为主帐号、子帐号之类;以及帐号如何进行管理;
l 是否支持IM功能,若支持,API如何支持客户端实现IM功能;
l 是否支持语音呼叫功能,若支持,则使用的流程如何?是否需要有应用Server来配合。
一、汇总和对比
平台名称 | 荣联.云通讯 | twilio | 融云 | 环信 |
|
帐号体系 | 用户->应用->子帐号 | 账户->子帐户 | 开发者->应用->用户 | 开发者->应用->环信账户 |
|
帐号管理 | 1.用户创建应用; 2. 使用API创建和维护应用的子帐号 | 1.注册后得到一个试用帐号; 2. 调用API可以创建子帐号并进行管理; | 1.注册为开发者; 2. 开发者创建应用; 3. 调用API创建应用下的用户(所谓获取Token,即用户令牌); | 1.注册为开发者; 2. 开发者创建应用; 3. 调用API创建环信帐号; |
|
API调用 | 1.应用调用模式 2.子帐号调用模式 | 帐号调用模式(和子帐号一致) |
|
|
|
身份验证方式 | 采用MD5进行令牌的签名 | 采用HTTPS,因此REST API中token直接传递 |
|
|
|
二、云平台情况
l Twilio
账户体系采用两级,主账户和子账户。
两者均可进行相应的API调用。但是计费有依赖,且主账户可以以子账户的名义进行操作。
有专门API用于管理子账户。
IP 即时消息功能尚未支持,但是其规划的功能很全。连“对方正在键入消息”、“消息已被对方读取”等细节都考虑到了。具体参见:https://www.twilio.com/ip-messaging
API 特点当中可资借鉴的:
1. 在URI当中包含服务版本号,有利于系统平滑升级;
2. 在URI当中包含account的sid,有利于服务的负载分担;服务分发模块(如Nigix)可方便地根据URI将服务进行分发;
3. 服务自说明,使得服务部署更加灵活,有利于服务的灵活部署,也为服务的迁移和升级等提供了便利性。在返回的信息报文中,包含了相关方法的Uri,使得调用者不产生强的静态依赖,而是可以动态利用服务,提升了服务的可达性,以及容灾、容错等的能力。
帐号体系结构当中,包含SDK的APP如何得到服务?
参阅:https://www.twilio.com/docs/client/android
其中的要点包括:
1. 架构上,需要一个应用服务,来为客户端提供合法的授权。为什么要这么做呢?为什么不再APP里面直接包含相应的app_key和app_secret?答案是为了安全性。
应用的服务端要提供的“Capability Token”:
1. 能力令牌表明可进行的操作集合,并且为了防止滥用具备时效性(最长24小时,可以更短),超过时间会失效;
2. 为了安全性考虑,你不应当将能力令牌,或者Twilio的帐号令牌等以字串的形式放在APP中并提交到应用市场(Google Play)当中。
那么,应用的服务端如何生成Cability Token呢?
参阅:https://www.twilio.com/docs/client/capability-tokens
简而言之,就是利用Twilio的工具类(Lib库),使用Twilio的account sid和auth token,来制作Cability Token。可以在token里面包含允许的操作内容,以及操作时效。当客户端使用该令牌连接到Twilio服务时,由于Cability Token包含了Account sid的特征,并且实际上是用auth token签名的,并且是包含了过期时间的,因此Twilio服务端就可以据此进行相应的处理。按照JSON WEB TOKEN的定义,每个Cability Token是可以包含有JTI的,因此令牌可以刷新和延期。
子帐号管理的相关API,参阅:https://www.twilio.com/docs/api/rest/subaccounts
支持子帐号创建、查询、禁用、号码转移等等。
例子:创建子帐号
l 荣联.云通讯
1. 首先要注册为开发者。开发者可以有多个应用。使用api可以在某个应用中创建子账户。
每个应用有一组 appkey 和 appsecret。
http://docs.yuntongxun.com/index.php/%E5%88%9B%E5%BB%BA%E5%AD%90%E8%B4%A6%E6%88%B7
2. 子帐号的概念
子账户是云通讯平台提供给开发者自行管理其客户的账户,子账户隶属于主账号下的一个应用。使用子账户您可以区分您的客户并保证他们可以独立的使用子账户鉴权的REST能力,这样可以使您轻松的管理每一个独立的客户。
例如,如果您正在运行一个依赖于云通讯平台的代理服务,您可以为每一个客户注册一个云通讯平台的子账户。如果客户注销了在您服务中的账户,您可以简单地关闭对应的云通讯平台子账户。
子账户是一个独立的由开发者自行管理和维护的账户,一个子账户拥有唯一的VoIP账号。您可以自行管理一个子账号的电话、短信、录音等而不会影响其他子账号。
创建子帐号的应答:
3. 验证方式
具体参阅:
归纳总结:
l 分为主帐号验证和子帐号验证方式,分别对应各自的应用场景。
n 如使用主帐号创建和维护子帐号,则为主帐号验证方式;
n 如使用子帐号进行语音呼叫的调用,则使用子帐号验证方式。
l HTTP包头中提供Authorization 参数,使用Base64编码(账户Id + 英文冒号 + 时间戳)其中账户Id根据url的验证级别对应主账户或子账户。时间戳采用固定格式。在签名算法中引用。
l URL当中可直接区分是采用主帐号来调用,还是子帐号来调用:
/Accounts/{accountSid}/{func}/{funcdes}?sig={SigParameter}
/SubAccounts/{subAccountSid}/{func}/{funcdes}?sig={SigParameter}
l 签名(sig)的生成算法为:使用MD5加密(主帐号Id + 主帐号授权令牌 +时间戳),或者使用MD5加密(子帐号Id + 子帐号授权令牌 +时间戳)。然后再转换为全部大写。
4. IOS客户端连接到平台的接口调用
文档参阅:
5. 安卓客户端连接的例子:
文档见:
另,产品的文档是基于 MediaWiki 部署的。具体参阅:
https://www.mediawiki.org/wiki/MediaWiki
l 融云
http://www.rongcloud.cn/docs/server.html#消息发送服务
获取 Token。客户端据此才能连接融云服务。
安卓 SDK 连接服务:http://blog.rongcloud.cn/?p=535
总结:也就是说要提供 app_key,以及用户对应的Token信息。