Бот-консультант dv_wiki_bot (”Дюся”)

Бот-консультант dv_wiki_bot (”Дюся”)

Краткое описание

💡
Бот (@dv_wiki_bot), включенный в группу Телеграм, будет отвечать на вопросы пользователей, опираясь на подготовленные таблицы ключевых слов и ответов, уменьшая нагрузку на администраторов.

➕ Преимущества

  • Пользователи могут получить быстрый ответ сами (через вопрос боту), не вовлекая других участников.
  • Желающие помочь могут быстро активизировать нужный ответ бота, даже если сами не знают деталей темы.
  • Эксперты могут предоставлять продуманные ответы на стандартные поисковые запросы.
  • Ответы даются в привычной среде группы Телеграм (не нужно переходить на веб-сайт).
  • Все члены семьи ботов пользуются общими экспертными знаниями (общая часть конфигурации) и общим исходным кодом (не нужен отдельный программист в каждом городе).
  • Очень просто обучать бота (таблица с ключевыми словами).

➖ Недостатки

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

Подробное описание

Базовые сведения

Бот не использует ни искусственный интеллект, ни полнотекстовый поиск. Он опирается на таблицу в Google Sheets, где в одной колонке перечислены ключевые словоформы (через запятую), а в другой — ответ.

Пример конфигурации бота
Пример конфигурации бота
‼️
Важно! В настраиваемых через Google Sheets ответах бота нельзя использовать формат Маркдаун (Markdown), так как это может поломать вёрстку ответа и отправка ответа ботом просто не произойдет. Использование Маркдауна возможно только в фиксированных ответах бота, программируемых его создателем.

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

Поскольку бот не ограничивает формат запросов, иногда может создаваться ощущение, что он «понимает» вопрос.

Пример диалога с ботом Нюся
Пример диалога с ботом Нюся

Бот Дюся и его семья

Бот предназначен для работы в региональных группах взаимопомощи в Телеграм. А в каждой группе накоплены свои знания, поэтому бот должен знать «местную специфику». С другой стороны, все группы объединены общей целью помощи украинским беженцам, значит, есть знания, общие для всех городов.

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

Первый член семьи был назван Дюся, так как разработан в Дюссельдорфе и обучен местной специфике. На сегодня (18.04.2022) имеются такие члены семьи:

Имя
Ник
Город
Ответственный
Дюся
Düsseldorf
Нюся
Nürnberg
Ника
Köln
Ганс
Общенемецкий чат
Нана
Hannover
Дуся
Duisburg

Как общаться с ботом?

Зная имя бота (см. выше), можно говорить с ним в личных сообщениях.

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

Так, эксперт, видя в группе вопрос, ответ на который уже известен, может публично задать вопрос боту, вместо того, чтобы прямо отвечать на вопрос. У этого подхода есть несколько преимуществ:

  • Ответ развернут и стандартизован (при условии, что была проделана работа по обучению бота).
  • Спросивший видит, как он сам мог бы получить ответ, и возможно, последует этому совету в будущем.
  • Все другие пользователи в группе видят, как был дан ответ, и тоже понимают, как пользоваться ботом.

У бота есть ряд настроек, позволяющий уточнить его поведение, когда он отвечает в группе.

Общая конфигурация

Общая конфигурация для всех членов семейства поддерживается инициативой uahelp.wiki и включает в себя:

  • Список региональных групп (в основном Телеграм, но также в базу внесены несколько WhatsApp-групп).
  • Содержание вики uahelp.wiki (по общим темам).

Если вы хотите участвовать в поддержке этих ресурсов, обращайтесь в чат https://t.me/wiki_ukraine_links_chat.

Аватары

Male, big
Male, big
Male, small
Male, small
Female, big
Female, big
Female, small
Female, small

Настройки бота

Следующие настройки могут быть заданы для каждого члена семьи ботов индивидуально:

Приветствие

Setting: StartMessage

Приветствие бота, если начать задавать ему вопросы в личных сообщениях. Например:

image

Режим вызова бота (триггер)

Setting: BotTriggerMode

Варианты настройки «триггера» бота являются взаимоисключающими, то есть можно выбрать только один из этих вариантов. Почему это важно?

  • FULL_WORD — Вызов бота триггерит только сообщение, в котором имя бота указано как отдельное слово (так работает бот Нана).

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

  • STRING_START — Вызов бота триггерит только сообщение, которое начинается с имени бота (так работает бот Нюся).

Если вам важно мочь упоминать имя бота в текстах сообщений, но чтобы он при этом на них не реагировал, то стоит выбрать настройку STRING_STARТ, и тогда он не будет реагировать на сообщения вида «что-то Ника сегодня плохо себя ведет», где его имя не стоит в начале сообщения.

  • ANY_SUBSTRING — Вызов бота триггерит любая подстрока с его именем.

А настройка ANY_SUBSTRING подойдет только в случае, когда вам нужно, чтобы бот реагировал на упоминание его имени в любом месте текста сообщения, но при этом имя вашего бота не будет внезапно «всплывать» в не относящихся к делу словах. Например, «Гансу» она подойдет хорошо, а вот «Нике» — плохо.

Как отвечать, если ответ не найден

Setting: ReplyWhenNoAnswer

Setting: NoAnswerReply

Должен ли бот отвечать сообщением на запрос, по которому ничего не нашлось. Если да, то текст такого ответа можно настроить. Если нет, бот промолчит, если он не нашёл ответа.

Удалять ли сообщение, на которое среагировал бот

Setting: DeleteBotCallMessageOnMessageReply

Нужно ли удалять сообщение, на которое среагировал бот.

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

Статистика

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

Во время работы, бот накапливает статистику обращений. Она доступна по специальным командам (см. техническую документацию бота).

Чтобы статистика, хранимая в памяти, не терялась, бот сохраняет данные запросов в файл при перезапуске. Этот файл публикуетсся сюда: https://github.com/dmitry-weirdo/wiki-telegram-bot/tree/master/src/main/resources/failed-requests.

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

Команды

Бот поддерживает следующие команды:

Команда
Назначение
/listCommands
Список поддерживаемых команд
/helpCommand <commandName>
Описание конкретной команды (название команды включая слэш, например /helpCommand /start)
/start
Приветственное сообщение бота. Можно не указывать имя бота, т.е. просто “/start”.
/getEnvironment
Детали окружения конкретного экземпляра бота
/gs-reload-5150
Перезагрузить конфигурационные таблицы из Google Sheet в кэш в памяти
/listSettings
Список всех настроек и их текущих значений
/helpSetting <settingName>
Описание конкретной настройки
/getSetting <settingName>
Текущее значение конкретной настройки
/setSetting <settingName> <settingValue>
Установить новое значение конкретной настройки. ⚠️ Значение устанавливается только в памяти, и перезаписывается при новом старте бота. Чтобы сделать изменение постоянным, необходимо изменить конфигурацию, см. Как создать экземпляр бота для своего города?
/getStats
Статистика обращений к боту с момента последнего старта (количество запросов, успешных, неуспешных, команд, всего)
/getFailedRequests
Список запросов, на которые бот не смог найти ответа (см. также Статистика) с момента последнего старта или последней очистки списка
/clearFailedRequests
Очистить список запросов, на который бот не смог найти ответа (в памяти)
⚠️
Бот принимает команды (кроме /start) только от сконфигруированных администраторов.
⚠️
Все команды нужно писать как новые сообщения. Если редактировать предыдущее сообщение, нового вызова бота не происходит. Пример: Дюся /listSettings

Как создать экземпляр бота для своего города?

Это очень легко!

Вам понадобится:

  • Имя бота (ориентируйтесь на уже имеющихся членов семьи и на название вашего города)
  • Пол бота (чтобы проставить боту соответствующий аватар)
  • Пожелания к настройкам бота (о них мы уже рассказали)
  • Список администраторов для бота — тех пользователей Телеграм, от кого он должен выполнять команды (админы должны иметь имя пользователя (username) в Телеграме).
  • Конфигурационная таблица с вашими ключевыми словами и ответами (можете начать делать ее заранее).
  • E-mail человека, который будет обновлять вашу конфигурационную таблицу (e-mail должен быть привязан к Гугл-аккаунту)

Обратитесь к @dmitry_weirdo, вам предоставят доступ к Google Sheets для размещения вашей таблицы и запустят ваш экземпляр бота, привязанный к вашей таблице.

Авторство и обратная связь

Бот @dv_wiki_bot разработан группой Digital Volunteers по модели open source.

Автор: @dmitry_weirdo

Feedback по конкретным членам семьи ботов направляйте контактам указанным в таблице выше.

Все экземпляры бота запущены в AWS на EC2.

См. также

Региональная группа взаимопомощи в Телеграм
Региональная группа взаимопомощи в Телеграм
🤖
Другие используемые Телеграм-боты
Бот-привратник Shieldy
Бот-привратник Shieldy

Ответственный за страницу

@Grigory Grin