Как мы сделали коробочное решение для запуска мессенджера

Последнее время мы в Bright Mobile видим рост обращений на разработку приложений, где в основе лежит общение между пользователями.

В закладки

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

Идея создания

В этой статье я расскажу вам об идее создания мессенджера. В одно время, мы увидели большой спрос на реализацию мессенджера, но не чат ботов как, допустим, в Telegram, а приложения, в основе которого лежит переписка между людьми, т.е. в базисе лежит собственный мессенджер. Допустим, вы хотите сделать приложение а-ля Авито, где люди выкладывают объявления по продаже б/у товаров. Покупатель листает ленту или находит нужный ему товар, ему не нужно ждать отклика на заявку, он сразу же напрямую ведет диалог с продавцом и договаривается о встрече. Быстро, удобно, без кучи созвонов и поиска контакта в WhatsApp или Telegram.

У нас возникла идея о том, что можно сделать счастливыми намного больше людей, запустив коробочное решение, но, не загоняя в жёсткие рамки мессенджера, а с возможностью добавлять различные функции. Плюсы такой модели в том, что её стоимость на порядок меньше, чем во многих студиях. В основном, гуглятся статьи, где предлагается разработка с нуля и за аналог WhatsApp в среднем называется стоимость от 45000$ до 55000$. Это огромная сумма, и вряд ли она обоснована на этапе тестирования идеи приложения. Решили, что можно сделать готовое (коробочное) решение по адекватной цене. Наша платформа мессенджера – это, в первую очередь, MVP для стартапов, во-вторую возможность создать добавочную стоимость бизнесу.

Что уже есть?

  • Регистрация и авторизация по номеру телефона
  • Профиль пользователя, он может заполнить ФИО и поставить свое фото
  • Список пользователей, контакты
  • Список диалогов
  • Окно Чата
  • Статус сообщения
Основные экраны приложения

Самый важный момент состоит в том, что – это не «жёсткое» коробочное решение, а платформа для развития. Мы даем основу, к которой можно добавить, к примеру, ленту новостей, группы, просмотр видео, фото и т.д. То есть, в дальнейшем, можно добавлять туда что угодно, в зависимости от целей и бизнес-процессов.

Архитектура приложения выглядит следующим образом:

  • Objective-C и Java для iOS и Android приложения

  • Node.js - держим сокет-соединения для получения сообщений в режиме реального времени

  • · Redis -храним стек сообщений для отправки

  • APN/FCM push-сервер используем для отправки push-уведомлений, если приложение свёрнуто

  • Bitrix.Framework для генерации экранов мобильного приложения и гибкого развития приложения

  • MySQL - для хранения пользователей, ролей доступа, историй сообщений и кастомизированных данных приложения

  • 1С-Битрикс - для административного управления мессенджером

Архитектура коробочного решения

Модернизация под конкретные задачи

Недавно к нам обратился мой знакомый - Павел. У него собственное консалтинговое агентство, которое специализируется на повышении продаж оптовиков и производств. У него была проблема. Когда основной консалтинг завершён, то на поддержку клиент переходит к его подчинённому, а это серьёзно сказывалось на качестве оказываемых услуг. Павел рассказал, что ежемесячно недополучает 50 - 100 тысяч просто из-за того, что кто-то из помощников косячит. Мы с ним пришли к модели, что при внедрении месседжера он сможет получить вот такие ценности:

  • Удалённо оказывать консультационные услуги лично, без потери качества
  • Сделать видео-ответы на 40 самых популярных вопросов клиентов и, в случае возникновения очередного вопроса из этого стека, отправлять ссылку на видео клиенту без дополнительных трудозатрат
  • Сэкономить на зарплатах помощников
  • Увеличить пропускную способность услуги
  • Использовать консультации в приложении, как вау-эффект для новых продаж основного продукта

Пообщавшись, мы пришли к выводу, что к базовому функционалу потребуется несколько дополнительных экранов:

  • Групповой чат (чтобы клиенты "заряжали" друг друга)
  • Экран с тарифами услуг компании

Плюсом добавился брендированный под фирменный стиль компании дизайн. С учётом наших цен приложение вышло чуть дороже 100 тыс. Причём, без привязки к нам. Любой php-разработчик, знакомый с Bitrix.Framework смог бы сделать эти доработки под Павла. На данный момент приложение дорабатывается, но можно посмотреть линкованные мокапы будущего приложения.

Обновления

В первую очередь наш проект мессенджера - это стартап. Поэтому мы его развиваем в формате Customer Development. На данный момент, за полторы недели, мы продали 9 лицензий. Купившие клиенты проголосовали за развитие в следующем направлении:

  • Возможность добавлять в окне чата фото, видео, файлы, делать активные ссылки
  • "Причесать" дизайн
  • Сделать групповые чаты

Как вы видите развитие этого проекта? Стоит ли активно добавлять функционал или лучше оставить гибкость платформы, при которой любой программист сможет доработать приложение под клиента?

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Денис Гордиенко", "author_type": "self", "tags": [], "comments": 10, "likes": 16, "favorites": 12, "is_advertisement": false, "subsite_label": "tribuna", "id": 46334, "is_wide": false, "is_ugc": true, "date": "Mon, 24 Sep 2018 13:24:48 +0300" }
{ "id": 46334, "author_id": 127886, "diff_limit": 1000, "urls": {"diff":"\/comments\/46334\/get","add":"\/comments\/46334\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/46334"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199116 }

10 комментариев 10 комм.

Популярные

По порядку

Написать комментарий...
3

Objective-C и Битрикс? Серьёзно? 😞

Ответить
1

Я тоже так подумал.
Почему не swift или даже react-native?
Зачем там Битрикс? Почему Redis?
Как это все масштабируется?
Вопросов много

Ответить
2

Swift это или Objective-C в оболочке гибридного мобильного приложения не столь важно, это всего лишь WKWebView.

React-Native разработчиков достаточно сложно найти, а вот вебщиков на php/js/html полно.
Битрикс тут как раз с точки зрения генерации веб странички для гибрида, которую очень легко править и адаптировать под свой проект.

Redis, ну тут не знаю что вас смущает, производительная NoSQL база для хранения очереди сообщений.

По масштабированию: битрикс генерит странички интерфейса, поэтому оставляем на php/html, чтобы было просто вебщикам править. А вот загрузку сообщений на NodeJS через socket для нормальных нагрузок.

Ответить
1

Я его слепила из того, что было (с)

Ответить
1

Да. Я ещё добавлю сюда страшное слово гибрид :) чтоб совсем страшно стало.

Ответить
1

Всем, кто решит писать свой чат, настоятельно рекомендую рассмотреть Tinode.
OpenSource, GPL3.

Ответить
0

Я бы порекомендовал пользоваться Firebase, а не пилить свой велик.

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

Ответить
0

На FireBase сложно делать и развивать гибридное приложение. А про модульность - да, так и делаем

Ответить
0

Это худший стек и архитектура для чата какие только можно было придумать. Почему битрикс? Для чего поверх битрикс ещё и nodejs?

Ответить
0

Почему поверх то? Рядом тогда уж. Конструктивно по поводу битрикса написал Евгений Малаховский выше

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Хакеры смогли обойти двухфакторную
авторизацию с помощью уговоров
Подписаться на push-уведомления