Бот-опросник для организации сбора необходимых данных

Получился интересный бот с помощью, которого можно очень быстро собрать необходимую информацию от пользователей.

Чтобы упростить сбор информации от клиентов вашего бизнеса, достаточно разделить этот процесс на простые задачи и делегировать их помощникам. Однако у обычных сотрудников анкетирование занимает 15-20 минут на одного клиента. Правильно составленная анкета для проведения опроса в Телеграм-боте будет выполнять эту повторяющуюся функцию и поможет сэкономить время на однотипных задачах. Люди с большей вероятностью будут давать конкретные ответы на вопросы при взаимодействии с таким ботом. 

Преимущество представленного Телеграм-бота состоит в неограниченном количестве сценариев, по которым движется пользователь. Цель анкеты собрать нужную информацию и подстроить разговор под пользователя. Поэтому можно составить план опроса клиента, где каждый последующий вопрос будет зависеть от предыдущего ответа.

Администратору бота понадобиться немного времени, чтобы составить анкету по разработанному плану для проведения качественного анкетирования (например, узнать все детали заказа, перед его выполнением). Без автоматизации этот процесс может затянуться во времени. При большом потоке заказов, это станет большой проблемой. Бот не только упростит работу, но и сможет одновременно принимать множество анкет. 

Полностью исключает человеческие факторы со стороны администратора бота. Ведь администратор не может 24 часа в сутки отвечать на сообщения клиентов, быть активным и проявлять энтузиазм. Бот, общаясь настроенными вопросами, будет всегда вежлив, ничего не забудет и рад помочь 24/7.

Заранее продуманный сценарий вопросов, проведет пользователя от начала опрос и до конца. Анкета состоит из последовательных шагов. Они представляют собой цепочку вопросов, картинок, видео или документов. Это удобно, так как можно подстроить анкету под специфику бизнеса. Если для ответа пользователю необходимо будет ознакомится с большой инструкцией или текстом, можно к вопросу прикрепить документ в документе. Или заранее записать видео инструкцию и также вывести ее с вопросом. Взаимодействие пользователя происходит через нажатие кнопки, ввода текста, загрузки картинки, видео, документа или отправки геолокации.

* * *

Как это работает?

Ранее я упоминал о цепочке шагов. Спросите как это действует? На основании ответов, введенных пользователем ранее, бот опроса пропускает не относящиеся к делу вопросы и отображает только то, что относится к пользователю. Например, человек идентифицировал себя как вегетарианец. Разговаривать с ними о стейке и суши будет ошибкой. Условная логика ветвления поможет вам избежать именно этого!

Ниже представлен пример такого ветвления. В данном случае условная логика ветвления начинается с двух вариантов ответов на первый вопрос. 

1. У вас есть автомобиль? (вопрос)
  1.1. Да, есть автомобиль (ответ)
    1.1.1. Какого он цвета? (вопрос)
      1.1.1.1. Синего (ответ)
      1.1.1.2. Зеленого (ответ)
      1.1.1.3. Другого (ответ)
        1.1.1.3.1. Укажите этот другой цвет (вопрос)
  1.2. Нет автомобиля нет (ответ)
    1.2.1. На чем вы передвигаетесь по городу? (вопрос)
      1.2.1.1. На автобусе (ответ)
      1.2.1.2. На трамвае (ответ)
      1.2.1.3. Пешком (ответ)
      1.2.1.4. Иной способ (ответ)

Если простыми словами расписать то мы уточняем у пользователя есть ли у него автомобиль и предлагаем ему два варианта ответов это "Да, есть автомобиль" и "Нет, автомобиля нет". В случае если пользователь выбрал ответ с утверждение, что у него есть автомобиль, тогда мы уточняем у него какого он цвета, и предлагаем ему три возможных варианта ответа "Синего", "Зеленого" и "Другого", если был выбран ответ "Другого", то дополнительно просим указать текстовым сообщение какой же цвет у его автомобиля.

Если же пользователь выбрал вариант ответа где у него нет автомобиля, то мы спрашиваем у него на чем он передвигается. В глубину анкета может быть хоть сколько угодно уровней, ограничений нет.

* * *

Уточнение при создании анкеты

  1. Вложенные в шаг сценарии возможны, если у шага есть 2 и более кнопки
  2. Вложенные сценарии прикрепляются к вариантам ответов на кнопках, то есть при нажатии на кнопку пользователь переходит или во вложенный сценарий или если на этом действии вложенности нет, тогда к следующему шагу по вертикали вниз.
  3. Шаги можно между собой по вертикали менять местами.
  4. Можно создать как одиночный шаг, так и группу шагов. Группа шагов позволяет собрать вместе одинаковые по смыслу вопросы, например вы собираете информацию об автомобиле пользователя:
1. Как вас зовут? (один шаг)
- ждем текстового сообщения от пользователя
2. У вас есть автомобиль? (один шаг)
- предлагаем нажать кнопки
  2.1 Да (здесь есть вложенный сценарий - группа шагов)
    2.1.1 Марка - модель (ждем текст)
    2.1.2 Цвет (ждем текст)
    2.1.3 VIN (ждем текст)
    2.1.4 Тип кузова (ждем текст)
    2.1.5 Любите свою машину (ждем нажатие кнопки)
      2.1.5.1 Да (здесь можно продолжить ветвление)
      2.1.5.2 Нет (здесь можно продолжить ветвление)
      - пользователя переадресует к пункту 3
  2.2 Нет (здесь привязки сценария нет, поэтому переход после нажатия к пункту 3)
3. Где с вами можно встретиться? (один шаг)
- ждем от пользователя геолокацию или текст
- Анкета закончена

Пользователь в процессе заполнения может двигаться по анкете как вперед, так и возвращаться для изменения своих ответов, при этом он может пойти по другому сценарию.

Для каждой анкеты у вас будет ссылка для перехода в бот. Вы просто ее скидываете клиенту и он при переходе по ней попадает в бот на необходимую анкету, отвечает на вопросы - вы получаете нужную информацию.

* * *

Установка

Много было вопросов о том как оформить панель управления ботом, в этом примере вы можете посмотреть как один из готовых ее вариантов. Под данный бот я написал простенькую систему по типу MVC. Бот выкладываю в свободный доступ для ознакомления, установка его простая и все риски его использования вы берете на себя.

ankets_3.zip
464.8
  1. Распаковать архив надо в директорию /opros
  2. Ссылка на админ консоль https://ВАШ_ДОМЕН/opros/admin.php
  3. Cоединение с базой данных в файле /opros/Services/Config.php
  4. Создать таблицы в базе данных из файла /opros/sql.sql
  5. Токен, юзернейм бота и ваш telegram_id https://ВАШ_ДОМЕН/opros/admin.php?a=settings::index
  6. WebHook https://api.telegram.org/botTOKEN_BOT/setwebhook?url=https://ВАШ_ДОМЕН/opros/index.php

Файлы index.php и admin.php можете переименовывать. Для удобства работы можете использовать визуальный редактор для составления размеченных текстов. Панель управления ботом в данном примере не защищена авторизацией.  

На сайте уже имеются статьи, в которых подробно описаны методы и примеры написания простых ботов. Реализация этого бота для автоматического анкетирования уровнем сложнее предыдущих. Поэтому рекомендую начинающим ознакомиться с предыдущими материалами. 

37 комментариев
Авторизуйтесь через Telegram, чтобы оставить комментарий.
Откройте по ссылке или QR бот @iMakeBot, нажмите кнопку Старт/Start.
Следуйте инструкциям бота.

  • Грачик Абдулошвили [3 года назад]

    классно! ток я не понял где просматривать то что заполнил пользователь?) 

  • Грачик Абдулошвили [3 года назад → Грачик Абдулошвили]

    все разобрался- супер!

  • Грачик Абдулошвили [3 года назад]

    Решил запаролить по простому админский раздел, сделал по средствам 2 файлов
    .htaccess
    .htpasswd

    AuthType basic
    AuthName 'Authorization...'
    AuthUserFile '/var/www/user718/data/www/SITE.ml/opros/.htpasswd'
    Require valid-user
    DirectoryIndex admin.php

    НО при таком раскладе сам бот перестает отвечать)))

  • iMakeBots [3 года назад → Грачик Абдулошвили]

    Вы паролите всю директорию в которой лежат админка и точка входа для вебхук.

  • Грачик Абдулошвили [3 года назад → iMakeBots]

    я вынес файл админ в отдельную директорию и слетел весь стиль. все css

  • iMakeBots [3 года назад → Грачик Абдулошвили]

    Файл стилей подключался относительно файла admin.php, вы перенесли файл на уровень ниже, и нужно переопределить подключение стилей и js

  • Грачик Абдулошвили [3 года назад]

    если будете дорабатывать этот софт то внесите хотя бы самую простую авторизацию, спасибо

  • iMakeBots [3 года назад → Грачик Абдулошвили]

    Авторизацию, добавлять не буду. Это дело каждого, в данном контексте она не нужна. Есть статья про авторизацию через Телеграм вы можете ее самостоятельно прикрутить.

  • Alex Crowley [3 года назад]

    А как заставит бота работать?

    Подскажите, пожалуйста, что я делаю не так?
    Вроде, залил на сервер, создал БД, прописал доступ км БД, установил панель, добавил username, id, и токен.
    При команде /start - Бот отвечает: Имя приветствую в инструменте по сбору информации.

    И на этом, все прекращается.

  • iMakeBots [3 года назад → Alex Crowley]

    У вас при создании анкеты - появляется ссылка на анкету - по ней проходите и заполняйте в бот анкету - ссылку распространяйте - получайте результаты заполнения анкет другими пользователями

  • Alex Crowley [3 года назад → iMakeBots]

    Создал анкету, добавил шаг - появилась ссылка, перехожу по ссылке 

  • iMakeBots [3 года назад → Alex Crowley]

    Он у вас даже на старт не реагирует. Посмотрите настройку webhook. Проверьте логи.

  • Валентина Юрченко [3 года назад]

    Добрый день.

    Есть вопросик, буду благодарна за ответ, не нашла в статье.

    Создали тестовую анкету из 3 вопросов.

    Вопрос 1 имеет положительный и отрицательный ответ.
    И в зависимости от выбора - должен запускаться по цепочке ответ №2 или №3.

    Сейчас же бот просто подряд их прогоняет.
    Не понятно как их связать между собой.

    Спасибо заранее.

  • iMakeBots [3 года назад → Валентина Юрченко]

    Добрый день.

    Вопрос 1 имеет 2 кнопки - Да и Нет
    Заходите в Вопрос 1 - не редактирование вопроса а "проваливаетесь" в него - Название Вопрос 1 будет ссылкой
    В нем создаете шаг выбираете на какую кнопку он будет выводиться это или Да или Нет в вашем случае

  • Валентина Юрченко [3 года назад → iMakeBots]

    Спасибо большое. Получилось.

    А еще пару вопросов, уточняющих, если можно.

    1. Можно ли каким-то образом увидеть целиком дерево вопросов-ответов, чтоб проверить на предмет соблюдения логики взаимосвязей?
    2. Если мы с помощью бота-анкетирования задаем вопрос, и хотим , чтоб клиент вносил текст в поле с ответом, и получать его вариант ответа, есть возможность? Потому как при выборе "кнопка или текст" у меня не выходит сделать так, чтоб текст вводил клиент в поле пустое.
    3. Можно ли использовать этот бот для цепочки действий по типу: "подпишись на канал, чтоб скачать файл"?

    Спасибо большое.

  • iMakeBots [3 года назад → Валентина Юрченко]

    1. Если вы сможете дописать логику - то это не сложно.
    2. Не полностью понял, если у вас выбран вариант "Кнопка или Текст" - если в вопросе присутствует кнопка и на нее повешен вложенный шаг - то ответ обязателен по кнопке, в других случаях может быть выбор у пользователя или кнопка или текст.
    3. Такого функционала нет. В данном варианте ведь нужно еще проверить находиться ли пользователь в подписчиках - а это уже частный случай бота.

  • Денис [3 года назад]

    Это просто невероятно круто! Спасибо огромное, поставил не могу нарадоваться)

    Если бы я делал это с нуля, потратил бы месяц наверное, при условии что я делал ботов ранее по вашим урокам.

    Огромная человеческая благодарность!

  • iMakeBots [3 года назад → Денис]

    Спасибо за вашу оценку.))

  • Грачик Абдулошвили [3 года назад]

    Нужно полю deleted в БД поставить NULL по дефолту

  • Грачик Абдулошвили [3 года назад]

    а почему не работает БАН?

    то есть бан в меню проставляется но юзер все равно может заполнять анкеты.и в коде вот тут я не нашел ничего связанного с баном

  • iMakeBots [3 года назад → Грачик Абдулошвили]

    В Route.php

    public static function run($wh)
    {
       if ($wh->user->getBan()) {
           exit();
       }
    ...
  • A [2 года назад]

    Я хочу вытащить всю информацию в csv формате, как мне быть?

  • iMakeBots [2 года назад → A]

    Сделайте выборку из бд нужной информации и сохраняйте в формате .csv - можно даже в бот самому себе отправлять

  • CodeRFoX FOX [1 год назад]

    Здравствуйте, спасибо за бота, есть вопрос, как можно к нему добавить сохранение картинок на своём сервере при прохождении анкеты, чтоб автоматически сохранялись?

  • iMakeBots [1 год назад → CodeRFoX FOX]

    Можете поправить в методе Controllers/Claims.php::saveStep() после записи в бд (примерно строка 187) проверить если $file_id не равен null - тогда вызовите сохранение файла через getfile 

    https://core.telegram.org/bots/api#getfile

  • Yarik Newsmaker [1 год назад]

    Актуален ли еще Бот? У меня не работают опросы. На первый старт выдает:

    приветствую в инструменте по сбору информации и на этом конец.
  • iMakeBots [1 год назад → Yarik Newsmaker]

    Это проблема с авторизацией пользователя. Если пользователь первый раз стартанул бот, то идет его регистрация с уточнением языка интерфейса, если предусмотрено несколько языков, например RU и EN, то выводиться выбор, если один язык, то он автоматически устанавливается как по умолчанию, и вот именно в этом моменте не обработан переход по ссылке на опрос (если это он), идет просто переадресация на старт бота. 

    Решение: после перехода по ссылке - если пользователя в бд нет, то перед его регистрацией надо запомнить на какой опрос он шел, и после регистрации перенаправить не просто на старт, а на опрос имея hash опроса из ссылки.

    P.S.: Обновил файл в статье, пофиксил проблему

  • Yarik Newsmaker [1 год назад → iMakeBots]

    А можете написать мне в телеграмме и помочь с настройкой?

  • iMakeBots [1 год назад → Yarik Newsmaker]

    Напишете через бот обратной связи

  • iMakeBots [1 год назад → Yarik Newsmaker]

    Обновил файл в статье, пофиксил проблему

  • Роман Настоящий) [1 год назад → iMakeBots]

    Благодарю!!!
    ТЗ еще гляньте пожалуйста в ЛС

  • Yarik Newsmaker [1 год назад → iMakeBots]

    Супер! Спасибо!

  • Ринат Киреев [10 месяцев назад]

    Добрый день, подскажите пожалуйста, а где менять запись приветствия ? Хотел кнопки добавить , но не нашел в каком файле это делать 

  • iMakeBots [10 месяцев назад → Ринат Киреев]

    Сам текст экранов,  в том числе кнопок находится в файле Services/lang/ru.json

    Добавить кнопки можно в контроллере Controllers/Start.php

  • Бахтиёржон Қобилов [6 месяцев назад]

    Отлично работает супер. А как быть с выбором языка самому опроса. Хочу делать опрос на двух языках. Сейчас приходится создать два опроса с разными ссылкой. Было бы здорово если одним ссылкой можно было бы проходить опрос двух языках по выбору клиента. 

  • iMakeBots [6 месяцев назад → Бахтиёржон Қобилов]

    В директории lang - создайте файл например en.json - структуру только не меняйте - замените значения у элементов

  • Бахтиёржон Қобилов [6 месяцев назад → iMakeBots]

    Спасибо большое за Ваше труд и время. Да я так и переводил появился кнопки выбора языка в контексте а сам анкета заполняется в одном же языке. Что теряться смысл выбрать язык. Анкета всё равно отправляются одном языке либо сразу на двух языках что загромождают анкету. Если было бы  возможности написать вопросы на двух языках и их тоже преобразовав в . JSON рядом директорий lang например как ru_anketa.json и en_Questionnaires.json когда выбираешь язык тоже вытянуть оттуда анкету нужному языке. Тогда было бы в одном ссылке сразу два анкета один на русском другой на английском. Или вызвать другой ссылка при выборе языка другой ссылка на который на выбранный языке тогда пришлось бы дублировать один анкету на разные языках.

    Извиняюсь я сам не программист но хочется быть программистом учиться время не хватает. Люблю ковырять в коде клеит друг другу и получить что то рабочий иногда у меня получается. Но вот это не моём силе. Тут я только могу верстать страницу.

    Ещё можно рассылать рассылку например сгенерированный ссылки или какой то объявление отправить тем кто в базе