⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 外呼.sc

📁 用于收费语音服务的电话充值业务
💻 SC
📖 第 1 页 / 共 2 页
字号:
	[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 + -