Интеграция аптечной сети с «ВкусВилл»: доставляем комбинированный заказ менее, чем за 2 часа
- О выгоде интеграции
- Цели и принципиальная схема интеграции
- Изменение бизнес-процессов
- Интеграция ИТ-систем
- Детали реализованной интеграции
В статье расскажем о размещении ассортимента сети аптек в товарной матрицей ВкусВилл для увеличения продаж и решения задачи доставки онлайн-заказов. Благодаря общим усилиям срок исполнения комбинированного заказа из продуктов и лекарств составил менее двух часов. А ещё опыт работы в проекте позволил создать универсальный API (программный интерфейс обмена данными), подходящий для большинства интеграций в фарм-сегменте.
О выгоде интеграции
Аптечный онлайн-бизнес имеет много формальных ограничений, связанных с оборотом лекарств и медицинских изделий. Они касаются продаж рецептурных препаратов, доставки термолабильных лекарственных средств, формата аптечных пунктов, наличия средств приема электронных платежей, сайта, собственной или сторонней курьерской службы. Собственная служба доставки – удовольствие непрофильное и дорогое, поэтому аптечные сети все чаще предпочитают отдавать доставку на аутсорс.
Те же, кто думает на шаг вперед, подходят к решению бизнес-задачи комплексно: не только делегируют процессы доставки более компетентному партнеру, но и интегрируют свой ассортимент с его продуктовой матрицей.
Ритейлер зарабатывает на комиссии, увеличивает ширину продуктовой линейки и средний чек, аптека получает дополнительный канал продаж и решение проблем с доставкой.
Цели и принципиальная схема интеграции
Аптечная сеть (АС), которую мы не можем назвать, – динамично развивающееся фарм-предприятие, широко представленное в северо-западных регионах страны: Брянской, Калужской, Кировской, Курской, Липецкой, Мурманской, Московской, Смоленской областях и Республике Карелия, в городах Ржеве и Рязани.
Интеграция с сервисами ВкусВилла (ВВ) – это новый этап сотрудничества ИНТЕРВОЛГИ и аптечной сети. В 2018 г. мы сделали для них сайт, интегрировав его с учетными и информационными системами. Об опыте работы, сложностях и коллизиях его разработки рассказали в блоге.
После нескольких лет успешной работы интернет-магазина, АС стала партнером ВкусВилла в проекте развития их аптечной «онлайн-полки». ВкусВилл вырос из бренда «Избёнка» примерно за 5 лет, постепенно избавившись от от репутации «элитного и дорогого магазина для хипстеров», став общедоступным магазином с разнообразным ассортиментом и выручкой более 1 млрд рублей. Лицензии на фармдеятельность он не имеет, поэтому лекарственные средства продает с отметкой «от партнера».
Стратегическая цель, стоявшая перед фарм-компанией – продавать лекарственные препараты клиентам ВкусВилла с доставкой из дарксторов (складов) торговой сети.
Чтобы товары от сети аптек можно было купить через сайт или мобильное приложение ритейлера нужно было настроить IT-интеграцию и изменить бизнес-процессы.
Схема проста:
-
АС передаёт каталог, остатки, цены ВкусВиллу, который размещает это у себя в каталоге;
-
Клиенты заказывают аптечный ассортимент на сайте или в мобильном приложении ВкусВилла, а он отдаёт эту информацию в АС;
-
АС собирает заказ, ВкусВилл его доставляет.
Схема интеграции
Изменение бизнес-процессов
Для работы по такой схеме Аптечная сеть должна была физически интегрироваться в систему распределенных складов-дарксторов. Чтобы не дублировать доставку и не везти заказ из аптеки в даркстор, а из него клиенту, нужно было открывать аптечный пункт непосредственно на складе ВкусВилла. На старте проекта у ритейлера было более 50 таких складов в городах присутствия. Идею в течение 3 месяцев тестировали на одном из них. Когда она показала свою жизнеспособность – стали масштабировать.
Благодаря открытию таких «аптек» на территории складов срок исполнения комбинированного заказа из продуктов и лекарств составил менее двух часов. Чеки на товары в одном заказе формировались раздельно.
У крупных игроков, также доставляющих заказы с лекарственными средствами, доля таких заказов постепенно растет. Но, несмотря на потенциал сегмента, бурный рост в нем возможен только после легализации онлайн доставки рецептурных препаратов.
Интеграция ИТ-систем
Для интеграции ИТ-систем партнеров с собственной платформой во ВкусВилл разработали спецификацию для API. Наши программисты реализовали более 10 методов этой спецификации:
- получение фото и описаний лекарственных препаратов от Фарм-Оператора;
- получение списка аптек с остатками;
- создание и уточнение статусов заказа;
- оплата на сайте и курьеру;
- формирование чеков;
- отмена/возврат заказа и др.
Мобильное приложение ВкусВилла «приходило» за товарами, ценами и остатками по разработанному REST API, по нему же размещало заказы и раз в минуту синхронизировало статусы.
Обмен статусами во время работы с заказом
После поступления заказа в аптеку его нужно было физически собрать и наклеить специальную наклейку (внешний вид наклейки делали тоже мы, в административной панели Битрикса была кнопка «распечатать наклейку»). Собранный заказ передавался курьеру, после доставки ВкусВилл рапортовал нам, что заказ доставлен.
Функционал печати наклеек на заказы в административной панели
В более поздних разработках по интеграции сети аптек с фарм-агрегаторами мы развили опыт в написании «фармацевтических» API и применили его на проектах с «Все Аптеки», «Ютека», «Справмедика», «Я в Аптеке, «Справочная 009.рф», «ЦЕНЫ в АПТЕКАХ» и «Ваше лекарство».
Пример кабинета с заказами с разных агрегаторов/площадок
Да, методы API в проектах отличаются: есть универсальная часть, подходящая многим и индивидуальная, написанная под конкретную интеграцию. Например, метод создания заказа есть в любых интеграциях и называется почти всегда одинаково «/order». Отличия только в разных входных и выходных параметрах и разной их обработке на стороне бэкенда.
В чем польза для наших клиентов от такого «готового» API?
Польза в том, что они экономят 100-300 часов проектного бюджета, выделенного на разработку и интеграцию, получают гарантию того, что мы это точно сделаем. И возможно дешевле, чем те, у кого нет опыта.
Кстати, неоднократное использование методов API на других проектах совершенно безопасно для всех клиентов, т.к. в интеграциях методы закрываются авторизацией. Например, во «ВкусВилл» авторизация идет через токен, а во «Все Аптеки» – через api key (для каждого агрегатора мы создаем свой ключ).
Детали реализованной интеграции
Наш подход к интеграции состоит из 5 этапов.
-
Разработка/получение спецификации на API.
-
Разработка методов API по требованиям спецификации. Создание универсальных свойств в сущности заказ, например “ID заказа в системе партнера интеграции” или “Источник заказа” для хранения уникального идентификатора заказа и типа агрегатора соответственно.
-
Задание параметров в настройках проекта, которые актуализируются под каждую интеграцию, например, тип цены (базовая/со скидкой).
-
Разработка скриптов логирования и обработки ошибок, входящих запросов для некоторых методов выходных данных. Во время разработки предусмотрено логирование входных параметров для каждого метода и выходных данных для методов по работе с заказами. Разработка учитывает обработку и вывод ошибок согласно стандартным кодам состояния HTTP запроса. Особенно актуально на первоначальном этапе разработки-тестирования и запуска.
-
Тестирование: внутреннее и с внешней системой.
Покажем некоторые моменты подробнее.
Интеграция начинается с разработки спецификации на API, но обычно она уже есть у агрегатора. В таком случае остается только реализовать методы, которые там описаны. Удобным инструментом работы со спецификацией является Swagger.
В таблице приведен неполный набор методов, реализованных для интеграций сайта Аптечной сети. Эти методы – часть универсального API в котором задействован обмен всеми основными сущностями: Аптеками, Товарами, Ценами, Остатками, Заказами.
Тип запроса |
Задача |
Название метода |
Тип http-запроса |
Описание метода |
---|---|---|---|---|
Получение данных |
Данные по регионам и городам |
/cities |
GET |
Метод отдает список всех городов, в котором представлены подразделения Аптечной сети, чтобы агрегатор смог “склеить” свои данные с нашими |
|
Список аптек |
/pharmacies |
GET |
Метод возвращает детальную информацию об аптеке: уникальный идентификатор, ИНН юр.лица, название, номер телефона, режим работы и координаты. Необязательным входным параметром принимает city_id для фильтрации аптек по городу. |
|
Список товарных позиций |
/products |
GET |
На вход принимает необязательные параметры page и number_of_items_on_page для пагинации. Возвращает список товарных позиций сайта: уникальный идентификатор, название, штрихкоды (необходимые для сопоставления товаров Аптечной сети с агрегатором, т.н. мапинг), производитель. |
|
Список цен на товары в аптеках |
/prices |
GET |
На вход принимает обязательный параметр pharmacy_id для фильтрации остатков по конкретной аптеке. Возвращает список идентификаторов товаров, стоимость и наличие (остатки) в конкретной аптеке |
|
Список актуальных остатков по аптекам |
/actual_stocks |
POST |
Входным параметром является ”корзина” пользователя. Метод возвращает список доступных для заказа аптек с актуальными ценами и количеством товара в наличии. Актуализация корзины перед созданием заказа |
Работа с заказами |
Создание заказа |
/order |
POST |
На вход принимает ”заказ”. Метод создает заказ в системе сайта Аптечной сети на основании тела запроса: номер заказа в системе агрегатора, данные о покупателе и состав заказа (товары и цены). Особенность: создаем заказ с ценами, которые пришли из агрегатора, однако проверяем товар на наличие (остаток) на стороне сайта. Позже переложили эту логику на сторону учетной системы (1С). |
|
Получение информации по списку заказов |
/orders |
GET |
В качестве входного параметра передается order_numbers - список номеров заказов в терминах сайта. Метод возвращает список заказов (идентификаторов заказа в терминах сайта) и статус (в терминах агрегатора). |
|
Отмена заказа |
/order_cancellation/: order_number |
PUT |
По переданному параметру order_number - номер заказа на сайте происходит поиск заказа для текущего агрегатора и отмена, если заказ был найден. Метод возвращает подтверждение отмены или сообщение об ошибке. |
Помимо обмена самими сущностями, агрегатор (ритейлер) обменивается статусами этих сущностей с сайтом сети аптек. При интеграции по API требуется решить задачу сопоставления статусов на сайте и у партнера-агрегатора. Для этого создается отдельный справочник сопоставлений – Highload-блок (HL-блок). Например, если заказ находится в статусе Забронирован (только что создан на сайте под управлением CMS Битрикс: Управление сайтом), то при обмене у агрегатора отобразится статус CREATED.
Получение таких статусов – отдельная задача. Например, этот метод (Order::checkStatusByNameIntegration) используется в методе получения актуального статуса заказа (/orders/orders).
Код метода получения статусов заказа по названию интеграции из highload-блока.
Для ввода в работу новой интеграции по реализованному API необходимо:
- Создать пользователя и заполнить поля:
- логин (на английском с маленькой буквы название интеграции, используется в логировании и HL(highload)-блоке (п.3). Например «vseapteki/uteka/…»;
- пароль;
- внешний код (USER_названиеИнтеграции).
- У пользователя во вкладке “Доп.поля” выставить настройки rest api:
- Разрешен доступ по ключу к Rest API: да (галочка);
- Ключ к Rest API: генерируем не менее 30 символов (сгенерированный ключ передается агрегатору). Использование ключа:
- query params: api-key - значение <сгенерированный ключ>
- header: X-API-KEY - значение <сгенерированный ключ>
- Заполнить в highload-блоке сопоставление статусов сайта и агрегатора через логин пользователя (см п.1.1).
- Добавить доп. вкладку в модуль «код текущего проекта» и заполнить данными (настройками проекта).
При наличии опыта, для внедрения и настройки интеграции нужны минимальные действия, фактически без подключения программиста (только для создания новой вкладки в настройках проекта). Но лучше всё-таки поручить эту работу тем, кто занимается разработкой профессионально.
Интеграция аптечной сети с розничной сетью супермаркетов, специализирующихся на продуктах для здорового питания – интересная коммерческая идея. Потребитель, регулярно покупающий продуктовые наборы, в какой-то момент кладет в них и продукцию медицинского назначения.
Решение задачи интеграции таких разных, но дополняющих друг друга бизнесов, потребовало изменений не только в ИТ-контуре, но и перестройки бизнес-процессов работы с заказом. Полученный Аптечной сетью опыт трансформировался в будущие успешные интеграции с крупными фарм-агрегаторами, а ИНТЕРВОЛГА разработала уникальный для интернет-аптек продукт – API с универсальными методами, подходящий для большинства игроков фармацевтического e-com.
Если вам нужна интеграция вашей интернет-площадки (аптека, запчасти, мероприятия, продукты, отзывы, новости, контент и т.д.) с другим сайтом, агрегатором, маркетплейсом – заполните форму внизу. Наши аналитики предложат решения и дадут оценку реализации.
Статьи по теме
- аренда команды (от 2 человек, не менее 3 месяцев);
- итерации с фиксированной ценой (1-3 месяца длительностью).
- регулярные онлайн-планерки с заказчиком;
- квалифицированных специалистов;
- организованную команду (находятся в одном помещении, что упрощает решение рабочих вопросов);
- полную прозрачность и регулярность отчетов о результатах.
- нагруженный интернет-магазин;
- личный кабинет;
- оптовые продажи — B2B-платформа;
- маркетплейс;
- технический аудит сайта;
- Битрикс24 — корпоративные HR-порталы;
- Битрикс24 — построение CRM-системы;
- Битрикс24 — личные кабинеты сотрудников;
- Битрикс24 — аудит портала;
- 1С — интеграция с другими системами;
- 1С — доработка системы;
- маркетинг — комплексное интернет-продвижение;
- маркетинг — продвижение для B2B.