📄 卡认证判断.sc
字号:
#function FuncVerifyUser //用户认证函数
#function FuncOnStopWatch //达到通话时间处理函数
#function main //主函数
#iniparam int @InfoDBA //业务数据库站点号(配置参数常量的关键字)
#iniparam string @PhoneNum
#iniparam int @PWDCount //卡认证的输入次数
#iniparam int @CardLen //卡认证的卡号长度
#iniparam int @PWDLen //卡认证的密码长度
#iniparam string @FeeFile //付费判断文件和路径
#declare IR IfCardUser
#declare IR FeeLimited
#declare SR LocalAreaCode //本地ips区号
main
{
:stWait(各种业务的开始状态)
Connect -> stAllocResource
:stAllocResource
[SetDTMF "?"] //(设置可响应的DTMF按键)
“?”表示所有按键均可响应
“D”表示0~9的数字按键均可响应
“d”表示1~9的数字按键均可响应
其它的字符表示相对应的按键可响应
[Assign SR29,".\vox\"] //将.\vox\赋值于SR29
[OnStopWatch &FuncOnStopWatch] //强行终止FuncOnStopWatch进程
[AllocMediaDevice 1] //Vox启动
AllocResourceOK -> stGetAreaCode //AllocResourceOK —— 成功
AllocResourceFail -> stExit //AllocResourceFail——失败
:stGetAreaCode //获取本地ips区号
[Assign SR0,"select ltrim(to_char(areacode,'0000')) from tbl_areacode"]
[ExecSQL SR0] //在一个运行流程中执行一个新的流程SR0
Passed -> stVerifyUser
Failed -> stSystemError
TimeOut -> stSystemError
//★★用户认证begin
:stVerifyUser
[Assign LocalAreaCode,FD0]
[CallFunc &FuncVerifyUser] //调用FuncVerifyUser函数
Returned(0) -> stSwitchDBA //用户认证成功 Returned(值)---------值为子函数所返回的值
Returned -> stExit //用户认证失败 不返回值则进入末状态
//★★用户认证end
//★★切换业务数据库begin
:stSwitchDBA
[SwitchDBA @InfoDBA] //联网到InfoDBA的数据
Passed -> stWelcome
Failed -> stSystemError //Failed --- 失败(与新的DBA模块未能连上,检查通讯配置)
TimeOut -> stSystemError
:stSystemError
[Assign SR1,SR29] //将.\vox\赋值于SR1中
[StrCat SR1, "v030.vox"] //将v030.vox和.\vox\相连存入SR1
[PlayFile SR1] //对不起,系统忙,暂时无法为您服务,请稍候继续使用本业务 //PlayFile为播放语音文件
StopPlayBack -> stExit // StopPlayBack -------正常放音结束
DialTerminate -> stExit //DialTerminate ------放音被按键打断
Failed -> stExit //Failed -------------失败(可能因为文件不存在)
//★★切换业务数据库end
:stWelcome
//★★以下内容为SP编写的IVR内容,当开始计费开始的时候执行stBillBegin动作
//★★...............................
//★★......... 流 ..........
//★★......... 程 ..........
//★★......... 内 ..........
//★★......... 容 ..........
//★★...............................
[Assign IR0,0]
->stBillBegin
:stBillBegin
[Assign $ServiceItemNo,"11699999"] //SP根据自己的业务号码来改变$ServiceItemNo的值 11699999只是一个例子
[BillBegin 1,0,$ServiceItemNo] //启动计费。BillBegin I1 I2 S3(I1为计费方式( 0:不计费;1:按主叫;2:按被叫;3:按原主叫;4:按账号;5:按计费号码;6:按原被叫);
I2是否计算可打时长(按帐号计费时用),0:否;1:是,如果需计算可服务时长,结果存放在IR0中(-1表示没有限制);S3为服务项目编码, 一般情况下应该为系统变量$ServiceItemNo。
Verify(0)->stStartFlow //事件Verify -- 检验返回事件:
Verify(值)其中值
0 ——有效用户
1 ——无效用户(帐号余额不够)
2 ——该账号没有登记此项服务
-1——其它情况
Verify(108) -> stNotEnoughMoney //余额不足
Verify(145) -> stNotEnoughMoney //余额达到限额
Verify(153) -> stUserCheckCard //预付费封顶
Verify -> stSystemError
Failed -> stSystemError
:stNotEnoughMoney
[SetDTMF "?"]
[Assign SR1,SR29]
[StrCat SR1, "v022.vox"]
[PlayFile SR1] //卡号余额不足,谢谢使用,再见。
StopPlayBack -> stExit
DialTerminate -> stExit
Failed -> stExit
:stUserCheckCard
[Assign FeeLimited,100]
[CallFunc &FuncVerifyUser]
Returned(0)->stBillBegin //注:当预付费封顶的时候,需走卡计费,如果认证成功,要再次计费
Returned -> stExit
:stStartFlow
//★★以下内容为SP编写的IVR内容,当开始计费结束的时候执行stBillEnd动作
//★★...............................
//★★......... 流 ..........
//★★......... 程 ..........
//★★......... 内 ..........
//★★......... 容 ..........
//★★...............................
[Assign IR0,0]
-> stBillEnd
:stBillEnd
[BillEnd]
Verify(0) ->stOtherStartFlow
Verify ->stSystemError
:stOtherStartFlow
//★★以下内容为SP编写的IVR内容,当计费结束成功的时候根据SP业务需求来是否其它分支或挂机
//★★...............................
//★★......... 流 ..........
//★★......... 程 ..........
//★★......... 内 ..........
//★★......... 容 ..........
//★★...............................
[Assign IR0,0]
->stExit
:stExit
[RETURN 0]
}
FuncVerifyUser
{
//★★绑定判断:$AccountID为空、$CallerID为主叫号码,VerifyUser返回值:Verify(0)----号码绑定;
//★★ Verify(149)----号码未绑定;Verify----例外;Failed----失败
//★★用户认证:$AccountID为卡号、$AccountKind为卡的类型、$Password为卡的密码,VerifyUser返回值:
//★★ Verify(0)----正常、Verify(108)----卡余额不足、Verify(110)----卡/用户不存在、
//★★ Verify(114)----卡/用户密码错误、Verify(118)----消息包异常、Verify(141)----卡号未激活、
//★★ Verify(142)----卡正在使用、Verify(143)----卡过有效期、Verify(144)----卡上黑名单、
//★★ Verify(145)----卡余额达到限额、Verify(146)----卡不允许使用、Verify(147)----系统故障
//★★ Verify(148)----此业务不存在、Verify(149)----号码未绑定、Verify(150)----号码规整错误
//★★ Verify(151)----禁开号码、Verify(152)----预付费、Verify(153)----达到限费
//★★ Verify----意外;Failed----失败
:stWait
[Assign IR22,1]
[Assign SR10,$CallerID]
[Assign IR23,0] //判断重输卡号次数
[Assign SR29,".\vox\"]
-> stRedirectInd
:stRedirectInd
[Equal $RedirectInd,1] //比较整数I1与I2是否相等,Passed------- 成立(两个参数相等)Failed------- 不成立(两个参数不相等)
Passed -> stExit
Failed -> stFeeLimited
:stFeeLimited
[Equal FeeLimited,100]
Passed ->stUserCheckCard //是从业务限费返回的,需进行预付费验证
Failed ->stVerifyCaller //否则就是呼叫开始时的主叫认证
:stVerifyCaller
[Assign $AccountKind,0] //$ACCOUNTKIND 在用户认证后该值是用户的帐号种类
[Assign $AccountID,""] //在用户认证后该值是用户的帐号编码
[Assign $Password,""]
[VerifyUser $AccountID,-1] //IC Card 的认证
Verify(0)->stNotCard //后付费
Verify(150) ->stVerifyPhoneCard //号码规整错误
Verify(151) ->stVerifyPhoneCard //禁开号码
Verify(152) ->stVerifyPhoneCard //预付费
Verify ->stSystemError
Failed ->stSystemError
:stSystemError
[Assign SR1,SR29]
[StrCat SR1, "v030.vox"]
[PlayFile SR1] //对不起,系统忙,暂时无法为您服务,请稍候继续使用本业务
StopPlayBack -> stExit
DialTerminate -> stExit
Failed -> stExit
//★★用户从后付费走到预付费begin//////////////////////////////
:stUserCheckCard
[ClearDTMF] //清除DTMF按键
[SetDTMF "?"]
[Assign SR1,SR29]
[StrCat SR1, "v029.vox"]
[PlayFile SR1] //对不起,你的号码已经达到本月信息费的限额,请改用卡消费,请选择卡的类型:九洲通卡请按1,网通橙卡请按2;申请九洲通卡请按3
StopPlayBack -> stUserCardType
DialTerminate -> stUserCardType
Failed -> stUserCardType
:stUserCardType
[ Digit 5 ]
StopDigits('1') -> stPhoneCardType //正常收号结束,值为接收到的键字符(要用单引号括起)
StopDigits('2') -> stPhoneCardType
StopDigits('3') -> stCardApp
StopDigits -> stUserCheckCard
TimeOut -> stExit
//★★用户从后付费走到预付费end////////////////////////////////
//★★号码绑定判断:是绑定则正常退出,否则进入卡认证
:stVerifyPhoneCard
[Assign $CallerID,SR10]
[ClearDTMF]
[SetDTMF "?"]
[Assign SR1,SR29]
[StrCat SR1, "v011.vox"]
[PlayFile SR1] //请选择卡的类型:九洲通卡请按1,网通橙卡请按2;申请九洲通卡请按3
StopPlayBack -> stPhoneInputCardType
DialTerminate -> stPhoneInputCardType
Failed -> stPhoneInputCardType
:stPhoneInputCardType
[ Digit 5 ]
StopDigits('1') -> stPhoneCardType
StopDigits('2') -> stPhoneCardType
StopDigits('3') -> stCardApp
StopDigits -> stVerifyPhoneCard
TimeOut -> stExit
:stPhoneCardType
[SToI SR0] //把字串S1转换为整数,存于IR0
[Assign $AccountKind,IR0]
-> stVerifyPhone
:stCardApp
[DeallocMediaDevice 1] //释放已申请的媒体设备。如果没有已分配的设备,将会忽略此请求。
[Assign $SMTitle,"REQUESTDATA"]
[Exec 3]
Passed -> stExit
Failed -> stExit
:stVerifyPhone
[Assign $AccountID,""]
[VerifyUser $AccountID,-1] //认证卡号为空表示号码绑定判断
Verify(0) -> stBack //号码绑定
Verify(108) -> stPhoneNotMoney //卡余额不足
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -