Реализация бота для проведения опросов и анкетирования в мобильном приложении
Telegram-бот с опросом выглядит просто: вопрос → варианты ответа → следующий вопрос. Но когда нужно управлять этими опросами из мобильного приложения — создавать вопросы, смотреть результаты в реальном времени, строить срезы по аудитории — задача становится интереснее.
Что делает мобильное приложение в этой схеме
Приложение — это панель управления для создателя опроса. Конечные пользователи проходят анкету через бота (Telegram, WhatsApp Business API или собственный чат), а оператор через мобильный интерфейс:
- создаёт вопросы с типами (single choice, multiple choice, открытый текст, шкала оценки)
- публикует опрос в нужный канал или рассылает конкретным сегментам
- наблюдает за поступающими ответами в реальном времени
- выгружает результаты
Для хранения структуры опроса удобна 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 рабочих дней в зависимости от сложности конструктора и числа типов вопросов. Стоимость рассчитывается индивидуально после анализа требований.







