API do FTTH Docs Novo na 7.2
A documentação da rede óptica por integração: consulta de viabilidade pronta para o "tem cobertura no meu endereço?" do site do provedor, o resumo da planta e a gestão de projetos. É a mesma API que os servidores conectados usam entre si.
Visão geral
A área ftth da API pública expõe o módulo FTTH Docs (a planta da rede óptica desenhada no mapa). A operação de maior alavanca é a viabilidade: um portal de vendas pergunta "atende neste endereço?" e recebe o mesmo veredito de três estados da tela — e cada consulta alimenta sozinha o mapa de demanda reprimida, que é onde a rede decide crescer.
Pré-requisitos
- Chave de API com a permissão Acesso ao FTTH Docs marcada. Chaves são criadas em Configurações, aba Integrações, card Gerenciamento de API (somente a conta Master gerencia chaves Somente Master). Veja Criar uma chave de API.
- FTTH Docs habilitado no plano Limite por plano. Sem o módulo no plano, as operações respondem
{"status":"error","message":"FTTH module not enabled on this plan"}. - Sem a permissão na chave, o gateway responde HTTP
403com{"status":"error","message":"Access denied for ftth"}. Token inválido responde HTTP401.
Formato das chamadas e das respostas
Todas as operações usam o endpoint único da API, por GET ou POST:
https://SEU-SERVIDOR/api/api.php?token=CHAVE&action=ftth&operation=OPERACAO&...
O módulo responde com o envelope dos módulos novos: sucesso é {"status":"success","data":{...}} e erro de negócio é {"status":"error","message":"..."} com HTTP 200. Apenas os erros do gateway (token, permissão, action) usam códigos HTTP 400/401/403.
O teto de caixas por plano do FTTH Docs vale para o desenho da planta (Basic 500, Normal 1.500, Premium em diante sem limite). As operações desta página não criam caixas, então não consomem o teto.
Viabilidade
/api/api.php?action=ftth&operation=viabilidade
Responde "atende neste endereço?" com o mesmo veredito de três estados da tela de Viabilidade. Aceita coordenada direta ou um endereço em texto, geocodificado pelo servidor com o mesmo cache da tela.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
lat, lng | número | Um dos dois modos | Coordenada do endereço consultado. |
q | string | Um dos dois modos | Endereço em texto (ex.: Rua das Flores 100, Maringá PR). Usado quando lat/lng não vêm. |
Campos da resposta:
veredito:atende(há caixa com porta livre no raio),talvezounao.atende: o mesmo veredito como booleano (trueapenas paraatende).motivo: vazio quando atende;sem_diagrama(há caixa perto ainda sem portas documentadas),sem_porta(caixas do raio estão cheias) ousem_caixa(nada no raio).raio_m: o raio de busca usado, em metros (definido nos Ajustes do FTTH Docs).caixas: as caixas encontradas no raio, cada uma comdistancia_m,portas_livres,portas_totaledocumentada.
A resposta foi desenhada para vender sem expor a planta: as caixas vêm como distância e contagem de portas, sem nome interno nem coordenada. E cada consulta é registrada no mapa de demanda reprimida do módulo — as negadas viram o insumo da tela "Onde expandir primeiro".
curl -s "https://ravi.seuprovedor.com.br/api/api.php?token=SUA_CHAVE&action=ftth&operation=viabilidade&q=Rua+das+Flores+100,+Maringa+PR"
{
"status": "success",
"data": {
"veredito": "atende",
"atende": true,
"motivo": "",
"raio_m": 300,
"caixas": [
{ "distancia_m": 74, "portas_livres": 5, "portas_total": 16, "documentada": true }
]
}
}Endereço que o geocodificador não encontra responde {"status":"error","message":"Address not found"}; chamada sem coordenada e sem q responde Provide lat/lng or q (address).
Consultas da planta
/api/api.php?action=ftth&operation=resumo
O agregado da planta, sem geometria: quantos projetos existem e como está a ocupação das portas.
{
"status": "success",
"data": {
"projetos": 4,
"portas": 72,
"ocupadas": 12,
"livres": 60,
"ocupacao_pct": 17,
"take_rate_pct": null
}
}take_rate_pct só vem calculado quando os projetos têm o campo casas passadas preenchido.
/api/api.php?action=ftth&operation=projetos
A lista de projetos da tela Meus Projetos, com os números de cada um. Aceita q para filtrar pelo nome.
Cada projeto vem com id, nome, descricao, lat/lng/zoom (onde o mapa abre), raio (raio de atendimento das caixas, em metros), casas (casas passadas), base (id do projeto base, 0 = nenhum), caixas, pops, cabos, metros, dutos, implantado (percentual de caixas implantadas ou certificadas; null sem caixas) e alterado.
curl -s "https://ravi.seuprovedor.com.br/api/api.php?token=SUA_CHAVE&action=ftth&operation=projetos"
Gestão de projetos
As duas operações de escrita cobrem o ciclo do projeto em si. O desenho da planta (caixas, cabos, diagramas) continua sendo feito nas telas do módulo.
/api/api.php?action=ftth&operation=projeto_salvar
Cria (id=0 ou ausente) ou edita um projeto, com a mesma validação da tela.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | número | Só na edição | Projeto a editar; 0 ou ausente cria um novo. |
nome | string | Sim | Nome do projeto (até 120 caracteres). |
descricao | string | Não | Descrição livre. |
lat, lng | número | Sim* | Centro do projeto (de onde o mapa abre). *Dispensado quando area é enviada. |
zoom | número | Não | Zoom inicial do mapa (padrão 15). |
area | JSON | Não | Território do projeto: lista de pontos [[lat,lng],...] com 3 ou mais cantos. O centro e o zoom passam a ser derivados dela. |
raio | número | Não | Raio de atendimento das caixas, em metros (padrão 200). |
casas | número | Não | Casas passadas (habilita a taxa de conversão no painel). |
projeto_base | número | Não | Id de outro projeto cujo desenho aparece neste em somente leitura (backbone compartilhado); 0 = nenhum. |
{ "status": "success", "data": { "id": 7, "areaOk": true } }areaOk=false avisa que o projeto foi salvo mas o território enviado não pôde ser guardado (menos de três cantos válidos, por exemplo). Erros de validação vêm em message: nome (falta o nome) e coordenada (sem centro nem área).
/api/api.php?action=ftth&operation=projeto_excluir
Exclui o projeto id e tudo que foi desenhado nele — caixas, cabos, conexões e diagramas. Não tem volta.
{ "status": "success", "data": { "id": 7 } }Exemplos práticos
"Tem cobertura?" no site do provedor
O formulário do site envia o endereço digitado e mostra o veredito. O backend do site chama a API (a chave nunca vai ao navegador):
$r = json_decode(file_get_contents(
'https://ravi.seuprovedor.com.br/api/api.php?token=' . $CHAVE .
'&action=ftth&operation=viabilidade&q=' . urlencode($_POST['endereco'])
), true);
if (($r['data']['veredito'] ?? '') === 'atende') {
// mostrar "Atendemos seu endereço!" e abrir o cadastro
} elseif (($r['data']['veredito'] ?? '') === 'talvez') {
// "Estamos chegando na sua região" + captar o contato
} else {
// captar o contato: a consulta já entrou no mapa de demanda do módulo
}Criar um projeto por integração
curl -s -X POST "https://ravi.seuprovedor.com.br/api/api.php" \ -d "token=SUA_CHAVE" -d "action=ftth" -d "operation=projeto_salvar" \ -d "nome=Bairro Novo" -d "lat=-23.4210" -d "lng=-51.9331" -d "raio=200"
Solução de problemas
| Sintoma | Causa provável |
|---|---|
HTTP 403 Access denied for ftth | A chave existe, mas a permissão Acesso ao FTTH Docs não está marcada. A conta Master ajusta a chave em Configurações, aba Integrações. |
FTTH module not enabled on this plan | O plano do servidor não inclui o módulo (ou o servidor está sem plano ativo). |
Address not found na viabilidade | O geocodificador não localizou o endereço. Tente incluir cidade e estado, ou envie lat/lng direto. |
Viabilidade responde talvez com sem_diagrama | Há caixa perto, mas ela ainda não tem portas documentadas nos diagramas. Documente a caixa e o veredito passa a contar as portas dela. |
projeto_salvar responde coordenada | A chamada não trouxe lat/lng nem uma area válida com 3+ cantos. |
Boas práticas: use HTTPS e POST nas mutações (a chave trafega na requisição); crie uma chave exclusiva para o site com apenas Acesso ao FTTH Docs marcado; e chame a viabilidade a partir do seu backend, nunca do navegador do visitante.