Fórum de Suporte Digivoice
Você não está logado.
Amigos,
tenho uma linha E1 da Embratel uma VB6060 e uma Central Intelbras 95 Digital.
Estou iniciando desenvolvimento de uma URA.
Ja consegui fazer funcionar a URA porem nao consegui transferir para o PABX.
Alguem tem uma dica? É o CustomCAS que devo utilizar? Tem algum exemplo em delphi?
Obrigado,
Vinicius
Offline
Vinicius,
o Intelbras, dificilmente terá a opção de ramal CAS, portanto a saida é a conexão via passthrough, ou seja, o E1 da Embratel entra na URA, por exemplo do primeiro E1 da VB6060 e o segundo E1 da placa VB6060 é conectado no PABX. Inicialmente de maneira independente. Ao receber uma chamada a URA trata e ao ter que transferir uma chamada faz uma chamada no segundo E1 para o PABX . Após o atendimento você terá que fazer a comutação do audio do primeiro E1 para o segundo com LocalBridgeConnect (que só comuta o audio). O R2 você terá que fazer na mão no evento OnR2Received.
Private Sub vlib_OnR2Received(ByVal Port As Integer, ByVal Signal As Integer)
Dim sPos As String
If Port <= 30 Then
vlib.SendR2Command Port + 30, Signal
Else
vlib.SendR2Command Port - 30, Signal
End If
End Sub
habilite o recebimento de R2 com o comando vlib.SendR2Command p, R2_ENABLEDETECTION
ou tratar os eventos do E1, tipo busy detected etc. e desligar o outro canal. Só não esqueça de tirar o localbridge dos canais com LocalBridgeDisconnect.
Obrigada
Equipe Digivoice
Procedure TVVSTeleCom.HabilitarE1;
var
nRet,i,j,k : Integer;
begin
try
for j:=1 to 60 do
begin
//Cria thread do protocolo R2D
nRet := vlib.CreateE1Thread(j);
case nRet of
DG_EXIT_SUCCESS:
Begin
E1Iniciada := True;
GeraLog(j,'Thread E1 iniciada com sucesso');
End;
DG_ERROR_DRIVER_CLOSED:
GeraLog(j,'O driver não foi iniciado');
DG_ERROR_THREAD_ALREADY_RUNNING:
GeraLog(j,'A thread já havia sido iniciada anteriormente');
DG_FEATURE_NOT_SUPPORTED:
GeraLog(j,'Comando enviado para uma placa FXO e não E1');
DG_ERROR_FIFO_UNAVAILABLE:
GeraLog(j,'Erro na criação da estrutura de comunicação da thread');
DG_ERROR_COULD_NOT_CREATE_THREAD:
GeraLog(j,'Falha na inicialização da thread');
end;
end;
for i:=1 to vlib.GetCardsCount do
begin
//Configura o H100 como placa MASTER com sincronismo externo no E1 A (Primeiro E1)
vlib.SetCardSyncMode(i, SYNC_LINE_A);
//Configura para que o evento OnE1Alarm ocorra automaticamente sempre quando um alarme for detectado
vlib.SetAlarmMode(i, ALARM_AUTOMATIC_NOTIFY);
end;
for k:=1 to 60 do
begin
vlib.CreateCallProgress(k,'cp_default.cfg');
vlib.EnableCallProgress(k,CP_ENABLE_ALL);
//Categoria do Assinante
vlib.ConfigE1Thread(k, E1CFG_GROUP_II,1);
vlib.SetDetectionType(k, DETECT_DTMF,1);
//Seta o Bina
vlib.SetPortID(k, '2134059500');
//Numero total de digitos a receber
vlib.ConfigE1Thread(k, E1CFG_MAXDIGITS_RX,4);
//Status Grupo B
vlib.ConfigE1Thread(k, E1CFG_GROUP_B,1);
//Em ligacoes de entrada, pede bina apos o 2 digito
vlib.ConfigE1Thread(k, E1CFG_SEND_ID_AFTERDIGIT,2);
end;
except
Application.MessageBox('Erro na Criação das Threads E1', 'Except', mb_OK);
end;
end;
Offline
Desculpe:
Mensagem completa:
Obrigado pela resposta.
Ainda não consegui transferir ligação externa para interna.
Vou explicar como é a aplicação.
1) Usuario recebe Prompt
2) Usuario recebe menu
3) Aplicacao deve transferir para alguns ramal
Parei neste item pois quando executo o MakeCall recebo os eventos:
50 - OnCallStateChange -> Flash Inicial para Transferencia
50 - OnCallStateChange -> Esperando tom de discagem...
Como devo usar o LocaBridgeConnect?
No inicio da aplicacao Ligo 1 com 31, 2 com 32 e assim por diante? ou somente quando precisar?
No meu teste fiz assim:
Logo apos receber opcao do menu..
Executo o metodo abaixo:
O parametro porta é a porta que recebi a ligação...executo makecall com outra porta.
Se estiver correto tenho a duvida...se a "porta+30" estiver ocupada?
O ideal seria eu verificar uma porta livre ou assim esta correto?
Se quiser posso enviar todo projeto para voces...
Procedure TVVSTeleCom.TransfereParaGrupo(Porta: Integer; Grupo: String);
var
nRet: Integer;
Begin
GeraLog(Porta,'Transfere para Grupo('+Grupo+')');
nRet:= vlib.SetCallNoAnswerRingCount(Porta,10);
if nRet <> DG_EXIT_SUCCESS then
GeraLog(Porta,'Erro quantidade de rings a serem considerados como não atendimento. Código: '+ inttostr(nRet));
// Configura as opções após a deteção de atendimento do método MakeCall
nRet:= vlib.SetCallAfterAnswer(Porta, '',
1000, True);
if nRet <> DG_EXIT_SUCCESS then
GeraLog(Porta,'Erro nas configurações das opções após a deteção de atendimento do método MakeCall . Código: '+ inttostr(nRet));
// Efetua chamada passando as opções do MakeCall
GeraLog(Porta,'Executando MakeCall');
vlib.StopRecordFile(Porta);
vlib.DisableInputBuffer(Porta);
nRet:= vlib.MakeCall(Porta+30, ctWithFlash,Grupo,'Transferindo para grupo('+Grupo+')...', true,dtTone);
vlib.LocalBridgeConnect(Porta,Porta+30);
// if nRet <> DG_EXIT_SUCCESS then
// GeraLog(Porta,'Erro durante a execução do MakeCall. Chamada externa.');
End;
Codigo usado apois iniciar o voice lib:
Procedure TVVSTeleCom.HabilitarE1;
var
nRet,i,j,k : Integer;
begin
try
for j:=1 to 60 do
begin
//Cria thread do protocolo R2D
nRet := vlib.CreateE1Thread(j);
case nRet of
DG_EXIT_SUCCESS:
Begin
E1Iniciada := True;
GeraLog(j,'Thread E1 iniciada com sucesso');
End;
DG_ERROR_DRIVER_CLOSED:
GeraLog(j,'O driver não foi iniciado');
DG_ERROR_THREAD_ALREADY_RUNNING:
GeraLog(j,'A thread já havia sido iniciada anteriormente');
DG_FEATURE_NOT_SUPPORTED:
GeraLog(j,'Comando enviado para uma placa FXO e não E1');
DG_ERROR_FIFO_UNAVAILABLE:
GeraLog(j,'Erro na criação da estrutura de comunicação da thread');
DG_ERROR_COULD_NOT_CREATE_THREAD:
GeraLog(j,'Falha na inicialização da thread');
end;
end;
for i:=1 to vlib.GetCardsCount do
begin
//Configura o H100 como placa MASTER com sincronismo externo no E1 A (Primeiro E1)
vlib.SetCardSyncMode(i, SYNC_LINE_A);
//Configura para que o evento OnE1Alarm ocorra automaticamente sempre quando um alarme for detectado
vlib.SetAlarmMode(i, ALARM_AUTOMATIC_NOTIFY);
end;
for k:=1 to 60 do
begin
vlib.CreateCallProgress(k,'cp_default.cfg');
vlib.EnableCallProgress(k,CP_ENABLE_ALL);
//Categoria do Assinante
vlib.ConfigE1Thread(k, E1CFG_GROUP_II,1);
vlib.SetDetectionType(k, DETECT_DTMF,1);
//Seta o Bina
vlib.SetPortID(k, '2134059500');
//Numero total de digitos a receber
vlib.ConfigE1Thread(k, E1CFG_MAXDIGITS_RX,4);
//Status Grupo B
vlib.ConfigE1Thread(k, E1CFG_GROUP_B,1);
//Em ligacoes de entrada, pede bina apos o 2 digito
vlib.ConfigE1Thread(k, E1CFG_SEND_ID_AFTERDIGIT,2);
end;
except
Application.MessageBox('Erro na Criação das Threads E1', 'Except', mb_OK);
end;
end;
Offline
Vinicius,
Você poderia entrar em contato com o suporte para que possamos solucionar seu problema?
Fone: 11-2191-6363
Procurar por Luiz Mello.
Att,
Luiz
Offline
Oi Vinicius,
O Luiz te mandou um e-mail, mas para feedback aqui no fórum informo que publiquei um Exemplo de PassThrough com E1 em Delphi em nosso site que pode ajuda-lo.
Qualquer dúvida estamos a disposição.
Equipe Digivoice