Организация логистики в AlterCPA и CPAmoe

Организация логистики в AlterCPA и CPAmoe

Всем чмоки, с вами Резник и сегодня мы запилим крутую логистику для AlterCPA или CPAmoe. Вернее, логистику запилите вы, и её крутость тоже зависит от вас. Я лишь дам пару дельных советов.

Платформа AlterCPA позволяет отслеживать доставку посылок вашего товарного трафика и контролировать выкуп в автоматическом режиме. Встроенные типы доставки на момент написания статьи не дают обширной свободы действий в сфере логистики. А уж для организации различных схем доставки, призванных обмануть курьерские и почтовые службы, точно не поддерживает и поддерживать никогда не будет. Поэтому наш выход — своими силами расширить возможности логистики или реализовать «схематоз».

Схематоз (от «схема» + «диагноз») — это непреодолимое желание руководителя экономить за счёт хитрых схем обхода нормальной работы и различных методов обмана курьерских служб. Обычно вырождается из «схематики» или «схемы» — грамотного, но легального использования преимуществ различных конкурентных решений в одной сфере.

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

Руководство подойдёт как для организации своей логистической службы в связке с полноценной AlterCPA, так и для подключения к логистике бесплатной CRM для товарного CPA-бизнеса CPAmoe. Различия в работе минимальны, на них будет указано отдельно.

Архитектура решения

Наш план-минимум — создать некий веб-сервис, который в обязательном порядке должен решать следующие задачи:

  1. Выгружать из вашей сети на AlterCPA или аккаунта в CPAmoe заказы, готовые к отправке.
  2. Формировать записи об отправке в логистической службе на основе полученных данных и добавлять соответствующие отметки в заказ на стороне AlterCPA / CPAmoe.
  3. Выгружать данные о текущем статусе отправления из логистической службы и собирать из них последовательную историю изменения статусов доставки посылки.
  4. По запросу со стороны AlterCPA / CPAmoe выдавать историю статусов доставки посылки в строго определённом формате, используемом внутри стандартного типа доставки.

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

Выгрузка заказов на доставку

API поставщика платформы AlterCPA позволяют достаточно удобно выгружать заказы, требующие доставки. Предположим, мы будем выгружать все заказы в статусе «Отправка» из службы доставки «Стандартная», которая как раз и предназначена для такой интеграции. В целом, вы можете выгружать заказы и из «Упаковки», если на базе логистического сервиса работает фулфилмент.

В этом нам поможет API-функция «Список заказов» из раздела «Поставщик», которая описана в документации к вашей сети, например: ui.cpa.moe/help/api.php#orderlist. На первый взгляд, она представляет ужасающе неудобный интерфейс, поскольку не позволяет нам выгрузить только те посылки, которые не требуют доставки. И это было бы так, не имей AlterCPA своей недокументированной функции на данный случай.

Мы запрашиваем функцию со следующими GET-параметрами:

  • trackon со значением 0, позволит нам выгрузить все заказы без трек-кода.
  • delivery со значением 1, выберет все заказы с доставкой типа «Стандартная».
  • status со значением 7, ограничит выборку статусом «Отправка», для «Упаковки» используйте 6.
  • Также можно добавить сюда stage с идентификатором расширенного статуса или stagename с его символьным кодом, чтобы выгружать посылки в определённой стадии.

Например, для CPAmoe этот URL будет приблизительно таким:

https://api.cpa.moe/comp/list.json?id=x-x&trackon=0&delivery=1&status=6

На выходе мы получаем список заказов, которые готовы к отправке. Состав полей лучше изучить в документации к API. В нём содержатся все данные получателя и состав товаров в заказе.

Передача заказов на логистику

Выгруженные заказы нам необходимо, собственно, отправить. Для этого мы сразу же, или после некоторой обработки, передаём заказы уже в интерфейс курьерской службы.

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

Этот трек-код нам необходимо прикрепить к заказу в AlterCPA и включить у него отслеживание. В этом нам поможет API-функция редактирования заказа, например: ui.cpa.moe/help/api.php#orderedit

Нам необходимо передать ей следующие поля:

  • oid со значением идентификатора заказа на стороне AlterCPA
  • trackon со значением 1 для включения доставки
  • track со значением нашего кода отслеживания посылки

Для CPAmoe этот URL примет вот такой вид:

https://api.cpa.moe/comp/edit.json?id=x-x&oid=123&trackon=1&track=AB123456

Данный запрос рекомендуется делать сразу же после выгрузки заказа из AlterCPA и отправки его в службу доставки. В противном случае заказ выгрузится при следующем запросе на выгрузку из предыдущего пункта.

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

Выгрузка статусов доставки

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

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

  • В обязательном порядке сохраняйте не один последний статус, а всю историю статусов доставки целиком, чтобы её можно было без проблем выгружать в AlterCPA.
  • Фиксируйте время возникновения каждого из статусов. Если статусы доставки на стороне курьерской службы не содержат метку времени, впишите туда время первого появления статуса при проверке.
  • По возможности, выгружайте индекс (ZIP-код) и город, в котором возник тот или иной статус в истории движения посылки. Это может пригодиться в дальнейшем для ручного анализа доставки.
  • При необходимости, сохраняйте текстовые комментарии к статусам в истории движения, они также могут пригодиться. В таких комментариях курьерские службы часто указывают на перенос доставки, проблемы при общении с клиентом и другие достаточно важные для вашего колл-центра сведения.

Вы можете как выгружать эти данные автоматически и хранить в базе своего логистического сервиса, так и формировать выгрузку по запросу со стороны AlterCPA, который описан ниже.

Предоставление AlterCPA истории доставки посылки

Дважды в день AlterCPA может запрашивать историю доставки посылки. Чтобы настроить выгрузку, вам необходимо зайти в настройки служб доставки выбранной компании, активировать доставку «Стандартная» и указать в поле URL адрес API-функции на стороне вашего логистического сервиса, которая выдаст историю доставки в описанном ниже формате.

При указании URL проверки, добавьте макрос {code} и он будет заменён на трек-код посылки, который вы добавили во втором пункте алгоритма. Если макрос {code} в адресе не указан, трек-код будет добавлен в конец URL.

По указанному URL ваш логистический сервис должен выдать историю статусов в формате JSON в виде простого массива объектов, каждый из которых соответствует своему статусу. Все статусы должны быть отсортированы по времени возникновения, от старых к новым. Соблюдение указанной ниже структуры является строго обязательным.

Объект статуса может содержать следующие поля:

  • status — обязательное поле с символьным статусом доставки, список ниже
  • time — обязательное поле со временем возникновения статуса в формате UNIX timestamp
  • country — символьный ISO-код страны
  • zip — индекс или ZIP-код
  • city — город или населённый пункт
  • comment — произвольный комментарий к статусу

Поле status может содержать одно из следующих значений:

  1. wait — посылка ожидает отправки.
  2. transfer — посылка находится в пути, переводится в статус «Доставка».
  3. problem — при доставке посылки возникли проблемы, требуется реакция поставщика.
  4. delivered — посылка прибыла в пункт назначения, переводится в статус «Доставлено».
  5. paid — посылка успешно выкуплена, переводится в статус «Оплачено».
  6. return — посылка возвращена или утилизирована, переводится в статус «Возврат».
  7. comment — произвольный комментарий, не меняющий состояние посылки.

Пример ответа функции может выглядеть вот так:

[ 
   { 
      "status":"delivered",
      "time":1234567890,
      "zip":"AB1234",
      "city":"Neverland"
   },
   { 
      "status":"paid",
      "time":1234567891,
      "comment":"Awesome!"
   }
]

Распечатка документов

В интерфейсе AlterCPA оператор может запрашивать пакет документов на посылку. Для активации этой функции, у доставки «Стандартная» необходимо указать в поле URL адрес API-функции на стороне вашего логистического сервиса, которая выдаст ссылку на файл пакета документов в описанном ниже формате.

При указании URL выгрузки, добавьте макрос {code} и он будет заменён на трек-код посылки, который вы добавили во втором пункте алгоритма. Если макрос {code} в адресе не указан, трек-код будет добавлен в конец URL.

По указанному URL ваш логистический сервис должен выдать ответ в формате JSON с двумя полями: status и url. Поле status должно содержать ok в случае успешного формирования пакета документов и error в случае ошибки. Поле url должно содержать ссылку на пакет документов, которая будет предоставлена пользователю.

Пример успешного ответа функции может выглядеть вот так:

{
    "status": "ok",
    "url": "https://altercpa.one/docs/abcdef123456.zip"
}

Самый простой вариант реализации

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

  1. Выгружать посылки из системы согласно пункту 1 и сразу же отправлять их, делая пометки согласно пункту 2.
  2. Получать запросы от системы, как описано в пункте 4, под фоном делая запрос по пункту 3 и выдавая результат, отформатированный под описание пункта 4.

Этого нехитрого механизма хватит вам для организации работы своей службы доставки, которой ещё нет в AlterCPA или CPAmoe. А на момент прочтения вами этой статьи там наверняка нет нужной вам службы, не зря же вы вообще это читаете!

Несколько служб доставки

У вас наверняка возник резонный вопрос: если мы используем только «Стандартный» тип доставки, то как нам работать с несколькими службами доставки? Вопрос вполне логичный, и на него найдётся свой ответ, не лишенный лёгкого флёра дендро-фекальной парадигмы разработки софта.

Этот лайфхак я подсмотрел у нескольких CRM. Он заключается в создании специальных товаров доставки. В настройках товаров AlterCPA и CPAmoe для этого заложена даже соответствующая группа товаров.

Пример поля goods заказа, содержащего и основной товар, и товар доставки:

[ 
   { 
      "id":11,
      "name":"Dick Extender",
      "short":"dexter",
      "count":2,
      "price":990,
      "param":{ 
         "abc":"123",
         "def":"456"
      }
   },
   { 
      "id":22,
      "name":"Доставка Курьер",
      "short":"courier",
      "count":1,
      "price":350,
      "param": []
   }
]

Чтобы не вести идентификацию типов доставки по их полному названию, в CPAmoe рекомендуется использовать поле «Краткое название» для символьного обозначения типа доставки, например, courier. При выгрузке данных заказа, этот параметр будет у товара в поле short. Владельцы полноценной AlterCPA также могут использовать для этих целей дополнительные параметры товаров, которые в выгрузке будут в поле params.

Схематоз как диагноз

В сфере CPA поставщиков хлебом не корми, но дай организовать какую-нибудь хитрую схему работы для сокращения затрат. И доставка тут — одна из самых прожорливых статей расходов, урезание которой может принести баснословные прибыли.

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

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

Организуйте хранение следующих типов информации:

  • Аккаунты логистических служб. Из этой таблицы вы будете по своему хитрому алгоритму, который наверняка отличается от ORDER BY RAND(), выбирать подходящий аккаунт, от имени которого будет вестись доставка выбранной посылки. Кроме ключа доступа к самой отправке, тут полезно будет сохранить имя отправителя, обратный адрес и разные дополнительные настройки доставки, такие как типы используемых упаковок и всё в таком духе. Организуйте удобный интерфейс для управления этими аккаунтами, в особенности для проверки их активности, чтобы вовремя исключать из выборки исчерпавшие свой лимит.
  • Данные о посылках. В этой таблице рекомендуется хранить данные получателя (ФИО, телефон, адрес доставки) и состав заказа. Каждая посылка должна быть привязана к своему аккаунту из списка выше. Вам не понадобится заводить под товары заказа какой-то дополнительной таблички, вполне хватит и сериализованного текстового поля в формате JSON. Строить статистику и вести учёт товаров нет никакой необходимости, с этим прекрасно справляется интерфейс складского учёта как в платной AlterCPA, так и в бесплатной CPAmoe.
  • История статусов посылки. Вот для них уже отдельную таблицу выделять настоятельно рекомендуется. В зависимости от используемых курьерских служб, вы можете выгружать данные о заказе гораздо чаще двух раз в сутки. По запросу с AlterCPA при этом вы максимально быстро выдаёте готовую выгрузку из этой таблицы. При необходимости, вы можете напрямую попросить AlterCPA / CPAmoe обновить трекинговую информацию посылки описанным ниже методом.

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

Просим AlterCPA / CPAmoe обновить трекинг

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

Мы можем запросить принудительное обновление статуса вот таким простым запросом:

https://api.cpa.moe/comp/retrack.json?id=x-x&oid=123

В параметре oid должен содержаться идентификатор заказа на стороне AlterCPA / CPAmoe. Предполагается, что при работе с серьёзным логистическим сервисом, вы храните его в своей таблице данных о посылке.

Что ещё стоит и не стоит реализовать?

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

  • Подготовка и распечатка документов на партию посылок для удобной передачи курьеру
  • Подготовка и печать наклеек на посылки
  • Подсчёт расходов на доставку посылок

Вам нет никакой необходимости задумываться о следующих аспектах:

  • Упаковка: реализуется в AlterCPA и CPAmoe, пригодятся «Расширенные статусы заказов»
  • Обзвон доставки: реализуется в AlterCPA и CPAmoe, пригодятся команды операторов на доставке и возможность удобного переноса звонка по заказам в любых статусах. В полной версии можно отправлять заказы на обработку доставки в сторонние КЦ.
  • Складской учёт: доступен в AlterCPA и CPAmoe, в полной версии поддерживает ещё и синхронизацию остатков со сторонними сервисами.
  • Анализ выкупа: доступен в AlterCPA и CPAmoe, для заказов реализован в разделе «Аналитика доставки», по товарам доступен в разделе «Статистика» склада.

По этой инструкции вам будет гораздо проще реализовать свою модель работы с доставкой в полноценной AlterCPA или бесплатной CRM для CPA-сетей CPAmoe.