Для участников
Как начать
Бот работает в личном чате: @gig_buddy_bot. Запуск по /start.
Главное меню и команды
| Команда | Что открывает |
|---|---|
/menu | Главное меню |
/my | Мои гиги |
/add | Добавить гиг |
/new | Будущие гиги |
/old | Прошлые гиги |
/find | Поиск |
/help | Справка |
/me | Мой профиль |
/tell | Обратная связь |
Добавление гига
Бот принимает только гиги в Ирландии. Пришлите боту в личку одно из:
| Что прислать | Как бот разбирает | Кому доступно |
|---|---|---|
| Ссылка Ticketmaster на гиг (ticketmaster.ie, ticketmaster.co.uk) | Бот берет данные из Ticketmaster по API; ссылка на конкретный гиг - самый простой и надежный способ добавления гига | всем |
| Ссылка Ticketmaster на артиста (ticketmaster.ie) | Тоже по API. Бот отберет гиги по ирландскому гео | всем |
| Ссылка Eventbrite, Songkick, EventCartel | Разметка страницы, при неудаче — ИИ | всем |
| Ссылка на Instagram, сайт площадки и прочие | ИИ | approved и admin |
| Постер (картинка) | ИИ | всем |
Текст по шаблону:Name, DD.MM.YY, Venue | Разбор по шаблону, затем по API на Ticketmaster | всем |
| Текст со страницы заказов Ticketmaster (My Tickets) | Разбор по шаблону, затем для будущих гигов - по API на Ticketmaster, для прошлых ссылку не ищет. | всем |
- Ссылка Ticketmaster должна содержать в адресе имя/название выступающих. Короткую ссылку вида
…/event/<id>бот разобрать не может и объясняет, как получить полную. - Присланный вне диалога текст бот воспринимает как начало добавления гига и предлагает распознать гиг.
- Если введены неполные данные, бот запрашивает недостающее.
- Для будущих гигов ссылка обязательна. Пользователь может добавить ссылку сам или воспользоваться помощью бота: бот ищет ссылку на Ticketmaster, если не получается найти — через Brave Search.
- Если на постере или странице тура несколько дат, бот оставляет ирландские; если их несколько — предлагает выбрать.
- При добавлении гига бот проверяет его на дубли по базе.
- В конце процесса добавления гига бот предлагает запостить анонс в чате. Анонс в чате публикуется анонимно.
- Бот позволяет указать в гиге 4 разогрева.
Добавление пачки гигов
Чтобы добавить гиги пачкой, нужно прислать выделенный мышкой текст со страницы My Tickets (раздел Upcoming Events или Past Events) Ticketmaster.
Бот проверяет гео и добавляет прошлые ирландские гиги с отметкой «Довелось», а будущие - с «Иду». Отметки можно потом поменять или убрать в карточке конкретного гига.
Брать пачку тут:
https://www.ticketmaster.ie/user/orders
Добавление гигов из чата
Ссылки:
Если пользователь прислал в чат ссылку, бот пишет пользователю в личку и предлагает добавить гиг по этой ссылке. Если пользователь соглашается, бот старается распознать ссылку, в случае удачи добавляет гиг в базу и предлагает запостить анонс в чате.
Если пользователь выбрал запостить, описание гига публикуется реплаем на его ссылку.
Постеры:
Чтобы бот отреагировал на постер так же, как на ссылку, нужно присылать постер в чат с подписью «анонс» (или «Анонс»). Это нужно, чтобы бот не принимал фото с концертов за постеры.
Если прислать в чат постер с такой подписью, действует та же схема, что со ссылкой, описание гига публикуется реплаем на постер.
Если в ссылке или постере есть несколько гигов в Ирландии, бот показывает дублинские или площадку «для всех», например, Slane Castle или The TLT.
| Что прислать в чат | Как бот разбирает | Кому доступно |
|---|---|---|
| Ссылка Ticketmaster на гиг (ticketmaster.ie, ticketmaster.co.uk) | Бот берет данные из Ticketmaster по API; ссылка на конкретный гиг - самый простой и надежный способ добавления гига | всем |
| Ссылка Ticketmaster на артиста (ticketmaster.ie) | Тоже по API. Бот отберет гиги по ирландскому гео | всем |
| Ссылка Eventbrite, Songkick, EventCartel | Разметка страницы, при неудаче — ИИ | всем |
| Ссылка на Instagram, сайт площадки и прочие | ИИ | добавившим 1 гиг в базу, иначе - модерация |
| Постер с подписью «анонс» | ИИ | добавившим 1 гиг в базу, иначе - модерация |
| Текст по шаблону | в чате не распознается | — |
| Текст со страницы заказов Ticketmaster (My Tickets) | в чате не распознается | — |
Будущие и прошлые гиги
Список будущих гигов показывает все гиги, дата которых еще не прошла.
По пятницам бот присылает в чат афишу - выборку из списка будущих гигов на конец текущей недели и на следующую.
Список прошлых гигов показывает гиги за последние полгода. Более старые гиги можно увидеть либо в «Мои гиги», если на них есть отметка пользователя, либо через «Поиск».
На следующий день после даты гига бот убирает с карточки все, что относится только к будущим: список пришедших, комментарии, попутчики, добавление в календарь и переключатель показа имени — имена на прошедших гигах скрыты.
Карточка гига
Состав карточек будущего и прошлого гига отличается.
Только на карточке будущего гига:
- отметки «Иду» и «Хочу пойти»;
- список «Кто идет» — те, кто отметил «Иду»;
- переключатель показа своего имени в «Кто идет»;
- добавление в календарь;
- разделы «Комментарии» и «Попутчики».
Только на карточке прошлого гига:
- отметки «Довелось» и «Не довелось» (аналоги «Иду» и «Хочу пойти»).
На обеих карточках:
- информация о гиге;
- добавление в плейлист и вишлист;
- редактирование и удаление гига.
Комментарии и Попутчики
В комментариях предполагается делиться данными о пресейлах, препати, stage time и так далее — до трех комментариев в одни руки, имя в них не скрывается.
Попутчики устроены так же, просто отдельно от комментариев: здесь предполагается просить подвезти, предлагать подвезти или искать попутчиков, чтобы поехать вместе. Имена тоже не скрываются.
На чужую запись в комментариях или попутчиках можно пожаловаться. После трех жалоб от разных людей запись скрывается до решения админов.
Мои гиги
В «Мои гиги» попадают гиги с отметкой:
«Иду» - будущий гиг, на который пользователь точно идет,
«Хочу пойти» - будущий гиг, на который пользователь хочет пойти,
«Довелось» - прошлый гиг, на котором пользователь был,
«Не довелось» - прошлый гиг, на который пользователь хотел (бы) сходить.
Отметки
Отметки ставятся вручную при добавлении гига или автоматически при добавлении пачки гигов.
Поменять или снять отметку можно на карточке гига.
Отметка «Иду» добавляет имя пользователя в список «Кто идет» на карточке гига, если пользователь не выбрал скрывать имя. Это единственная отметка с именем, видимая другим.
«Хочу пойти» имя не показывает и в «Кто идет» не попадает.
Когда гиг переходит из будущих в прошлые, отметки «Иду»/«Хочу пойти» заменяются на «Довелось»/«Не довелось», если имя в «Иду» показывалось, оно скрывается.
Отметки используются ботом при расчете рекомендаций, так что с нерелевантных гигов их лучше потом снимать.
Списки
В списки гигов в разделе «Мои гиги» попадают только те гиги, на которых стоит отметка пользователя. Соответственно, добавленный пользователем гиг без отметки пользователя в списки не попадет, а добавленный кем-то еще гиг с отметкой пользователя - попадет.
Мои гиги показывает три списка для будущих гигов, чья дата еще не прошла - список гигов с отметкой «Иду», список гигов с отметкой «Хочу пойти» и сумму этих двух - список «Все будущие».
Аналогично для прошлых гигов ведутся три списка: с отметкой «Довелось», с отметкой «Не довелось» и общий «Все прошлые».
В отличие от общего списка «Прошлые гиги» в главном меню, где показываются гиги только за последние полгода, список «Все прошлые» в «Мои гиги» показывает все прошлые гиги пользователя без ограничения.
Мой профиль
«Мой профиль» показывает статус пользователя в боте и настройки пользователя, а также содержит рекомендации, плейлист и вишлист.
Рекомендации
Цель рекомендаций - помочь не пропустить интересный гиг. Бот пытается определить «похожих людей» в чате и рекомендует те гиги, на которые идут эти самые похожие люди.
Бот использует четыре источника похожести: история гигов, планы на будущие гиги, содержимое плейлиста и содержимое вишлиста. Бот формирует из них четыре списка рекомендаций и пятый список как сумма первых четырех, и выдает топ-5 (число настраивается) из всех пяти. Гиги, на которые пользователь уже отметился, в рекомендации не попадают.
Чтобы бот начал пытаться считать рекомендации, нужно, как минимум, по 5 отметок в прошлых и будущих гигах и по 5 имен в плейлисте и вишлисте соответственно.
Рекомендации считаются по ночам и рассылаются утром. Если бот обнаруживает новую рекомендацию, он присылает ее пользователю, если у пользователя включены уведомления.
Плейлист и Вишлист
С карточки гига имена артистов (хедлайнера и разогревов) можно добавить в плейлист или в вишлист.
Плейлист — любимая музыка пользователя. Используется для расчета рекомендаций «по вкусам»: бот ищет людей с похожим плейлистом, чтобы рекомендовать гиги, на которые идут они.
Вишлист — музыка, которую пользователь хотел бы послушать живьем, то есть список желаемых гигов. Служит двум задачам: бот отслеживает по нему новые анонсы и так же, как плейлист, использует его для расчета рекомендаций — «по желаниям».
Бот регулярно проверяет Ticketmaster на предмет новых гигов артистов из вишлистов и, если находит, присылает уведомление в личку и анонс в чат. Если такой гиг добавляет кто-то из участников — анкетой, ссылкой, постером, постом в чате или через «My tickets», — подписчики вишлиста тоже получают уведомление в личку.
У плейлиста и вишлиста общий лимит — по 33 имени в каждом (настраивается).
Настройки
Статус показывает данные из Telegram и статус в боте.
Гео — свой город, если это не Дублин: гиги в Дублине и на площадках «для всех» (например, Slane Castle или The TLT) и так считаются подходящими для всех. Город используется для вишлиста и рекомендаций.
Показ имени влияет на новые отметки «Иду»: показывать имя в списке пришедших можно по умолчанию для всех гигов или скрывать его на отдельном гиге, независимо от общей настройки.
Уведомления включают или выключают личные сообщения о новых гигах из вишлиста и о новых рекомендациях.
Удаление данных стирает следы общения с ботом; после удаления некоторое время еще могут приходить уведомления, поставленные в очередь раньше.
Обратная связь
Обратная связь — для позитивного и негативного фидбека, сообщений о багах и пожеланий по новой функциональности.
Для админов
Роли и доступ
Роль бот берет из статуса в чате Telegram.
| Роль | Как получить | Права |
|---|---|---|
| member | участник чата | отметки, комментарии, попутчики, плейлист и вишлист, добавление гигов (анкета, постер, ссылки Ticketmaster/Eventbrite/Songkick/EventCartel, пачка с «My tickets»), «Найти ссылку», публикация анонсов, правка и удаление своих гигов |
| approved | участник чата с тегом admin approved | плюс: любые ссылки через ИИ; правка записей бота в комментариях и попутчиках |
| admin | создатель чата или администратор с любым другим титулом (или без титула) | все функции: правка и удаление любых гигов и любых записей в комментариях/попутчиках, Admin console |
Помимо ролей, используются статусы:
| Статус | Как получить | Что происходит |
|---|---|---|
Заблокирован админами (blocked_by_admin) | админы блокируют в Жалобах («Заблокировать двуногое») или в All users | Экраны смотреть может, но действия молча не выполняются: отметки, добавление гигов, комментарии и т.п. Снимается в Not good или All users. |
Ограничен в чате (restricted) | админы чата ограничили участника в Telegram | То же самое. Роль approved/admin сбрасывается в member. |
Вышел из чата (left) | участник сам вышел из чата | То же самое. Роль сбрасывается в member, данные сохраняются. |
Исключен из чата (kicked) | админы чата удалили участника из чата в Telegram | То же самое. Роль сбрасывается в member. Через 30 дней удаляется из бота полностью, как при «Забыть меня совсем», но только после перепроверки статуса в Telegram. |
Заблокировал бота в личке (bot_dm_blocked) | участник заблокировал бота в Telegram; бот узнает об этом, когда не может отправить ему сообщение | Доступ не теряет. Личные уведомления не приходят, пока снова не напишет боту. |
Admin console
Открывается только командой /admin, набранной вручную, — ее нет ни в меню, ни в списке команд. Работает и когда бот на паузе.
Рубильник
Пять переключателей; у включенного — «✓» перед названием, сверху — статус каждого («работает» / «на паузе»).
| Кнопка | Когда выключено | Кто переключает |
|---|---|---|
| ИИ | ИИ не вызывается: источники, которым нужен ИИ, в личке отклоняются с пояснением, в чате бот молчит | admin |
| ИИ в чате | в чате разбираются только ссылки без ИИ | admin |
| Бот | в личке записывать могут только admin, остальные видят «Бот на паузе», экраны для чтения доступны; в чате бот молчит, публикации ждут в очереди | admin |
| Бот в чате | в чат ничего не пишется; публикации ждут в очереди и уходят после включения | admin |
| Stage time | бот не ищет stage time | admin |
Большой брат
- Жалобы — на записи в Комментариях/Попутчиках, за 30 дней, новые сверху, по одной на экран. Можно отправить в архив, скрыть или вернуть проблемную запись и заблокировать автора.
- Модерация — см. ниже.
- Not good — пользователи без доступа: блокировка админами, ограничение, выход или исключение из чата. Заблокированных админами можно разблокировать.
- All users — поиск по Telegram ID, имени или username; можно заблокировать и разблокировать.
Модерация
Цель модерации - фильтр возможного спама.
Посты из чата от авторов, у которых еще нет ни одного гига в базе, если пост нужно разбирать через ИИ (произвольная ссылка или постер). Один экран на автора, первым показан тот, кто ждет дольше: можно разрешить — тогда бот пишет автору в личку по каждому его посту, как обычно, — или отклонить, тихо, без уведомления автору. О новом авторе в очереди приходит одно уведомление в боточат.
Ссылки Ticketmaster, Eventbrite, Songkick и EventCartel модерацию не проходят.
Справочники
Площадки
- Поиск по площадке или городу латиницей; служебное слово
67показывает все площадки «для всех». - Если ничего не нашлось, площадку можно добавить: город бот сам ищет в Ticketmaster, а если не находит — просит указать его вручную.
- У каждой площадки есть карточка: название и город можно поправить (если после правки она совпадет с уже существующей, бот предлагает объединить их, а старое название становится другим написанием найденной), можно пометить «для всех» (дублинской это не нужно — Дублин и так домашний регион для всех) и удалить.
- Удалить нельзя, пока на площадке есть будущие гиги. В прошлых гигах удаленная площадка заменяется на «gigbuddy».
Артисты
- Поиск по имени/названию латиницей. Добавить нового артиста отсюда нельзя.
- Карточка показывает, есть ли у артиста Ticketmaster ID, число гигов и записей в Wishlist и Playlist; имя можно поправить (сразу видно во всех гигах и списках; совпадение с другим артистом не допускается) и удалить.
- Удалить нельзя, пока у артиста есть будущие гиги. В прошлых гигах удаленный артист заменяется на «gigbuddy», из вишлистов и плейлистов он убирается. Сугубо техническая штука для удаления следов неверного распознавания имен.
Диагностика
Selftest
Показывает ✅/❌ по каждому пункту.
| Пункт | Что проверяет |
|---|---|
| D1 | запись и чтение тестового значения в базе |
| KV | запись и чтение в KV-кэше |
| Queue | тестовое сообщение в очереди разбора и уведомлений |
| Telegram | доступность Bot API и вебхука, показывает pending_update_count |
| Ticketmaster | доступность Discovery API |
| Gemini | доступность ИИ-ключа (если ИИ включен) |
| Обязательные ключи Settings | все нужные настройки на месте |
| Последний запуск фоновых задач | по каждой из 12 задач — когда последний раз выполнялась и успешно ли |
Счетчики
| Пункт | Что показывает |
|---|---|
| Пользователи | всего и с доступом к боту |
| Гиги | будущих и прошлых |
| Артисты | всего в базе |
| Вишлист / Плейлист | число записей |
| Обновления за сутки | сколько обновлений Telegram обработано за 24 часа |
| Outbox | сколько публикаций/уведомлений в очереди по статусам (pending/held/failed) |
| Ошибки за сутки | в логах и отдельно — ошибки обработки вебхука |
| Размер базы | объем D1 |
| pending_update_count | сколько обновлений Telegram еще не доставлено |
| Возраст старейшего задания в Queue | сколько ждет самое старое необработанное задание |
| Задержка обработки / скорость запросов к базе | метрики производительности из Analytics Engine |
Логи
Последние 20 ошибок, новые сверху. Кнопками можно отфильтровать по типу события (до 6 типов, встреченных среди этих 20):
| Тип события | Что значит |
|---|---|
telegram_api_error | не удался вызов Telegram Bot API |
update_failed | не удалось обработать входящее обновление от Telegram |
outbox_failed | не удалось отправить публикацию/уведомление из очереди |
admin_notify_group_failed | не удалось отправить уведомление в боточат |
stage_time_search_failed | не удался поиск stage time |
cron_<задача>_failed | сбой при выполнении фоновой задачи <задача> (outbox_picker, parse_stall_picker, admin_alerts, wishlist, poster, backup и т.п.) |
cron_<задача>_claim_failed | сбой при попытке занять суточную задачу (проблема с D1) |
cron_nightly_<подзадача>_failed | сбой одной из подзадач «Ночной» (nightly_dedup, nightly_reconcile, stage_time) |
cron_retention_<правило>_failed | сбой одного из правил очистки по срокам хранения |
cron_retention_group_confirm_messages_failed | сбой очистки сообщений group_confirm |
cron_retention_kicked_users_failed | сбой удаления исключенных из чата |
cron_recs_nightly_user_failed | сбой расчета рекомендаций для одного пользователя |
Почта
Сообщения из «Обратной связи» за 30 дней, новые сверху, по одному на экран; каждое можно отправить в архив. Каждое новое сообщение также сразу приходит в боточат.
💩 & 🪵
- Хотелки и Баги — общий список идей и ошибок для админов, свои разделы для каждого. Новую хотелку или баг можно добавить текстом; существующие листаются по одному, целиком, и удаляются сразу, без подтверждения. Хранятся месяц.
Уведомления в боточат
Боточат - отдельный Telegram-чат для служебных сообщений. Туда приходят:
- новые сообщения из Обратной связи;
- сообщения из очереди Модерации;
- о скрытых по жалобам записях в Комментариях и Попутчиках;
- пачка с «My tickets», в которой что-то не разобралось, — с исходным текстом;
- сообщения о суточном лимите автопубликаций;
- алерты (раз в час): появились неотправленные сообщения (failed), какая-то ежедневная задача не завершалась больше 26 часов, у Telegram копятся необработанные обновления.
Если сообщение в боточат отправить не удалось, копия идет в личку админше бота.
Расписание фоновых задач
Время — Дублин.
| Когда | Задача |
|---|---|
| каждый день, 01:00 | Рекомендации: расчет для запросивших |
| каждый день, 02:00 | Сверка статусов пользователей с чатом |
| каждый день, 04:00 | Объединение дублей прошлых гигов |
| каждый день, 05:00 | Отметки прошедших гигов → «Довелось»/«Не довелось», удаление их комментариев и попутчиков, окончательное удаление гигов, удаленных больше 30 дней назад; поиск stage time на завтра и сегодня |
| каждый день, 06:00 | Очистка по срокам хранения |
| каждый день, 07:00 | Проверка вишлистов по Ticketmaster, уведомления и анонсы |
| каждый день, 09:00 | Рассылка новых рекомендаций |
| каждый день, 14:00 | Повторный поиск stage time на сегодня |
| пятница, 10:00 | Афиша в чат |
| воскресенье, 03:00 | Резервная копия базы |
| каждый час | Алерты в боточат |
| каждые 15 минут | Outbox-подборщик (отправка отложенных публикаций и уведомлений) |
| каждую минуту | Подборщик зависших parse-заданий |
Автопубликаций в чат — не больше 5 в сутки (число настраивается), с интервалом не меньше 15 минут; лишние ждут следующего дня.
Сроки хранения
| Данные | Сколько хранятся |
|---|---|
| Жалобы, Обратная связь | в консоли видны 30 дней, удаляются через 90 |
| Логи | 90 дней |
| Удаленные гиги | 30 дней, до этого повторное добавление того же гига с Ticketmaster восстанавливает запись |
| Комментарии и Попутчики | до ночи после гига |
| Хотелки и Баги | 30 дней |
| Незавершенные диалоги | 24 часа |
| Исключенные из чата | 30 дней, затем удаляются полностью |