Telegram bot прототип на node js
Требуется реализовать telegram бота (прототип)
Прототип подразумевает не продакшн версию
Студии\агенства не интересуют
Использовать клиента https://github.com/telegraf/telegraf (либо аргументированно предложить другой клиент)
WorkFlow
- пользователь переходит по ссылке, в сылке зашита какая то строка (это результат того что сработал /start с аргументами)
- сохранили пользователя (username, ID (первичная информация по поьзователю) + то что было в аргументах запроса)
- (если ранее не было пользователя в базе) запросили имя, далее возраст (в 2 шага) и сохранили в БД
- (если данные о пользователе ранее были) то переходим к главному меню. На главное меню не попасть и ни какую другую команду не вызвать если пользователь не ввел свое имя и возраст
- В главно меню три пунтка меню
- [1] Редактировать данные
- [2] Пройти опрос
- [3] Мои ответы
- Ожидаемые события в главном меню:
- [4] Клиент отправляет текущую локацию
- [5] Клиент отправляет live текущей локации
В случае [1] переходим на экраны редактирования своих данных. В каждом сообщении есть кнопка (inline button) завершить редактирование при клике на которую переходим обратно на главное меню.
При клике на [2] (иммитируем взятие случайного вопроса из базы). Формат вопроса простой - есть текст сообщения и 3-5 вариантов ответа, либо свой вариант.
В случае если вопрос состоит из нескольких вопросов `querion_next` не пустой - то после полученного ответа (иммитируем) отображение следующего запроса.
Структура данных
```json
querion_id: "",
question_text: "Какой вам больше нравится шоколад?", // Текст сообщения
next_question: "", // Идентификатор следующего вопроса
free_answer: false, // если true то позволено клиенту отправить ответ в свободной форме. В противном случае обязательно надо выбрать ответ
choices: [
{text: "Белый", id: "1"},
{text: "Горький", id: "2"},
{text: "Молочный", id: "3"},
]
```
[3] отображаем с пагинацией (по 3 позиции) последние ответы на вопросы в формате `Текст сообщения: ответ`.
Пагинацию делать как в боте @spotifybot
В обоих случаях [4], [5] бот отправляет ту же полученную локацию (echo) в период 30 секунд. Обновлять сообщение а не добавлять новое.
Иммитируем работу с БД - в глобальном окружении создать мапу и там хранить пользователей
Иммитируем сохранение в БД всех ответов пользователей
Иммитируем взятие из БД вопросы - зашить в коде массив вопросов. Не рассматриваем случай если вопросы зацикливаются
В лог логировать все получаемые и отправляемые данные
Результат работы в виде
- package.json файла с перечисленными нужными пакетами и прочим для первичного сетапа проекта
- index.js (в коде зашит токен от бота)
По команде `node index.js` должен запускаться сервер