Tratamento de Entrada de Dados
|
Início Anterior Próximo |
|
procedure TForm1.voice1PlayStop(Sender: TObject; Port,
|
StopStatus: Smallint);
|
Begin
|
case StopStatus of
|
ssNormal: //MENSAGEM FOI ATE O FIM
|
begin
|
case Estado[Port] of
|
BOASVINDAS:
|
begin
|
//aqui espera 1 digito que pode ser a opção
|
//de menu ou o primeiro digito do ramal
|
InsereDado(Port,'Esperando Digitação');
|
Estado[Port] := ESPERA_DIGITOS_MENU;
|
voice1.GetDigits(Port,1,'',5000,5000);
|
//habilita espera de ocupado
|
voice1.EnableCallProgress(port);
|
//Habilita detecção de pulso
|
voice1.EnablePulseDetection(Port);
|
end;
|
end;
|
end;
|
end;
|
procedure TForm1.voice1DigitsReceived(Sender: TObject; Port,
|
Status: Smallint);
|
var
|
ret: integer;
|
begin
|
case Status of
|
EdMaxDigits,
|
edDigitOverMessage: //msg interrompida por digito
|
begin
|
case Estado[Port] of
|
ESPERA_DIGITOS_MENU,
|
BOASVINDAS:
|
begin
|
InsereDado(Port,
|
'Tratamento de Digito após mensagem');
|
TrataPrimeiroDigito(Port); {<- IMPORTANTE}
|
end;
|
end;
|
end;
|
end;
|
|
end;
|
|
procedure TForm1.TrataPrimeiroDigito(Port: smallint);
|
begin
|
if Copy(voice1.ReadDigits(Port),1,1) = '2' then
|
begin
|
InsereDado(Port,'Esperando resto do ramal');
|
Estado[Port] := ESPERA_DIGITOS_RAMAL;
|
voice1.GetDigits(1,3,'',5000,5000);
|
end
|
else
|
begin
|
nOpMenu[Port] :=
|
StrToInt(Copy(voice1.ReadDigits(Port),1,1));
|
|
if rcMenu[nOpMenu[Port]].sRamalMenu <> '' then
|
begin
|
//disca direto
|
//adiciona o ramal
|
lstRamal.Add(rcMenu[nOpMenu[Port]].sRamalMenu);
|
//adiciona fuga
|
lstRamal.Add(RAMAL_FUGA1);
|
lstRamal.Add(RAMAL_FUGA2);
|
Estado[Port] := TRANSFERENCIA;
|
nEstadoRamal[Port] := LIVRE;
|
//aguarde um instante...
|
voice1.PlayFile(Port,'sisaguar.sig','');
|
end
|
else
|
if rcMenu[nOpMenu[Port]].sFrase <> '' then
|
begin
|
voice1.ClearDigits(Port);
|
Estado[Port] := SUBMENU;
|
//fala submenu
|
voice1.PlayFile(Port,
|
rcMenu[nOpMenu[Port]].sFrase,
|
rcMenu[nOpMenu[Port]].sOpcoesSubMenu);
|
|
end
|
else
|
begin
|
//estrutura errada, sem ramal nem submenu
|
//então vai parafuga
|
(.....)
|
end;
|
end;
|
end;
|
|
![]() |
|
TrcMenu = record
|
sRamalMenu: string; //se for vazio é pq tem submenu
|
sFrase: string; //preenhida no caso de submenu
|
sOpcoesSubMenu: string;
|
end;
|
|
|
Public
|
(......)
|
rcMenu: array[0..9] of TrcMenu;
|
sRamalSubMenu:array[0..9,0..9] of string;
|
(......)
|
|
sRamalSubMenu[op_menu,op_submenu].
|
|
procedure TForm1.FormShow(Sender: TObject);
|
(.........)
|
//estrutura de menus e submenus
|
rcMenu[3].sRamalMenu := '';
|
rcMenu[3].sFrase := 'sub_coml.sig';
|
rcMenu[3].sOpcoesSubMenu := '12';
|
rcMenu[4].sRamalMenu := '';
|
rcMenu[4].sFrase := 'sub_sup.sig';
|
rcMenu[4].sOpcoesSubMenu := '12';
|
rcMenu[5].sRamalMenu := '';
|
rcMenu[5].sFrase := 'sub_fax.sig';
|
rcMenu[5].sOpcoesSubMenu := '12';
|
rcMenu[6].sRamalMenu := '241';
|
rcMenu[6].sFrase := '';
|
//submenu
|
sRamalSubMenu[3][1] := '231'; //cons final
|
sRamalSubMenu[3][2] := '220'; //revendas
|
sRamalSubMenu[4][1] := '212'; //sup soft
|
sRamalSubMenu[4][2] := '211'; //tecnica
|
sRamalSubMenu[5][1] := '202'; //fax coml
|
sRamalSubMenu[5][2] := '235'; //fax tec
|
(.........)
|
end;
|
(....)
|
if Copy(voice1.ReadDigits(Port),1,1) = '2' then
|
begin
|
InsereDado(Port,'Esperando resto do ramal');
|
Estado[Port] := ESPERA_DIGITOS_RAMAL;
|
voice1.GetDigits(Port,3,'',5000,5000);
|
end
|
else
|
(....)
|
|
(....)
|
else
|
begin
|
nOpMenu[Port] :=
|
StrToInt(Copy(voice1.ReadDigits(Port),1,1));
|
|
if rcMenu[nOpMenu[Port]].sRamalMenu <> '' then
|
begin
|
//disca direto
|
//adiciona o ramal
|
lstRamal.Add(rcMenu[nOpMenu[Port]].sRamalMenu);
|
//adiciona fuga
|
lstRamal.Add(RAMAL_FUGA1);
|
lstRamal.Add(RAMAL_FUGA2);
|
Estado[Port] := TRANSFERENCIA;
|
nEstadoRamal[Port] := LIVRE;
|
//aguarde um instante...
|
voice1.PlayFile(Port,'sisaguar.sig','');
|
end
|
else
|
(....)
|
(....)
|
public
|
nOpMenu: array[1..20] of integer; //menu
|
nOpSubMenu: array[1..20] of integer; //submenu
|
(....)
|
|
|
procedure TForm1.TrataPrimeiroDigito(Port: smallint);
|
begin
|
if Copy(voice1.ReadDigits(Port),1,1) = '2' then
|
begin
|
(.......)
|
end
|
else
|
begin
|
nOpMenu[Port] :=
|
StrToInt(Copy(voice1.ReadDigits(Port),1,1));
|
|
if rcMenu[nOpMenu[Port]].sRamalMenu <> '' then
|
begin
|
(.......)
|
end
|
else
|
if rcMenu[nOpMenu[Port]].sFrase <> '' then
|
begin
|
voice1.ClearDigits(Port);
|
Estado[Port] := SUBMENU;
|
//fala submenu
|
voice1.PlayFile(Port,
|
rcMenu[nOpMenu[Port]].sFrase,
|
rcMenu[nOpMenu[Port]].sOpcoesSubMenu);
|
end
|
else
|
(.......)
|
|