Управление сигналами отслеживания заказов

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

Вы можете отправлять данные о заказах, выполненных через сайт продавца. Отправленные вами данные дополняют информацию о конфигурации доставки, которую вы предоставляете в рамках настройки учетной записи Merchant Center. Например, если вы предоставляете покупателям оценку доставки в 3–7 дней, но недавнее отслеживание ваших заказов показывает, что ваши заказы обычно доставляются в течение 3 дней в некоторые регионы, Google может обновить ваши списки, чтобы предоставить клиентам более точную оценку.

В этом руководстве объясняется, как использовать ресурс ordertrackingsignals для отправки исторических данных отслеживания заказов.

Предпосылки

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

Для получения дополнительной информации см. раздел Привязка партнера к вашей учетной записи Merchant Center .

Используйте ресурс ordertrackingsignals

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

Вы можете отправить один заказ на запрос. Следующая информация объясняет, почему это необходимо, и может быть добавлена ​​в текст запроса.

  • Подробная информация о заказе (время создания заказа, почтовый индекс доставки и код региона), shippingInfo и номер отслеживания: позволяет рассчитать фактическое время обработки и доставки.

  • merchant_id и lineItems : используются для сопоставления заказа с товарами, имеющимися в вашей учетной записи Merchant Center.

  • customerShippingFee : стоимость доставки, взимаемая с покупателя.

Отправьте данные сигналов отслеживания нового заказа

Ниже приведен пример запроса на отправку сигнала отслеживания заказа для заказа розничного продавца «123456789», содержащего в общей сложности 8 товаров.

https://merchantapi.googleapis.com/products/ordertracking/v1beta/accounts/{ACCOUNT_ID}/ordertrackingsignals

{
    "merchantId": {ACCOUNT_ID},
    "orderCreatedTime": {
        "year": 2025,
        "month": 1,
        "day": 2,
        "hours": 0,
        "minutes": 0,
        "seconds": 0,
        "timeZone": {
             "id": "America/Los_Angeles"
        }
    },
    "orderId": "123456789",
    "shippingInfo": [
         {
            "shipmentId": "1",
            "trackingId": "100",
            "carrier": "FEDEX",
            "carrierService": "GROUND",
            "shippedTime": {
                "year": 2025,
                "month": 1,
                "day": 3,
                "hours": 0,
                "minutes": 0,
                "seconds": 0,
                "timeZone": {
                     "id": "America/Los_Angeles"
                }
            },
            "shippingStatus": "DELIVERED"
        },
         {
            "shipmentId": "2",
            "earliestDeliveryPromiseTime": {
                "year": 2025,
                "month": 1,
                "day": 4,
                "hours": 0,
                "minutes": 0,
                "seconds": 0,
                "timeZone": {
                     "id": "America/Los_Angeles"
                }
            },
            "latestDeliveryPromiseTime": {
                "year": 2025,
                "month": 1,
                "day": 5,
                "hours": 0,
                "minutes": 0,
                "seconds": 0,
                "timeZone": {
                     "id": "America/Los_Angeles"
                }
            },
            "actualDeliveryTime": {
                "year": 2025,
                "month": 1,
                "day": 5,
                "hours": 0,
                "minutes": 0,
                "seconds": 0,
                "timeZone": {
                     "id": "America/Los_Angeles"
                }
            },
            "shippedTime": {
                "year": 2025,
                "month": 1,
                "day": 3,
                "hours": 0,
                "minutes": 0,
                "seconds": 0,
                "timeZone": {
                     "id": "America/Los_Angeles"
                }
            },
            "shippingStatus": "DELIVERED"
        }

    ],
    "lineItems": [
         {
            "lineItemId": "item1",
            "productId": "online~en~US~trouser",
            "quantity": "3"
        },
         {
            "lineItemId": "item2",
            "productId": "online~en~US~sneaker",
            "quantity": "5"
        }

    ],
    "shipmentLineItemMapping": [
         {
            "shipmentId": "1",
            "lineItemId": "item1",
            "quantity": "1"
        },
         {
            "shipmentId": "2",
            "lineItemId": "item1",
            "quantity": "2"
        },
         {
            "shipmentId": "1",
            "lineItemId": "item2",
            "quantity": "4"
        },
         {
            "shipmentId": "2",
            "lineItemId": "item2",
            "quantity": "1"
        }

    ],
    "customerShippingFee": {
        "amount_micros": 4500000,
        "currency_code": "USD"
    },
    "deliveryPostalCode": "94043",
    "deliveryRegionCode": "US"
}

Вот пример ответа при успешном звонке:

{
  "orderCreatedTime": {
    "year": 2025,
    "month": 1,
    "day": 2,
    "timeZone": {
      "id": "America/Los_Angeles"
    }
  },
  "orderId": "15e2b0d3c33891ebb0f1ef609ec419420c20e320ce94c65fbc8c3312448eb225",
  "shippingInfo": [
    {
      "shipmentId": "6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b",
      "trackingId": "100",
      "carrier": "FEDEX",
      "carrierService": "GROUND",
      "shippedTime": {
        "year": 2025,
        "month": 1,
        "day": 3,
        "timeZone": {
          "id": "America/Los_Angeles"
        }
      },
      "shippingStatus": "DELIVERED"
    },
    {
      "shipmentId": "d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35",
      "shippedTime": {
        "year": 2025,
        "month": 1,
        "day": 3,
        "timeZone": {
          "id": "America/Los_Angeles"
        }
      },
      "earliestDeliveryPromiseTime": {
        "year": 2025,
        "month": 1,
        "day": 4,
        "timeZone": {
          "id": "America/Los_Angeles"
        }
      },
      "latestDeliveryPromiseTime": {
        "year": 2025,
        "month": 1,
        "day": 5,
        "timeZone": {
          "id": "America/Los_Angeles"
        }
      },
      "actualDeliveryTime": {
        "year": 2025,
        "month": 1,
        "day": 5,
        "timeZone": {
          "id": "America/Los_Angeles"
        }
      },
      "shippingStatus": "DELIVERED"
    }
  ],
  "lineItems": [
    {
      "lineItemId": "item1",
      "productId": "online~en~US~8465944842",
      "quantity": "3"
    },
    {
      "lineItemId": "item2",
      "productId": "online~en~US~8465944842",
      "quantity": "5"
    }
  ],
  "shipmentLineItemMapping": [
    {
      "shipmentId": "6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b",
      "lineItemId": "item1",
      "quantity": "1"
    },
    {
      "shipmentId": "d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35",
      "lineItemId": "item1",
      "quantity": "2"
    },
    {
      "shipmentId": "6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b",
      "lineItemId": "item2",
      "quantity": "4"
    },
    {
      "shipmentId": "d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35",
      "lineItemId": "item2",
      "quantity": "1"
    }
  ],
  "customerShippingFee": {
    "amountMicros": "4500000",
    "currencyCode": "USD"
  },
  "deliveryPostalCode": "94043",
  "deliveryRegionCode": "US",
  "orderTrackingSignalId": "2424724582881888160",
  "merchantId": "1234"
}

В следующем примере кода показано, как отправлять данные сигналов отслеживания заказов:

Ява

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.ordertracking.v1beta.CreateOrderTrackingSignalRequest;
import com.google.shopping.merchant.ordertracking.v1beta.OrderTrackingSignal;
import com.google.shopping.merchant.ordertracking.v1beta.OrderTrackingSignal.LineItemDetails;
import com.google.shopping.merchant.ordertracking.v1beta.OrderTrackingSignal.ShipmentLineItemMapping;
import com.google.shopping.merchant.ordertracking.v1beta.OrderTrackingSignal.ShippingInfo;
import com.google.shopping.merchant.ordertracking.v1beta.OrderTrackingSignal.ShippingInfo.ShippingState;
import com.google.shopping.merchant.ordertracking.v1beta.OrderTrackingSignalsServiceClient;
import com.google.shopping.merchant.ordertracking.v1beta.OrderTrackingSignalsServiceSettings;
import com.google.shopping.type.Price;
import com.google.type.DateTime;
import com.google.type.TimeZone;
import java.util.Arrays;
import java.util.List;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to create an order tracking signal. */
public class CreateOrderTrackingSignalSample {
  private static String getParent(String accountId) {
    return String.format("accounts/%s", accountId);
  }

  private static void createOrderTrackingSignal(Config config, List<String> productIds)
      throws Exception {
    GoogleCredentials credentials = new Authenticator().authenticate();
    OrderTrackingSignalsServiceSettings orderTrackingSignalsServiceSettings =
        OrderTrackingSignalsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credentials))
            .build();

    String parent = getParent(config.getAccountId().toString());

    String firstProductId = productIds.get(0);
    String secondProductId = productIds.get(1);

    DateTime orderCreatedTime =
        DateTime.newBuilder()
            .setYear(2025)
            .setMonth(3)
            .setDay(24)
            .setHours(12)
            .setMinutes(2)
            .setSeconds(22)
            .setTimeZone(TimeZone.newBuilder().setId("America/Los_Angeles"))
            .build();
    DateTime shippedTime1 =
        DateTime.newBuilder()
            .setYear(2025)
            .setMonth(3)
            .setDay(25)
            .setHours(16)
            .setMinutes(22)
            .setTimeZone(TimeZone.newBuilder().setId("America/Los_Angeles"))
            .build();
    DateTime shippedTime2 =
        DateTime.newBuilder()
            .setYear(2025)
            .setMonth(3)
            .setDay(26)
            .setHours(16)
            .setMinutes(22)
            .setTimeZone(TimeZone.newBuilder().setId("America/Los_Angeles"))
            .build();
    DateTime earliestDeliveryPromiseTime =
        DateTime.newBuilder()
            .setYear(2025)
            .setMonth(3)
            .setDay(27)
            .setTimeZone(TimeZone.newBuilder().setId("America/Los_Angeles"))
            .build();
    DateTime latestDeliveryPromiseTime =
        DateTime.newBuilder()
            .setYear(2025)
            .setMonth(3)
            .setDay(30)
            .setTimeZone(TimeZone.newBuilder().setId("America/Los_Angeles"))
            .build();
    DateTime actualDeliveryTime =
        DateTime.newBuilder()
            .setYear(2025)
            .setMonth(3)
            .setDay(29)
            .setHours(16)
            .setMinutes(22)
            .setTimeZone(TimeZone.newBuilder().setId("America/Los_Angeles"))
            .build();

    ShippingInfo shippingInfo1 =
        ShippingInfo.newBuilder()
            .setShipmentId("shipment_id1")
            .setCarrier("UPS")
            .setCarrierService("Ground")
            .setTrackingId("1Z23456789")
            .setShippedTime(shippedTime1)
            .setEarliestDeliveryPromiseTime(earliestDeliveryPromiseTime)
            .setLatestDeliveryPromiseTime(latestDeliveryPromiseTime)
            .setActualDeliveryTime(actualDeliveryTime)
            .setShippingStatus(ShippingState.DELIVERED)
            .setOriginPostalCode("94043")
            .setOriginRegionCode("US")
            .build();
    ShippingInfo shippingInfo2 =
        ShippingInfo.newBuilder()
            .setShipmentId("shipment_id2")
            .setCarrier("USPS")
            .setCarrierService("Ground Advantage")
            .setTrackingId("987654321")
            .setShippedTime(shippedTime2)
            .setShippingStatus(ShippingState.SHIPPED)
            .setOriginPostalCode("94043")
            .setOriginRegionCode("US")
            .build();

    try (OrderTrackingSignalsServiceClient orderTrackingSignalsServiceClient =
        OrderTrackingSignalsServiceClient.create(orderTrackingSignalsServiceSettings)) {
      CreateOrderTrackingSignalRequest request =
          CreateOrderTrackingSignalRequest.newBuilder()
              .setParent(parent)
              .setOrderTrackingSignal(
                  OrderTrackingSignal.newBuilder()
                      // Unique order ID across all merchants orders.
                      .setOrderId("unique_order_id443455")
                      // If sending signal on behalf of another merchant use setMerchantId to
                      // indicate the merchant.
                      // .setMerchantId(123L)
                      .setOrderCreatedTime(orderCreatedTime)
                      .addShippingInfo(shippingInfo1)
                      .addShippingInfo(shippingInfo2)
                      // Details of the line items in the order including quantity and fields
                      // identifying the product.
                      .addLineItems(
                          LineItemDetails.newBuilder()
                              .setQuantity(2)
                              .setProductId(firstProductId)
                              .setLineItemId("item1"))
                      .addLineItems(
                          LineItemDetails.newBuilder()
                              .setQuantity(1)
                              .setProductId(secondProductId)
                              .setLineItemId("item2")
                              // Optional fields used to identify the product when product ID is not
                              // sufficient.
                              .setMpn("00638HAY")
                              .setProductTitle("Tshirt-small-blue")
                              .setBrand("Brand1")
                              // Any GTIN associated with the product.
                              .setGtin("001234567890"))
                      // Mapping of line items to shipments.
                      .addShipmentLineItemMapping(
                          ShipmentLineItemMapping.newBuilder()
                              .setShipmentId("shipment_id1")
                              .setLineItemId("item2")
                              .setQuantity(1))
                      .addShipmentLineItemMapping(
                          ShipmentLineItemMapping.newBuilder()
                              .setShipmentId("shipment_id2")
                              .setLineItemId("item1")
                              .setQuantity(1))
                      .addShipmentLineItemMapping(
                          ShipmentLineItemMapping.newBuilder()
                              .setShipmentId("shipment_id1")
                              .setLineItemId("item1")
                              .setQuantity(1))
                      // The price represented as a number in micros (1 million micros is an
                      // equivalent to one's currency standard unit, for example, 1 USD = 1000000
                      // micros).
                      .setCustomerShippingFee(
                          Price.newBuilder()
                              // Equivalent to 5 USD.
                              .setAmountMicros(5000000)
                              .setCurrencyCode("USD"))
                      .setDeliveryPostalCode("10011"))
              .build();
      System.out.println("Sending Create OrderTrackingSignal request.");
      OrderTrackingSignal response =
          orderTrackingSignalsServiceClient.createOrderTrackingSignal(request);
      System.out.println("Created OrderTrackingSignal below.");
      System.out.println(response);

    } catch (Exception e) {
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    // All products in the order. Replace with actual products in the order. Be sure to include all
    // products in the order.
    String productId1 = "online~en~us~sku123";
    String productId2 = "online~en~us~skuabc";
    List<String> productIds = Arrays.asList(productId1, productId2);
    createOrderTrackingSignal(config, productIds);
  }
}

Отправка данных сигналов отслеживания новых заказов от имени розничного продавца

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

  1. Убедитесь, что вы включены, прежде чем отправлять данные от имени другого бизнеса. Чтобы запросить доступ, свяжитесь с нами по адресу OrderTrackingSignals@google.com .
  2. Настройте поле merchant_id и отправьте данные от имени компании.

Обновите существующие данные сигналов отслеживания заказов

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