Atendimento de uma ligação
Início  Anterior  Próximo



Neste exemplo, todas as ligações sempre serão atendidas no primeiro toque. Neste caso, o primeiro evento que deve ser codificado é o OnRing que é gerado sempre que chegar um tom de ring pela linha/ramal.

No código abaixo utilizamos o case .. of do Pascal pois é muito mais legível que uma seqüência de if aninhados (ifs dentro de ifs!) principalmente quando houverem muitos estados a tratar. O Visual Basic tem o equivalente Select Case e o C/C++ tem o switch.  
Caso sua linguagem não tenha uma estrutura equivalente, só caberá utilizar o if...  
 
procedure TForm1.voice1RingDetected(Sender: TObject; Port:   
                                                Smallint);  
begin  
  case Estado[Port] of  
     NADA:    //Só entra aqui se estiver no estado de espera  
     begin  
        //Limpa o buffer de digitos da porta corrente  
        voice1.ClearDigits(Port);  
        //comentario na janela de status  
        InsereDado(Port,'Atendeu');  
        //Atende a ligação  
        voice1.PickUp(Port,4000);  
        //indica para esperar DTMF  
        voice1.SetDetectionType(Port,dtDTMF);  
     end;  
  end;  
end;  
 
Repare que somente o Estado NADA é tratado, ou seja, se chegar um ring e a variável Estado estiver com outro valor, nada será feito.

Dentro do case do Estado NADA, temos a chamada ao método ClearDigits que limpa o buffer interno de dígitos. Este buffer que conterá os números digitados pelo usuário que ligou para a placa.

Em seguida é chamado o método PickUp que efetivamente atende a ligação. É passado como parâmetros a porta e a pausa após atendimento de 4 segundos (4000). Esta pausa é necessária para prever situações onde o PABX demora algum tempo para comutar a linha com o ramal, ou mesmo nos casos onde existe um bloqueador de chamadas à cobrar (como é o caso do atendimento da Digivoice). A continuação do atendimento será efetuada no evento OnAfterPickUp que é gerado após os 4 segundos passados no método PickUp.

Também chamamos aqui o método SetDetectionType passando a porta e o parâmetro dtDTMF que é necessário para que as placas entendam os tons gerados pelo telefone do cliente. Este método é chamado aqui mas também poderia ser chamado no evento OnAfterPickUp.