# [tg] BoostMateBot (ex. RandomOracleBot)
## Исследование рынка
Текущие каналы привлечения новых подписчиков для каналов:
- **закуп рекламы через биржи**
- ...тут будет список...
### [У кого?] Целевая аудитория
- администраторы мелких и средних каналов (каким именно каналам нужен такой бот? категории?)
### [Что болит?] Проблема №1 - сложность привлечения новых подписчиков
- либо штатные каналы привлечения новых подписчиков недоступны для мелких и средних игроков
- т.к. реклама недоступна мелким каналам из за высокой планки минимального рекламного бюджета
- либо сложно или почти невозможно посчитать эффективность рекламных кампаний
- не всегда известна стоимость привлечения подписчика (Customer Acquisition Cost)
- например при обмен постами между каналами
- нет возможности считать Retention, когорты
- нет возможности считать ROI, LTV
- например если канал дальше ведет на сайт онлайн магазина то можно связать подписчика с покупателем товара или услуги на сайте
### [Что болит?] Проблема №2 - низкая вовлеченность текущих подписчиков
- зачастую подписчики отключают уведомления через некоторое время время после подписки и становятся по сути недоступны для авторов каналов
---
### [Решение] BoostMate
... тут краткое описание функциональности бота...
- Цели
- увеличить аудиторию своего канала
- обменяться аудиторией с другим каналом -
- перелить свою аудиторию на другой канал - boost маленьких каналов
- Условия старта розыгрыша:
- вручную
- по расписанию
- Условия завершения розыгрыша:
- вручную
- по расписанию
- по достижению заданного количества участников
- Требуемое действие
- привлечение необходимого количества друзей
- подписка на канал(ы)
- подписка на канал(ы) + привлечение необходимого количества друзей на другой канал(ы)
- конверсия на стороннем ресурсе (покупка, регистрация, отзыв) через webhook
- ...
- Выбор победителей
- кто больше пригласил
- случайно
- смешанный формат (например, первый кто больше пригласил, а остальные случайно)
- Количество победителей
- конкретное количество
- все кто выполнил условия (подойдет для розыгрыша промокода, сертификата или уникальной ссылки на приз)
- Тип приза
- приз от организатора
- промокод, сертификат, ссылка на приз
- Контактное лицо (кому писать в случае каких-то вопросов во время проведения)
- Нотификации участников
- об успешном приглашении друга в конкурс
- друг не может быть привлечен в конкурс
- участник выиграл в конкурсе
- участник не выиграл в конкурсе (утешительный приз)?
**Use cases**
1. Виды розыгрышей (получи шанс выиграть приз за совершенное действие)
- розыгрыш в одном канале
- goal1: наращиваем аудиторию канала за счет друзей подписчиков
- action1: пригласить друзей которые еще неподписаны
- goal2: сфокусировать активность аудитории на конкретном посте
- action2: просмотры, реакции, комменты
- розыгрыш в нескольких каналах
- goal1: обмениваемся аудиторией с другими каналами
- action1: подписаться на все каналы в розыгрыше
- goal2: (boost стороннего канала) переливаем свою аудиторию в другой канал
- action2: подписаться на другой канал и пригласить туда друзей
- ...
2. Промо-акция
- например, появилось какое-то новое приложение и мы хотим привлечь пользователей, а также померить сколько людей в итоге установило приложение
- тоже самое с сайтом или онлайн-магазином
- или "вышел новый продукт" и нужно увеличить количество продаж
3. ?? Акции & подарки (получи скидку / подарок / whatever за совершенное действие)
- создается уникальная ссылка на акцию, которая ведет на бота
- при открытии открывается webApp где трекаются действия пользователей
- можно попросить выполнить какие-то действия, чтобы получить скидку или подарок
- benefits: можно получать список лояльных пользователей (потенциальные лиды), прогревать аудиторию, A/B тестирование акций для выбора наиболее интересных
4. ??? Обмен постами между каналами (без явного розыгрыша)
- с использованием бота
- ...
- с использованием обычных invite-links
- возможность выгрузить список привлеченных пользователей
5. Быть подписчиком все время проведения розыгрыша - в это время рекламные посты получают большие охваты
6. A/B тестирование лендингов - целевое действие = заявка на сайте, для каждого участника открывается один из нескольких вариантов сайта
### Конкуренты
1. [@ContestyBot](https://t.me/contestybot)
* [описание](https://telegra.ph/Contesty-05-07)
* [поддерживается](https://t.me/contestychat)
* X только русский язык!
* есть статьи на VC
* были попытки раскрутки через спам в комментах
* V есть превью поста с конкурсом и оно работает
* чистит вообще все сообщения в процессе общения с ботом
* тестовый конкурс был под номером 2393, что говорит о том, что бота скорее всего не особо используют
* нет возможности автоматически опубликовать пост о начале и конце розыгрыша в каналах
* проверяет ли подписку перед тем как подвести итоги???
2. [@tgprize_bot](https://t.me/tgprize_bot)
* проверяет подписку
* закрытый бот
* 5000р месяц использования
* пользуются крупнейшие тг-каналы (ЖЮ, Двач, МДК, Лепра и тд.)
3. [@RandomGodBot]()
* V Умеет проверять подписку на каналы в розыгрыше
* X только русский язык!
* X нет возможности настроить пост с результатами розыгрыша
* [code](https://github.com/RisenSky/RandomGodBot)
4. [@GivysBot](https://t.me/GivysBot)
* [поддерживается](https://t.me/expentedsoft)
* [видео-инструкция](https://www.youtube.com/watch?v=oYVjw5T4n-U)
* V 3 языка: русский, английский и украинский
* X нет удобного редактора описания розыгрыша
* V есть участие через сайт, на котором стоит капча + CloudFlare (видимо еще проверяется айпишник). [Происходит логин на сайт через бота!](https://i.imgur.com/JrrFnun.png)
5. [@ContestMasterBot](https://t.me/ContestMasterBot)
* [описание](https://teletype.in/@detresher/giveaway#Y7u9)
* много функционала, но интерфейс сложный и неудобный
* [Макросы в описании розыгрыша](https://i.imgur.com/Ro4lDiU.png)
* V Экспорт участников в xlsx формате
* неудобный интерфейс для админа
* X не проверяется подписка при нажатии "Участвовать"
6. [@RandomTGbot]()
* Бот поможет создать розыгрыш и определит победителей случайным образом.
* [описание](https://ru.botostore.com/c/randomtgbot/)
* не проверяет подписку
* [демонстрация выбора победителей](https://t.me/RandomTG/262)
* X странный дизайн: похоже на scam-проект
* X участник прежде чем нажать на кнопку "Участвовать" должен активировать бота самостоятельно
7. [@VoterBiBot]()
* [описание](https://teletype.in/@detresher/giveaway#4LPP)
* Бот поможет провести лотерею или розыгрыш в твоем канале.
* поддерживается, но новый функционал кажется не появляется
* X реклама скам-проектов, отключение 3000р
* V есть поддержка русского и английского
* V есть поддержка таймзоны
* X нет возможности редактировать и смотреть статистику по текущему розыгрышу
8. [@GIVES_ROBOT]()
* ...
* [описание](https://teletype.in/@detresher/giveaway#sqmC)
9. [@spin_everyday_bot]()
* Бот для ежедневных розыгрышей.
* [code](https://github.com/evgfilim1/spin_everyday_bot)
10. [@random_ibot]()
* не отвечает
11. [@VimTopbot]()
* не отвечает
12. [@Tegivebot]()
* отвечает, но не работает
13. [@alisatg_bot]
* свежий бот - информацию о боте в канале начали публиковать в декабре 2022
14. [@tggrow]
15. https://giveshare.ru/ - https://vk.com/@brusnyka-instrumenty-telegram-bot
### Дифференциация относительно конкурентов
- Бот всегда доступен
- некоторые из имеющихся конкуретов не отвечают на команду /start
- **Отслеживание кто сколько друзей пригласил**. У каждого участника своя уникальная invite-link по которой он приглашает друзей к участию в конкурсе
- Трекинг новых подписчиков которые не отписались как минимум до конца розыгрыша
- Удобный и гибкий UX
- для создателей:
- возможность настройки розыгрыша через webApp
- превью и настройка поста с розыгрышем
- тонкая настройка розыгрыша для каждого канала (в случае нескольких каналов в розыгрыше)
- опциональная публикация поста с розыгрышем
- опциональная публикация поста с результатами
- ...
- для участников:
- проработанные пользовательские экраны
- простые one-action экраны повышают конверсию в целевое действие
- нотификации о привлечении новых пользователей
- ...
- Сохранение истории всех розыгрышей и участников
- Мультиязычность
- изначально поддержка двух языков: русский и английский
- потенциальные языки:
- казахский
- индийский
- узбекский
- грузинский
- армянский
- украинский
---
## New features
- Ссылка на сайт сообщества в webApp
- [minor] Салют / хлопушка на экране слева и справа после успешного создания розыгрыша (как в Canva после регистрации)
- *[Creator UX]* Добавление бота администратором в канал (стандартный экран)
- Публикация поста о начале розыгрыша в inline моде (есть у @ContestyBot и у @ContestMasterBot)
- Окно выбора канала (есть в @GivysBot при создании розыгрыша)
- Возможность шаринга розыгрыша за пределы Телеграм (делать какую то уникальную ссылку с возможностью добавления UTM меток)
- Тип призов: приз от организатора или сертификат/промокод/ссылка на приз
- *[Epic]* Попросить ChatGPT сгенерировать начальное описание розыгрыша
- Капча для каждого нового участника розыгрыша (есть у @RandomGodBot)
- *[Creator UX]* Добавление канала в бота
[Пример](https://i.imgur.com/NStDCKD.png)
⚠️ Внимание ⚠️
Вы можете добавить только публичную группу в бота, если ваша группа приватная, то сделайте ее на пару минут публичной. После добавления группы в бота, верните статус группы "Частная".
Добавьте бота (@RandomGodBot) в ваш канал или чат как администратора с правом публикации сообщений. После этого отправьте мне канал в формате @channelname. Если вы хотите добавить приватный канал перешлите из него сообщение, или скопируйте и пришлите боту ссылку на любое сообщение из приватного канала.
- *[Creator UX]* Превью поста который будет опубликован в канал
- WYSIWYG редактор текста
- редактор фото (crop, resize)
- Имплементация SingleMessage mode в Telegram Z client
- *[Creator UX]* Confirmation screen для публикации и завершения розыгрыша
- *[Creator UX]* Просмотр статистики розыгрыша
- список участников и их текущие результаты
- ...
- CSV
- real time board (frontend)
- *[Participant UX]* Регистрировать участника розыгрыша сразу при нажатии на кнопку "Участвовать" в посте
- сразу после нажатия бот пишет пользователю для продолжения работы
- *caveats: может ли бот писать пользователю который еще не активировал его (не отправлял команду /start)?*
- **benefits: не теряем пользователей из-за неочевидного перехода в бота для участия в розыгрыше**
- *[analytics]* Invite link на странице "Необходимо подписаться на следующие каналы"
- в случае публичного канала: вместо стандартной ссылки на канал генерируем invite-link, чтобы владелец канала мог видеть сколько людей пришло с розыгрыша штатными средствами Телеграм
- *[analytics]* Уникальная ссылка в посте (на кнопке "Участвовать") для каждого канала из розыгрыша (сейчас одна для всех)
- чтобы можно было трекать из какого канала сколько людей пришло в розыгрыш
- *[Participant UX]* Нотификация когда приглашенный пользователь выполнил все условия розыгрыша (подписался на все каналы)
- *[security]* Авторизация для создателей розыгрышей (чтобы сторонние люди не имели доступа к редактированию розыгрыша)
- отправить боту команду "хочу авторизоваться"
- бот присылает ссылку вида https://site.ru/?token=%some-token%
- пользователь переходит по ссылке и попадает на сайт (или в webApp)
- вводит капчу нажимает "получить код"
- бот присылает код
- пользователь вводит код
- создается сессия на 24 часа
- *[повышение доверия к боту у крупных каналов]* Выделение отдельного микросервиса ("message-broker"), который умеет только получать и отправлять raw-сообщения (обертка над telegraf без безнес-логики)
- *[PREMIUM]* Создатель розыгрыша может задеплоить такой "message-broker" сервис (куда-то) и общаться с нашим бекандом по API
- **не раскрывает свой botToken**
- **"message-broker" должен быть open-source**, чтобы было видно, что он не пересылает никуда botToken
- **коммуницирует со своей аудиторией собственным ботом вместо нашего**
- де-факто у нас вообще нет доступа к их боту, а соответсвенно и к каналу
- **можно прозрачно для админов выкачивать adminLog**, чтобы трекать подписки и отписки (боты имеют доступ к методу [channels.getAdminLog](https://painor.gitbook.io/gramjs/working-with-channels-and-supergroups-and-geogroups/channels.getadminlog) или все такие [не имеют](https://gram.js.org/tl/channels/GetAdminLog))
- **позволит создать очередь сообщений и при ее помощи избегать FloodError**
- ретраи на отправку сообщений (гарантия доставки)
- упростит написание тестов, моков (мокаем простенький контракт между ботом и отправщиком сообщений вместо мока Telegraf context)
- *[PREMIUM]* Возможность использовать собственного бота (премиум)
- добавить креды бота в админке
- задеплоить копию с этими кредами
- *[Epic]* Глобальный список розыгрышей
- features:
- Список всех розыгрышей в разных каналах (Топ-розыгрышей)
- по локациям
- по количеству участников
- benefits: **новый канал привлечения аудитории для каналов**
- Рейтинг каналов на основе отзывов о проведенных розыгрышах
- победители розыгрышей оставляют отзывы: получили ли они приз или нет, оценивают честность проведения розыгрыша
- отзывы победителей выбранных случайно ценятся дороже
- benefits: добросовестные каналы получают больше участников т.к. они доверяют результатам прошлых розыгрышей
- *[Epic]* "Социальная сеть" участников всех розыгрышей
- **обьединяем всех участников всех розыгрышей в одну экосистему**
- слоган: "участвуй в розыгрышах и получай призы"
- у каждого участника есть профиль:
- все участия данного участника
- достижения (ачивки которые можно пошарить в соц-сетях)
- например, "Я выиграл в розыгрыше от канала Ньюсач"
- **benefits: повышение виральности канала и бота**
- отзывы
- если побеждал в каком либо из конкурсов
- **benefits: повышение доверия к каналам**
- рейтинг
- чем больше участвует тем выше рейтинг
- ... какая-то формула расчета рейтинга ...
- мошенник?
- были ли подозрения в мошенничестве
- **benefits: можно отлавливать мошенников на основе прошедших розыгрышей и не допускать к будущим**
- *[Epic]* Anti-fraud
- после выполнения всех условий розыгрыша запрашивать капчу и заодно чекать ip
- trigger: проверять что приведенные пользователи имеют разные ip c пользователем который их привел
- trigger: проверять что привлеченные пользователи не были зарегистрированы недавно
- feature: допускать к участию только пользователей у которых userId <= K (K - выставляется в настройках розыгрыша)
- определить K можно зарегистрировав фейковый аккаунт примерно во время старта розыгрыша и взяв K = userId
- или проверяя *примерную* дату создания аккаунта в [@creationdatebot](https://t.me/creationdatebot), [code](https://github.com/karipov/creationDate) бота
# Функциональность бота
## ChatGPT
- Q: How could you interpret telegram bot with the name BoostMate? Which functions it could have?
> The name BoostMate suggests that this Telegram bot has features related to increasing the size and engagement of a Telegram audience, and possibly involves partnerships or collaborations between different Telegram channels.
>
> Here are some possible functions that BoostMate could have:
>
> Audience Boost: The bot could offer ways to increase the size of a Telegram channel's audience, such as through targeted advertising or cross-promotion with other channels.
>
> Engagement Boost: The bot could offer tools to increase the engagement level of a Telegram channel's audience, such as through gamification, polls, or interactive features.
>
> Audience Exchange: The bot could facilitate partnerships between different Telegram channels, allowing channels to exchange audiences and increase their reach.
>
> Analytics: The bot could offer insights and data analysis on audience growth and engagement, allowing channel owners to make informed decisions on how to improve their channels.
>
> Customization: The bot could offer ways for channel owners to customize their channels, such as by adding custom branding, messages, or features.
>
> Customer Support: The bot could provide customer support to channel owners, answering questions and providing guidance on how to use the bot's features.
>
> Overall, the name BoostMate suggests a bot that is focused on helping Telegram channel owners grow their audiences and engage with their followers, and may involve collaborations or partnerships between different channels.
## Логика работы бота
Организатор заходит в бота
- старт ( ему присылаются условия работы и сколько чо куда оплатить )
Он оплатил
- выбор механики розыгрыша ( комбинация от 1 до 4 вариантов) либо один либо любой набор для проверки всех условий
1) подписка на группы ( от 1 до ?)
2) привлечение друзей ( реферальная ссылка для друга) проверка условий пригласил ли пользователей нужное количество друзей - проверка ботом есть ли они в группе или присоединились в группу ( бот предварительно должен быть добавлен в группы на которую/ые должен быть подписан юзер)
3) лайк или коммент оставлен под записью
4) коменты ? Надо ли ( типа кто больше оставит или что-то в этом роде)
То есть организатор выбирает любой набор механик для проведения.
Публикует ссылку на конкурс - то есть уникальную на бота- пользователь по кнопке переходит в бота и бот понимает что это именно этот конкурс
Пользователь подписывается на группы которые выдал бот, ставит лайк, и если надо приглашать пользователей , бот выдаёт уникальную ссылку на приглашение. ( при использовании закрытой группы мне кажется это реализуется проще )
Составляется список всех пользователей в базе кто выполнил все условия
Мне кажется базу должна быть в открытом доступе. И после выполнения условий юзеру поставится номер порядковый
Розыгрыш рандомом например в таком случае
Ещё один из вариантов проведения - максимально активный - пригласил максимум друзей например
# Продвижение (Where to spam after first release)
- написать статью на VC.ruЕ
## Статьи
- https://vc.ru/social/289120-kak-provesti-konkurs-v-telegram-kanale-ili-chate
- https://vc.ru/u/936550-lilly-bradshaw/292871-sozdaem-rozygrysh-v-telegram-kanale-chate-s-pomoshchyu-bota
- https://dnative.ru/ask/question/posovetujte-rabochie-sposoby-sdelat-konkurs-v-telegram/
- https://vc.ru/u/1370296-evgeniya-goncharenko/554124-kak-provesti-konkurs-v-telegram-kanale-i-chate
- https://vc.ru/social/209215-kak-provesti-konkurs-v-telegram
- **https://postium.ru/konkurs-rozygrysh-telegram/** - описание процесса проведения конкурсов
Подборки
- https://vc.ru/u/740266-mks-media/412959-15-poleznyh-telegram-botov-dlya-marketologa
- https://www.unisender.com/ru/blog/idei/boty-v-telegram/
- [Привлечение новой аудитории за счет создания загадок](https://vc.ru/marketing/455951-zagadki-na-blokcheyne-ili-kak-poluchit-tysyachu-dollarov-za-odin-vecher)
- https://vc.ru/services/366418-bolshaya-podborka-telegram-botov-2022
### Видео-гайды по созданию розыгрышей (потенциально попросить перезаписать или как минимум написать о боте в комментах)
- https://www.youtube.com/watch?v=PUZ9YIBzPes
### Видео для маркетологов по Телеграму
- https://www.youtube.com/watch?v=RqnEXaSR0Vw
## Stores
- botostore.com
- TelegramBots.info
- Tgram.ru
- Telegram-Store.com
- catalog-telegram.info
- https://vc.ru/tag/%D1%81%D1%83%D0%B1%D0%B1%D0%BE%D1%82%D0%BD%D0%B8%D0%B9%D1%81%D0%B0%D0%BC%D0%BE%D0%BF%D0%B8%D0%B0%D1%80
# Development resources
- [state-machine](https://miro.com/app/board/uXjVO4w032c=/)
- [telegraf.js Scenes/Stages/Wizard docs](https://github.com/telegraf/telegraf/issues/705#issuecomment-549056045)
- [telegraf.js Wizard examples](https://github.com/feathers-studio/telegraf-docs/tree/master/examples/wizards)
- https://github.com/telegraf/telegraf/issues/391
- [Telegram bots dev course](https://mastergroosha.github.io/telegram-tutorial/docs/lesson_12/)
- Try TS transformers [1](https://www.npmjs.com/package/ttypescript) [2](https://github.com/kimamula/ts-transformer-keys/issues/4)
- [How to avoid FloodError](https://github.com/sochix/TLSharp/issues/474)
- Telegraf.js examples
- https://github.com/ZorinAlex/telega/blob/2e264b442e930be53915cdd951ce4b8f156aa3c4/back/sevices/channels/src/telegram/telegram.service.ts
- https://github.com/harisillahi/teledrive-repository/blob/4d7e5ebe487b854c3aa909e72ff71c2eaa794312/api/src/api/v1/Messages.ts
- telegraf.js custom context [example](https://github.com/telegraf/telegraf/issues/1139)
- [Telegram Post Widget](https://core.telegram.org/widgets/post)
# Потенциальные pivot'ы
- testing library for Telegraf.js
- Telegram messages previewer & editor
## WYSIWYG
- https://quilljs.com/playground/
# Wiki
## Правила проведения розыгрышей
- Q: При каком условии пользователь засчитывается как участник розыгрыша?
- A: Счетчик количества участников в посте с розыгрышем обновится только после того как участник нажмет кнопку "Участвовать", а также выполнит все условия розыгрыша (например, подпишется на все каналы в розыгрыше)
- Q: Как запустить розыгрыш вручную?
- A: После завершения создания розыгрыша, вы увидите кнопку "Опубликовать"