📄 外呼.sc
字号:
[StrSub SR19,1,4] // SR19 : 199912201230SS -> SR22 : 1999-12-20 12:30:00
[Assign SR22,SR0]
[StrCat SR22,"-"]
[StrSub SR19,5,6]
[StrCat SR22,SR0]
[StrCat SR22,"-"]
[StrSub SR19,7,8]
[StrCat SR22,SR0]
[StrCat SR22," "]
[StrSub SR19,9,10]
[StrCat SR22,SR0]
[StrCat SR22,":"]
[StrSub SR19,11,12]
[StrCat SR22,SR0]
[StrCat SR22,":00"]
[Assign FD2,SR22] //调用FORMATDATE函数,把字符串的时间变成预播表标准格式 SERVICEBEGINTTIME
[Assign FD4,SR22] //DIALBEGINTTIME
[StrToTime SR19]
[Assign IR19,IR0]
[TimeAdd IR19,3,1]
[TimeToStr IR19,"YMDhm"]
[Assign SR19,SR0]
[StrSub SR19,1,4] // SR19 : 199912201230SS -> SR22 : 1999-12-20 12:30:00
[Assign SR22,SR0]
[StrCat SR22,"-"]
[StrSub SR19,5,6]
[StrCat SR22,SR0]
[StrCat SR22,"-"]
[StrSub SR19,7,8]
[StrCat SR22,SR0]
[StrCat SR22," "]
[StrSub SR19,9,10]
[StrCat SR22,SR0]
[StrCat SR22,":"]
[StrSub SR19,11,12]
[StrCat SR22,SR0]
[StrCat SR22,":00"]
[Assign FD3,SR22] // SERVICESTOPTIME
[Assign FD5,SR22] // DIALENDTIME
[Assign FD6,"0"] //TIMEintERVAL
[Assign FD7,"0"] //intERVALTYPE
[Assign FD8,@PlayCaller] //CALLER
[Assign FD9,$CallerID] //origcaller
->ST_NEXTSTEP
:ST_NEXTSTEP
[Assign FD10,SR28] //CALLED
[Assign FD11, $CallerID ] //ORIGCALLED
[Assign FD12,SR11] //SR11 留言文件
[StrCat FD12,"^"]
[StrCat FD12,SR27 ] //SR27 歌曲文件
[StrCat FD12,"^"]
[StrCat FD12,@PlayCaller ] //送歌业务编码
[StrCat FD12,"^" ]
[StrCat FD12,"999999"] //歌曲编码
[StrCat FD12,"^"]
[StrCat FD12,$CallerID] //计费号码
[StrCat FD12,"^"]
[NowTime]
[StrCat FD12,SR0] //插入表时间
[StrCat FD12,"^"]
[StrCat FD12,SR30] //功能编码
[StrCat FD12,"^"]
[StrCat FD12,$ServiceItemNo]
[StrCat FD12,"^"]
[StrCat FD12,$CallerID]
[StrCat FD12,"^"]
[Equal IfCardUser,1]
Passed ->stAddAccount
Failed ->stNotCard
:stNotCard
[StrCat FD12,"0^"] //后付费用户点歌
->stAddOthers
:stAddAccount
[StrCat FD12,"1^"] //预付费用户点歌
[StrCat FD12,$AccountID] //歌曲文件
[StrCat FD12,"^"]
[StrCat FD12,$Password]
[StrCat FD12,"^"]
[Assign IR0,$AccountKind] //卡类型
[IToS IR0]
[StrCat FD12,SR0]
[StrCat FD12,"^"]
->stAddOthers
:stAddOthers
[SwitchDBA 0]
Passed -> stInsPredialTaskSQL
Failed -> stInsPredialTaskSQL
:stInsPredialTaskSQL
[Assign FD13,@DEFAULTINTERVAL] //REDIALINTERVAL
[Assign FD14,@REDIALCOUNT] //REDIALCOUNT
[Assign FD15,"2"] //TYPE
[Assign FD16,"0"] //SERVICEID 数据局
[Assign FD17,"1"] //ANSWERTYPE
[Assign FD18,"0"] //PRIORITY
[Assign FD19,"0"] //STATUS
[Assign SR1,"INSERT INTO PREDIALTASK ( SERIALNUM,CALLORDER,SERVICEBEGINTIME,SERVICESTOPTIME,DIALBEGINTIME,DIALENDTIME,TIMEINTERVAL,INTERVALTYPE,CALLER,ORIGCALLER,CALLED,ORIGCALLED,PRIVATEDATA,REDIALINTERVAL,REDIALCOUNT,TYPE,SERVICEID,ANSWERTYPE,PRIORITY,STATUS ) VALUES ('"]
[StrCat SR1,FD0]
[StrCat SR1,"',"]
[StrCat SR1,FD1]
[StrCat SR1,",'"]
[StrCat SR1,FD2]
[StrCat SR1,"','"]
[StrCat SR1,FD3]
[StrCat SR1,"','"]
[StrCat SR1,FD4]
[StrCat SR1,"','"]
[StrCat SR1,FD5]
[StrCat SR1,"',"]
[StrCat SR1,FD6]
[StrCat SR1,","]
[StrCat SR1,FD7]
[StrCat SR1,",'"]
[StrCat SR1,FD8]
[StrCat SR1,"','"]
[StrCat SR1,FD9]
[StrCat SR1,"','"]
[StrCat SR1,FD10]
[StrCat SR1,"','"]
[StrCat SR1,FD11]
[StrCat SR1,"','"]
[StrCat SR1,FD12]
[StrCat SR1,"',"]
[StrCat SR1,FD13]
[StrCat SR1,","]
[StrCat SR1,FD14]
[StrCat SR1,","]
[StrCat SR1,FD15]
[StrCat SR1,","]
[StrCat SR1,FD16]
[StrCat SR1,","]
[StrCat SR1,FD17]
[StrCat SR1,","]
[StrCat SR1,FD18]
[StrCat SR1,",0)"]
[ExecSQL SR1]
Passed -> stWriteSDR
Failed -> stExit
TimeOut -> stExit
:stWriteSDR //点播成功后,还需要写SDR文件
[CallFunc &FN_WriteSendSDR]
Returned(0)->stExit
Returned ->stExit
:stExit
[Return 0]
}
//***********************************************************
// 录音子函数 入口参数:SR9,为录音提示语音文件名(包含路径),SR8是录音存放文件夹
// 出口参数:SR11,为带完整路径的录音文件名,SR15是(时间_主叫)格式的无扩展名的语音文件
//***********************************************************
FN_RECORDMESSAGE //录音子函数
{
:stWait
[Assign IR30,1]
[Assign SR9,@VoxPath]
[StrCat SR9,"Rec01.VOX"]
[ClearDTMF]
[SetDTMF "?"]
[PlayFile SR9] //请在"嘟"的一声后录制您的录音,结束请按#号键
StopPlayBack -> STPLAYDU
DialTerminate -> STPLAYDU
Failed -> stExit
:STPLAYDU
[SetRecInit 1] //发嘟的一声
-> STRECORDPATH
:STRECORDPATH
[Assign SR11,@RECORD_PATH]
[StrCat SR11,LocalAreaCode]
[StrCat SR11,"_"]
[StrCat SR15,$CallerID ]
[StrCat SR15,"_" ]
[NowTime ]
[Assign SR10,SR0 ]
[StrSub SR10,1,14 ]
[StrCat SR11,SR0 ]
[StrCat SR11,".VOX"]
-> STRECORDFILE
:STRECORDFILE
[SetDTMF "#" ]
[SetMaxSil 60] //最大静音时长
[RecordFile SR11,1800,0] //带路径录音文件名称
Record-> STIFRECORDFILEOK
DialTerminate -> STIFRECORDFILEOK
TimeOut -> STIFRECORDFILEOK
Failed -> stExit
//-------------------------判断录音是否满意----------------------------------//
:STIFRECORDFILEOK
[ClearDTMF]
[SetDTMF "?"]
[Assign SR9,@VoxPath]
[StrCat SR9, "Rec02.VOX"]
[PlayFile SR9] //您的留言是
StopPlayBack -> STPLAYRECORDFILE
DialTerminate -> STPLAYRECORDFILE
Failed -> stExit
:STPLAYRECORDFILE
[ClearDTMF]
[SetDTMF "?"]
[PlayFile SR11] //录音重放
StopPlayBack -> STIFRECORDFILEOK_1
DialTerminate -> STIFRECORDFILEOK_1
Failed -> stExit
:STIFRECORDFILEOK_1
[ClearDTMF]
[SetDTMF "?"]
[Assign SR9,@VoxPath]
[StrCat SR9, "Rec03.VOX"]
[PlayFile SR9] //确认按1,重录按2,返回按×
StopPlayBack -> STPLAYRECORDYN
DialTerminate -> STPLAYRECORDYN
Failed -> stExit
:STPLAYRECORDYN
[Digit 5]
StopDigits('1') -> stOKExit //确认
StopDigits('2') -> stRecAgain//重录
StopDigits('*') ->STDELETERECORFILE
StopDigits -> STIFRECORDFILEOK_1
TimeOut -> STIFRECORDFILEOK_1
Failed -> STIFRECORDFILEOK_1
:stRecAgain
[EraseFile SR11]
->stWait
:STDELETERECORFILE
[EraseFile SR11]
->stExit
:stOKExit
[Assign IR30,0]
->stExit
:stExit
[Return IR30]
}
FN_SendSong
{
:stWait
[Assign IR15,0]
[ClearDTMF]
[SetDTMF "?"]
[Assign SR9,@VoxPath]
[StrCat SR9,"DS_00.VOX"] //
[PlayFile SR9]
StopPlayBack -> ST_KEY3_PLAYVOICE051
DialTerminate -> ST_KEY3_PLAYVOICE051
Failed -> stNothing
:ST_KEY3_PLAYVOICE051
[ClearDTMF]
[SetDTMF "?"]
[Assign SR9,@VoxPath]
[StrCat SR9,"DS_01.VOX"] //请输入电话,固定电话用户号码前加区号,手机用户必须带0以#结束,返回按×
[PlayFile SR9]
StopPlayBack -> ST_KEY3_USERINPUT1
DialTerminate -> ST_KEY3_USERINPUT1
Failed -> stNothing
:ST_KEY3_USERINPUT1
[SetDTMF "*#"]
[Input 13,30]
StopDigits('#') -> ST_KEY3_CHECKUSERINPUT1_1
StopDigits('*')->stNothing
StopDigits -> ST_KEY3_PLAYVOICE051
TimeOut -> ST_KEY3_PLAYVOICE051
Failed -> ST_KEY3_PLAYVOICE051
[Assign SR28,SR0]
:ST_KEY3_CHECKUSERINPUT1_1
[StrSub SR28,1,1]
[Equal SR0,"0"]
Passed -> ST_KEY3_CHECKUSERINPUT1_2
Failed -> ST_KEY3_PLAYVOICE06
:ST_KEY3_PLAYVOICE06
[ClearDTMF]
[SetDTMF "?"]
[Assign SR9,@VoxPath]
[StrCat SR9,"DS_02.VOX"] //对不起,您输入的电话不正确!
[PlayFile SR9]
StopPlayBack -> ST_KEY3_PLAYVOICE051
DialTerminate -> ST_KEY3_PLAYVOICE051
Failed -> stNothing
:ST_KEY3_CHECKUSERINPUT1_2
[ClearDTMF]
[SetDTMF "?"]
[Assign SR9,@VoxPath]
[StrCat SR9,"DS_03.VOX"] //您输入的号码是
[PlayFile SR9]
StopPlayBack -> ST_KEY3_REPLAY_USERINPUT1
DialTerminate -> ST_KEY3_REPLAY_USERINPUT1
Failed -> stNothing
:ST_KEY3_REPLAY_USERINPUT1
[ClearDTMF ]
[SetDTMF "?" ]
[ParseParam SR28,1,"#" ]
[Assign SR28,SR0]
[MixPlay 3,SR28 ] //播放用户输入
StopPlayBack -> ST_KEY3_IFPHONERIGHT
DialTerminate -> ST_KEY3_IFPHONERIGHT
Failed -> stNothing
:ST_KEY3_IFPHONERIGHT
[ClearDTMF]
[SetDTMF "?"]
[Assign SR9,@VoxPath]
[StrCat SR9,"DS_04.VOX"] //确认请按1,重新输入按2
[PlayFile SR9 ]
StopPlayBack -> ST_TELEPHONECONFIRM
DialTerminate -> ST_TELEPHONECONFIRM
Failed -> stNothing
:ST_TELEPHONECONFIRM
[Digit 5]
[ClearDTMF]
StopDigits('1')-> stJudgeNo //确认号码
StopDigits('2')-> ST_KEY3_PLAYVOICE051 //重新输入
StopDigits('*')-> stNothing //返回
StopDigits-> ST_KEY3_IFPHONERIGHT
TimeOut -> ST_KEY3_IFPHONERIGHT
Failed -> ST_KEY3_IFPHONERIGHT
:stJudgeNo
[StrSub SR28,1,3]
[Equal SR0,"013"]
Passed -> stJudgeMobile //手机处理
Failed -> stJudgePhone //固话处理
:stJudgeMobile
[SwitchDBA 400]
Passed -> stGetMobileAreaCode
Failed -> stNothing
:stGetMobileAreaCode
[StrSub SR28,2,8]
[Assign SR10,"select DISNO from T_CELLNO where STARTCHARS||STARTNO ='"]
[StrCat SR10,SR0]
[StrCat SR10,"'"]
[ExecSQL SR10] //全国中心提取该号码属于的区号
Passed -> stGetAreaCode
Failed -> stNothing
TimeOut -> stNothing
:stGetAreaCode
[Assign MobileAreaCode,FD0]
[Equal MobileAreaCode,LocalAreaCode]
Passed -> stEraseMobileZero
Failed -> ST_KEY3_PLAYVOICE08
:stEraseMobileZero
[StrSub SR28,2,15]
[Assign SR28,SR0]
-> ST_KEY3_PLAYVOICE08
:stJudgePhone
[StrLen LocalAreaCode]
[Assign IR4,IR0]
[StrSub SR28,1,IR4]
[Equal SR0,LocalAreaCode]
Passed -> stErasePhoneAreaCode
Failed -> ST_KEY3_PLAYVOICE08
:stErasePhoneAreaCode
[Inc IR4]
[StrSub SR28,IR4,20]
[Assign SR28,SR0]
-> ST_KEY3_PLAYVOICE08
:ST_KEY3_PLAYVOICE08
[ClearDTMF]
[SetDTMF "?"]
[Assign SR9,@VoxPath]
[StrCat SR9,"DS_05.VOX"] //直接送出1,添加留言送出2,返回*
[PlayFile SR9]
StopPlayBack -> ST_KEY3_USERCONFIRM1
DialTerminate -> ST_KEY3_USERCONFIRM1
Failed -> stNothing
:ST_KEY3_USERCONFIRM1
[Digit 5]
[ClearDTMF]
StopDigits('1')-> ST_KEY3_WRITE_PERDIALTASK //选择直接发送
StopDigits('2')-> ST_KEY3_RECORDVOICE //选择留言发送
StopDigits('*')-> stNothing //返回
StopDigits-> ST_KEY3_PLAYVOICE08
TimeOut -> ST_KEY3_PLAYVOICE08
Failed -> ST_KEY3_PLAYVOICE08
[Assign SR11,""]
:ST_KEY3_RECORDVOICE //调用录音子函数,录用户送故事前的留言
//调用录音子函数,返回语音路径及语音文件名存于SR11中
[CallFunc &FN_RECORDMESSAGE]
Returned(0) -> ST_KEY3_WRITE_PERDIALTASK //录音完毕,写预拨号表
Returned -> stNothing
:ST_KEY3_WRITE_PERDIALTASK
[Assign SR27, SR_ORDERCONTENT]
[NowTime]
[ASSIGN SR19,SR0]
[CallFunc &FN_WRITEPREDIALTASK]
Returned(0)->stExit
Returned ->stNothing
:stNothing
[Assign IR15,1]
->stExit
:stExit
[Return IR15]
}
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----例外;Failed----失败
:stWait
[Assign IR22,1]
[Assign IR23,0] //判断重输卡号次数
[Assign SR29,".\vox\"]
[Equal FeeLimited,100]
Passed ->stVerifyPhoneCard //是从业务限费返回的,需进行预付费验证
Failed ->stVerifyCaller //否则就是呼叫开始时的主叫认证
//★★手机判断begin/////////////////////////////////////////////
//★★如果第1位是0则去掉0,然后看剩下的号码长度是否大于12位,如果大于
//★★12位,则认为是区号+真实号码,否则是真实号码,然后再去掉区号,再
//★★判断第1--3位是否是:13/013的,如果是则走预付费,否则进行南北方判断
//★★如果是南方则预付费,北方则要判断号码是否非法,然后再走后付费
//★★我大致考虑了一下,对电话商务的流程,可以通过以下简单的规则判断主叫号码的合法性。
//★★鉴于目前双区号号码均已经去除了一个区号,剩下的号码无非两种情况:一个区号(不含0)+本地号码
//★★或仅本地号码(特别复杂情况暂不考虑)。这时号码的长度应该如下:
//★★长度为10位或11位
:stVerifyCaller
[Assign $AccountKind,0]
[Assign $AccountID,""]
[Assign $Password,""]
[VerifyUser $AccountID,-1]
Verify(0)->stNotCard //后付费
Verify(150) ->stVerifyPhoneCard //号码规整错误
Verify(151) ->stVerifyPhoneCard //禁开号码
Verify(152) ->stVerifyPhoneCard //预付费
Verify ->stJudgeSouth //系统故障
Failed ->stExit
:stJudgeSouth
[AccessFile @FeeFile,0]
Passed ->stExit //南方则挂机
Failed ->stIfPhoneZeroBegin
:stIfPhoneZeroBegin
[Assign SR10,$CallerID] //判断第一位是不是0,如果是则去掉0
[StrSub SR10,1,1]
[Equal SR0,"0"]
Passed -> stErasePhoneZero
Failed -> stJudgePhoneLen
:stErasePhoneZero
[StrSub SR10,2,30]
[Assign SR10,SR0]
->stJudgePhoneLen
:stJudgePhoneLen //判断长度如果大于12位,则认为是区号+真实号码,否则是真实号码(被去掉0了)
[StrLen SR10]
[Great IR0,11]
Passed -> stJudgePhone
Failed -> stIfMobile
:stJudgePhone
[StrSub SR10,1,1]
[SToI SR0]
[Less IR0,3]
Passed -> stEarsePhone2Bit
Failed -> stEarsePhone3Bit
:stEarsePhone2Bit
[StrSub SR10,3,30]
[Assign SR10,SR0]
-> stIfMobile
:stEarsePhone3Bit
[StrSub SR10,4,30]
[Assign SR10,SR0]
-> stIfMobile
:stIfMobile //判断是否是手机用户,如果是则挂
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -