MVP маркетплейса в «Google Таблицах»
В статье я расскажу, как можно за час-другой склепать MVP маркетплейса курьеров. Этот прототип подойдёт для службы заказа такси, услуг и прочего. Разумеется, на этой же основе можно сделать много других полезных вещей.
Итак, краткий флоу системы:
- Курьеры регистрируются на сервисе.
- Пользователь составляет заказ.
- Полученный заказ автоматически распределяем на подходящего курьера.
- Уведомляем курьера о новом заказе.
- Грабим караваны.
- Ну и, конечно, хотим завести все это без разработки.
Прием заказов и регистрация курьеров
Приступим. Регистрацию курьеров и прием заказов будем делать на Google-формах. Можно использовать любой другой инструмент, который собирает данные в Google-таблицу. Например, можно сделать лендинг на Tilda и собирать данные через него.
Создать форму: Google Drive → New → More → Forms. Для курьера достаточно ФИО и почты, на которую будут приходить уведомления о новых заказах. Для заказа — сути задачи.
Чтобы привязать форму к таблице, перейдите во вкладку «Responses» и нажмите на иконку «Google Таблиц». Привяжем обе формы к общей Google-таблице. Пример.
Распределение заказов
Распределять заказы будем при помощи магии формул: для каждого заказа определим, какие курьеры на момент обращения свободны, и выберем из них любого.
Не получится нормально использовать формулы на странице с ответами на форму: когда «Google Формы» добавят строку, формулы с этой строки сотрутся. Но есть лайфхак.
Лайфхак: если данные скопировать на отдельный лист формулой "=ARRAYFORMULA('Заказы'!A2:C)", к этим данным формулы будут применяться нормально.
Поэтому делаем отдельную страницу, в первую ячейку вписываем формулу для копирования всех результатов:
Чтобы понять, какие курьеры свободны, вычислим, какие курьеры заняты. Для простоты будем считать, что курьеру всегда требуется час на заказ. Поэтому занятые курьеры — это все, кто получил заказ за последний час.
Отдельная проблема: список курьеров — это список, так просто его в одну ячейку не сохранить. Но есть лайфхак.
Лайфхак: сохранить список в ячейку можно, если сделать его строкой. Функция JOIN(",",{1,2,3}) превратит список в строку "1,2,3", а SPLIT("1,2,3", ",") превратит обратно в список.
По списку занятых курьеров можно легко получить список свободных курьеров. Важно брать только тех курьеров, которые были зарегистрированы до подачи заказа, иначе вся история перестроится с учетом нового курьера, когда он добавится.
Из свободных берем первого попавшегося.
Конечно, нужно скопировать формулы до конца таблицы.
Почему нельзя так просто избавиться от этих списков
Нюанс в том, что формулы не сохраняют состояние — им всегда нужны исходные данные, на которых они считались. Если исходные данные со временем изменятся, то и формулы, которые использовали их, изменятся.
То, что хоть раз попало в расчет, не должно изменяться, иначе разъедется вся история.
Поэтому нельзя хранить свободных курьеров только на текущий момент, нужно хранить свободных курьеров (и другие параметры) на момент заказа для каждого заказа.
Уведомления курьерам о новых заданиях
Когда курьеру приходит новый заказ, сообщим ему об этом. Мы будем отправлять электронное письмо, но таким же образом можно прикрутить отправку SMS, чего угодно еще.
Отправлять сообщения будем с Gmail, а интеграцию сделаем при помощи Zapier.
Логинимся в Zapier, создаем новый zap. Указываем триггер — обновление Google-таблицы.
Указываем таблицу, страницу распределения заказов и колонку имен курьеров. Когда обновим курьера, будет срабатывать триггер.
В действии выбираем Gmail → Send Email.
Теперь заполним шаблон письма. Для этого нужен адрес получателя. Прокинем его в таблицу распределения заказов при помощи index-match.
Теперь в Zapier выберем это поле как адресата.
И сделаем шаблон письма.
Отлично. При попытке тестирования оно выдаст ошибку. Это связано с тем, что Zapier почему-то использует пустую строку из таблицы. Этап тестирования можно пропустить.
После скипа тестирования включим Zap.
Пробуем
Зарядим какой-нибудь заказ через форму, и вуаля — на почту, указанную при регистрации курьера, прилетает письмо.
Улучшения
Приведенный прототип развалится, если не будет доступных курьеров. Чтобы решить эту проблему, нужно изменить способ выбора курьера — выбирать не свободных, а тех, кому раньше ушел последний заказ. Сюда можно прикрутить еще много полезной логики.
Например, помимо адреса можно собирать с заказчиков район и выбирать курьера из ближайшего, даже если он позже освободится.
Можно сделать еще одну форму, курьер будет ее заполнять, когда завершит заказ. По этим данным его можно будет сразу направлять на новый заказ.
Можно приделать SMS-уведомления заказчику, динамическое ценообразование, что угодно еще.
Получается довольно гибкая штука, адаптируйте под что угодно.
Стартуйте и растите быстро.
Вот за что я плачу в 2025 году, чтобы повысить свою производительность и производительность в качестве инженера-программиста.
Ни для кого не секрет, что Telegram из мессенджера превратился в целую экосистему, где можно не только общаться, но и зарабатывать деньги. Однако, чем больше “бизнесменов” заходят в телеграм, тем больше мертвых каналов появляется. Потратить бюджет около миллиона рублей, а вместо окупаемости через 10 месяцев получить мертвый канал. Звучит как фиаско…
Тех, у кого рабочая виза или грин-карта.
В этом кейсе расскажем, как мы разработали сайт, обеспечили плавный переход со старого сайта на новый без потерь в выдаче, улучшили структуру сайта и сделали его современным и эффективным для бизнеса.
Будет полезна тем, кто продвигается через контент и/или seo.
Комментарий недоступен
И потом осознать что проебал год своей жизни на api, приложухи для декстопа и мобайла, разворачивание собственных инстансов osrm/osm/graphhopper, настройку всего этого говна в k8s с ci/cd. А сосед тем временем продал свой стартап амазону и уехал на кипр, а также красавица жена чудесным образом исчезла, и вот хз, связаны ли две эти вещи или нет.
А вот и нет. Благодаря автору этот шаблон под свой бизнес можно немного подпилить. Очень интересное решение
Мне вот тоже такая штука нужна была, но я дальше API не прошел))) Что по приложениям посоветуете, я пока пытаюсь освоить RN
Я считаю, это искусство и шедевр! Браво!
Хуяк-хуяк и в продакшн 👍🏻😂