Call API
Call API дозволяє вашому опитуванню отримувати дані від зовнішнього веб-сервісу та використовувати відповідь для заповнення полів або перевірки відповідей.
Функція Call API дозволяє полю опитування здійснювати HTTP-запит до зовнішнього сервісу та використовувати відповідь для заповнення обчисленого значення або перевірки введення користувача. Це забезпечує пошук у реальному часі, верифікацію ID, пошук штрих-кодів та будь-яку іншу серверну перевірку під час збору даних.
Є дві функції:
callapi()— отримує значення з API та зберігає його в поліcalculateабоtextcallapi-verify()— викликає API та блокує прогрес, якщо відповідь не відповідає очікуваному значенню (використовується вconstraint)
callapi() — Отримання та збереження відповіді API
Синтаксис
Розмістіть callapi() у стовпці calculation поля calculate або text:
callapi(method, url, allowed_auto, max_retry, no_overwrite, extract_expr, timeout, lifetime, response_q, call_type, post_body)
Параметри
| # | Параметр | Опис |
|---|---|---|
| 1 | method | HTTP-метод: 'GET' або 'POST' |
| 2 | url | URL кінцевої точки API |
| 3 | allowed_auto | 1 для автоматичного виклику при досягненні поля; 0 для ручного запуску |
| 4 | max_retry | Максимальна кількість спроб при збої |
| 5 | no_overwrite | 1 для збереження існуючого значення якщо поле вже має значення; 0 для завжди перезаписування |
| 6 | extract_expr | JSONPath-вираз для витягування потрібного значення з відповіді (наприклад, $.data.name) |
| 7 | timeout | Тайм-аут запиту в мілісекундах |
| 8 | lifetime | Час (мс) дійсності кешованої відповіді перед повторним отриманням |
| 9 | response_q | Назва поля для зберігання необробленого HTTP-коду відповіді (наприклад, ${response_status}) |
| 10 | call_type | (Необов’язково) Спеціальний режим виклику: 'lazy-upload' або 'lazy-upload-multiple' |
| 11 | post_body | (Необов’язково) Рядок тіла POST. Посилайтесь на поля форми через ##fieldname## |
Приклад: GET-запит для пошуку домогосподарства за ID
| type | name | label | appearance | calculation |
|---|---|---|---|---|
| text | household_id | Household ID | ||
| calculate | hh_name | callapi | callapi('GET', concat('https://api.example.com/households/', ${household_id}), 1, 3, 0, '$.name', 10000, 0, '') | |
| note | hh_display | Household: ${hh_name} |
Приклад: POST-запит з тілом JSON
callapi('POST', 'https://api.example.com/lookup', 1, 2, 0, '$.result.value', 15000, 0, '', '', '{"id": "##household_id##"}')
У post_body використовуйте ##fieldname## для підстановки поточного значення будь-якого поля форми.
Appearance: callapi
Додайте callapi до стовпця appearance поля для увімкнення інтеграції API-виклику:
| type | name | label | appearance | calculation |
|---|---|---|---|---|
| calculate | api_result | callapi | callapi('GET', ...) |
Коли allowed_auto має значення 0, rtSurvey показує кнопку «Отримати», яку анкетер натискає вручну.
callapi-verify() — Перевірка значення через API
callapi-verify() блокує відправлення поля до підтвердження API того, що введене значення є дійсним. Використовуйте у стовпці constraint.
Синтаксис
callapi-verify(method, url, extract_expr, match_expr, timeout, constraint_mode, post_body, message)
Параметри
| # | Параметр | Опис |
|---|---|---|
| 1 | method | HTTP-метод: 'GET' або 'POST' |
| 2 | url | Кінцева точка API верифікації |
| 3 | extract_expr | JSONPath для витягування очікуваного значення з відповіді |
| 4 | match_expr | Вираз, що порівнює витягнуте значення зі значенням поля |
| 5 | timeout | Тайм-аут запиту в мілісекундах |
| 6 | constraint_mode | 'soft' лише для попередження; 'hard' для блокування прогресу |
| 7 | post_body | (Необов’язково) Тіло POST із замінами ##fieldname## |
| 8 | message | (Необов’язково) Повідомлення про помилку. Підтримує кілька мов: <en>Invalid!</en><vi>Không hợp lệ!</vi> |
Приклад: Верифікація штрих-коду через реєстр активів
| type | name | label | appearance | constraint | constraint_message |
|---|---|---|---|---|---|
| barcode | asset_code | Scan the asset barcode | callapi-verify | callapi-verify('POST', 'https://api.example.com/assets/verify', '$.valid', ". = 'true'", 10000, 'hard', '{"code": "##asset_code##"}') | Asset not found in registry |
Використання даних App API разом із callapi
Комбінуйте callapi() з pulldata('app-api', 'user.token') для підстановки токена аутентифікованого користувача у ваш API-запит:
callapi('POST', 'https://api.example.com/data', 1, 2, 0, '$.value', 10000, 0, '', '',
concat('{"token":"', pulldata('app-api','user.token'), '","id":"##item_id##"}'))
Найкращі практики
- Завжди встановлюйте розумний
timeout(5000–15000 мс) — не використовуйте 0 або дуже великі значення. - Встановіть
allowed_auto=0для верифікацій, які анкетер повинен запускати свідомо. - Встановіть
no_overwrite=1, коли поле може бути відредаговано пізніше. - Використовуйте
extract_exprз конкретним JSONPath. - Тестуйте API-виклики в офлайн-режимі.
Обмеження
- Потребує підключення до мережі — виклики не вдаться, коли пристрій офлайн.
- Відповіді API повинні бути JSON — XML або відповіді у вигляді звичайного тексту потребують додаткового аналізу.
- Висока частота викликів може уповільнити навігацію формою.