Supervisão de Linha
Início  Anterior  Próximo



A supervisão de linha permite ao programador identificar e tratar diversos eventos relativos a sinais enviados pela linha, a saber:

·Sinal de Ocupado  
·Detecção de Fax  
·Detecção de sinal de discagem  
·Detecção de sinal de chamada  
·Detecção de Atendimento  

É importante ressaltar que não é aconselhável ficar com estes sinais habilitados o tempo todo, porque é possível que aconteça uma interpretação errada por parte do hardware. Uma situação típica que esclarece bem a questão é com relação à detecção de atendimento.

Ela deve ser habilitada somente no momento que você quiser detectar o atendimento, que via de regra seria após a discagem, e desabilitada logo após o atendimento ter sido detectado. Como o atendimento é detectado através de certos ruídos na linha, se a detecção estiver habilitada durante a conversação, por exemplo, um ruído qualquer durante a conversa pode ser entendido como atendimento.
Isto vale para todos os tipos de detecção, portanto, sempre mantenha habilitada a detecção que seja necessária em um determinado momento.

Sempre quando um destes sinais for detectado, o evento correspondente será chamado.

O sinal de ocupado, fax, tom de discagem e chamada são controlados pelos métodos EnableCallProgress e DisableCallProgress. Já a detecção de atendimento é controlada em separado pelos métodos EnableAnswerDetection e DisableAnswerDetection.

A partir da versão 2.61, o método SetToneTwist permite controlar a sensibilidade de detecção destes tons quando gerados em cima de uma mensagem. Este método deve ser utilizado caso a detecção de tons (notadamente o ocupado) esteja gerando situações de talk-off  

Sinal de Ocupado

Ao ser detectado o sinal de ocupado, o evento OnBusyDetected é gerado, podendo ser tratado pelo usuário da maneira como quiser.

O evento é gerado sempre que for detectado o ocupado, portanto, caso o sinal de ocupado permaneça por muito tempo sem desligar, o programa desviará várias vezes para o OnBusyDetected. Uma saída é logo após o primeiro ocupado, desabilitar a detecção com o método DisableCallProgress.

Outro efeito que pode ocorrer muito raramente é o sinal de ocupado ser detectado durante a conversação. Isto acontece com certos tons e candências de voz . Para prever esta situação, recomendamos ao programador sempre esperar pelo menos dois sinais de ocupado antes de tomar alguma atitude. Isto reduz muito os casos de interpretação errada pois é muito difícil uma voz gerar dois tons de ocupado na mesma cadência do tom real.

É sempre recomendado não fazer tratamentos muito demorados dentro das rotinas que manipulam os eventos para evitar que a biblioteca perca outros eventos que possam chegar em seguida. NUNCA chame MessageBox ou outras janelas modais de dentro destes eventos.

Exemplo:
 
Private Sub VoicerLibX1_OnBusyDetected(Port As Integer)  
    lblStatus.Caption = "Sinal de Ocupado..."  
    VoicerLibX1.DisableCallProgress 1  
End Sub  

Detecção de Fax

A detecção de fax é útil principalmente em aplicações de atendimento automático. É possível fazer uma rotina, por exemplo, que ao perceber um sinal de fax, transfere para o ramal do aparelho de fax. O evento que é gerado neste caso é o OnFaxDetected.

Exemplo:
 
Private Sub VoicerLibX1_OnFaxDetected(Port As Integer)  
    lblStatus.Caption = "Transferindo para o Fax..."  
    'executa comando de flash para transferencia  
    VoicerLibX1.Flash(1,600,1000)  
   'disca para o ramal do fax  
     VoicerLibX1.Dial(1,"202',1000)  
End Sub  
 
Detecção de Atendimento

A VoicerLib permite ao programador detectar quando uma ligação foi atendida do outro lado da linha. Os métodos EnableAnswerDetection e DisableAnswerDetection controlam a ocorrência ou não deste evento.

O evento OnAnswerDetected é gerado sempre quando este sinal for detectado. Uma aplicação exemplo seria uma rotina esperar o atendimento para então discar o número do ramal desejado

Exemplo:

 
Private Sub VoicerLibX1_OnAnswerDetected(Port As Integer)  
    'Primeiro desabilita a detecao para nao entrar aqui  
    'de novo    
    VoicerLibX1.DisableAnswerDetection(1)  
    lblStatus.Caption = "Atendeu, discando para o ramal"  
   VoicerLibX1.Dial(1,"220',0)  
End Sub  
 
A detecção de atendimento pode ter sua sensibilidade alterada através do método SetAnswerSensitivity. Nele é possível passar parâmetros de 1 (menos sensível) até 10 (mais sensível). O padrão é 6. A variação de sensibilidade pode ser necessária em situações onde esteja difícil de pegar o atendimento ou o outro extremo: estar detectando atendimento falso.


Detecção de sinal de discagem

O sinal de discagem é aquele tom contínuo que se houve ao tirar o fone do gancho. Em alguns casos, este sinal pode demorar alguns segundos, principalmente em centrais congestionadas. Este evento é controlado pelos métodos EnableCallProgress e DisableCallProgress.

O evento OnDialToneDetected é gerado sempre quando este sinal for detectado.

Em uma situação prática, é mais correto esperar o tom de discagem para então utilizar o método Dial para discar e não atender e discar em seguida.

Exemplo:

 
'Habilita Supervisão de linha   
'e toma a linha para discar a partir do click do botão  
Private Sub cmdAtende_Click()  
    VoicerLibX1.EnableCallProgress(1)  
    x = VoicerLibX1.PickUp(1,0)  
End Sub  
 
'Quando o tom de discagem for detectado  
'esta rotina é chamada  
Private Sub VoicerLibX1_OnDialToneDetected(Port as Integer)  
   'disca  
   VoicerLibX1.Dial("0,72952557")  
End Sub  
 
Detecção de sinal de chamada

Ao discar para um determinado número, sempre ouvimos o sinal de chamada, que indica que o telefone está tocando do "outro lado" da linha. Este evento também é controlado pelos métodos EnableCallProgress e DisableCallProgress.

Com este sinal podemos contar quantos toques são dados até a ligação ser atendida ou ainda detectar que a ligação não foi completada (no caso de o sinal não ser detectado).

O evento OnCalling ocorre sempre quando o sinal for detectado, o que faz com que ele seja chamado várias vezes até a ligação ser atendida.

Exemplo:

 
Private Sub VoicerLibX1_OnCalling(Port As Integer)  
nToques = nToques + 1  
lblStatus.Caption = "Chamando... " & nToques  
if nToques = 5 then  
   VoicerLibX1.HangUp(1)  
End if  
End Sub  
 
Neste exemplo, após o 5º toque, o sistema desiste e desliga. (Supor que existe uma variável global chamada nToques inicializada com zero)