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

📄 faxfunc.pas

📁 三汇CTI示例程序源码
💻 PAS
📖 第 1 页 / 共 3 页
字号:
                       TrunkCh[i].sCallerID:=StrPas(Mem);
                  end
                  else
                      TrunkCh[i].sCallerID:='No CallerID';
                  FreeMem(Mem);
                  MainForm.ListBox1.Items.Add(format('@@ %d通道检测到电话呼入,其号码为%s,系统摘机。',[i,TrunkCh[i].sCallerID]));
                  SsmPickup(i);
                  TrunkCh[i].nStep:=TRUNK_WAIT_RCV_DTMF;
             end;

        end;
        TRUNK_PICK_UP:;
        TRUNK_DAIL:  begin

                          wnResult:=SsmChkAutoDial(i);

                          if (TrunkCh[i].nnResult<> wnResult) then
                          begin
                               TrunkCh[i].nnResult:=wnResult;
                               case wnResult of
                                    0:;
                                    1:MainForm.ListBox1.Items.Add('正在拨号。。。');
                                    2:MainForm.ListBox1.Items.Add('回铃');
                                    3:begin
                                            MainForm.ListBox1.Items.Add('没有检测到拨号音,自动拨号操作结束。');
                                            TrunkCh[i].nStep:=TRUNK_WAIT_HANGUP;
                                      end;
                                    4:begin
                                          MainForm.ListBox1.Items.Add('被叫用户忙');
                                          SsmHangup(i);
                                            TrunkCh[i].InUse:=0;
                                            TrunkCh[i].nStep:=TRUNK_PRE_IDLE;
                                            SsmSetDtmfStopPlay(i,False);
                                            SsmStopRecToFile(i);
                                            if(TrunkCh[i].bCircleSendingFax)then
                                            begin
                                                  TrunkCh[i].nTimeOut :=0;
                                            end;
                                            if(TrunkCh[i].bMultSendFax)then
                                            begin
                                                 TrunkCh[i].nTimeOut :=0;
                                            end;
                                      end;
                                    5:begin
                                          MainForm.ListBox1.Items.Add('听到回铃声后线路上无声,自动拨号操作结束。');
                                          TrunkCh[i].nStep:=TRUNK_WAIT_HANGUP;
                                      end;
                                    6:begin
                                          MainForm.ListBox1.Items.Add('线路上没有声音,自动拨号操作结束。');
                                          TrunkCh[i].nStep:=TRUNK_WAIT_HANGUP;
                                      end;
                                    7:begin
                                          MainForm.ListBox1.Items.Add('被叫用户摘机(检测到话音),自动拨号操作结束。');
                                          MainForm.ListBox1.Items.Add('等待F2信号');
                                          SsmClearRxDtmfBuf(i);
                                          TrunkCh[i].nTimeOut:=0;
                                          SsmPlayFile(i,'step1.voc',6,0,$ffffffff);

                                          TrunkCh[i].nStep:=TRUNK_WAIT_RCV_DTMF;
                                      end;
                                    8:begin
                                          MainForm.ListBox1.Items.Add('被叫用户摘机(检测到F1频率的应答信号),自动拨号操作结束。');
                                          MainForm.ListBox1.Items.Add('等待F2信号。。。');
                                          TrunkCh[i].nTimeOut:=0;
                                          TrunkCh[i].nStep:=TRUNK_WAIT_F2;
                                      end;
                                    9:begin
                                          MainForm.ListBox1.Items.Add(' 被叫用户摘机(检测到F2频率的应答信号),自动拨号操作结束。只有模拟外线通道才会有此返回值。 ');
                                          TrunkCh[i].nTimeOut:=0;
                                          TrunkCh[i].nStep:=TRUNK_TO_FAX_TX;
                                      end;
                                    //10:MainForm.ListBox1.Items.Add('被叫在指定时间内没有摘机,自动拨号操作结束。该时间在系统配置文件[SystemConfig]段中的“MaxWaitAutoDialAnswerTime=”配置项中指定,缺省值为60秒。自动拨号操作结束');
                                    10,11:begin
                                            MainForm.ListBox1.Items.Add('自动拨号因为某种原因失败。详细的失败原因可以通过函数SsmGetAutoDialFailureReason获得');
                                            SsmHangup(i);
                                            TrunkCh[i].InUse:=0;
                                            TrunkCh[i].nStep:=TRUNK_PRE_IDLE;
                                            SsmSetDtmfStopPlay(i,False);
                                            SsmStopRecToFile(i);
                                            TrunkCh[i].nnResult:=$ff;
                                            if(TrunkCh[i].bCircleSendingFax)then
                                            begin
                                                  TrunkCh[i].nTimeOut :=0;
                                            end;
                                            if(TrunkCh[i].bMultSendFax)then
                                            begin
                                                 TrunkCh[i].nTimeOut :=0;
                                            end;
                                       end;
                                    12:MainForm.ListBox1.Items.Add('被叫用户号码为空号,自动拨号操作结束。');
                                    13:MainForm.ListBox1.Items.Add('基本祯同步丢失超过100ms');
                               else;
                               end;  //end case
                          end;
                     end;
        TRUNK_WAIT_RCV_DTMF:
        begin
             if SsmGetChType(i)=0then
             begin
                  if SsmGetLineVoltage(i)<3then
                  begin
                       dec(TrunkCh[i].nA_LineVoltage);
                       if(TrunkCh[i].nA_LineVoltage<=0)then
                       begin
                            MainForm.ListBox1.Items.Add('自动拨号因为某种原因失败。详细的失败原因可以通过函数SsmGetAutoDialFailureReason获得');
                            SsmHangup(i);
                            TrunkCh[i].InUse:=0;
                            TrunkCh[i].nStep:=TRUNK_PRE_IDLE;
                            SsmSetDtmfStopPlay(i,False);
                            SsmStopRecToFile(i);
                            TrunkCh[i].nnResult:=$ff;
                            TrunkCh[i].nA_LineVoltage :=15;
                            if(TrunkCh[i].bCircleSendingFax)then
                            begin
                                  TrunkCh[i].nTimeOut :=0;
                            end;
                            if(TrunkCh[i].bMultSendFax)then
                            begin
                                 TrunkCh[i].nTimeOut :=0;
                            end;
                       end;
                  end
                  else begin
                       inc(TrunkCh[i].nA_LineVoltage);
                       if(TrunkCh[i].nA_LineVoltage>=15)then
                       begin
                            TrunkCh[i].nA_LineVoltage :=15;
                       end;
                  end;
             end;
             inc(TrunkCh[i].nTimeOut);
             if(TrunkCh[i].nTimeOut>=20*60*3)then
             begin
                  MainForm.ListBox1.Items.Add(inttostr(i)+'通道'+'传真信号超时,挂机退出。');
                  SsmHangup(i);
                  TrunkCh[i].InUse:=0;
                  TrunkCh[i].nStep:=TRUNK_PRE_IDLE;
                  SsmSetDtmfStopPlay(i,False);
                  SsmStopRecToFile(i);
                  TrunkCh[i].nnResult:=$ff;
                  if(TrunkCh[i].bCircleSendingFax)then
                  begin
                       TrunkCh[i].nTimeOut :=0;
                  end;
                  if(TrunkCh[i].bMultSendFax)then
                  begin
                       TrunkCh[i].nTimeOut :=0;
                  end;
             end
             else begin
             TrunkCh[i].InUse :=5;
             SsmSetDtmfStopPlay(i,True);
             if SsmCheckPlay(i)>0then
             begin
                  SsmPlayFile(i,'step1.voc',6,0,$ffffffff);
             end;
             if SsmGet1stDtmfClr(i,@sDtmf)=1then
             begin
             case sDtmf of

             '1':   //recieve fax
               begin
                    SsmStopPlayFile(i);
                    SsmPlayFile(i,'step2.voc',6,0,$ffffffff);
                    TrunkCh[i].nTimeOut:=0;
                    TrunkCh[i].nStep:= TRUNK_WAIT_F2;
               end;
               '2':     //send fax
               begin
                    SsmStopPlayFile(i);
                    SsmPlayFile(i,'step2.voc',6,0,$ffffffff);
                    TrunkCh[i].nTimeOut:=0;
                    TrunkCh[i].nStep:= TRUNK_WAIT_F1;
               end;
             else;
             end;
             end;
             if SsmGetToneAnalyzeResult(i)=7 then
             begin
                  SsmStopPlayFile(i);
                  MainForm.ListBox1.Items.Add('等到F1信号开始接收传真');
                  TrunkCh[i].InUse :=4;
                  TrunkCh[i].nTimeOut:=0;
                  TrunkCh[i].nStep:=TRUNK_TO_FAX_RX;
             end
             else if(SsmGetToneAnalyzeResult(i)=8)then
             begin
                  SsmStopPlayFile(i);
                  MainForm.ListBox1.Items.Add('等到F2信号开始发送传真');
                  TrunkCh[i].InUse :=4;
                  TrunkCh[i].nTimeOut:=0;
                  TrunkCh[i].nStep:=TRUNK_TO_FAX_TX;
             end;
             if SsmGetChState(i)=7 then
             begin
                  MainForm.ListBox1.Items.Add('对端先挂机!!');
                  SsmHangup(i);
                  TrunkCh[i].InUse:=0;
                  TrunkCh[i].nStep:=TRUNK_PRE_IDLE;
                  SsmSetDtmfStopPlay(i,False);
                  SsmStopRecToFile(i);
                  TrunkCh[i].nnResult:=$ff;
                  if(TrunkCh[i].bCircleSendingFax)then
                  begin
                       TrunkCh[i].nTimeOut :=0;
                  end;
                  if(TrunkCh[i].bMultSendFax)then
                  begin
                       TrunkCh[i].nTimeOut :=0;
                  end;
             end;
             end;
        end;
        TRUNK_WAIT_F1:
        begin
                          TrunkCh[i].InUse :=6;
                          TrunkCh[i].nTimeOut:=TrunkCh[i].nTimeOut+1;
                          if SsmGetToneAnalyzeResult(i)=7 then
                          begin
                              MainForm.ListBox1.Items.Add('等到F1信号开始接收传真');
                              TrunkCh[i].InUse :=4;
                              TrunkCh[i].nStep:=TRUNK_TO_FAX_RX;
                          end;
                          if TrunkCh[i].nTimeOut>800 then
                          begin
                              MainForm.ListBox1.Items.Add('未等到F1信号,强行接收传真');
                              TrunkCh[i].nStep:=TRUNK_TO_FAX_RX;
                          end;
                          if SsmGetChState(i)=7 then
                          begin
                  MainForm.ListBox1.Items.Add('对端先挂机!!');
                  SsmHangup(i);
                  TrunkCh[i].InUse:=0;
                  TrunkCh[i].nStep:=TRUNK_PRE_IDLE;
                  SsmSetDtmfStopPlay(i,False);
                  SsmStopRecToFile(i);
                  TrunkCh[i].nnResult:=$ff;
                  if(TrunkCh[i].bCircleSendingFax)then
                  begin
                       TrunkCh[i].nTimeOut :=0;
                  end;
                  if(TrunkCh[i].bMultSendFax)then
                  begin
                       TrunkCh[i].nTimeOut :=0;
                  end;
             end;
        end;
        TRUNK_WAIT_F2:begin
                          TrunkCh[i].InUse :=6;
                          TrunkCh[i].nTimeOut:=TrunkCh[i].nTimeOut+1;
                          if SsmGetToneAnalyzeResult(i)=8 then
                          begin
                              MainForm.ListBox1.Items.Add('等到F2信号开始发送传真');
                              TrunkCh[i].InUse :=4;
                              TrunkCh[i].nStep:=TRUNK_TO_FAX_TX;
                          end;
                          if TrunkCh[i].nTimeOut>3*20 then
                          begin
                              MainForm.ListBox1.Items.Add('未等到F2信号,强行发送传真');
                              TrunkCh[i].nStep:=TRUNK_TO_FAX_TX;
                          end;
                          if SsmGetChState(i)=7 then
                          begin
                               MainForm.ListBox1.Items.Add('对端先挂机!!');
                               SsmHangup(i);
                               TrunkCh[i].InUse:=0;
                               TrunkCh[i].nStep:=TRUNK_PRE_IDLE;
                               SsmSetDtmfStopPlay(i,False);
                               SsmStopRecToFile(i);
                               TrunkCh[i].nnResult:=$ff;
                               if(TrunkCh[i].bCircleSendingFax)then
                               begin
                                    TrunkCh[i].nTimeOut :=0;
                               end;
                               if(TrunkCh[i].bMultSendFax)then
                               begin
                                     TrunkCh[i].nTimeOut :=0;
                               end;
                         end;
                      end;
        TRUNK_TO_FAX_RX:
        begin
                            Fax_Ch:=myGetAnIdleFaxChannel();
                         if Fax_Ch=-1 then
                         begin
                              MainForm.ListBox2.Items.Add('没有传真资源通道无法接收传真');
                              TrunkCh[i].nStep:=TRUNK_WAIT_HANGUP;
                         end else begin
                              TrunkCh[i].nToFaxCh:=Fax_Ch;
                              FAXCh[Fax_Ch].InUse := 1;
                              FAXCh[Fax_Ch].EnCalled :=False;
                              SsmTalkWith(i,TrunkCh[i].nToFaxCh);
                              //Sleep(50);
                              SsmFaxStartReceive(TrunkCh[i].nToFaxCh,PChar(TrunkCh[i].sFileCuDerection +'\'+TrunkCh[i].sSoundFileName + '.tif'));
                              MainForm.ListBox2.Items.Add(format('正在接收的传真文件将命名为%s,并保存在当前目录下。',[TrunkCh[i].sFileCuDerection +'\'+TrunkCh[i].sSoundFileName + '.tif']));
                              TrunkCh[i].InUse :=7;
                              TrunkCh[i].nTimeOut :=0;
                              TrunkCh[i].nStep:=TRUNK_WAIT_FAX_END;
                         end;

        end;
        TRUNK_TO_FAX_TX:
                    begin
                         Fax_Ch:=myGetAnIdleFaxChannel();
                         if Fax_Ch=-1 then
                         begin
                              MainForm.ListBox2.Items.Add('没有传真资源通道无法发送传真');
                              TrunkCh[i].nStep:=TRUNK_WAIT_HANGUP;
                         end else begin
                              TrunkCh[i].nToFaxCh:=Fax_Ch;
                              FAXCh[Fax_Ch].InUse := 1;
                              FAXCh[Fax_Ch].EnCalled :=False;
                              SsmTalkWith(i,TrunkCh[i].nToFaxCh);
                              //Sleep(50);
                              if(TrunkCh[i].bMultSendFax)then
                              begin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -