Funkcja Call API pozwala polu ankiety wykonać żądanie HTTP do zewnętrznej usługi i użyć odpowiedzi do wypełnienia obliczonej wartości lub walidacji danych wejściowych użytkownika. Umożliwia to wyszukiwanie w czasie rzeczywistym, weryfikację ID, wyszukiwanie kodów kreskowych i wszelkie inne kontrole po stronie serwera podczas zbierania danych.

Dostępne są dwie funkcje:

  • callapi() — pobiera wartość z API i przechowuje ją w polu calculate lub text
  • callapi-verify() — wywołuje API i blokuje postęp, jeśli odpowiedź nie pasuje do oczekiwanej wartości (używane w constraint)

callapi() — Pobieranie i przechowywanie odpowiedzi API

Składnia

Umieść callapi() w kolumnie calculation pola calculate lub text:

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

Parametry

#ParametrOpis
1methodMetoda HTTP: 'GET' lub 'POST'
2urlURL punktu końcowego API
3allowed_auto1 wywołuje automatycznie po dotarciu do pola; 0 wymaga ręcznego przycisku wyzwalacza
4max_retryMaksymalna liczba ponownych prób w przypadku niepowodzenia
5no_overwrite1 zachowuje istniejącą wartość, jeśli pole ją posiada; 0 zawsze nadpisuje
6extract_exprWyrażenie JSONPath do wyodrębnienia pożądanej wartości z odpowiedzi (np. $.data.name)
7timeoutLimit czasu żądania w milisekundach
8lifetimeJak długo (ms) buforowana odpowiedź pozostaje ważna przed ponownym pobraniem
9response_qNazwa pola do przechowywania surowego kodu odpowiedzi HTTP (np. ${response_status})
10call_type(Opcjonalny) Specjalny tryb wywołania: 'lazy-upload' lub 'lazy-upload-multiple'
11post_body(Opcjonalny) Ciąg treści POST. Odwołuj się do pól formularza za pomocą ##fieldname##

Przykład: Żądanie GET do wyszukania gospodarstwa domowego po ID

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

Przykład: Żądanie POST z treścią JSON

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

W post_body użyj ##fieldname##, aby wstrzyknąć bieżącą wartość dowolnego pola formularza.

Wygląd: callapi

Dodaj callapi do kolumny appearance pola, aby włączyć integrację wywołania API:

typenamelabelappearancecalculation
calculateapi_resultcallapicallapi('GET', ...)

Gdy allowed_auto wynosi 0, rtSurvey wyświetla przycisk „Pobierz", który ankieter ręcznie dotyka.


callapi-verify() — Walidacja wartości w oparciu o API

callapi-verify() blokuje przesłanie pola do momentu potwierdzenia przez API, że wprowadzona wartość jest prawidłowa. Użyj go w kolumnie constraint.

Składnia

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

Parametry

#ParametrOpis
1methodMetoda HTTP: 'GET' lub 'POST'
2urlURL API weryfikacji
3extract_exprJSONPath do wyodrębnienia oczekiwanej wartości z odpowiedzi
4match_exprWyrażenie porównujące wyodrębnioną wartość z wartością pola (np. $.status = 'valid')
5timeoutLimit czasu żądania w milisekundach
6constraint_mode'soft' tylko dla ostrzeżenia; 'hard' blokuje postęp
7post_body(Opcjonalny) Treść POST z podstawieniami ##fieldname##
8message(Opcjonalny) Komunikat o błędzie. Obsługuje wiele języków: <en>Invalid!</en><vi>Không hợp lệ!</vi>

Przykład: Weryfikacja kodu kreskowego w rejestrze aktywów

typenamelabelappearanceconstraintconstraint_message
barcodeasset_codeZeskanuj kod kreskowy aktywucallapi-verifycallapi-verify('POST', 'https://api.example.com/assets/verify', '$.valid', ". = 'true'", 10000, 'hard', '{"code": "##asset_code##"}')Aktywo nie znaleziono w rejestrze

Wygląd: callapi-verify(...)

Kolumna appearance pola z callapi-verify() w constraint powinna zawierać callapi-verify(params) lub callapi-verify(dynamicParams), aby poinformować rtSurvey, że to pole używa weryfikacji API.


Używanie danych App API razem z callapi

Połącz callapi() z pulldata('app-api', 'user.token'), aby wstrzyknąć token uwierzytelnionego użytkownika do żądania API:

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

Najlepsze praktyki

  1. Zawsze ustawiaj rozsądny timeout (5000–15000 ms) — nie używaj 0 ani bardzo wysokich wartości.
  2. Ustaw allowed_auto=0 dla weryfikacji, które ankieter powinien wyzwalać świadomie (np. sprawdzenia ID).
  3. Ustaw no_overwrite=1, gdy pole może być edytowane później i nie chcesz, aby ponowne pobieranie nadpisywało ręczne korekty.
  4. Używaj extract_expr z konkretnym JSONPath zamiast polegania na surowym tekście odpowiedzi.
  5. Testuj wywołania API w trybie offline — callapi zakończy się niepowodzeniem z wdziękiem i pokaże błąd, ale formularz powinien nadal być możliwy do ukończenia dla pól niekrytycznych.

Ograniczenia

  • Wymaga połączenia sieciowego w momencie wywołania — wywołania zakończą się niepowodzeniem, gdy urządzenie jest offline.
  • Odpowiedzi API muszą być w formacie JSON — odpowiedzi XML lub zwykłego tekstu wymagają dodatkowego parsowania.
  • Wysoka częstotliwość wywołań (np. jedno wywołanie API na instancję powtórzenia) może spowolnić nawigację w formularzu.
Czy ta strona była pomocna?