что такое конфа в телеграмме
Как сделать групповой звонок в Телеграмме с телефона и компьютера
Как сделать групповой звонок в Телеграмме с участием трех или более человек? Возможно ли это и если да, то — как? Сегодня мы вам расскажем о том, как в этом мессенджере обстоят дела с проведением видеоконференций.
Возможны ли видеоконференции в Телеграмм
Если говорить о видеоконференции или групповых звонках как о самостоятельной опции, то в Телеграмме этого нет. Совсем. Поговорить по голосовой связи можно только 1 на 1, а втроем и более — нельзя, необходимого функционала попросту нет. В сети есть информация, что в течение 2020 года ситуация изменится, однако никаких официальных заявлений на этот счет пока не было.
Однако если очень нужно, то организовать конференц связь все же можно — на такой случай уже созданы специальные боты. Тут надо отметить, что разработаны они сторонними людьми, не имеющими прямого отношения к Телеграмм. Поэтому гарантировать, что групповые звонки с использованием таких ботов будут настолько же защищены, как обычные (без бота), никто не может.
Как сделать групповой звонок на телефоне
Теперь непосредственно о том, как сделать конференцию в Телеграмме на телефоне:
Обратите внимание: соединение может происходить с задержкой в несколько секунд. Поэтому если вам не ответили сразу, звонок сбрасывать не нужно. Просто ждем.
Как сделать групповой звонок на компьютере
С десктопной версией мессенджера все аналогично — видеоконференция в Телеграмме создается при помощи того же бота ConfoBot. Но отдельную инструкцию мы все же приведем, так как функционал (расположение кнопок и пр.) на компьютере отличается от мобильного приложения.
Инструкция, как создать конференцию в Телеграмме на компьютере:
И в завершение еще раз хотим напомнить, что конференция в Телеграмме, проводимая с помощью ботов, это все же небольшой, но риск. Сторонние программы, вмешивающиеся в работу мессенджера, могут снижать уровень его безопасности.
Как сделать групповой видеозвонок в Телеграм
В минувшие выходные Telegram получил долгожданное обновление. Его ключевым нововведением стала поддержка групповых видеозвонков, которые Павел Дуров анонсировал ещё в самом конце года. Правда, он обещал, что эта функция станет доступна в мае, а по факту она появилась лишь к исходу июня. Но по большому счёту это ничего не меняет, потому что групповые видеозвонки в Telegram теперь есть на всех платформах, и ими можно успешно пользоваться. Правда, не всем это покажется очевидным.
Telegram наконец обзавёлся поддержкой групповых видеозвонков
У Telegram появилась версия для Safari на случай удаления из App Store. Как пользоваться
Видеозвонки в Telegram устроены несколько иначе, чем в других месседжерах. Если в WhatsApp, Viber или, скажем, FaceTime вы просто можете набрать нескольких собеседников сразу и вести с ними беседу, то в Telegram сделать так не получится.
Как звонить по видео в Телеграме
Видеозвонки в Telegram построены на базе голосовых чатов. То есть перед тем, как созвать видеоконференцию, вам потребуется объединить всех этих людей в группу, и только после этого начинать видеозвонок. В противном случае, ничего не получится.
Видеочаты создаются только на основе уже имеющихся групп
При желании вы можете даже не приглашать участников конференции вручную, а просто создать ссылку на видеочат и отправить её собеседникам. Когда будет возможно, они сами перейдут по ней и присоединятся к беседе. Так вы сможете не ждать дозвона, если они, например, заняты.
Интересно, что видеоконференция создаётся только на базе уже существующей группы, но вы можете пригласить к звонку людей, которые в ней не состоят. С одной стороны, это кажется нелогичным, но с другой, всё правильно. Ведь групповые видеозвонки не в последнюю очередь ориентированы на корпоративных пользователей.
Как пользоваться видеосвязью в Telegram
Скорее всего, групповые видеочаты предназначаются в первую очередь для корпоративных пользователей
Об этом свидетельствуют специфические инструменты управления беседой, которые появляются у автора видеочата:
Очевидно, что группе друзей или родственников большая часть этих инструментов попросту не нужна. У них просто нет необходимости в том, чтобы закреплять какого-либо собеседника, выступать от имени группы или даже показывать экран своего устройства, что обычно требуется при проведении вебинаров и презентаций.
Так что сомнений в том, что Павел Дуров намеревается составить конкуренцию Zoom, Skype, Google Meet и другим сервисам видеосвязи, нет. Другое дело, что для рядовых пользователей, которые хотят пообщаться в видеочате, слишком много проблем. Ведь для этого им по крайней мере придётся создать свою группу или пользоваться чужой.
На данный момент максимальное количество участников одной видеоконференции ограничено 30 пользователями. Однако, как уверяют разработчики, это временное ограничение. В скором времени – видим, когда нововведение протестируют окончательно, — количество собеседников, участвующих в конференции одновременно, будет увеличено.
Групповые видеозвонки
С сегодняшнего дня Вы можете включить видеотранcляцию с камеры или изображения с экрана в голосовом чате любой группы. Это позволит использовать голосовые чаты для онлайн-уроков, деловых встреч или семейных собраний.
В новой версии также добавлены анимированные фоны, анимации при отправке сообщений и многое другое.
Голосовой чат в любой группе теперь можно мгновенно превратить в видеоконференцию — достаточно, чтобы любой из участников включил видеорежим, нажав на значок камеры.
Любую из видеотрансляций можно развернуть на полный экран, нажав на неё. Вы также можете закрепить видео от того или иного собеседника, чтобы камера не переключалась на новых участников, когда они входят в чат.
Чтобы запустить конференцию, выберите «Голосовой чат» в меню ⋮ в профиле любой группы, в которой являетесь администратором. Для пользователей iOS кнопка «Голосовой чат» доступна прямо из профиля группы.
Как и раньше, в голосовом режиме без видео можно разговаривать с неограниченным числом собеседников. Режим видеоконференций в данный момент доступен первым 30 участникам, подключившимся к чату. Этот лимит скоро будет увеличен, чтобы пользователи Telegram могли транслировать лекции, игровые стримы, фестивали и т.д.
Вы можете транслировать не только видео с задней или фронтальной камеры устройства, но и изображение с экрана — или использовать и то, и другое параллельно.
Чтобы включить трансляцию экрана, нажмите на ⋮ или ⋯ в настройках голосового чата.
В новой версии улучшено шумоподавление, чтобы Вы могли наслаждаться качественным звуком без посторонних шумов. При необходимости шумоподавление можно отключить в настройках голосового чата.
Интерфейс групповых звонков оптимизирован для больших экранов ноутбуков и компьютеров, а также планшетов — как в горизонтальном, так и в вертикальном положении. Кнопка в правом верхнем углу разворачивает боковую панель, позволяющую просматривать видеотрансляции и список участников на одном экране.
На компьютере голосовой чат открывается в отдельном окне, чтобы удобно было переписываться в чатах, не теряя из виду видеоконференцию. При трансляции экрана через приложения Telegram для компьютеров Вы можете показать изображение как всего рабочего стола целиком, так и только из выбранной программы.
Если Вы смотрите видеоконференцию с компьютера, каждый раз, когда кто-нибудь из участников запустит трансляцию экрана, этот видеопоток будет автоматически закреплён — что удобно для рабочих совещаний и презентаций.
Кроме этих функций, Telegram сегодня представляет ещё одно обновление:
25 июня 2021
Команда Telegram
Групповые звонки в Telegram
Многим не нравится что в Telegram нельзя осуществлять групповые звонки.
В предыдущей статье я описывал реализацию идеи Телефонного эфира в моем telegram боте. Основной упор в начале создания проекта у меня был направлен на создание социальности и открытости общения в аудио чатах. Но, есть кейсы, когда нужны именно частные аудиоконференции, от рабочих совещаний, до создания частного аудиоконференц клуба по интересам.
В моем боте реализованы как публичные аудиоконференции (Эфиры), к которым может подключиться любой желающий, так и приватные аудиоконференции с доступом по паролю. Приватные комнаты/пароли создают сами пользователи и могут использовать бот в качестве площадки для проведения аудиоконференций, совещаний и т.п.
Приятного общения. Группового общения )))
Мне больше интересно как текстовые ссылки в статьи вставлять
Команды в телеграм ботах
В ботах часто используются команды вида “/command”, которые провоцируют бота на то или иное действие.
Кто уже создавал ботов мог видеть их в @botfather.
Давайте разберемся как создать этот список команд и присвоить каждой ту или иную функцию.
С созданием списка команд все довольно просто, это реализуется непосредственно в настройках бота через @BotFather:
1) Вводим команду /mybots
2) Видим список наших ботов
3) Выбираем тот бот, которому присвоим список команд
4) Кликаем Edit Bot
5) Кликаем Edit Commands
Далее, следуя формату, отправляем список команд, например:
Теперь если мы введем “/” в чате с нашим ботом, то он предложит список команд. Проверяем, что список есть:
Добавим логику нашим командам
Как уже видно из описания команд, я хочу отправить в чат клавиатуру.
Создам новую ГТ и перейду к написанию скрипта
Назову файл doPost, здесь будет только эта функция
Добавлю следующий скрипт:
let update = JSON.parse(e.postData.contents);
let msg = update.message;
let msg_array = msg.text.split(» «);
let user = msg.from.username;
if (text == «/getkeyboard») <
Demo.send_key(«Галочки», chat_id, API, keyboard)
Demo.send(«Клавиатура сохранена”, chat_id, API)
Все! Для каждой команды теперь добавлен функционал.
Хорошо, расскажу поподробнее))
Итак, если текст сообщения == “/getkeyboard”, мы отправляем в чат некую клавиатуру.
Если мы отправили боту команду “/save”, то он ответит нам сообщением “Клавиатура сохранена”.
Подробно функции send и send_key, а также библиотека Demo рассматривались в постах ранее. Вот ссылки:
Дабы не перегружать дорогого читателя инфой, остановлюсь здесь)
Как всегда жду фидбека и вопросиков ^^ Всегда рады пообщаться!
Типы клавиатур в чат ботах
Сегодня познакомимся с существующими клавиатурами в ботах и тем, как их подключить и настроить.
Всего есть два типа клавиатур:
ReplyKeyboardMarkup используется в случаях, когда вы хотите получить от пользователя конкретный ответ, предоставляя ему возможность не печатать ручками, а выбрать из предлагаемых вариантов. Иными словами, это заготовки текстовых сообщений. Расположены кнопки под полем ввода сообщения
В зависимости от выбранной кнопки могут последовать те или иные действия. Эту логику мы задаем в скрипте для каждой кнопки.
В приведенном примере мы хотим записать пользователя на маникюр и предлагаем ему определиться с днем (в качестве примера приведены только два варианта, но это можно закастомить).
После выбора того или иного дня бот внесет инфу в ГТ, а именно: дату, имя пользователя и ид чата.
Запись через чат имеет следующий вид
Здесь мы выбрали кнопку Сегодня и получили ответ от бота.
В ГТ при этом появилась строчка
Подключение и настройка
Каждая клава (инлайн-клавиатур может быть сколько угодно) записана в соответствующую переменную:
[«Записаться», «Отменить запись»]
Обратите внимание, что синтаксис для инлайн (INLINE_Days) и обычной (KEYBOARD) клавиатур различается.
Клавиатурам можно добавить дополнительные свойства, мы использовали только resize_keyboard со значением true. Их не так много и они есть в документации телеграма.
Далее в коде обращаемся к клавам по имени переменной.
С ReplyKeyboardMarkup все достаточно просто. Она добавляется при первом прогоне скрипта, когда вы отправляете в чат команду /start, например.
Нам нужна функция, которая отправит в чат клавиатуру. Функция та же, что и при отправке сообщения ботом send(), за двумя исключениями:
Ниже скрипт функции отправки обычной клавы в чат:
function send_key (msg, chat_id, api, keyboard)
Вызов функции осуществляется из тела функции doPost(e) одной строкой:
send_key(«Поехали», chat_id, API_TOKEN, KEYBOARD)
Что касается инлайн-клавиатур.
Отправка клавиатуры наступает при определенном условии. Если пользователь отправил в чат слово “Записаться”, то отправляем ему нашу инлайн-клаву:
if (text == «Записаться») <
Demo.send_key(«Выберите день», chat_id, API_TOKEN, INLINE_Days)
Переменная text содержит текст сообщения, которое мы и проверяем на соответствие.
Результатом выполнения функции send_key будет сообщение от бота Выберите день и кнопки под ним.
Далее нужно предусмотреть алгоритм обработки нажатия этих кнопок.
Если мы кликаем на какую-либо из кнопок (“Сегодня” или «Завтра»), то добавляем новую строку в ГТ и отправляем сообщение в чат, что запись создана.
let date = Demo.getNewDate(0);
let ind = get_ind(chat_id);
Demo.send(«Вы успешно записались. «+»Дата визита: «+ date, chat_id, API_TOKEN);
Ниже скрипт полностью (не забываем, что значения глобальных переменных у вас будут свои):
// Объявляем все нужные нам переменные. Док важно открывать именно по ID, а не брать активный док, т.к. запуск кода будет производить бот
const API_TOKEN = «1946675042:AAHg1HTHe42GhR9EEt0EdbR94j1G8pDcTWE«;
const DOC = SpreadsheetApp.openById(«1ALJLtLdt-LT7GEF4hawIizVeJXFnoPZCsC0pw7kcp70«);
const Clients = DOC.getSheetByName(«Clients»);
const Calendar = DOC.getSheetByName(«Calendar»);
var update = JSON.parse(e.postData.contents);
var msg = update.message;
var msg_array = msg.text.split(» «);
var user = msg.from.username;
if (text == «Записаться») <
Demo.send_key(«Выберите день», chat_id, API_TOKEN, INLINE_Days)
if (text == «Отменить запись») <
let ind = get_ind(chat_id);
Demo.send(«Запись отменена», chat_id, API_TOKEN)
var text = update.callback_query.message.text;
var user_name = update.callback_query.from.username;
let date = Demo.getNewDate(0);
let ind = get_ind(chat_id);
Demo.send(«Вы успешно записались. «+»Дата визита: «+ date, chat_id, API_TOKEN);
let date = Demo.getNewDate(1);
let ind = get_ind(chat_id);
Demo.send(«Вы успешно записались. «+»Дата визита: «+ date, chat_id, API_TOKEN);
Отдельно ниже представлена доп функция, которая проверяет наличие ид в ГТ. Если ид уже есть в таблице, мы обновляем данные у строки с этим ид. В противном случае создаем новую строку.
let chat_id = 311157431;
let arr = Clients.getRange(1,2,Clients.getLastRow()).getValues()
let ind = arr.indexOf(chat_id)
ID для подключения библиотеки Demo: 1JkXEW_zfhr6v0TKsvU_ZbygNLpXEczxZcC46fMF_ffk-noMk8UKcMitz
Здесь также заметим, что клик по кнопке в инлайн клавиатуре отправляет боту JSON со свойством callback_query. Это значит, что нам нужны дополнительные переменные, в которые мы запишем значения из этого JSON пакета.
Это краткая вводная в мир клавиатур. Скоро будут посты про простые сервисы, куда будут добавлены и доработаны те же клавиатуры и доп функции.
Чат с прогнозом погоды и триггеры в гугл таблицах (GS6)
Глобально задача в следующем:
Отсюда я забрал прогноз:
Подробнее о том как спарсить данные с сайта в таблицу в этом посте: Парсинг данных с сайтов в гугл таблички (GS1)
Тут приведу только формулу:
Для этого нам необходимо сохранять ид чата отдельно в таблице и обращаться к этому значению как к значению переменной chat_id.
Соответственно, нам нужна функция, которая будет это делать:
//записывает ид чата в таблицу
Demo.send(«ID записан», chat_id, API_TOKEN);
Вызывать ее мы будем из тела функции doPost(e) при условии, что боту отправлена команда /link. В коде это выглядит вот так:
Теперь соберем все вместе и сформируем сообщение для отправки в чат.
Все, что в кавычках, должно быть изменено на ваши значения.
Функция для подключения веб хука:
Функция link(chat_id) для запоминания id чата
Функция daily() для формирования и отправки прогноза в чат:
На данный момент функция daily() не вызывается другой функцией или командой типа /link или /hello.
Мы добавим триггер, который будет вызывать функцию автоматически каждое утро.
Переходим на вкладку Triggers
Добавляем новый триггер
В окне задаем необходимые параметры.
Результат работы скрипта ниже.
Дополнительно: триггеры на то и триггеры, что работают автономно (без участия пользователя или разработчика, с закрытым доком или чатом. В любой ситуации сообщение будет отправлено в чат в установленное время с установленной частотой.
Создание библиотеки в гугл скриптах
В Гугл скриптах, как и в других языках программирования, есть возможность использовать библиотеки.
Что такое библиотека? Это набор функций и методов, которые часто используются программистами в разных программах. Чтобы не создавать одну и ту же функцию дважды или больше раз, достаточно один раз сохранить ее в библиотеку и подключать библиотеку к новому коду с уже написанными стандартными функциями.
В посте про создание телеграм бота мы использовали только три функции, и эти функции стандартные для любого бота. Следовательно, чтобы при создании второго, третьего… десятого бота не переписывать эти функции снова и снова, давайте просто сохраним их в библиотеку.
Создаем новые ГТ и скрипт в ней
Пропишем функцию send(msg, chat_id) :
function send (msg, chat_id, api) <
//Отправляет сообщения в тлг. На вход функции дать сообщение и ID чата, в который нужно провести отправку
UrlFetchApp.fetch(‘https://api.telegram.org/bot’ + api + ‘/’, data);
Сохраняем проект и делаем деплой
Кликаем по шестеренке и выбираем Library
Кликаем Deploy внизу окна и видим ссылку на библиотеку
Создаем новые гугл таблицу и скрипт. В скрипте прописываем глобальные переменные
Помним, что значения этих переменных у вас будут свои.
Попробуем добавить тот же функционал, что и в посте про создание бота, с отправкой сообщения в чат телеграма. Но в этот раз мы не будем создавать функцию send(), а подключим библиотеку, в которой она уже есть.
В открывшемся окне вставляем ID библиотеки (не ссылку, а ид) и кликаем Look up
Если подключение библиотеки прошло успешно, в окне появятся дополнительные поля выбора версии и указания идентификатора.
Название идентификатора меняем на короткое и понятное и кликаем Add.
В результате в списке библиотек видим новую библиотеку
Напоминаю, что в библиотеке у нас 1 функция. К ней можно обратиться следующим образом: имяБиблиотеки.имяФункции
Когда вы прописываете имя библиотеки и ставите точку, вы видите список всех доступных функций. В нашем случае это только функция send. Выбираем ее и прописываем передаваемые параметры:
Demo.send(«Hello World», chat_id, API_TOKEN)
Сохраняем проект, кликаем Deploy, обновляем Api_link, выполняем функцию api_connector и идем тестить работу этого бота (этот алгоритм действий также подробнее описан в статье про создания бота).
Новый бот отправляет сообщение в чат с помощью функции, которая зашита в библиотеке.
Таким образом, в ту же библиотеку можно добавить ряд стандартных функций и к новым скриптам подключать уже написанные функции, не создавая их снова.
Комбинация из ТЛГ и ГТ, простота подключения КМК делает из ГТ офигенный инструмент автоматизации.
Пост ориентирован прежде всего на людей, которые только познают ГТ и на первых порах не требует знания гугл скриптов. В этом посте будет только первичная настройка и подключение. В следующих постах рассмотрю всё что описал выше (как трекать время, задачи, финансы и т.д. и как это настроить под себя).
Для начала находим отца всех ботов @botfather в телеге.
После старта бота botftaher выведет список команд. Здесь нам интересна команда создания нового бота /newbot.
Порядок очень простой: создать бота, назвать его человеческим языком, задать ему username. В результате получаем API токен нашего бота (1860347610:AAH1q6eqTPnVh0qe6mQWidNSTELcprXEfOk). Он-то нам и нужен.
Должно получиться вот это:
Затираем дефолтный код и вставляем следующий скрипт:
const API_TOKEN = ‘1860347610:AAH1q6eqTPnVh0qe6mQWidNSTELcprXEfOk‘
const DOC = SpreadsheetApp.openById(‘10W0T9eOP_NN_6g4qyEJzWjm4nkKRN2vyUOnpx73f-N0’);
var update = JSON.parse(e.postData.contents);
//нам нужен только тип «сообщение»
var msg = update.message;
var msg_array = msg.text.split(» «);
var user = msg.from.username;
if (msg_array[0] == «/hello») <
send(«Hello World», chat_id)
function send (msg, chat_id) <
//Отправляет сообщения в тлг. На вход функции дать сообщение и ID чата, в который нужно провести отправку
UrlFetchApp.fetch(‘https://api.telegram.org/bot’ + API_TOKEN + ‘/’, data);
Обращаем внимание на переменные DOC и API_TOKEN (выделено жирным). Значения переменных необходимо исправить на ваши значения.
1) меняем ID гугл таблицы (находится в строке адреса после /d/)
2) меняем токен бота, который мы получили при его создании выше
Круто! Львиная доля работы уже проделана.
Следующим важным моментом является регистрация вебхука (webhook).
Добавим следующий код к нашему скрипту:
Сохраняем наш код и кликаем Deploy.
В открывшемся окне кликаем по шестеренке и выбираем Web app
В поле Who has access выбираем Anyone
При первом запуске приложение попросит авторизации. Проделываем это упражнение.
Здесь нам нужен URL в самом конце. Копируем его и вставляем в качестве значения переменной App_link.
Теперь функция должна выглядеть следующим образом:
Снова сохраняем код и запускаем функцию api_connector:
И наконец переходим к боту в телеге! Запускаем, отправляем команду /hello и видим результат.
Теперь подробно по коду. В коде всего 3 функции:
В нашем случае, если мы отправляем команду /hello, бот отвечает Hello World, вызывая функцию send. Это все его действия.
Когда друг сказал, что покупает Ладу за 1,2 млн, стало понятно, что с рынком что-то не то. Делаем робота для поиска авто
Привет! Меня зовут Лев. Мы с командой развиваем «умного» робота HomeBro, который с недавних пор помогает бесплатно находить не только жилье, но и автомобили.
Для тех, кто еще не знаком с Бро – я рассказывал про создание робота по поиску жилья в этой статье.
В последние месяцы мы все чаще слышали запросы от наших пользователей и знакомых на аналогичного бота для поиска автомобилей. Оказалось, что купить хорошую машину за вменяемые деньги сейчас очень непросто.
Пообщавшись с людьми, мы выявили целый ворох проблем. Вот некоторые из них:
Взлет цен. Из-за коронавируса и кризиса полупроводников произошли серьезные сбои в поставках новых автомобилей. В ситуации дефицита и роста стоимости металла цены на машины в салонах резко повысились. Следом закономерно выросли цены и на авто с пробегом.
Засилье перекупщиков. Эти ребята постоянно мониторят рынок и успевают перехватить большинство адекватных вариантов на вторичном рынке. Они пользуются различными инструментами, в том числе и платными чат-ботами.
В итоге купить машину по хорошей цене, не имея мгновенных оповещений о новых вариантах – очень сложно.
У каждой крупной площадки по продаже авто есть приложение, в котором можно настроить push-уведомления. Но дело в том, что предложения разбросаны по разным площадкам. Ставить несколько аппов, повторно настраивать поиск в каждом из них, а затем переключаться между ними очень неудобно. Как итог, многие просто забивают на это и пропускают бОльшую часть интересных предложений.
Еще один сложный момент — проверка автомобилей с пробегом. Обычные люди все реже разбираются в том, как устроены автомобили, а машины становятся все сложнее. Часто люди тратят серьезные деньги на кота в мешке. А если и понимают, что нужна помощь специалиста, то нередко вынуждены тратить время на его поиск.
Имеющиеся наработки позволили нам быстро разработать новый сценарий поиска. Конечно, все проблемы авторынка разом не решить, но вот что мы имеем на данный момент:
— Бот присылает новые объявления с 4-х сайтов – Авто.ру, Авито, Дром, СберАвто.
— Делает это шустро – в течение пары минут после публикации. За счет этого наши пользователи могут составить конкуренцию перекупщикам и поймать авто по хорошей цене.
— Одну машину присылает один раз, фильтруя повторяющиеся объявления с разных сайтов.
— Ищет и авто с пробегом, и новые машины.
— Позволяет нанять рекомендованного нами специалиста для проверки авто.
Как и в поиске жилья, в этом боте нет навязчивой рекламы и он бесплатный. А еще он работает по всей России!
Сначала думали, не назвать ли бота CarBro, но все же решили, что HomeBro (с американского сленга — «братишка с района») – достаточно универсальное название. Заодно сделали единую точку входа, которая дает возможность искать и авто, и жилье, и интересных людей, живущих рядом (про последнее писал в отдельной статье).
На то, чтобы собрать первую тысячу человек в боте по поиску жилья, полтора года назад понадобилось 4 месяца. А в боте для авто мы собрали 1000 подписок за один день, просто разослав информацию про запуск нашим пользователям. Мы получили позитивные отзывы, рекомендации друзьям и донаты, а значит все не зря.
Каждый раз кайфуем, когда читаем такие комменты к донатам Показать полностью 3