加入收藏

虚拟号在转转实践与应用

2023-08-28 00:28:13 来源:清一色财经

总体来说,就是要设计并实施异常处理、超时设置、重试机制、断路器以及监控与报警等措施。这些措施可以有效地保护系统,避免因不可控因素导致的故障和不稳定。

1.介绍

虚拟号是一种基于互联网技术的电话号码服务。它通过将电话号码与用户的手机或其他通信设备绑定,实现了在不同设备上接听和拨打电话的便利,保护用户号码隐私,记录通话中内容及信息等,虚拟号的主要特点包括以下几个方面:

隐私保护:虚拟号可以作为一个中间号码,将用户的真实电话号码隐藏起来。当用户需要提供电话号码时,可以使用虚拟号码代替,从而保护个人隐私。灵活性:虚拟号可以根据用户的需求进行设置和调整。用户可以选择不同的地区号码,甚至可以选择国际号码,使得自己的电话号码更具灵活性和适应性。多功能性:虚拟号不仅可以用于接听和拨打电话,还可以提供一系列增值服务。例如,用户可以设置来电转接、语音信箱、短信转发等功能,满足不同的通信需求。企业应用:虚拟号在企业通信中有着广泛的应用。企业可以通过虚拟号为客户提供更好的服务体验,例如设置客服热线、呼叫中心等,提高客户满意度和业务效率。

总之,虚拟号作为一种创新的电话号码服务,为用户提供了更加灵活、安全和便捷的通信方式。它在个人和企业通信中都有着广泛的应用场景。


(相关资料图)

2.实践与应用

在门店业务的场景下,需要店员/用户拨打号码进行售卖/购买等信息咨询,通过第三方服务提供的虚拟号的方式对双方手机号绑定,通过虚拟号来实现接听/拨打,有效解决了用户号码隐私保护的问题,以及帮助门店进行管理店员话术监控与管理数据分析等。

二手交易虚拟号绑定图

2.1 名称解释

A:用户手机号X:虚拟号/中间户B:店员手机号第三方:虚拟号提供服务方运营商:电信、联通、移动各大平台

2.2 虚拟号的 XB 模式

XB 模式:指可以将 B(店员手机号)与 X(虚拟号)进行绑定,后续用户直接拨打 X(虚拟号)都是由当前店员 B 手机号进行接听。

2.3 虚拟号的 AXB 模式

AXB 模式:指用户手机号 A 与店员手机号 B,同时绑定虚拟号码 X,后续 A 拨打 X号码,B 会看到 X 号码打过来;同理 B 拨打 X号码,A 会看到X 号码打过来。

2.4 虚拟号呼叫流程图

呼叫流程图

3. 与第三方交互的版本演进

与第三方进行交互的过程中,随着时间的推移,业务不断的发展,服务方与第三方的交互流程也会不断的改版。下面会说明历史版本与第三方交互中的一些问题。

3.1 初始版本绑定流程

图片

在最初的版本中,交互流程相对简单,只包含基本的绑定和解绑操作。在正常情况下,这种简单的交互是没有问题的。然而,在线上出现最多的情况就是超时、超时、还是超时,因为和第三方交互都是基于HTTP方式进行交互,对于第三方的响应时间是不可控的。一旦响应超过了APP的请求时间,就会熔断请求,导致请求失败。

3.2 最新版本交互流程

为了保证服务的可靠性,在最新版本中做了以下优化措施:

图片

优化概念模型图

超时处理机制:提供一个查询绑定状态的接口,APP 不断轮询获取绑定状态。前置校验代码同步,将与第三方绑定/解绑接口进行异步化处理。
//开启异步线程,执行重试方法,进行与第三方接口绑定。ThreadUtil.executor.submit(() -> {  try {    log.info("act=AppOperationHandler type=retryBindXb_retryBindAxb_start");    pstnRetryService.retryBindXb(appOpnParam);  } catch (Exception e) {    log.error("act=AppOperationHandler type=retryBindXb_retryBindAxb_fail", e);}});
并发处理机制:基于乐观锁的方式加锁实现避免并发问题。将绑定状态添加了一个操作中的中间态。
NOT_BIND(1, "未绑定"),    BIND(2, "已绑定"),    OPERATION(3, "操作中");
异常处理机制:在绑定过程中,及时捕获并处理异常情况,例如调用第三方接口超时、服务端错误异常等等,通过重试方式来保证操作的完整性和一致性。重试基于注解AOP拦截,通过MQ消息的方式实现重试。
@Override@ZZMQRetry(errorHandler = "onErrorMsgPcBindXb", firstSyncCall = true)public void retryBindXb(PstnBindParam pstnBindParam) {   //调用第三方接口进行绑定    String bindId = bindVirtualNumber(pstnBindParam);    Boolean executeResult = transactionTemplate.execute(status -> {      try {      //创建绑定记录      pstnBindRecordService.insertBindRecord(bindId, pstnBindParam);      //状态流转至已绑定      return this.xbOpnStateToBind(pstnBindParam.getAssignVirtualNum());      } catch (Exception e) {        status.setRollbackOnly();        return Boolean.FALSE;      }    });     if (Objects.isNull(executeResult) || !executeResult) {           throw new BusinessException("修改状态异常进行重试");        }    }
告警处理机制:在发生严重异常、或者重试到一定次数之后任然没有成功,发送告警进行通知。
public void onErrorMsgPcBindXb(PstnBindParam param) {      int retryCount = RetryContext.getRetryCount();      log.info("act=PcOperationHandler type=onErrorMsgPcBindXb retryCount={} ", retryCount);      if (retryCount >= RETRY_MAX_NUM) {        WxMsgUtil.sendMsg(GROUP, "绑定XB重试"+ retryCount +    "次,仍未成功请排查,虚拟号:"+ param.getVirtualNum());        }    }

通过以上优化措施,可以提高交互流程的稳定性和可靠性,减少业务方与服务方的异常、超时以及绑定状态不一致的情况,从而确保虚拟号的正常使用,提升系统的稳定性和店员使用体验。

axb绑定流程

以上优化后的店员拨打电话AXB绑定的流程,在与第三方交互绑定时,开启了一个新的线程进行处理任务,并且在这个线程中有出现错误或异常时就会重新回到线程入口重新执行。通过异步和循环查询状态的方式解决了与第三方交互耗时高的问题,有效提高了流程以及使用体验。同时,通过重试的方式保证了流程的一致性和完整性,避免了因网络波动或其他异常情况导致的状态数据不一致问题。此外,通过监控告警可以实时监控系统应用的运行状态,并在出现异常或故障时及时发出警报通知,帮助店员及时处理问题,提高整个流程的可靠性和稳定性。

这个流程只是业务中的其中一环,在线上使用还有更复杂的场景比如同时绑定xb、axb两个场景,怎么能保证都能成功、怎么能保证不超时、怎么能保证状态都一致?

确保流程成功、避免超时和保持状态一致,可以通过以下步骤来优化:

增加状态值:在库表中添加两个状态值,一个用于XB的绑定状态,另一个用于AXB的绑定状态。使用乐观锁:在业务检查完成后,以乐观锁的方式同时更新这两个状态值。创建线程:创建两个线程来处理XB和AXB的绑定流程,这样可以保证两个流程相互不影响。状态流转:在流程结束后,将这两个状态值流转至已绑定的状态。轮询接口:提供一个单独获取绑定状态的接口,供端轮询查询使用,优化店员使用体验。

通过以上步骤,可以有效地优化流程,确保其成功、避免超时并保持状态一致。

4.上线方案

在进行版本优化时,尽量保持入口不变,底层改变。这样可以使得灰度测试更加容易进行。通过保持入口不变,可以确保用户在升级版本时不会遇到任何新的障碍或问题。

/**     * 是否为灰度虚拟号码     *     * @param grayVirtualNumber     * @return     */    public boolean isGrayVirtualNumber(String grayVirtualNumber) {        return flag || grayVirtualNumberList.contains(grayVirtualNumber);    }

根据阿波罗配置,我们将某个城市的虚拟号码设置为线上灰度测试。其他虚拟号码仍将使用老版本的服务接口。在测试没有问题后,将直接开启全量即可。

5.重试组件

我们对添加了@ZZMQRetry的函数增加了AOP拦截,请求将不会真正同步执行重试函数,而是发送一条MQ消息;同时会自动start一个消费组,消费函数为@ZZMQRetry函数。

图片

6.总结

在与第三方服务的接口交互中,不可控因素是不可避免的。为了确保系统的稳定性和可靠性,重要的是采取预防措施。总体来说,就是要设计并实施异常处理、超时设置、重试机制、断路器以及监控与报警等措施。这些措施可以有效地保护系统,避免因不可控因素导致的故障和不稳定。

关于作者

徐鑫辉,转转门店技术部后端研发工程师

关键词:

相关新闻

资讯

试玩欧美玩家:《黑神话:悟空》好评如潮、难度适中
试玩欧美玩家:《黑神话:悟空》好评如潮、难度适中

近日,B站UP主“tekkenman铁拳男”在德国科隆游戏展现......更多>

关于珍惜时间刻苦读书的古诗(读书的古诗)
关于珍惜时间刻苦读书的古诗(读书的古诗)

1、〔唐〕颜真卿《劝学》:“三更灯火五更鸡,正是男......更多>

受《星空》临近发售影响,Xbox Series X主机美亚销量增幅超1000%
受《星空》临近发售影响,Xbox Series X主机美亚销量增幅超1000%

IT之家8月27日消息,关注Switch和Xbox平台游戏的推特......更多>

8月24日基金净值:鹏扬景沣六个月持有期混合A最新净值1.0901,涨0.25%
8月24日基金净值:鹏扬景沣六个月持有期混合A最新净值1.0901,涨0.25%

8月24日,鹏扬景沣六个月持有期混合A最新单位净值为1......更多>

美能能源:8月23日召开董事会会议
美能能源:8月23日召开董事会会议

美能能源(SZ001299,收盘价:18 25元)8月24日晚间......更多>

回看曼联两粒丢球,奥纳纳是否还能做的更好?还是说他已经尽力了
回看曼联两粒丢球,奥纳纳是否还能做的更好?还是说他已经尽力了

英超第3轮曼联主场3-2诺丁汉森林,开场4分钟诺丁汉森......更多>

大禹金融(01073)公布中期业绩 净利420.3万港元 同比减少80.74%
大禹金融(01073)公布中期业绩 净利420.3万港元 同比减少80.74%

智通财经APP讯,大禹金融(01073)公布2023年中期业绩,......更多>

旷世科技正式发布苹果真无损耳机NHB12:多项专利加持
旷世科技正式发布苹果真无损耳机NHB12:多项专利加持

8月26日,专注于真无损音频技术的旷世科技发布了两款......更多>

眼部扫描能提前七年预诊帕金森病
眼部扫描能提前七年预诊帕金森病

科技日报北京8月21日电(记者张佳欣)英国伦敦大学学......更多>

又输给泰国队,海港亚冠输球为国足敲响警钟!
又输给泰国队,海港亚冠输球为国足敲响警钟!

又输给泰国队,海港亚冠输球为国足敲响警钟!...更多>

关注

菜鸟下场做快递60天:快递小哥“卷”时效工作量骤增,站点月薪过万招人
菜鸟下场做快递60天:快递小哥“卷”时效工作量骤增,站点月薪过万招人
宣布自营快递业务两个月,菜鸟集团旗下菜鸟速递正忙着... 更多>
菜鸟下场做快递60天:快递小哥“卷”时效工作量骤增,站点月薪过万招人
宣布自营快递业务两个月,菜鸟集团旗下菜鸟速递正忙着... 更多>
敷尔佳:公司股价受多重因素影响,公司生产经营一切正常,未来公司将继续努力经营,实现股东价值最大化
敷尔佳(301371)08月24日在投资者关系平台上答复了投资... 更多>
24岁女生考研时查出尿毒症 相恋5年男友不离不弃并带全家人来开导
24岁女生考研时查出尿毒症相恋5年男友不离不弃并带全... 更多>
【石榴花开 籽籽同心】敖汉三十二连山工程:最难啃的“硬骨头”,最骄傲的成绩单
“我这一辈子干了不少工作,但这是最值得骄傲的一件事... 更多>
中原集团:关于近期深圳中原相关网络报道的回应
鉴于目前媒体及公众所关注的开发商拖欠深圳中原佣金一... 更多>
正和生态5涨停
中国经济网北京8月24日讯今日,正和生态(605069 SH)... 更多>
阳信县劳店镇常态化政务服务回访 促进政务服务“未诉先办”
见习记者高艳蕊通讯员高春燕“您好,我是阳信县劳店镇... 更多>
《逆水寒手游》嘎嘎鸭用法介绍一览
逆水寒手游是一款十分火爆的手游,其中逆水寒手游嘎嘎... 更多>
洞藏放量迎驾贡酒Q2盈利大涨六成 徽酒次高端价格带竞争升级
去年逆袭重回“徽酒老二”后,迎驾贡酒今年继续超预期... 更多>
AI热门股跌幅进一步扩大,鸿博股份、工业富联等相继触及跌停
8月25日,AI热门股临近尾盘跌幅进一步扩大,鸿博股份... 更多>
1.3万起 三星57寸G9显示器发布:8K 240Hz、DP 2.1齐全
快科技8月23日消息,追求完美、梦幻游戏显示器的玩家... 更多>
杨丞琳广州开唱掀“回忆杀”,周笔畅惊喜助阵
阔别5年,杨丞琳再次在广州开唱。8月26日晚,由乐腾演... 更多>