(48) 3332-8540

Limite de chamadas, max calls, por gateway com FreeSWITCH

Ao se trabalhar em ambientes com grandes volumes de chamadas, como call centers e operadoras VoIP por exemplo, a quantidade de chamadas simultâneas enviadas para determinados gateways acaba atingindo valores verdadeiramente altos durante a produção.

Esta situação pode vir a ser um problema quando se utilizam gateways que possuem recursos limitados, como baixo poder de processamento ou memória, fazendo com que estes equipamentos venham a travar ao receber este grande volume de requisições.

Para evitar este tipo de problema, é necessário acrescentar algum mecanismo de controle de entrega de chamadas para os gateways, fazendo com que o volume de chamadas não ultrapasse o limite do gateway.

O FreeSWITCH possui este recurso nativamente, uma aplicação chamada limit, portanto não é necessário nenhuma lógica mirabolante no plano de discagens ou algum desenvolvimento externo.

Neste exemplo, vamos assumir que o FreeSWITCH está sendo utilizando “no meio” da comunicação entre seu softswitch (ou discador, PABX, etc) e seus gateways. Considerando que seu gateway possui somente um E1, ou seja, 30 canais de voz, a configuração que limita a quantidade de chamadas para este gateway em 30 é a seguinte:

<extension name=”Saida_E1″>

 <condition field=”destination_number” expression=”^.*$”>

    <action application=”limit” data=”hash outbound E1_1 30″/>

    <action application=”bridge” data=”sofia/gateway/E1_1/${destination_number}”/>

 </condition>

</extension>

<extension name=”limit_exceeded”>

 <condition field=”destination_number” expression=”^limit_exceeded$”>

    <action application=”hangup” data=”SWITCH_CONGESTION” />

 </condition>

</extension>

Observando o XML de configuração do plano de discagens, podemos perceber a chamada da aplicação limit antes de encaminhar a chamada para o gateway de nome E1_1. Os atributos da aplicação limit são:

limit <backend> <realm> <resource> <max[/interval]> [<transfer_destination_number> [<dialplan> [<context>]]

Onde:

– backend é o mecanismo de controle de chamadas do FreeSWITCH, existe a opção db e hash (utilizada no exemplo);

– realm é uma nomenclatura de controle, este valor é arbitrário, ou seja, você escolhe o nome;

– resource é o nome do gateway em questão;

– max[/interval] é a quantidade de canais em que se quer limitar o gateway

Os últimos campos não são obrigatórios, mas neles é especificado para onde você quer mandar a chamada caso ultrapasse o limite do gateway. Caso nada seja configurado, a chamada será envaida para limit_exceeded no mesmo contexto e plano de discagens.

Deste modo, podemos obervar que, ao estourar os 30 canais disponíveis para o gateway, uma mensagem de erro será enviada para o originador das chamadas. No exemplo em questão está sendo enviado SWITCH_CONGESTION, que em SIP é traduzido para 503 Service Unavailable.

Caso o FreeSWITCH seja o responsável pelo roteamento das chamadas, ou seja, não esteja como somente um controlador de fluxo de chamadas, existe a possibilidade de utilizar a aplicação limit_execute, que executa determinada ação caso o limite não tenha sido atingido.

<action application=”limit_execute” data=”<backend> <realm> <resource> <max[/interval]> <application> [application arguments]

” />

Onde:

– backend é o mecanismo de controle de chamadas do FreeSWITCH, existe a opção db e hash (utilizada no exemplo);

– realm é uma nomenclatura de controle, este valor é arbitrário, ou seja, você escolhe o nome;

– resource é o nome do gateway em questão;

– max[/interval] é a quantidade de canais em que se quer limitar o gateway

– application é a aplicação que será chamada, bridge, por exemplo.

– [application arguments] são os argumentos da aplicação: sofia/gateway/E1_1/${destination_number}

Nesta opção, caso o numero de canais disponíveis para o gateway seja atingido, a próxima linha do plano de discagens será executada. Nesta próxima linha, você pode adicionar uma outra aplicação limit_execute para controlar o tráfego do seu segundo gateway.

Vale ressaltar que as aplicações limit e limit_execute fazem parte do módulo mod_dptools, caso este módulo não esteja carregado em seu sistema, basta executar o comando ‘load mod_dptools’ na CLI do FreeSWITCH.

Lembramos que também é possível fazer este tipo de controle através do Asterisk, que é um software mais popular e mais fácil de configurar que o FreeSWITCH, mas isto é assunto para um próximo artigo.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *