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

📄 djsscx.pas

📁 自己写的用delphi封装东劲板卡api.
💻 PAS
📖 第 1 页 / 共 2 页
字号:
          begin
            if Assigned(FOnDialError) then
              FOnDialError(self,ChnlID,-1)
            else
              self.HangUp(ChnlID);  //挂断外线
          end
        end
        else
        begin
          self.DialIn(ChnlID,ChannelIn.ChannelID);
        end;
      end;
    end;
    UserChannel:
    begin
      Caller := self.CheckDTMFNum(DTMFNum) ;
      case Caller of
        1:  //呼叫外线
        begin
          //寻找外线,连接,结束
          //寻找不到外线,放忙音,结束
          InCallOut(ChnlID);
        end;
        2: //呼叫内线
        begin
          Self.InCallIn(ChnlID,DTMFNum);
        end;
        -1:
        begin
          if Assigned(FOnDialError) then
            FOnDialError(self,ChnlID,-1)
          else
            Self.HangUp(ChnlID);
        end;
        else
        begin         

        end;
      end;
    end;
    else
    begin

    end;
  end;
end;

function TDjSSCx.InCallOut(ChnlID: integer): Integer;
var
  ChannelIn:PChannel;
  ChannelOut:PChannel;
begin
  ChannelIn := ChannelList.Items[ChnlID];
  ChannelOut := ChannelList.GetFreeTurnk;
  if (Assigned(ChannelOut)) and (ChannelOut.State = idle) then
  begin
    tc08a32.OffHook(ChannelOut.ChannelID);
    Result:= DjTc081.SetLink(ChannelOut.ChannelID,ChannelIn.ChannelID) ;
    if Result = 0 then
    begin
      if Assigned(FOnLink) then
        FOnLink(self,ChnlID,ChannelOut.ChannelID);
    end;
    ChannelIn.Step := 1001;
    if Assigned(FOnCallOut) then
      FOnCallOut(Self,ChnlID,-1);
  end
  else
  begin
    if Assigned(FOnCallBusy) then
      FOnCallBusy(self,ChnlID,-1)
    else
      self.HangUp(ChnlID);
  end;
end;

function TDjSSCx.InCallOut(Chnlid: integer; DTMFNum: String): integer;
var
  Channel:PChannel ;
  Channel2:PChannel;
begin
  Channel := ChannelList.Items[ChnlID];
  Channel2 := ChannelList.GetFreeTurnk ;
  result := InCallOut(Channel,Channel2,DTMFNum);
end;

{-------------------------------------------------------------------------------
  过程名:    TDjSSCx.HangOff
  作者:      fengfan
  日期:      2006.09.08
  参数:      ChnlID: Integer   振铃摘机坐席
  返回值:    无
-------------------------------------------------------------------------------}
procedure TDjSSCx.HangOff(ChnlID: Integer);
var
  Channel:PChannel ;
//  i:integer;
begin
  Channel := ChannelList.Items[ChnlID];
  DjTc081.OffHook(Channel);
end;

{-------------------------------------------------------------------------------
  过程名:    TDjSSCx.OffHook
  作者:      fengfan
  日期:      2006.09.08
  参数:      ChnlID: Integer       //内线主动摘机
  返回值:    无
-------------------------------------------------------------------------------}
procedure TDjSSCx.OffHook(ChnlID: Integer);
var
  Channel:PChannel ;
begin
  Channel := ChannelList.Items[ChnlID];
  DjTc081.OffHook(Channel); 
end;

function TDjSSCx.InCallOut(Chnlid: integer; CallerPhone,
  DTMFNum: String): integer;
var
  Channel1,Channel2:pChannel;
begin
  Channel1 := ChannelList.Items[ChnlID];
  Channel2 := ChannelList.GetChannelFromPhone(CallerPhone);
  Result := InCallOut(Channel1,Channel2,DTMFNum);
end;

function TDjSSCx.InCallOut(Channel1, Channel2: PChannel;
  DialerPhone: string): integer;
begin
  Channel1.ConnectChannel.ConState := OneConnect ;
  Channel1.ConnectChannel.ConChnlId := Channel2.ChannelID ;
  Channel1.ConnectChannel.CallActive := false;
  Channel1.ConnectChannel.CallerPhone := '';
  Channel1.ConnectChannel.Channeler := Channel2 ;
  Channel1.Step := 1001 ;
  Channel1.CallActor := CallerActor ;
  //Channel2.State := Dailing ;
  Channel2.Ringing := True ;
  Channel2.ConnectChannel.ConState := OneConnect ;
  Channel2.ConnectChannel.ConChnlId := Channel1.ChannelID;
  Channel2.ConnectChannel.CallActive := False;
  Channel2.ConnectChannel.CallerPhone := Channel1.Phone;
  Channel2.ConnectChannel.Channeler := Channel1 ;
  Channel2.CallActor := DialerActor ;
  //Channel2.Step := 0 ;
  Result := DjTc081.CallOut(Channel1,Channel2,DialerPhone);
end;

{-------------------------------------------------------------------------------
  过程名:    TDjSSCx.InCallIn
  作者:      fengfan
  日期:      2006.09.11
  参数:      ChnlID1, ChnlID2: integer  内线呼叫内线,内线号码为参数
  返回值:    integer
-------------------------------------------------------------------------------}
function TDjSSCx.InCallIn(ChnlID1, ChnlID2: integer): integer;
//var
//  Channel1,Channel2:pChannel;
begin
//  Channel1 := ChannelList.GetChannelFromPhone(IntToStr(ChnlID1));
//  Channel2 := ChannelList.GetChannelFromPhone(IntToStr(ChnlID2));
//  InCallIn(Channel1,Channel2);
  Result := 0 ;
end;

procedure TDjSSCx.test;
begin
end;

{-------------------------------------------------------------------------------
  过程名:    TDjSSCx.GetKeepChannel
  作者:      fengfan
  日期:      2006.09.13
  参数:      ChnlInID, ChnlOutID: integer   通过通道号取保持
  返回值:    无
-------------------------------------------------------------------------------}
procedure TDjSSCx.GetKeepChannel(ChnlInID, ChnlOutID: integer);
begin
  GetKeepChannel(ChannelList.Items[ChnlInID],ChannelList.Items[ChnlOutID]);
end;

{-------------------------------------------------------------------------------
  过程名:    TDjSSCx.GetKeepChannel
  作者:      fengfan
  日期:      2006.09.13
  参数:      ChnlInID: integer; DTMFNum: string  通过主叫号码取保持
  返回值:    无
-------------------------------------------------------------------------------}
procedure TDjSSCx.GetKeepChannel(ChnlInID: integer; DTMFNum: string);
var
  ChannelIn,ChannelOut:PChannel ;
begin
  ChannelIn := ChannelList.Items[ChnlInID];
  ChannelOut := ChannelList.GetChannelFromPhone(DTMFNum);
  GetKeepChannel(ChannelIn,ChannelOut);
end;

{-------------------------------------------------------------------------------
  过程名:    TDjSSCx.GetKeepChannel
  作者:      fengfan
  日期:      2006.09.13
  参数:      KeepChannelList: Variant   取系统中保持的通道
  返回值:    integer
-------------------------------------------------------------------------------}
function TDjSSCx.GetKeepChannel(KeepChannelList: Variant): integer;
begin

end;

{-------------------------------------------------------------------------------
  过程名:    TDjSSCx.KeepChannel
  作者:      fengfan
  日期:      2006.09.13
  参数:      ChnlID: Integer   保持来电
  返回值:    无
-------------------------------------------------------------------------------}
procedure TDjSSCx.KeepChannel(ChnlID: Integer);
var
  KeepResult:integer;
begin
  KeepResult := DjTc081.KeepChannel(ChannelList.Items[ChnlID]);
  if Assigned(FOnKeep) then
    FOnKeep(Self,ChnlID,KeepResult);
end;

{-------------------------------------------------------------------------------
  过程名:    TDjSSCx.KeepChannel
  作者:      fengfan
  日期:      2006.09.13
  参数:      SubPhone: string  通过分机号保持来电11
  返回值:    无
-------------------------------------------------------------------------------}
procedure TDjSSCx.KeepChannel(SubPhone: string);
var
  Channel:PChannel ;
begin
  Channel := ChannelList.GetChannelFromPhone(SubPhone) ;
  if Assigned(Channel) then
    KeepChannel(Channel.ChannelID);
end;

procedure TDjSSCx.GetKeepChannel(ChnlIn, ChnlOut: PChannel);
var
  KeepResult:integer;
begin
  if Assigned(FBeforeGetKeep) then
    FBeforeGetKeep(Self,ChnlIn.ChannelID,ChnlOut.ChannelID);
  KeepResult := DjTc081.GetKeepChannel(ChnlIn,ChnlOut);
  if Assigned(FOnGetKeep) then
    FOnGetKeep(self,ChnlIn.ChannelID,ChnlOut.ChannelID,KeepResult);
end;

procedure TDjSSCx.GetKeepChannel(ChnlInPhone, ChnlOutPhone: string);
begin

end;

function TDjSSCx.ClearThree(Channel1, Channel2: PChannel): integer;
var
//  Meeting:PMeeting;
  i:integer;
  Channel3:PChannel;
begin
  if Channel1 = nil then
    Channel1 := DjMC.GetThreeChannel(Channel2.Meeting,Channel2);
  Channel3 := DjMC.GetThreeChannel(Channel1.Meeting,Channel1,Channel2);
  i :=  DjMC.DeleteChannel(Channel2);
  if i = 0 then
  begin
    i := DjMC.DeleteChannel(Channel1);
    if i = 0 then
    begin
      i := DjMC.DeleteChannel(Channel3);
      if i = 0 then
      begin
        //StartPlaySignal(Channel1.ChannelID,SIG_STOP);
        //StartPlaySignal(Channel3.ChannelID,SIG_STOP);
        Channel2.ConnectChannel.ConState := OneConnect;
        Self.HangUp(Channel2.ChannelID);

        if Assigned(self.FOnClearThree) then
          FOnClearThree(Self,Channel1.ChannelID,Channel3.ChannelID,Channel2.ChannelID)
        else
        begin
          DjTc081.SetLink(Channel1.ChannelID,Channel3.ChannelID);
        end;
      end;
    end;
  end;
end;

function TDjSSCx.LinkThree(Channel1, Channel2: PChannel): integer;
var
  Meeting:PMeeting;
  i:integer;
  Channel3:PChannel;
begin
  Meeting :=DjMC.StartMeet(Channel1);
  if Assigned(Meeting) then
  begin
    i := DjMC.AddChannel(Meeting,Channel2);
    if i =0 then
      if Channel1.ConnectChannel.ConState = Connected then
      begin
        Channel3 := Channel1.ConnectChannel.Channeler ;
//        i:= DjTc081.ClearLink(Channel1,Channel3);
        i := DjMC.AddChannel(Meeting,Channel3);
        if i = 0 then
        begin
          Channel1.ConnectChannel.ConState := ThreeState ;
          Channel2.ConnectChannel.ConState := ThreeState ;
          Channel3.ConnectChannel.ConState := ThreeState ;
          if Assigned(self.FOnLinkThree) then
            FOnLinkThree(Self,Channel1.ChannelID,Channel2.ChannelID,Channel3.ChannelID);
        end;
      end;
  end
  else
  begin
    if Assigned(Self.FOnException) then
      FOnException(Self,Channel1.ChannelID,DjE_LINKTHREE);
  end;
end;

function TDjSSCx.ClearThree(ChnlId: integer; CallerPhone: string): integer;
var
  Channel1,Channel2: PChannel;
begin
  Channel1 := ChannelList.Items[ChnlId];
  Channel2 := ChannelList.GetChannelFromPhone(CallerPhone);
  Result := ClearThree(Channel1,Channel2);
end;

function TDjSSCx.LinkThree(ChnlID: integer; CallerPhone: string): integer;
var
  Channel1,Channel2: PChannel;
begin
  Channel1 := ChannelList.Items[ChnlId];
  Channel2 := ChannelList.GetChannelFromPhone(CallerPhone);
  Result := LinkThree(Channel1,Channel2);
end;

function TDjSSCx.ClearThree(ChnlId1, ChnlID2: integer): integer;
var
  Channel1,Channel2: PChannel;
begin
  if ChnlId1 = -1 then
    Channel1 := nil
  else
    Channel1 := ChannelList.Items[ChnlId1];
  Channel2 := ChannelList.Items[ChnlId2];
  ClearThree(Channel1,Channel2);
end;

function TDjSSCx.LinkThree(ChnlID1, ChnlID2: integer): integer;
var
  Channel1,Channel2: PChannel;
begin
  Channel1 := ChannelList.Items[ChnlId1];
  Channel2 := ChannelList.Items[ChnlId2];
  LinkThree(Channel1,Channel2);
end;

procedure TDjSSCx.SetRecord(ChnlId, RecordChnlID, RecordType: integer;
  IsAgc: boolean);
var
  Channel:PChannel;
begin
  Channel := ChannelList.Items[ChnlID];
  if Recorded then
  begin
    Channel.Recorded.IsRecord := True;
    Channel.Recorded.RecordChannel := RecordChnlID;
    Channel.Recorded.RecordType := TRecordType(RecordType);
    Channel.Recorded.IsAGC := IsAgc ;
  end;
end;

procedure TDjSSCx.SetUse(ChnlID: integer; IsUse: Boolean);
var
  Channel:PChannel;
begin
  Channel := ChannelList.Items[ChnlID];
  Channel.IsUse := IsUse ;
end;

procedure TDjSSCx.SetRecordFilePath(RecordFilePath: string);
begin
  RecordCenter.RecordPath := RecordFilePath;
end;

procedure TDjSSCx.SetFilePath(FilePath: Shortstring);
begin
  FRecordFilePath := FilePath;
  if Assigned(RecordCenter) then
    RecordCenter.RecordPath := FilePath ;
end;

procedure TDjSSCx.SetPackRate(aPackRate: Integer);
begin
  FPackRate := aPackRate ;
  //tc08a32.SetPackRate(aPackRate);
end;

procedure TDjSSCx.PlayFile(ChnlID: integer; FileName: string);
begin
  DjTc081.StartPlayFile(ChannelList.Items[ChnlID],FileName);
end;

procedure TDjSSCx.StopPlayFile(ChnlId: integer);
begin
  DjTc081.StopPlayFile(ChannelList.Items[ChnlId]);
end;

end.

⌨️ 快捷键说明

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