Стоит ли делать мобильное приложение

Часто заказывают мобильные приложения, даже не проверив, что этот бизнес-процесс нужен будущим клиентам. Как результат — работал в мусорку.

А так как я занимаюсь именно заказной разработкой мобильных приложений, в портфолио остаются лишь картинки.

Есть куча способов проверить свою бизнес идею, от просто объявления и подачи телефона, например в авито, до лендингов и групповых чатов. Если у вас клиентская модель сервиса, достаточно лендинга по приемке заявки, а дальше ручками поработать 10-20 заявок. Если у вас раздача группе лиц, например курьерских заданий, групповой чат с публикацией туда заданий.

И вот вы проверили на 10-20 заявках, получили прибыль и бежите сломя голову тратить 300 - 500 тысяч рублей, чтобы проверенную модель реализовать уже в мобильном приложении, ведь 2-3 продажи, это доказательство, все 100% гарантия же.

Я бы не делал на 2-3 продажах какие-то выводы, это крайне мало, вдруг их всего возможно только 5 в месяц.

Дальше само собой руками уже будет накладно обрабатывать, ведь мы идем в масштабирование, надо немного автоматизировать. И тут я советую бот, например ВКонтакте, который будет автоматизировать те или иные процессы.

Разберем на примере

Разберем на часто встречаемой задаче: раздаче заявок курьерам. Тут есть 2-е подзадачи: проводить анкетирование и прием на работу и рассылка заданий прошедшим прием на работу.

Итак с рекламы пользователь переходит в сообщения сообществу по работе курьером и рассказывает что за работа, какие условия, как все будет происходить, что возить и прочее. Бот предлагает написать «Да», если пользователя все устраивает и заполнить небольшую анкету. Отлично у нас есть новая заявка приема на работу, уведомим администратора, так же сообщением из группы. Администратор просматривает профиль и анкету нового сотрудника и пропускает или утверждает его командой «утвердить и id пользователя». После этого бот уведомит новоиспеченного курьера что он принят на работу и скоро появятся новые заявки.

Администратор постит новые задания командой боту «задание и далее его текст» и все прошедшие утверждение получают его. Дальше само собой можно и нужно додумывать логику приемки в работу этого задания…

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

В роли серверной части я использую Firebase (облачный PaaS сервис от Google, который берет деньги по факту потребления услуги).

Мы будем использовать Cloud Functions для ответа серверу ВК, что же ответить пользователя и Realtime Database для хранения данных.

Считаем затраты

За Realtime Database с нас берут за скачиваемый трафик за каждый гигабайт 1$ и 5$ за хранение каждых 5Гб в базе данных. За Cloud Functions 0,4$ за 1 миллион вызовов функции.

Ну и давайте прикинем сколько 1 000 пользователей нам даст в затратах. Допустим анкету на 1000 символов он оставит и будет 300 (10 в день) команд в месяц писать. Администратор будет раздавать 100 заданий в день (3000 команд в месяц).

Итого на 1000 пользователей:

  • 1 Мб в хранилище, а у нас 1$ за 1 Гб
  • трафик вообще будет смешным, т.к. это максимум статусы текущего состояния пользователя, учитывать не стоит
  • 303 000 вызовов функции, при этом оплата 0,4$ за миллион

Следовательно заплатили бы вы меньше 1$, но Firebase предоставляет еще и бесплатный лимит на месяц, за который платить не нужно:

  • Cloud Functions 2 млн. вызовов в месяц бесплатно
  • Realtime Database 1 Гб хранилища и 10 Гб трафика бесплатно

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

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

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

// событие входящего сообщения // message - ключ-значение входящего сообщения // session - ключ-значение хранилища пользователя // по результату необходимо вернуть объект // actionMessage - ответное сообщение пользователю // newSession - новые ключ-значения хранилища пользователя // userAction - событие для другого пользователя // user_id - id пользователя события // userAction - сообщение пользователю события // newSession - ключ-значение хранилища пользователя события // job - сообщение активным пользователям onAction(message: { [key: string]: any }, session: { [key: string]: any }): Promise<Core.ActionPromise> { const messageText = message.text; const messageTextUpperCase = message.text.toUpperCase(); const user_id = message.from_id; const isAdmin = (user_id === ChatBotComponent.adminID); const commands = messageText.toUpperCase().split(' '); const command = commands[0].toUpperCase(); const param = commands[1] && commands[1].toUpperCase(); return new Promise((resolve, reject) => { if (isAdmin && command === 'УТВЕРДИТЬ') { const actionMessage = `Сотрудник утвержден.`; const userAction: Core.UserAction = { user_id: param, actionMessage: `Вы приняты на работу, ожидайте новых заданий.`, newSession: { state: 4, active: true } }; resolve({ actionMessage, userAction }); } else if (isAdmin && command === 'ЗАДАНИЕ') { const actionMessage = `Задание отправлено.`; const job = param; resolve({ actionMessage, job }); } else if (!session.state) { // Стартовое сообщение от бота if (messageTextUpperCase === 'ДА') { // После команды Да ждем анкету сотрудника const actionMessage = `✏ Опишите ваш опыт работы курьером.`; const newSession = { state: 2 }; resolve({ actionMessage, newSession }); } else { // Приветствие нового сотрудника const actionMessage = `Добрый день.\nМы набираем исполнителей на работу курьером. Если вы хотите работать у нас, напишите "да" и мы предложим вам заполнить анкету.`; resolve({ actionMessage }); } } else if (session.state === 2) { // Принимаем анкету и уведомляем админа const actionMessage = `Ваша анкета принята, ожидайте результата.`; const newSession = { anketa: messageText, state: 3 }; const userAction: Core.UserAction = { user_id: ChatBotComponent.adminID, actionMessage: `✉ Новая анкета: ${messageText}\nДля приема на работу отправьте утвердить ${user_id}` }; resolve({ actionMessage, newSession, userAction }); } else if (session.state === 3) { // Анкета принята, ждите const actionMessage = `Ваша анкета уже была принята, ожидайте результата.`; resolve({ actionMessage }); } else if (session.state === 4) { // Ожидание новый заданий const actionMessage = `⏳ Новых заданий пока для вас нет.`; resolve({ actionMessage }); } }); }

Самое главное на мой взгляд это ряд преимуществ:

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

Исходники описанного сценария в статье прилагаю.

Тестируйте, запускайте, успехов Вам!

15
31 комментарий