Реалізація бота для проведення опитувань у мобільному додатку
Telegram-бот з опитуванням виглядає просто: запитання → варіанти відповідей → наступне запитання. Але коли потрібно управляти цими опитуваннями з мобільного додатка — створювати запитання, дивитися результати в реальному часі, будувати зрізи за аудиторією — завдання стає цікавішим.
Що робить мобільний додаток у цій схемі
Додаток — це панель управління для творця опитування. Кінцеві користувачі проходять анкету через бота (Telegram, WhatsApp Business API або власний чат), а оператор через мобільний інтерфейс:
- створює запитання з типами (одиночний вибір, множинний вибір, відкритий текст, шкала оцінки)
- публікує опитування в потрібний канал або розсилає конкретним сегментам
- спостерігає за вхідними відповідями в реальному часі
- експортує результати
Для зберігання структури опитування зручна JSON-схема. Кожне запитання — об'єкт з id, type, text, опціональними options[] та next_question_id (для розгалуження). Мобільний конструктор редагує цей JSON і зберігає через API.
// Android, редагування запитання в RecyclerView
data class SurveyQuestion(
val id: String = UUID.randomUUID().toString(),
val type: QuestionType, // SINGLE, MULTIPLE, TEXT, RATING
val text: String,
val options: List<String> = emptyList(),
val nextQuestionId: String? = null // null = наступне за порядком
)
// ViewModel зберігає через корутини
fun saveQuestion(question: SurveyQuestion) {
viewModelScope.launch {
val result = surveyRepository.upsertQuestion(surveyId, question)
_uiState.update { it.copy(savedQuestion = result) }
}
}
Результати приходять через WebSocket або polling кожні 30 секунд. На Flutter зручно використовувати StreamBuilder поверх Stream.periodic з запитом до /surveys/{id}/responses.
Збір відповідей та «жива» аналітика
Поки опитування активне, лічильник відповідей оновлюється в реальному часі. Для організатора важливо бачити: скільки вже відповіли, розподіл за варіантами прямо зараз.
Для single/multiple choice — горизонтальні смуги з відсотками (fl_chart BarChart). Смуги перебудовуються при кожній новій відповіді — не повністю, а через AnimatedController з плавним переходом до нової ширини. Різкі стрибки в UI дратують, особливо при швидкому потоці відповідей.
Для відкритих текстових відповідей — список з прокруткою з авторством (анонімно або з ім'ям — залежить від налаштувань опитування) та можливістю позначити окремі відповіді як «ключові» (оператор тапає зірочку, відповідь закріплюється вгорі).
Розгалуження запитань в опитуванні — next_question_id — впливає й на аналітику: різні користувачі бачили різні запитання. Дашборд повинен показувати «відповідали N з M» для кожного запитання, а не загальну кількість респондентів.
Візуалізація відповідей: для single/multiple choice — горизонтальні смуги (fl_chart BarChart), для шкали — середнє значення з розподілом, для відкритих відповідей — список останніх N з можливістю позначити як «значимий».
Що входить у роботу
- Конструктор опитувань: додавання/редагування запитань, drag-and-drop порядку
- Управління розсиланням: вибір аудиторії, розклад (негайно або за часом)
- Дашборд результатів з графіками по кожному запитанню
- Push-сповіщення про завершення опитування або досягнення порога відповідей
- Експорт у CSV/Excel
Терміни
3–5 робочих днів залежно від складності конструктора та кількості типів запитань. Вартість розраховується індивідуально після аналізу вимог.







