Интеграция с внешними перевозчиками

  • Когда есть заказ, который должен быть передан на доставку, либо когда переданный ранее заказ был изменен, Смартомато делает вызов (callback) по зарегистрированному адресу (для регистрации службы внешней перевозки обратитесь в службу поддержки) и передает в параметре secure_id заказа.
  • Перевозчик загружает себе заказ через secure_id
  • Перевозчик поддерживает статус заказа в актуальном состоянии. При изменении положения курьера перевозчик обновляет его гео-положение.

Доступные callback-вызовы

  • При создании заказа:

      POST http://example.com/foo?type=order_created&
        order_id=1&order_secure_id=ab12dc34eeff
    
  • При изменении статуса заказа:

      POST http://example.com/foo?type=order_status_changed&
        order_id=1&order_secure_id=ab12dc34eeff&status=delivery
    

Описание методов API

Контекст вызовов: http://smartomarto.ru/api-delivery/

GET /api-delivery/orders/:secure_id

Возвращает данные заказа. Для доступа используется secure_id заказа, который приходит в оповещении.

{
  "order": {
    "id": 65,
    "secure_id": "Hf1Bcvv78a4d",

    // Человекочитаемый номер заказа для системы логистики Смартомато
    "number": "1-14",
    "created_at":  "2015-02-21T21:08:39+03:00",

    // -----
    // Блок параметров, которые доступны на запись для перевозчика
    // ----
    "delivery": {
      // Статус внешнего перевозчика заказа: ожидает назначения,
      // курьер назначен, курьер доставляет,
      // курьер везет заказ клиенту,
      // курьер доставил заказ, проблема доставки.
      "status": "idle", "courier_assigned", "delivering", "delivered", "problem"

      // Сообщение от системы внешней доставки (может указывать на проблему)
      "message": "Звоню, а он не берет трубку :("
      "courier_name": "Таир Джанибековский",
      "courier_phone": "+7 (928) 234-34-34",

      // Идентификатор курьера во внешней системе доставки
      "courier_external_id": 1337,
      "lat": 234.23,
      "lon": 2342.43
    },

    // Статус заказа (только чтение!):
    //  - новый
    //  - подтвержден
    //  - готовится
    //  - приготовлен
    //  - доставляется
    //  - доставлен
    //  - отменен
    "order_status": "new", "confirmed",
      "preparing", "prepared", "delivering", "complete", "cancelled"

    // Данные клиента
    "description": "Привезите скорее, пожалуйста!",
    "contact_phone": "+7 (904) 571-25-42",
    "contact_name": "John Doe",

    // Время доставки в минутах и время, к которому необходимо доставить
    "delivery_time": 60,
    "delivery_at": "2015-02-21T21:38:39+03:00",

    // Время забора товара из ресторана
    "pickup_at": "2015-02-21T21:38:39+03:00",

    // Доставка как можно скорее
    // (означает, что можно привезти раньше назначенного времени)
    "delivery_asap": true,

    // Тип оплаты: cash, card, courier_card, external_service_card_online
    "payment_source": "cash",

    // Адрес клиента
    "destination": {
      "address": "улица Максима Горького, 151 кв. 1, эт. 2",
      "city": "Россия, Ростов-на-Дону",
      "lon": 39.714285,
      "lat": 47.226894
    },

   // Данные ресторана и адрес
   "restaurant": {
      "organization_name": "Setters Brew",
      "name": "Setters Brew Bar в  Ростове",
      "phone": "2-33-01-20",
      "address": "ул. Максима Горького, 151"
    }

   "change":         5000,     // Нужна сдача с данной суммы (null, если не нужна)
   "items_price":    315.0,    // Полная цена всех блюд
   "delivery_price": 50.0,     // Цена доставки
   "final_price":    370.0,    // Итоговая цена с учетом всех надбавок и доставки
                               // (сумма, которую клиент должен отдать курьеру)

  // Содержимое заказа
  "items": [
    {
      "name": "Ванильный каппучино",
      "amount": 1,
      "price": 250,  // Полная цена данной позиции (с учетом количества и конфигуратора)
      "config_text": "Добавки: корица"
    },
    {
      "name": "Эфиопия фуджи",
      "amount": 2,
      "price": 1000,
      "config_text": null
    },
    ...
  ]
}

PUT /api-delivery/orders/:secure_id/delivery

Изменяет поля, которые доступны на запись перевозчику заказа: положение, имя курьера и т.д. Можно указать только необходимые поля. Формат запроса (обязателен Content-Type: application/json):

{
  "status": "problem",
  "message": "Звоню, а он не берет трубку :(",
  "courier_name": "Таир Джанибековский",
  "courier_phone": "+7 (928) 234-34-34",
  "courier_external_id": 1337,
  "lat": 234.23,
  "lon": 2342.43
}