La funzionalità Call API consente a un campo del sondaggio di effettuare una richiesta HTTP a un servizio esterno e usare la risposta per popolare un valore calcolato o validare l’input dell’utente. Questo abilita ricerche in tempo reale, verifica ID, ricerche barcode e qualsiasi altro controllo lato server durante la raccolta dati.

Esistono due funzioni:

  • callapi() — recupera un valore da un’API e lo memorizza in un campo calculate o text
  • callapi-verify() — chiama un’API e blocca l’avanzamento se la risposta non corrisponde al valore atteso (usata in constraint)

callapi() — Recupera e memorizza una risposta API

Sintassi

Inserisci callapi() nella colonna calculation di un campo calculate o text:

  callapi(method, url, allowed_auto, max_retry, no_overwrite, extract_expr, timeout, lifetime, response_q, call_type, post_body)
  

Parametri

#ParametroDescrizione
1methodMetodo HTTP: 'GET' o 'POST'
2urlURL dell’endpoint API
3allowed_auto1 per chiamare automaticamente quando si raggiunge il campo; 0 per richiedere un pulsante di attivazione manuale
4max_retryNumero massimo di tentativi in caso di errore
5no_overwrite1 per mantenere il valore esistente se il campo ne ha già uno; 0 per sovrascrivere sempre
6extract_exprEspressione JSONPath per estrarre il valore desiderato dalla risposta (es. $.data.name)
7timeoutTimeout della richiesta in millisecondi
8lifetimePer quanto tempo (ms) la risposta memorizzata nella cache rimane valida prima di recuperarla nuovamente
9response_qNome di un campo per memorizzare il codice di risposta HTTP grezzo (es. ${response_status})
10call_type(Opzionale) Modalità di chiamata speciale: 'lazy-upload' o 'lazy-upload-multiple'
11post_body(Opzionale) Stringa del corpo POST. Fai riferimento ai campi del modulo con ##fieldname##

Esempio: Richiesta GET per cercare un nucleo familiare per ID

typenamelabelappearancecalculation
texthousehold_idID nucleo familiare
calculatehh_namecallapicallapi('GET', concat('https://api.example.com/households/', ${household_id}), 1, 3, 0, '$.name', 10000, 0, '')
notehh_displayNucleo familiare: ${hh_name}

Esempio: Richiesta POST con corpo JSON

  callapi('POST', 'https://api.example.com/lookup', 1, 2, 0, '$.result.value', 15000, 0, '', '', '{"id": "##household_id##"}')
  

Nel post_body, usa ##fieldname## per iniettare il valore corrente di qualsiasi campo del modulo.

Appearance: callapi

Aggiungi callapi alla colonna appearance del campo per abilitare l’integrazione della chiamata API:

typenamelabelappearancecalculation
calculateapi_resultcallapicallapi('GET', ...)

Quando allowed_auto è 0, rtSurvey mostra un pulsante “Recupera” che l’intervistatore tocca manualmente.


callapi-verify() — Valida un valore con un’API

callapi-verify() blocca l’invio di un campo finché un’API non conferma che il valore inserito è valido. Usalo nella colonna constraint.

Sintassi

  callapi-verify(method, url, extract_expr, match_expr, timeout, constraint_mode, post_body, message)
  

Parametri

#ParametroDescrizione
1methodMetodo HTTP: 'GET' o 'POST'
2urlEndpoint API di verifica
3extract_exprJSONPath per estrarre il valore atteso dalla risposta
4match_exprEspressione che confronta il valore estratto con il valore del campo (es. $.status = 'valid')
5timeoutTimeout della richiesta in millisecondi
6constraint_mode'soft' solo per un avviso; 'hard' per bloccare l’avanzamento
7post_body(Opzionale) Corpo POST con sostituzioni ##fieldname##
8message(Opzionale) Messaggio di errore. Supporta multilingua: <en>Invalid!</en><vi>Không hợp lệ!</vi>

Esempio: Verifica un barcode contro un registro asset

typenamelabelappearanceconstraintconstraint_message
barcodeasset_codeScansiona il barcode dell’assetcallapi-verifycallapi-verify('POST', 'https://api.example.com/assets/verify', '$.valid', ". = 'true'", 10000, 'hard', '{"code": "##asset_code##"}')Asset non trovato nel registro

Appearance: callapi-verify(...)

La colonna appearance su un campo con callapi-verify() nel constraint dovrebbe contenere callapi-verify(params) o callapi-verify(dynamicParams) per segnalare a rtSurvey che questo campo usa la verifica API.


Usare i dati App API insieme a callapi

Combina callapi() con pulldata('app-api', 'user.token') per iniettare il token dell’utente autenticato nella tua richiesta API:

  callapi('POST', 'https://api.example.com/data', 1, 2, 0, '$.value', 10000, 0, '', '',
  concat('{"token":"', pulldata('app-api','user.token'), '","id":"##item_id##"}'))
  

Best practice

  1. Imposta sempre un timeout ragionevole (5000–15000 ms) — non usare 0 o valori molto alti.
  2. Imposta allowed_auto=0 per le verifiche che l’intervistatore dovrebbe attivare consapevolmente (es. controlli ID).
  3. Imposta no_overwrite=1 quando il campo potrebbe essere modificato in seguito e non vuoi che il recupero sovrascriva le correzioni manuali.
  4. Usa extract_expr con un JSONPath specifico piuttosto che fare affidamento sul testo grezzo della risposta.
  5. Testa le chiamate API in modalità offline — callapi fallirà normalmente e mostrerà un errore, ma il modulo dovrebbe comunque essere completabile per i campi non critici.

Limitazioni

  • Richiede connettività di rete al momento della chiamata — le chiamate falliranno quando il dispositivo è offline.
  • Le risposte API devono essere JSON — le risposte XML o in testo normale richiedono elaborazione aggiuntiva.
  • Un’alta frequenza di chiamate (es. una chiamata API per istanza di ripetizione) può rallentare la navigazione nel modulo.
Questa pagina è stata utile?