Baixe
Participe
|
As regras de normalização e rotas criadas para uso com o Mediation Server, do OCS, são baseadas em expressões regulares, um conjunto de regras que provê flexibilidade no tratamento de strings de texto no mundo da computação. Especificamente para o OCS, utilizamos normalmente dígitos, mas o uso expressões regulares, também conhecidas como regex, regexp ou ER, é grande em diversas outras tarefas. Um bom exemplo é o programa grep (global regular expressions print), que foi originalmente escrito para Unix e cria poderosos filtros de texto baseados em regex. Vamos falar um pouco sobre o uso das regex para o Mediation Server, do OCS 2007 R2.
Introdução Metacaracteres Regras de normalização
Agora que sabemos o básico de ER, vamos exercitar seu uso no Mediation a fim de converter os números digitados pelo usuário para o formato E.164 completo e precedido do sinal de adição (+). O conhecimento de ER é essencial para criar regras otimizadas e inteligentes, que evitem problemas na discagem. Além disso, quando falamos do recurso "quick dial" para os telefones IP (LG Nortel, Polycom CX700, etc) precisamos conhecer bem as expressões, do contrário este recurso que normalmente facilita a vida de quem disca pode ser tornar uma tremenda dor de cabeça. Tomemos como exemplo a cidade do Rio de Janeiro (código 21) e nosso código de país 55. O prefixo de nossa empresa fictícia é 2477 e os ramais são de 4 dígitos, indo de 3500 a 3599, assim como no post da parte 1. Precisamos criar regras de normalização para tratar os tipos de chamada abaixo:
Vamos começar analistando o primeiro caso:
Chamadas internas (ramal para ramal) Neste caso temos que prever as ligações de 3500 até 3599. Para isso utilizaremos a regra abaixo: Pattern: ^(35\d{2})$ Translation: +55212477$ Essa regra permite que números iniciados (^) por 35 seguidos de dois ({2}) dígitos (\d) qualquer sejam traduzidos para o formato E.164.
Emergência Aqui temos que prever as ligações para 190 (Polícia Militar), 192 (Ambulância), 193 (Bombeiros), 194 (Polícia Federal) e 199 (Defesa Civil). Pattern: ^(19[02349])$ Translation: +55$1 Como estes números são para todo o Brasil, usamos somente o prefixo +55. Lembrando que teremos de tratar isso no media gateway utilizado.
Telefonista/Recepção No Brasil, usualmente discamos 9 para chamarmos a telefonista. Admitindo que o ramal da telefonista seja 3509, vamos à regra: Pattern: ^9$ Translation: +552124773509 Perceba que neste caso não há uso da variável $1 porque o 9 não precisa sofrer tradução. Alternativamente poderíamos usar: Pattern: ^(9)$ Translation: +55212477350$1 O resultado é o mesmo, mas no segundo caso usamos a variável $1. Não se deve usar uma variável se o valor dela for sempre constante. Além disso, neste segundo caso, escrevemos um pouco mais. Portanto, prefira o primeiro. Quanto mais simples sua expressão, melhor.
Local Aqui é bom que saibamos todos os prefixos da cidade. No nosso caso (Rio de Janeiro) os prefixos são vários, mas todos começam com os números 2 ou 3 para telefones fixos e de 7 a 9 para celulares. Além disso, todos têm 8 dígitos de comprimento. Pattern: ^([23789]\d{7})$ Translation: +5521$1 Em outras palavras, números que iniciem por 2, 3, 7, 8 ou 9 seguidos de mais 7 dígitos (o que totaliza 8) são convertidos para o formado E.164.
DDD Aqui a abrangência aumenta. Os códigos de cidade são muitos e não vale a pena tratar todos (você pode consultar uma lista de códigos nacionais e internacionais aqui). Algumas regras são cabíveis como a que não existe código DDD que contenha 0, nem números locais que comecem com 0 ou 1. O comprimento deve ser de 10 dígitos (2 para o código e mais 8 para o número local). Então vamos criar uma regra geral: Pattern: ^([1-9]{2}[2-9]\d{7})$ Translation: +55$1 Dizemos que os dois primeiros dígitos devem ser de 1 a 9 (para excluir o 0). Em seguida dizemos que o próximo dígito deve ser 2 a 9 (para excluir 0 e 1 do início de um número local) e por fim, seguem mais 7 dígitos quaisquer.
DDI Esta é uma regra mais abrangente ainda. Existem códigos de países com 1, 2 e 3 dígitos, mas não pode haver 0 no início. Além disso, existem códigos de cidades estrangeiras que seguem a mesma regra. É difícil criar uma regra 100% compatível com todas as cidades do mundo, por isso sempre opto por criar uma regra para DDI que exija que o símbolo "+" seja discado. Como conseqüência você ainda permite que o usuário disque o número DDI como vê, ou seja, precedido de "+". Pattern: ^(\+[1-9]\d{6,13})$ Translation: $1 Para usar esta regra o usuário tem que digitar +, depois qualquer número que não seja 0 e em seguida de 6 a 13 dígitos. Este comprimento variável é dado pelos caracteres de controle {6,13}. Eu o usei porque o comprimento varia a cada cidade/país que será chamado, dentro desta faixa.
Gratuitas Neste tipo de chamada o número discado começa com 0800 e, segundo a resolução nº 86 da ANATEL, deve conter 11 dígitos ao todo. Pattern: ^(0800\d{7})$ Translation: +55$1 Apesar da resolução da ANATEL estar em vigor desde o ano passado, podem existir ainda telefones 0800 com 10 dígitos. Neste caso, use um intervalo no controle: \d{6,7}.
É importante citar que as regras acima são apenas de exemplo e, apesar de funcionarem num ambiente de produção, é recomendável que você crie suas próprias regras para cada caso. Eu tomei como exemplo a cidade brasileira do Rio de Janeiro, por isso use as regras acima somente como base para desenvolver as suas.
Para finalizar, seguem algumas dicas importantes na hora de escrever regex para normalização:
Boas regras! |
Últimas atualizações
- Como alterar a afinação de uma música
- Workshop: Engenharia Reversa no Linux
- Como remover vírus de pen drive
- Go - A linguagem de programação do Google
- Como usar cartuchos recarregados na HP C5180
- Expressões regulares no Mediation
- Flash Player no Debian Lenny amd64
- Cedilha no Debian Lenny
- LAST_INSERT_ID() no PostgreSQL
- Navegue na web com segurança
Artigos mais lidos
- Sniffing com o Wireshark
- Controle de dispositivos com a porta paralela
- Mascarando o endereço MAC da placa de rede
- Remoção manual de vírus
- Ghost pela rede
- Tudo sobre o GRUB
- Criando um layout para seu website
- Extensões perigosas no Windows
- BackTrack - uma distribuição hacker
- Instalando VMware Server 1.0.9 no Ubuntu 9.04



