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 403 com {"status":"error","message":"Access denied for ftth"}. Token inválido responde HTTP 401.

Formato das chamadas e das respostas

Todas as operações usam o endpoint único da API, por GET ou POST:

URL base
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

GET /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âmetroTipoObrigatórioDescrição
lat, lngnúmeroUm dos dois modosCoordenada do endereço consultado.
qstringUm dos dois modosEndereç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), talvez ou nao.
  • atende: o mesmo veredito como booleano (true apenas para atende).
  • motivo: vazio quando atende; sem_diagrama (há caixa perto ainda sem portas documentadas), sem_porta (caixas do raio estão cheias) ou sem_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 com distancia_m, portas_livres, portas_total e documentada.

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
curl -s "https://ravi.seuprovedor.com.br/api/api.php?token=SUA_CHAVE&action=ftth&operation=viabilidade&q=Rua+das+Flores+100,+Maringa+PR"
resposta
{
  "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

GET /api/api.php?action=ftth&operation=resumo

O agregado da planta, sem geometria: quantos projetos existem e como está a ocupação das portas.

resposta
{
  "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.

GET /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
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.

POST /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âmetroTipoObrigatórioDescrição
idnúmeroSó na ediçãoProjeto a editar; 0 ou ausente cria um novo.
nomestringSimNome do projeto (até 120 caracteres).
descricaostringNãoDescrição livre.
lat, lngnúmeroSim*Centro do projeto (de onde o mapa abre). *Dispensado quando area é enviada.
zoomnúmeroNãoZoom inicial do mapa (padrão 15).
areaJSONNãoTerritório do projeto: lista de pontos [[lat,lng],...] com 3 ou mais cantos. O centro e o zoom passam a ser derivados dela.
raionúmeroNãoRaio de atendimento das caixas, em metros (padrão 200).
casasnúmeroNãoCasas passadas (habilita a taxa de conversão no painel).
projeto_basenúmeroNãoId de outro projeto cujo desenho aparece neste em somente leitura (backbone compartilhado); 0 = nenhum.
resposta
{ "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).

POST /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.

resposta
{ "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):

PHP (backend do site)
$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
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

SintomaCausa provável
HTTP 403 Access denied for ftthA 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 planO plano do servidor não inclui o módulo (ou o servidor está sem plano ativo).
Address not found na viabilidadeO geocodificador não localizou o endereço. Tente incluir cidade e estado, ou envie lat/lng direto.
Viabilidade responde talvez com sem_diagramaHá 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 coordenadaA 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.