Call API
Call API permite que sua pesquisa busque dados de um serviço web externo e use a resposta para preencher campos ou validar respostas.
O recurso Call API permite que um campo de pesquisa faça uma solicitação HTTP a um serviço externo e use a resposta para preencher um valor calculado ou validar a entrada do usuário. Isso habilita consultas em tempo real, verificação de ID, buscas de código de barras e qualquer outra verificação no lado do servidor durante a coleta de dados.
Existem duas funções:
callapi()— busca um valor de uma API e o armazena em um campocalculateoutextcallapi-verify()— chama uma API e bloqueia o progresso se a resposta não corresponder ao valor esperado (usado emconstraint)
callapi() — Buscar e armazenar uma resposta de API
Sintaxe
Coloque callapi() na coluna calculation de um campo calculate ou text:
callapi(method, url, allowed_auto, max_retry, no_overwrite, extract_expr, timeout, lifetime, response_q, call_type, post_body)
Parâmetros
| # | Parâmetro | Descrição |
|---|---|---|
| 1 | method | Método HTTP: 'GET' ou 'POST' |
| 2 | url | URL do endpoint da API |
| 3 | allowed_auto | 1 para chamar automaticamente quando o campo é alcançado; 0 para exigir um botão de acionamento manual |
| 4 | max_retry | Número máximo de tentativas de repetição em caso de falha |
| 5 | no_overwrite | 1 para manter o valor existente se o campo já tiver um; 0 para sempre sobrescrever |
| 6 | extract_expr | Expressão JSONPath para extrair o valor desejado da resposta (por exemplo, $.data.name) |
| 7 | timeout | Tempo limite da solicitação em milissegundos |
| 8 | lifetime | Por quanto tempo (ms) a resposta em cache permanece válida antes de buscar novamente |
| 9 | response_q | Nome de um campo para armazenar o código de resposta HTTP bruto (por exemplo, ${response_status}) |
| 10 | call_type | (Opcional) Modo de chamada especial: 'lazy-upload' ou 'lazy-upload-multiple' |
| 11 | post_body | (Opcional) String do corpo POST. Referencie campos do formulário com ##fieldname## |
Exemplo: Solicitação GET para buscar um domicílio por ID
| type | name | label | appearance | calculation |
|---|---|---|---|---|
| text | household_id | ID do domicílio | ||
| calculate | hh_name | callapi | callapi('GET', concat('https://api.example.com/households/', ${household_id}), 1, 3, 0, '$.name', 10000, 0, '') | |
| note | hh_display | Domicílio: ${hh_name} |
Exemplo: Solicitação POST com corpo JSON
callapi('POST', 'https://api.example.com/lookup', 1, 2, 0, '$.result.value', 15000, 0, '', '', '{"id": "##household_id##"}')
No post_body, use ##fieldname## para injetar o valor atual de qualquer campo do formulário.
Aparência: callapi
Adicione callapi à coluna appearance do campo para habilitar a integração de chamada de API:
| type | name | label | appearance | calculation |
|---|---|---|---|---|
| calculate | api_result | callapi | callapi('GET', ...) |
Quando allowed_auto é 0, o rtSurvey mostra um botão “Buscar” que o entrevistador toca manualmente.
callapi-verify() — Validar um valor contra uma API
callapi-verify() bloqueia o envio de um campo até que uma API confirme que o valor inserido é válido. Use-o na coluna constraint.
Sintaxe
callapi-verify(method, url, extract_expr, match_expr, timeout, constraint_mode, post_body, message)
Parâmetros
| # | Parâmetro | Descrição |
|---|---|---|
| 1 | method | Método HTTP: 'GET' ou 'POST' |
| 2 | url | Endpoint de API de verificação |
| 3 | extract_expr | JSONPath para extrair o valor esperado da resposta |
| 4 | match_expr | Expressão que compara o valor extraído com o valor do campo (por exemplo, $.status = 'valid') |
| 5 | timeout | Tempo limite da solicitação em milissegundos |
| 6 | constraint_mode | 'soft' apenas para aviso; 'hard' para bloquear o progresso |
| 7 | post_body | (Opcional) Corpo POST com substituições ##fieldname## |
| 8 | message | (Opcional) Mensagem de erro. Suporta múltiplos idiomas: <en>Invalid!</en><vi>Không hợp lệ!</vi> |
Exemplo: Verificar um código de barras contra um registro de ativos
| type | name | label | appearance | constraint | constraint_message |
|---|---|---|---|---|---|
| barcode | asset_code | Escaneie o código de barras do ativo | callapi-verify | callapi-verify('POST', 'https://api.example.com/assets/verify', '$.valid', ". = 'true'", 10000, 'hard', '{"code": "##asset_code##"}') | Ativo não encontrado no registro |
Aparência: callapi-verify(...)
A coluna appearance em um campo com callapi-verify() na restrição deve conter callapi-verify(params) ou callapi-verify(dynamicParams) para sinalizar ao rtSurvey que este campo usa verificação de API.
Usando dados da API do aplicativo junto com callapi
Combine callapi() com pulldata('app-api', 'user.token') para injetar o token do usuário autenticado na sua solicitação de API:
callapi('POST', 'https://api.example.com/data', 1, 2, 0, '$.value', 10000, 0, '', '',
concat('{"token":"', pulldata('app-api','user.token'), '","id":"##item_id##"}'))
Práticas recomendadas
- Sempre defina um
timeoutrazoável (5000–15000 ms) — não use 0 ou valores muito altos. - Defina
allowed_auto=0para verificações que o entrevistador deve acionar conscientemente (por exemplo, verificações de ID). - Defina
no_overwrite=1quando o campo puder ser editado posteriormente e você não quiser que a nova busca sobrescreva as correções manuais. - Use
extract_exprcom um JSONPath específico em vez de depender do texto de resposta bruto. - Teste as chamadas de API no modo off-line — callapi falhará graciosamente e mostrará um erro, mas o formulário ainda deve ser completável para campos não críticos.
Limitações
- Requer conectividade de rede no momento da chamada — as chamadas falharão quando o dispositivo estiver off-line.
- As respostas da API devem ser JSON — respostas XML ou de texto simples requerem análise adicional.
- Alta frequência de chamadas (por exemplo, uma chamada de API por instância de repetição) pode diminuir a navegação no formulário.