O VoIP Domain foi criado com o objetivo de ser um sistema totalmente modular e com suporte a plug-ins. Isto permite que customizações criadas para objetivos específicos possam ser portadas mais facilmente entre as versões do VoIP Domain, além de facilitar a manutenção do código.

Todo sistema de modularidade se baseia em “hooks”, que são chamadas que podem ser interceptadas pelos plug-ins. Existe um padrão interno do sistema para estas chamadas (listado mais abaixo). Para interceptar uma chamada, utilizamos o seguinte código:

framework_add_hook ( "agents_search", "my_agents_search_hook_function");
function my_agents_search_hook_function ( $buffer, $parameters)
{
  /**
   * Adiciona o agente 007 (para qualquer tipo de busca)
   */
  $data = array ();
  $data[] = array (
    "ID" => 7,
    "Name" => "James Bond",
    "Code" => "007"
  );

  /**
   * Retorna estrutura de dados (mesclando com o buffer recebido)
   */
  return array_merge_recursive ( ( is_array ( $buffer) ? $buffer : array ()), $data);
}

Esta chamada faz com que o sistema adicione ao hook “agents_search” a chamada a função my_agents_search_hook_function(). Neste caso, a função vai adicionar ao resultado da busca de agentes (que é o que o hook “agents_search” faz) o agente “James Bond”.

Podemos inclusive manipular os dados já processados por outros métodos, pois os dados são sempre enviados na variável $buffer, e os parâmetros (quando houver) são enviados pela variável $parameters.

O sistema possui os seguintes hook’s padrões:

  • costcenters_search_page: Página de pesquisa de centros de custo;
  • costcenters_add_page: Página de adição de centros de custo;
  • costcenters_view_page: Página de visualização de centros de custo;
  • costcenters_edit_page: Página de edição de centros de custo;
  • costcenters_report_page: Página de relatório por centros de custo;
  • costcenters_search: API de pesquisa de centros de custo;
  • costcenters_view: API de visualização de centro de custo;
  • costcenters_add: API de adição de centro de custo;
  • costcenters_edit: API de edição de centro de custo;
  • costcenters_remove: API de remoção de centro de custo;
  • reports_graph_heat: Página de relatório de calor;
  • extensions_list_report_page: Página de listagem de ramais;
  • ranges_list_report_page: Página de listagem de faixas;
  • costcenter_financial_report_page: Página de relatório financeiro por centro de custo;
  • group_financial_report_page: Página de relatório financeiro por grupo;
  • gateway_financial_report_page: Página de relatório financeiro por gateway;
  • health_page: Página de estado do sistema;
  • extensions_activity_report_page: Página de relatório de ramais por atividade;
  • user_calls_report_page: Página de relatório de ligações recebidas por ramal;
  • group_calls_report_page: Página de relatório de ligações recebidas por grupo;
  • gateway_calls_report_page: Página de relatório de ligações recebidas por gateway;
  • all_calls_report_page: Página de relatório de todas ligações recebidas;
  • user_made_report_page: Página de relatório de ligações efetuadas por ramal;
  • group_made_report_page: Página de relatório de ligações efetuadas por grupo;
  • gateway_made_report_page: Página de relatório de ligações efetuadas por gateway;
  • system_made_report_page: Página de relatório de todas ligações efetuadas;
  • consolidated_extensions_report_page: Página de relatório consolidado por ramal;
  • consolidated_groups_report_page: Página de relatório consolidado por grupo;
  • consolidated_gateways_report_page: Página de relatório consolidado por gateway;
  • consolidated_servers_report_page: Página de relatório consolidado por servidor;
  • reports_heat: API de relatório de calor;
  • reports_list: API de listagem de ramais;
  • reports_ranges: API de listagem de faixas;
  • reports_financial_costcenters: API de relatório financeiro por centro de custo;
  • reports_financial_groups: API de relatório financeiro por grupo;
  • reports_financial_gateways: API de relatório financeiro por gateway;
  • reports_system_health: API de estado do sistema;
  • reports_activity: API de relatório de ramais por atividade;
  • user_received_report: API de relatório de ligações recebidas por ramal;
  • group_received_report: API de relatório de ligações recebidas por grupo;
  • gateway_received_report: API de relatório de ligações recebidas por gateway;
  • system_received_report: API de relatório de todas ligações recebidas;
  • user_made_report: API de relatório de ligações efetuadas por ramal;
  • group_made_report: API de relatório de ligações efetuadas por grupo;
  • gateway_made_report: API de relatório de ligações efetuadas por gateway;
  • system_made_report: API de relatório de todas ligações efetuadas;
  • consolidated_extension_report: API de relatório consolidado por ramal;
  • consolidated_group_report: API de relatório consolidado por grupo;
  • consolidated_gateway_report: API de relatório consolidado por gateway;
  • consolidated_server_report: API de relatório consolidado por servidor;
  • reserves_search_page: Página de pesquisa de reservas;
  • reserves_add_page: Página de adição de reserva;
  • reserves_view_page: Página de visualização de reserva;
  • reserves_edit_page: Página de edição de reserva;
  • reserves_report_page: Página de relatório de reservas;
  • reserves_search: API de pesquisa de reservas;
  • reserves_view: API de visualização de reserva;
  • reserves_add: API de adição de reserva;
  • reserves_edit: API de edição de reserva;
  • reserves_remove: API de remoção de reserva;
  • extensions_search_page: Página de pesquisa de ramais;
  • extensions_add_page: Página de adição de ramais;
  • extensions_view_page: Página de visualização de ramais;
  • extensions_edit_page: Página de edição de ramais;
  • extensions_report_page: Página de relatório de ramais;
  • extensions_search: API de pesquisa de ramais;
  • extensions_view: API de visualização de ramal;
  • extensions_account_view: API de visualização de conta de ramal;
  • extensions_add: API de adição de ramal;
  • extensions_edit: API de edição de ramal;
  • extensions_remove: API de remoção de ramal;
  • extensions_report: API de relatório de ramais;
  • daemons_return: API de notificação de recebimento de evento;
  • api_login: API de autenticação de usuário web;
  • api_logout: API de remoção de sessão de usuário web;
  • api_read_notifiations: API de leitura de notificação ao usuário;
  • api_remove_notifiation: API de remoção de notificação ao usuário;
  • api_read_dashboard: API de informações básicas do sistema (dashboard);
  • calls_view: API de visualização de informações sobre uma chamada;
  • framework_page_generate: Criação do conteúdo HTML do framework web;
  • login_page_generate: Criação do conteúdo HTML da página de autenticação;
  • dashboard_page: Página de início (dashboard);
  • users_search: API de pesquisa de usuários;
  • users_view: API de visualização de usuário;
  • users_add: API de adição de usuário;
  • users_edit: API de edição de usuário;
  • users_remove: API de remoção de usuário;
  • users_search_page: Página de pesquisa de usuários;
  • users_add_page: Página de adição de usuário;
  • users_view_page: Página de visualização de usuário;
  • users_edit_page: Página de edição de usuário;
  • tokens_search_page: Página de pesquisa de tokens;
  • tokens_add_page: Página de adição de token;
  • tokens_view_page: Página de visualização de token;
  • tokens_edit_page: Página de edição de token;
  • tokens_permissions_search: API de pesquisa de permissões para tokens;
  • tokens_search: API de pesquisa de tokens;
  • tokens_view: API de visualização de token;
  • tokens_add: API de adição de token;
  • tokens_edit: API de edição de token;
  • tokens_remove: API de remoção de token;
  • auditory_report_page: Página de relatório de auditoria;
  • auditory_authors: API de pesquisa de autores (usuários e tokens);
  • auditory_report: API de relatório de auditoria;
  • countries_search: API de pesquisa de país;
  • countries_view: API de visualização de país;
  • centrals_search_page: Página de pesquisa de centrais;
  • centrals_add_page: Página de adição de central;
  • centrals_view_page: Página de visualização de central;
  • centrals_edit_page: Página de edição de central;
  • centrals_report_page: Página de relatório de centrais;
  • centrals_search: API de pesquisa de centrais;
  • centrals_view: API de visualização de central;
  • centrals_add: API de adição de central;
  • centrals_edit: API de edição de central;
  • centrals_remove: API de remoção de central;
  • centrals_report: API de relatório de centrais;
  • blocks_search_page: Página de pesquisa de bloqueios;
  • blocks_add_page: Página de adição de bloqueio;
  • blocks_view_page: Página de visualização de bloqueio;
  • blocks_edit_page: Página de edição de bloqueio;
  • blocks_search: API de pesquisa de bloqueios;
  • blocks_view: API de visualização de bloqueio;
  • blocks_add: API de adição de bloqueio;
  • blocks_edit: API de edição de bloqueio;
  • blocks_remove: API de remoção de bloqueio;
  • ranges_search_page: Página de pesquisa de faixas;
  • ranges_add_page: Página de adição de faixa;
  • ranges_view_page: Página de visualização de faixa;
  • ranges_edit_page: Página de edição de faixa;
  • ranges_search: API de pesquisa de faixas;
  • ranges_view: API de visualização de faixa;
  • ranges_add: API de adição de faixa;
  • ranges_edit: API de edição de faixa;
  • ranges_remove: API de remoção de faixa;
  • groups_search_page: Página de pesquisa de grupos;
  • groups_add_page: Página de adição de grupos;
  • groups_view_page: Página de visualização de grupos;
  • groups_edit_page: Página de edição de grupos;
  • groups_report_page: Página de relatório de grupos;
  • groups_search: API de pesquisa de grupos;
  • groups_view: API de visualização de grupo;
  • groups_add: API de adição de grupo;
  • groups_edit: API de edição de grupo;
  • groups_remove: API de remoção de grupo;
  • groups_report: API de relatório de grupos;
  • exceptions_search_page: Página de pesquisa de excessões;
  • exceptions_add_page: Página de adição de excessão;
  • exceptions_view_page: Página de visualização de excessão;
  • exceptions_edit_page: Página de edição de excessão;
  • exceptions_report_page: Página de relatório de excessões;
  • exceptions_search: API de pesquisa de excessões;
  • exceptions_view: API de visualização de excessão;
  • exceptions_add: API de adição de excessão;
  • exceptions_edit: API de edição de excessão;
  • exceptions_remove: API de remoção de excessão;
  • gateways_search_page: Página de pesquisa de gateways;
  • gateways_add_page: Página de adição de gateway;
  • gateways_view_page: Página de visualização de gateway;
  • gateways_edit_page: Página de edição de gateway;
  • gateways_report_page: Página de relatório de gateways;
  • gateways_search: API de pesquisa de gateways;
  • gateways_fares_search: API de pesquisa de arquivos de tarifas;
  • gateways_fares_file: API de visualização de arquivo de tarifas;
  • gateways_view: API de visualização de gateway;
  • gateways_add: API de adição de gateway;
  • gateways_edit: API de edição de gateway;
  • gateways_remove: API de remoção de gateway;
  • gateways_report: API de relatório de gateways;
  • servers_search_page: Página de pesquisa de servidores;
  • servers_add_page: Página de adição de servidor;
  • servers_view_page: Página de visualização de servidor;
  • servers_edit_page: Página de edição de servidor;
  • servers_report_page: Página de relatório de servidores;
  • servers_search: API de pesquisa de servidores;
  • servers_view: API de visualização de servidor;
  • servers_add: API de adição de servidor;
  • servers_edit: API de edição de servidor;
  • servers_remove: API de remoção de servidor;
  • servers_reinstall: API de reinstalação de servidor;
  • servers_report: API de relatório de servidores;
  • notifications_search_page: Página de pesquisa de notificações;
  • notifications_add_page: Página de adição de notificação;
  • notifications_view_page: Página de visualização de notificações;
  • notifications_edit_page: Página de edição de notificações;
  • notifications_events_search: API de pesquisa de eventos para notificações;
  • notifications_search: API de pesquisa de notificações;
  • notifications_view: API de visualização de notificação;
  • notifications_add: API de adição de notificação;
  • notifications_edit: API de edição de notificação;
  • notifications_remove: API de remoção de notificação**:
  • notifications_event: API de envio de notificação;
  • agents_search_page: Página de pesquisa de agentes;
  • agents_add_page: Página de adição de agente;
  • agents_view_page: Página de visualização de agente;
  • agents_edit_page: Página de edição de agente;
  • agents_search: API de pesquisa de agentes;
  • agents_view: API de visualização de agente;
  • agents_add: API de adição de agente;
  • agents_edit: API de edição de agente;
  • agents_remove: API de remoção de agente.

A grande maioria dos hook’s da API referentes aos métodos CRUD possuem chamadas a outros hook’s durante sua execução, permitindo que trechos padrões da execução das chamadas sejam interceptados por plugins. Os seguintes padrões de hook’s existem para adição, edição e remoção:

  • MÓDULO_MÉTODO_sanitize: Saneamento e validação dos parâmetros informados para execução da adição ou edição;
  • MÓDULO_MÉTODO_pre: Após validado todos dados, e antes de executar a adição, edição ou remoção propriamente dito, é chamado este hook;
  • MÓDULO_MÉTODO_post: Após executada a ação de adição, edição ou remoção, é chamado este hook;
  • MÓDULO_MÉTODO_notify: Para módulos que utilizam notificação aos servidores (realizar manutenção dos arquivos de configuração, por exemplo), é chamado este hook com as informações do evento a ser criado;
  • MÓDULO_MÉTODO_audit: Ao término da execução das ações, este hook é chamado com o conteúdo a ser adicionado ao sistema de auditoria.

Desta forma, podemos interferir no funcionamento padrão do sistema, adicionando ítens em objetos, realizando validações adicionais, criando novas notificações, entre outras infindáveis ações que possa se imaginar, tornando assim o sistema mais fácil de ser alterado sem a necessidade de edição do código fonte original, ou seja, podemos apenas escrever um plugin que intercepte as ações desejadas e mantermos a manutenção deste plugin, facilitando a atualização de versões do sistema, e facilitando também a replicação de plugins.

Posteriormente serão publicado mais artigos sobre o funcionamento da estrutura do sistema, assim como mais detalhes do funcionamento da API.