Digital Volunteers

UAhelp YouTube

UAhelp TikTok

Телеграм-бот

DSEE

Поддержать проекты UAhelp

Помощь украинцам в Германии
Помощь украинцам в Германии
/
🔨
Инструкции и инструменты
/Telegram
Telegram
/
🤖
Другие используемые Телеграм-боты
/Бот-консультант dv_wiki_bot («Дюся»)
Бот-консультант dv_wiki_bot («Дюся»)
Бот-консультант dv_wiki_bot («Дюся»)

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

Обновлено @June 27, 2024 10:54 AM (GMT+2)

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

💡
Бот (@dv_wiki_bot), включенный в группу Телеграм, будет отвечать на вопросы пользователей, опираясь на подготовленные таблицы ключевых слов и ответов, уменьшая нагрузку на администраторов.
  • Краткое описание
  • ➕ Преимущества
  • ➖ Недостатки
  • Подробное описание
  • Базовые сведения
  • Бот Дюся и его семья
  • Как общаться с ботом?
  • Общая конфигурация
  • Аватары
  • Настройки бота
  • Приветствие
  • Режим вызова бота (триггер)
  • Как отвечать, если ответ не найден
  • Удалять ли сообщение, на которое среагировал бот
  • Статистика
  • Конфигурация вкладок Google Sheet, с которых бот читает данные ответов
  • Команды
  • Как создать экземпляр бота для своего города?
  • Авторство и обратная связь
  • См. также
  • Ответственный за страницу

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

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

➖ Недостатки

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

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

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

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

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

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

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

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

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

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

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

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

Имя
Ник
Город
Ответственный
Дюся
@dv_wiki_bot Бэкап: @dv_2_wiki_bot
Düsseldorf
@dmitry_weirdo
Нюся
@nuernberg_wiki_bot
Nürnberg
@grigorygrin
Ника
@koeln_wiki_bot
Köln
@zheka_cgn
Ганс
@berlin_wiki_bot
Общенемецкий бот
@videovictor , @DashaBu1, @Kirstone
Нана
@hannover_wiki_bot
Hannover
@pealol
Дуся
@duisburg_wiki_bot
Duisburg
@Ela_Shulgina
Ася
@augsburg_wiki_bot
Augsburg
@LokiAndBlack
Боря
@pb_wiki_bot
Paderborn
@sggua
Есения
@essen_wiki_bot
Essen
@borisei91
Люба
@luebeck_wiki_bot
Lübeck
@SchuraCo
Людвиг
@ludwigsburg_wiki_bot
Ludwigsburg
@Maxim_Kushnir_KM
Маня
@mannheim_wiki_bot
Mannheim
@DashaBu1
Мюля
@muelheim_wiki_bot
Mülheim-an-der-Ruhr
@Net074
Отто
@magdeburg_wiki_bot
Magdeburg
@k11rm
Потбот
@potsdam_wiki_bot
Potsdam
@artemtotal
Тёма
@trier_wiki_bot
Trier
@artem_trier
Штуся
@stuttgart_wiki_bot
Stuttgart
@NadiiaKos
Хайди
@heidelberg_wiki_bot
Heidelberg
@Ilya_ru_de, @Apelsinka_UA
Ясь
@belarus_wiki_bot
Общенемецкий, беларуские чаты
@germantroll, @Yauheni_RR
Ося
@osya_help_bot
Особые люди
@Liana_Odesa
💔
24.10.2022 В результате технического сбоя внутри Телеграма оригинальный бот Дюся @dv_wiki_bot перестал работать. Будем надеяться, что временно. Сообщение в технический саппорт Телеграма отправлено. На подмену запущен брат-близнец @dv_2_wiki_bot.
💙
25.10.2022 ВНЕЗАПНО оригинальный Дюся @dv_wiki_bot заработал!
💔
25.04.2023 Снова перестал работать один бот @dv_wiki_bot среди всей семьи. Ситуация выглядит точно так же, как 24.10.2022. Будем надеяться, что бот оживёт сам собой в течении дня-другого. Пока пользуйтесь братом-близнецом @dv_2_wiki_bot.
💙
26.04.2023 Как и в прошлый раз, оригинальный Дюся @dv_wiki_bot снова заработал!

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

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

⚠️
При общении с ботом в личных сообщениях не обязательно указывать имя бота. То есть можно писать сообщение работа вместо Дюся, работа.

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

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

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

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

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

Общая конфигурация для всех членов семейства поддерживается инициативой 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

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

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

Статистика

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

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

Чтобы статистика, хранимая в памяти, не терялась, перед перезапусками ботов мы сохраняем данные запросов в файл. Эти файлы публикуются сюда: успешные запросы и неуспешные запросы.

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

Конфигурация вкладок Google Sheet, с которых бот читает данные ответов

Для того, чтобы гибко настраивать включаемые/выключаемые ответы бота, вкладки гугл-документа, с которых бот берёт ключевые слова и ответы на них, можно конфигурировать в общем виде.

Пример типичного конфига вкладок:

Каждая вкладка конфигурируется следующими полями:

  • tabName — Название вкладки в Google Sheet.
  • tabFormat — Формат данных на вкладке в Google Sheet. Одно из следующих значений:
    • WIKI_PAGES — 3 столбца: имя страницы, адрес страницы, ключевые слова.
    • CHATS — Много столбцов: имя чата, ключевые слова, произвольное число столбцов с чатами (каждое значение в стоблце чата должно содержать ссылку на чат, разделитель — и имя чата).
    • COMMANDS — 2 столбца: ответ, ключевые слова.
  • tabType — Тип данных на вкладке.
  • showHeader — Показывать ли для вкладки заголовок перед списком ответом с этой вкладки (если ответы найдены).
  • header — Заголовок перед списком ответов, найденных на вкладке (если найден хотя бы один ответ). Настройка будет использоваться в ответе бота из вкладки, только если для этой вкладки showHeader == true. В значении header можно для графической наглядности ответа использовать эмоджи.
  • bullet — Если в ответах из вкладки будет использование форматирование в виде списка, то этот символ будет использоваться в качестве буллета этого списка.

Сами вкладки делятся на:

  • Вкладки команд — commandTabs.
  • Вкладки данных — dataTabs.

Внутри массивов commandTabs и dataTabs вкладки в json-конфиге можно переупорядочивать, что влияет на их приоритет (для commandTabs) и порядок выдачи (для dataTabs).

Логика выдачи ответа:

  • В пределах любой вкладки будут выданы все ответы, найденные на этой владке.
  • Ищутся ответы во вкладках команд, в порядке их объявления в commandTabs.
    • Если ответ найден на вкладке, он возвращается в ответе бота.
      • То есть, если ответ нашёлся на вкладке commandTabs[0], то на вкладках commandTabs[1], commandTabs[2] и т.д. поиск выполняться уже не будет.
    • Таким образом, можно перегружать ответы с одним и тем же словом на вкладке, расположенной ниже в commandTabs.
  • Если ответы во вкладках команд не найдены — ищутся ответы во вкладках данных, в порядке их объявления в dataTabs.
    • Если ответ найден на вкладке, он добавляется в список ответов.
      • То есть, если ответ найден на вкладке dataTabs[0], то продолжается поиск на вкладке dataTabs[1], потом dataTabs[2] и так далее.
    • Таким образом, можно переупорядочивать найденные ответы между вкладками данных, меняя их порядок в массиве dataTabs.
    • Если хотя бы один ответ найден, то собранные ответы со всех вкладок в dataTabs выдаются в ответном сообщении бота.
  • Если ответ по-прежнему не найден, выдаётся сообщение о том, что ответ не найден, согласно настройкам ReplyWhenNoAnswer и NoAnswerReply.

Команды

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

Команда
Назначение
/listCommands
Список поддерживаемых команд
/helpCommand <commandName>
Описание конкретной команды (название команды включая слэш, например /helpCommand, /start)
/start
Приветственное сообщение бота. Можно не указывать имя бота, т.е. просто /start.
/getEnvironment
Детали окружения конкретного экземпляра бота
/gs-reload-5150
Перезагрузить конфигурационные таблицы из Google Sheet в кэш в памяти
/listSettings
Список всех настроек и их текущих значений
/helpSetting <settingName>
Описание конкретной настройки
/getSetting <settingName>
Текущее значение конкретной настройки
/setSetting <settingName> <settingValue>
Установить новое значение конкретной настройки. ⚠️ Значение устанавливается только в памяти, и перезаписывается при новом старте бота. Чтобы сделать изменение постоянным, необходимо изменить стартовую конфигурацию в файле, см. Как создать экземпляр бота для своего города? Лучше всего сообщить об этом в чат фидбэка по боту.
/getTabConfigs
Получить конфигурацию вкладок Google Sheet для данного бота.
/setTabConfigs <tabConfigsJson>
Установить конфигурацию вкладок Google Sheet для данного бота. Конфиг задаётся как строка в формате JSON, см. соответствующий раздел этой страницы.
/getStats
Статистика обращений к боту с момента последнего старта (количество запросов, успешных, неуспешных, команд, всего).
/getSuccessfulRequests
Список запросов, на которые бот смог найти ответ (см. также Статистика) с момента последнего старта или последней очистки списка.
/clearSuccessfulRequests
Очистить список запросов, на который бот смог найти ответ (в памяти).
/getFailedRequests
Список запросов, на которые бот не смог найти ответа (см. также Статистика) с момента последнего старта или последней очистки списка.
/clearFailedRequests
Очистить список запросов, на который бот не смог найти ответа (в памяти).
/listAdmins
Перечислить админов бота, которые могут запускать специальные команды (будет выведен список их ТГ-юзернеймов).
/allBotsList
Вывести список всех ботов, запущенных в данном окружении.
/allBotsReloadConfigs
Перезагрузить конфиги всех ботов. Имеет смысл запускать эту команду, если сделано критическое исправление на вкладках с вики-страницами и общенемецкими чатами.
/allBotsGetTabConfigs
Получить конфигурации вкладок всех ботов.
/allBotsGetStats
Получить общую статистику для всех ботов. Статистику из этой команды перед рестартом ботов нужно сохранить в ГитХаб. Ответ может быть разбит на много сообщений.
/allBotsGetFailedRequests
Получить список неудачных запросов для всех ботов. Статистику из этой команды перед рестартом ботов нужно сохранить в ГитХаб. Ответ может быть разбит на много сообщений.
/getChatInfo
Вывести информацию о чате, в котором написано сообщение боту.
/getUserInfo
Вывести информацию о пользователе, который написал соощение боту.
⚠️
Бот принимает команды (кроме /start) только от сконфигурированных администраторов.
⚠️
Все команды нужно писать как новые сообщения. Если редактировать предыдущее сообщение, нового вызова бота не происходит. Пример: Дюся /listSettings
⚠️
Все команды кроме /start нужно писать вместе с именем бота: /listSettings — не вызовет никакой реакции от бота Дюся /listSettings — вызовет команду бота

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

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

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

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

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

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

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

Автор: @dmitry_weirdo

Исходники: https://github.com/dmitry-weirdo/wiki-telegram-bot

Feedback: https://t.me/dv_wiki_bot_feedback

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

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

См. также

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

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

@Grigory Grin и @Dmitry Popov

      {
        "commandTabs": [
          {
            "tabName": "Список болталки",
            "tabFormat": "COMMANDS",
            "tabType": "COMMANDS",
            "showHeader": false,
            "header": "Ответы бота",
            "bullet": "—"
          },
          {
            "tabName": "Общая болталка",
            "tabFormat": "COMMANDS",
            "tabType": "COMMANDS",
            "showHeader": false,
            "header": "Общие ответы всех ботов",
            "bullet": "—"
          }
        ],
        "dataTabs": [
          {
            "tabName": "Страницы вики и ключевые слова",
            "tabFormat": "WIKI_PAGES",
            "tabType": "WIKI_PAGES",
            "showHeader": true,
            "header": "\uD83D\uDCC1 Страницы вики"
          },
          {
            "tabName": "UAhelp.YouTube",
            "tabFormat": "COMMANDS",
            "tabType": "YOUTUBE_VIDEOS",
            "showHeader": true,
            "header": "\uD83C\uDFAC Видео UAhelp"
          },
          {
            "tabName": "Список чатов по городам",
            "tabFormat": "CHATS",
            "tabType": "CITY_CHATS",
            "showHeader": true,
            "header": "\uD83C\uDDE9\uD83C\uDDEA Чаты по городам Германии"
          },
          {
            "tabName": "Список чатов по странам",
            "tabFormat": "CHATS",
            "tabType": "COUNTRY_CHATS",
            "showHeader": true,
            "header": "\uD83C\uDF0E Чаты по странам"
          }
        ]
      }