Интеграция аптечной сети с «ВкусВилл»: доставляем комбинированный заказ менее, чем за 2 часа

В статье расскажем о размещении ассортимента сети аптек в товарной матрицей ВкусВилл для увеличения продаж и решения задачи доставки онлайн-заказов. Благодаря общим усилиям срок исполнения комбинированного заказа из продуктов и лекарств составил менее двух часов. А ещё опыт работы в проекте позволил создать универсальный API (программный интерфейс обмена данными), подходящий для большинства интеграций в фарм-сегменте.

О выгоде интеграции

Аптечный онлайн-бизнес имеет много формальных ограничений, связанных с оборотом лекарств и медицинских изделий. Они касаются продаж рецептурных препаратов, доставки термолабильных лекарственных средств, формата аптечных пунктов, наличия средств приема электронных платежей, сайта, собственной или сторонней курьерской службы. Собственная служба доставки – удовольствие непрофильное и дорогое, поэтому аптечные сети все чаще предпочитают отдавать доставку на аутсорс.

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

Ритейлер зарабатывает на комиссии, увеличивает ширину продуктовой линейки и средний чек, аптека получает дополнительный канал продаж и решение проблем с доставкой.

Цели и принципиальная схема интеграции

Аптечная сеть (АС), которую мы не можем назвать, – динамично развивающееся фарм-предприятие, широко представленное в северо-западных регионах страны: Брянской, Калужской, Кировской, Курской, Липецкой, Мурманской, Московской, Смоленской областях и Республике Карелия, в городах Ржеве и Рязани.

Интеграция с сервисами ВкусВилла (ВВ) – это новый этап сотрудничества ИНТЕРВОЛГИ и аптечной сети. В 2018 г. мы сделали для них сайт, интегрировав его с учетными и информационными системами. Об опыте работы, сложностях и коллизиях его разработки рассказали в блоге.

После нескольких лет успешной работы интернет-магазина, АС стала партнером ВкусВилла в проекте развития их аптечной «онлайн-полки». ВкусВилл вырос из бренда «Избёнка» примерно за 5 лет, постепенно избавившись от от репутации «элитного и дорогого магазина для хипстеров», став общедоступным магазином с разнообразным ассортиментом и выручкой более 1 млрд рублей. Лицензии на фармдеятельность он не имеет, поэтому лекарственные средства продает с отметкой «от партнера».

Стратегическая цель, стоявшая перед фарм-компанией – продавать лекарственные препараты клиентам ВкусВилла с доставкой из дарксторов (складов) торговой сети.

Чтобы товары от сети аптек можно было купить через сайт или мобильное приложение ритейлера нужно было настроить IT-интеграцию и изменить бизнес-процессы.

Схема проста:

  1. АС передаёт каталог, остатки, цены ВкусВиллу, который размещает это у себя в каталоге;

  2. Клиенты заказывают аптечный ассортимент на сайте или в мобильном приложении ВкусВилла, а он отдаёт эту информацию в АС;

  3. АС собирает заказ, ВкусВилл его доставляет.

Интеграции.jpg

Схема интеграции

Изменение бизнес-процессов

Для работы по такой схеме Аптечная сеть должна была физически интегрироваться в систему распределенных складов-дарксторов. Чтобы не дублировать доставку и не везти заказ из аптеки в даркстор, а из него клиенту, нужно было открывать аптечный пункт непосредственно на складе ВкусВилла. На старте проекта у ритейлера было более 50 таких складов в городах присутствия. Идею в течение 3 месяцев тестировали на одном из них. Когда она показала свою жизнеспособность – стали масштабировать.

Благодаря открытию таких «аптек» на территории складов срок исполнения комбинированного заказа из продуктов и лекарств составил менее двух часов. Чеки на товары в одном заказе формировались раздельно.

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

Интеграция ИТ-систем

Для интеграции ИТ-систем партнеров с собственной платформой во ВкусВилл разработали спецификацию для API. Наши программисты реализовали более 10 методов этой спецификации:

  • получение фото и описаний лекарственных препаратов от Фарм-Оператора;
  • получение списка аптек с остатками;
  • создание и уточнение статусов заказа;
  • оплата на сайте и курьеру;
  • формирование чеков;
  • отмена/возврат заказа и др.

Мобильное приложение ВкусВилла «приходило» за товарами, ценами и остатками по разработанному REST API, по нему же размещало заказы и раз в минуту синхронизировало статусы.

Обмен статусами заказа.jpg

Обмен статусами во время работы с заказом

После поступления заказа в аптеку его нужно было физически собрать и наклеить специальную наклейку (внешний вид наклейки делали тоже мы, в административной панели Битрикса была кнопка «распечатать наклейку»). Собранный заказ передавался курьеру, после доставки ВкусВилл рапортовал нам, что заказ доставлен.

Функционал печати наклеек.jpg

Функционал печати наклеек на заказы в административной панели

В более поздних разработках по интеграции сети аптек с фарм-агрегаторами мы развили опыт в написании «фармацевтических» API и применили его на проектах с «Все Аптеки», «Ютека», «Справмедика», «Я в Аптеке, «Справочная 009.рф», «ЦЕНЫ в АПТЕКАХ» и «Ваше лекарство».

Список интеграций с фарм-агрегаторами.jpg

Пример кабинета с заказами с разных агрегаторов/площадок

Да, методы API в проектах отличаются: есть универсальная часть, подходящая многим и индивидуальная, написанная под конкретную интеграцию. Например, метод создания заказа есть в любых интеграциях и называется почти всегда одинаково «/order». Отличия только в разных входных и выходных параметрах и разной их обработке на стороне бэкенда.

В чем польза для наших клиентов от такого «готового» API?

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

Кстати, неоднократное использование методов API на других проектах совершенно безопасно для всех клиентов, т.к. в интеграциях методы закрываются авторизацией. Например, во «ВкусВилл» авторизация идет через токен, а во «Все Аптеки» – через api key (для каждого агрегатора мы создаем свой ключ).

Детали реализованной интеграции 

Наш подход к интеграции состоит из 5 этапов.

  1. Разработка/получение спецификации на API.

  2. Разработка методов API по требованиям спецификации. Создание универсальных свойств в сущности заказ, например “ID заказа в системе партнера интеграции” или “Источник заказа” для хранения уникального идентификатора заказа и типа агрегатора соответственно.

  3. Задание параметров в настройках проекта, которые актуализируются под каждую интеграцию, например, тип цены (базовая/со скидкой).

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

  5. Тестирование: внутреннее и с внешней системой.

Покажем некоторые моменты подробнее.

Интеграция начинается с разработки спецификации на API, но обычно она уже есть у агрегатора. В таком случае остается только реализовать методы, которые там описаны. Удобным инструментом работы со спецификацией является Swagger.

Swagger.png

В таблице приведен неполный набор методов, реализованных для интеграций сайта Аптечной сети. Эти методы – часть универсального 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.

Статусы заказа для интеграций по REST.png

Получение таких статусов – отдельная задача. Например, этот метод (Order::checkStatusByNameIntegration) используется в методе получения актуального статуса заказа (/orders/orders).

Код метода получения статусов заказа.png

Код метода получения статусов заказа по названию интеграции из highload-блока.

Для ввода в работу новой интеграции по реализованному API необходимо:

  1. Создать пользователя и заполнить поля:
    1. логин (на английском с маленькой буквы название интеграции, используется в логировании и HL(highload)-блоке (п.3). Например «vseapteki/uteka/…»;
    2. пароль;
    3. внешний код (USER_названиеИнтеграции).
  2. У пользователя во вкладке “Доп.поля” выставить настройки rest api:
    1. Разрешен доступ по ключу к Rest API: да (галочка);
    2. Ключ к Rest API: генерируем не менее 30 символов (сгенерированный ключ передается агрегатору). Использование ключа:
      • query params: api-key - значение <сгенерированный ключ>
      • header: X-API-KEY - значение <сгенерированный ключ>
  3. Заполнить в highload-блоке сопоставление статусов сайта и агрегатора через логин пользователя (см п.1.1).
  4. Добавить доп. вкладку в модуль «код текущего проекта» и заполнить данными (настройками проекта).

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

Интеграция аптечной сети с розничной сетью супермаркетов, специализирующихся на продуктах для здорового питания – интересная коммерческая идея. Потребитель, регулярно покупающий продуктовые наборы, в какой-то момент кладет в них и продукцию медицинского назначения.

Решение задачи интеграции таких разных, но дополняющих друг друга бизнесов, потребовало  изменений не только в ИТ-контуре, но и перестройки бизнес-процессов работы с заказом. Полученный Аптечной сетью опыт трансформировался в будущие успешные интеграции с крупными фарм-агрегаторами, а ИНТЕРВОЛГА разработала уникальный для интернет-аптек продукт – API с универсальными методами, подходящий для большинства игроков фармацевтического e-com.

Если вам нужна интеграция вашей интернет-площадки (аптека, запчасти, мероприятия, продукты, отзывы, новости, контент и т.д.) с другим сайтом, агрегатором, маркетплейсом – заполните форму внизу. Наши аналитики предложат решения и дадут оценку реализации.



Оцените статью
06.09.2023
Понравилась статья?
Поделитесь ссылкой с друзьями и коллегами!

Статьи по теме

Выжимаем максимум скорости из PHPКогда дело доходит до запуска PHP-приложений, выбор подходящего веб-сервера критически важен. Цель статьи — помочь в выборе оптимального решения для своих проек...
Организация поиска на сайте: выбираем между поиском Битрикса, Sphinx и ElasticsearchВ статье разбираем популярные поисковые движки, чтобы выбрать лучший под задачи конкретного проекта. Даем советы по индексации каталога и построении «умного» фи...
Доработка системы LMS KnomaryMust have для бизнеса, где главный актив это люди, — стратегия обучения и развития персонала. Рассказываем как помогли доработать LMS-систему для компании ЕВРАЗ...
«Как раньше» больше не работает — B2B-система продаж сейчасВ этой статье хотим поговорить с чем сейчас сталкивается оптовый бизнес (множеством вызовов и изменений, которые требуют адаптации, а также оптимизации процессо...
Интеграция B2B-платформы на Битрикс с системой авторизации KeycloakВ период бурного роста компании менеджмент учетных записей сотрудников и клиентов может стать проблемой. Решение — интеграция с брокером авторизаций Keycloak ил...
Разработка календаря бронирования для сайта на Битрикс авиационного учебного центраЧтобы пилоты авиакомпаний могли бронировать время своих тренировок в учебном центре, мы разработали для них удобный модуль бронирования времени. Рассказываем по...
Мы работаем по одному из двух форматов:
  • аренда команды (от 2 человек, не менее 3 месяцев);
  • итерации с фиксированной ценой (1-3 месяца длительностью).
ИНТЕРВОЛГА предоставляет:
  • регулярные онлайн-планерки с заказчиком;
  • квалифицированных специалистов;
  • организованную команду (находятся в одном помещении, что упрощает решение рабочих вопросов);
  • полную прозрачность и регулярность отчетов о результатах.
Ключевые услуги:
  • нагруженный интернет-магазин;
  • личный кабинет;
  • оптовые продажи — B2B-платформа;
  • маркетплейс;
  • технический аудит сайта;
  • Битрикс24 — корпоративные HR-порталы;
  • Битрикс24 — построение CRM-системы;
  • Битрикс24 — личные кабинеты сотрудников;
  • Битрикс24 — аудит портала;
  • 1С — интеграция с другими системами;
  • 1С — доработка системы;
  • маркетинг — комплексное интернет-продвижение;
  • маркетинг — продвижение для B2B.
Хотите получать лучшие статьи от INTERVOLGA раз в месяц?
Подпишитесь на рассылку — спамить не будем