Guía de casos de uso de la API de mensajería v1

Enviar mensajes a los compradores sobre sus pedidos

¿Qué es la API de mensajería?

The Selling Partner API for Messaging (Messaging API) allows you to create applications that enable sellers to send messages to buyers after they place an order. Sellers can send a variety of message types. These include asking order related questions, arranging a delivery, and more. The Messaging API can send messages to a buyer, even if the buyer has not contacted the seller first. However, you cannot use this API to respond to messages from buyers.

Refer to the Messaging API reference for a list of operations that correspond to the available message types.

Terminología

URL prefirmada de Amazon S3: Una URL de un bucket de Amazon S3 al que puede cargar un objeto sin las credenciales ni los permisos de seguridad de AWS. Obtendrá una URL prefirmada de Amazon S3 en Paso 7. Crea un destino de carga.

Disponibilidad de mensajes

No todos los tipos de mensajes están disponibles en todas las circunstancias. Hay varios factores que pueden afectar a la disponibilidad de los mensajes, como si el pedido se ha gestionado, el tipo de vendedor o el número de mensajes ya enviados para el pedido.

Proceso para enviar un mensaje

Lo siguiente es para el usuario de la aplicación. El envío de un mensaje es un proceso de varios pasos que incluye llamadas a operaciones tanto en la API de mensajería como en la API de cargas. Este es el flujo de trabajo básico para enviar un mensaje:

  1. En tu aplicación se muestran los pedidos recientes del vendedor, y el vendedor elige un pedido para el que
    desea enviar un mensaje al comprador.

  2. Tu aplicación muestra los tipos de mensajes que están disponibles para el pedido que elija el vendedor. Para obtener los tipos de mensajes disponibles, llama al getMessagingActionsForOrder funcionamiento de la API de mensajería.

  3. El vendedor elige un tipo de mensaje para el pedido.

  4. Si el tipo de mensaje permite mensajes personalizados, el vendedor introduce un mensaje personalizado.

  5. Si el tipo de mensaje permite archivos adjuntos, el vendedor envía un archivo adjunto a la aplicación. El vendedor también da un nombre de archivo al archivo adjunto.

  6. Si el vendedor sube un archivo adjunto a tu aplicación, la aplicación envía el archivo adjunto a un bucket de Amazon S3 con los pasos siguientes:

    • Calcular un hash Content-MD5 para el archivo adjunto, que es necesario para crear un destino de subida.

    • Crear un destino de subida al llamar a la operación createUploadDestination de la API de subidas.

    • Subir el archivo adjunto al destino.

  7. Tu aplicación solicita que el vendedor envíe un mensaje al comprador llamando a la operación que corresponde al tipo de mensaje que el vendedor eligió en el paso #3. Por ejemplo, tu aplicación llama al createConfirmOrderDetails operación si el vendedor eligió el tipo de mensaje «Confirmar detalles del pedido».

  8. Amazon envía por correo electrónico un mensaje del vendedor al comprador.

    Consulta el Tutorial: Enviar un mensaje para ver el proceso detallado.

Tutorial: Enviar un mensaje

En este tutorial se enseña a crear una aplicación que permite a un vendedor enviar un mensaje a un comprador.

Requisitos

Para completar este tutorial, necesita:

Paso 1. Obtener el pedido para el que el vendedor desea enviar un mensaje

  1. Muestra una lista de los pedidos recientes del vendedor entre los que puede elegir.

  2. El vendedor elige un pedido del que quiere enviar un mensaje al comprador.

  3. Asocia un identificador de pedido de Amazon al pedido que elija el vendedor.

  4. Guarda el identificador de pedido de Amazon para el Paso 2. Obtener una lista de los tipos de mensajes disponibles.

Paso 2. Obtener una lista de los tipos de mensajes disponibles

Llama a la operación getMessagingActionsForOrder de la API de mensajería, especificando el identificador de pedido de Amazon obtenido en el
Paso 1. Obtener el pedido para el que el vendedor desea enviar un mensaje para obtener una lista de los tipos de mensaje disponibles para el pedido.

  1. Llama a la operación getMessagingActionsForOrder de la API de mensajería, utilizando los siguientes parámetros:

Parámetro de ruta:

Parámetro Descripción Obligatorio
amazonOrderId Un identificador de pedido de Amazon. Especifica el pedido desde el que se enviará un mensaje. Obtén este valor en el Paso 1. Obtener el pedido para el que el vendedor desea enviar un mensaje.

Tipo: cadena

Parámetro de consulta:

Parámetro Descripción Obligatorio
marketplaceIds Un identificador de sitio web. Especifica el sitio web en el que se realizó el pedido. Solo se puede especificar un sitio web.

Tipo: matriz [cadena]

Ejemplo de solicitud

GET https://sellingpartnerapi-na.amazon.com/messaging/v1/orders/902-6786204-8179805?marketplaceIds=ATVPDKIKX0DER

Respuesta

El esquema de respuesta para la operación getMessagingActionsForOrder.

NombreDescripciónSchema
_links
optional
Un objeto cuyos nombres de propiedad son tipos de relación de enlace y cuyos valores son un objeto de enlace o una matriz de objetos de enlace. El recurso sujeto de estos enlaces es el objeto de recursos, cuya propiedad es el objeto "_links", en el que es un objeto._links
_embedded
optional
Un objeto cuyos nombres de propiedad son tipos y valores de relación de enlace y son un objeto de recursos o una matriz de objetos de recursos. Los recursos integrados pueden ser una versión completa, parcial o incoherente de la representación proporcionada por el URI de destino._embedded
errors
optional
Una lista de respuestas de error devueltas cuando una solicitud no tiene éxito.ErrorList

_links

NombreDescripciónSchema
self
required
Corresponde a la relación "propia" registrada por la IANA, cuyo destino es el URI del recurso.LinkObject
actions
required
Acciones aptas para el AmazonOrderID especificado.< LinkObject > array


_embedded

NombreSchema
actions
required
matriz < GetMessagingActionResponse >

Ejemplo de respuesta

{ "_links": { "actions": [ { "href": "/messaging/v1/orders/902-6786204- 8179805/messages/confirmCustomizationDetails?marketplaceIds=ATVPDKIKX0 DER", "name": "confirmCustomizationDetails" }, { "href": "/messaging/v1/orders/902-6786204- 8179805/messages/negativeFeedbackRemoval?marketplaceIds=ATVPDKIKX0DER" , "name": "negativeFeedbackRemoval" }, { "href": "/messaging/v1/orders/902-6786204- 8179805/messages/confirmOrderDetails?marketplaceIds=ATVPDKIKX0DER", "name": "confirmOrderDetails" }, ], "self": { "href": "/messaging/v1/orders/902-6786204- 8179805?marketplaceIds=ATVPDKIKX0DER" } }, "_embedded": { "actions": [ { "_links": { "schema": { "href": "/messaging/v1/orders/902-6786204-8179805/messages/confirmCustomizationDetails/schema", "name": "confirmCustomizationDetails" }, "self": { "href": "/messaging/v1/orders/902-6786204-8179805/messages/confirmCustomizationDetails?marketplaceIds=ATVPDKIKX0DER", "name": "confirmCustomizationDetails" } }, "_embedded": { "schema": { "_links": { "self": { "href": "/messaging/v1/orders/902-6786204-8179805/messages/confirmCustomizationDetails/schema", "name": "confirmCustomizationDetails" } }, "type": "object", "name": "confirmCustomizationDetails", "title": "Confirm customization details", "description": "Ask your customer to provide details or verify the customization input provided (name spelling, imagery, initials).", "properties": { "attachments": { "type": "array", "items": { "type": "object", "required": [], "properties": { "fileName": { "type": "string" }, "id": { "type": "string" } } }, "title": "Add attachment", "description": "You can upload text files, PDFs, Word documents, and these image file types: .jpg, .gif, and .png. The total size of attachments must be less than 10 MB.", "x-ui-field-type": "attachments", "maxItems": 5 }, "rawMessageBody": { "type": "string", "title": "Explain why you are contacting and any action you need your customer to take. ", "description": "800 character limit. Only links related to order completion are allowed, no HTML or email addresses.", "x-ui-field-type": "text", "minLength": 1, "maxLength": 800 } }, "required": [ "attachments", "rawMessageBody" ], "$schema": "http://json-schema.org/draft-04/schema#", "x-ui-hidden": null } }, "name": "confirmCustomizationDetails", "title": "Confirm customization details" }, { "_links": { "schema": { "href": "/messaging/v1/orders/902-6786204-8179805/messages/negativeFeedbackRemoval/schema", "name": "negativeFeedbackRemoval" }, "self": { "href": "/messaging/v1/orders/902-6786204-8179805/messages/negativeFeedbackRemoval?marketplaceIds=ATVPDKIKX0DER", "name": "negativeFeedbackRemoval" } }, "_embedded": { "schema": { "_links": { "self": { "href": "/messaging/v1/orders/902-6786204-8179805/messages/negativeFeedbackRemoval/schema", "name": "negativeFeedbackRemoval" } }, "type": "object", "name": "negativeFeedbackRemoval", "title": "Request to update negative feedback", "description": "Ask your customer to consider updating their seller feedback rating. You may only send this once per order.", "properties": {}, "required": [], "$schema": "http://json-schema.org/draft-04/schema#", "x-ui-hidden": true } }, "name": "negativeFeedbackRemoval", "title": "Request to update negative feedback" }, { "_links": { "schema": { "href": "/messaging/v1/orders/902-6786204-8179805/messages/confirmOrderDetails/schema", "name": "confirmOrderDetails" }, "self": { "href": "/messaging/v1/orders/902-6786204-8179805/messages/confirmOrderDetails?marketplaceIds=ATVPDKIKX0DER", "name": "confirmOrderDetails" } }, "_embedded": { "schema": { "_links": { "self": { "href": "/messaging/v1/orders/902-6786204-8179805/messages/confirmOrderDetails/schema", "name": "confirmOrderDetails" } }, "type": "object", "name": "confirmOrderDetails", "title": "Confirm order details", "description": "Ask your customer a specific order-related question prior to shipping their order.", "properties": { "rawMessageBody": { "type": "string", "title": "Explain why you are contacting and any action you need your customer to take. ", "description": "2000 character limit. Only links related to order completion are allowed, no HTML or email addresses.", "x-ui-field-type": "text", "minLength": 1, "maxLength": 2000 } }, "required": [ "rawMessageBody" ], "$schema": "http://json-schema.org/draft-04/schema#", "x-ui-hidden": null } }, "name": "confirmOrderDetails", "title": "Confirm order details" }, ] } }
  1. Guarda la lista de esquemas en la matriz _embedded.actions de la respuesta. En la sección _embedded.schema de cada elemento de matriz, puedes encontrar un esquema para cada tipo de mensaje disponible. Utiliza el valor de title en cada esquema para crear una lista de tipos de mensaje disponibles para que el vendedor elija en el Paso 3. Obtener el tipo de mensaje elegido por el vendedor. Utiliza los esquemas para comprender cómo mostrar y aplicar las restricciones para mensajes personalizados y archivos adjuntos que se aplican a cada tipo de mensaje. Para obtener más información, consulta Paso 4. Obtener un mensaje de texto personalizado del vendedor (si es compatible) y Paso 5. Obtener un archivo adjunto del vendedor (si es compatible).

  2. Guarda la lista de rutas en la matriz _links.actions de la respuesta. El valor de href en cada elemento de matriz contiene una ruta para cada tipo de mensaje disponible. Puedes utilizar una de estas rutas en una llamada a la operación adecuada en el Paso 9. Enviar un mensaje al comprador.

Paso 3. Obtener el tipo de mensaje elegido por el vendedor

  1. Muestra una lista de los tipos de mensaje disponibles para que el vendedor elija. Puedes obtenerlos de los valores de title que guardaste en el Paso 2. Obtener una lista de los tipos de mensajes disponibles.

  2. Deja que el vendedor elija el tipo de mensaje que desea enviar y guárdalo. Esta elección afecta a varios pasos posteriores, entre ellos:

Paso 4. Obtener un mensaje de texto personalizado del vendedor (si es compatible)

Algunos tipos de mensaje permiten al vendedor incluir un mensaje personalizado en el correo electrónico que se envíe al comprador. Para saber si un tipo de mensaje permite mensajes personalizados, consulta la referencia de la API de mensajería para encontrar la operación que corresponde al tipo de mensaje. Por ejemplo, la operación createConfirmServiceDetails corresponde al tipo de mensaje "Contactar con el servicio de atención al cliente de inicio". Si la operación incluye un parámetro de cuerpo de texto, el tipo de mensaje permitirá mensajes personalizados.

  1. Determina si el tipo de mensaje que el vendedor ha seleccionado en el Paso 3. Obtener el tipo de mensaje elegido por el vendedor permite mensajes personalizados. Si no se admiten los mensajes personalizados, dirígete directamente al Paso 5. Obtener un archivo adjunto del vendedor (si es compatible). Si se permiten los mensajes personalizados, sigue con este procedimiento.

  2. Permite que el vendedor introduzca el texto sin formato que desea para el mensaje personalizado.

  3. Muestra y aplica las restricciones al texto del mensaje introducido por el vendedor. Puedes encontrar las restricciones de texto en la sección _embedded.schema.properties.rawMessageBody del elemento de matriz _embedded.actions que corresponde al tipo de mensaje del vendedor. Encuéntralo en la respuesta a la operacióngetMessagingActionsForOrder del Paso 2. Obtener una lista de los tipos de mensaje disponibles.

  4. Guarda el texto del mensaje y úsalo como entrada para el Paso 9. Enviar un mensaje al comprador.

Paso 5. Obtener un archivo adjunto del vendedor (si es compatible)

Algunos tipos de mensaje permiten al vendedor incluir un enlace a un archivo adjunto en el correo electrónico que se envíe al comprador. Para saber si un tipo de mensaje permite archivos adjuntos, consulta la referencia de la API de mensajería para encontrar la operación que se corresponde con el tipo de mensaje. Por ejemplo, la operación createWarranty corresponde al tipo de mensaje "Enviar información de garantía". Si la operación incluye un parámetro de cuerpo de archivo adjunto, el tipo de mensaje permitirá archivos adjuntos.

  1. Determina si el tipo de mensaje que el vendedor ha seleccionado en el Paso 3. Obtener el tipo de mensaje elegido por el vendedor permite archivos adjuntos. Si no se admiten los archivos adjuntos, dirígete directamente al Paso 9. Enviar un mensaje al comprador. Si se permiten los archivos adjuntos, sigue con este procedimiento.

  2. Permite que el vendedor envíe un archivo adjunto a tu aplicación.

  3. Muestra y aplica las restricciones al archivo adjunto enviado por el vendedor. Puedes encontrar las restricciones de archivo adjunto en la sección _embedded.schema.properties.attachments del elemento de matriz _embedded.actions que corresponde al tipo de mensaje del vendedor. Encuéntralo en la respuesta a la operacióngetMessagingActionsForOrder del Paso 2. Obtener una lista de los tipos de mensaje disponibles.

  4. Convierte el archivo adjunto en un flujo de entrada y guárdalo para el Paso 8. Subir el archivo adjunto.

  5. Permite que el vendedor introduzca un nombre de archivo para el archivo adjunto, incluida la extensión del archivo.

  6. Guarda el nombre del archivo y úsalo como entrada para el Paso 9. Enviar un mensaje al comprador.

Paso 6. Calcular un hash Content-MD5

Calcula un hash Content-MD5 para el archivo adjunto del Paso 5. Obtener un archivo adjunto del vendedor (si es compatible). Lo necesitarás para crear un destino de subida en el Paso 7. Crear un destino de subida.

El código Java de muestra de este paso contiene la lógica para calcular un hash Content-MD5. Este código de muestra utiliza el cliente HTTP Apache.

  1. Utiliza lo siguiente como entrada para el código de muestra:

• El flujo de entrada de archivos adjuntos del Paso 5. Obtener un archivo adjunto del vendedor (si es compatible) es el argumento del parámetro fis del método computeContentMD5Value de la clase CreateMD5.

  1. Guarda el valor md5Content que se introducirá con el parámetro Content-MD5 en el Paso 7. Crear un destino de subida.

Ejemplo de código Java

package io.swagger.client.util; import java.io.FileInputStream; import java.io.IOException; import java.security.DigestInputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class CreateMD5 { public static String computeContentMD5Value(FileInputStream fis) throws IOException, NoSuchAlgorithmException { DigestInputStream dis = new DigestInputStream(fis, MessageDigest.getInstance("MD5")); byte[]buffer = new byte[8192]; while (dis.read(buffer) > 0); String md5Content = new String(org.apache.commons.codec.binary.Base64 .encodeBase64(dis.getMessageDigest().digest())); // Effectively resets the stream to be beginning of the file // via a FileChannel. fis.getChannel().position(0); return md5Content; } }

Paso 7. Crear un destino de subida

Llama a la operación createUploadDestination de la API de subidas para crear un destino de subida para tu archivo adjunto, en forma de una URL prefirmada de Amazon S3. Para ver las definiciones, consulta Terminología.

  1. Llama a la operación createUploadDestination de la API de subidas, utilizando los siguientes parámetros:

Parámetros de consulta:

TypeNombreDescripciónSchema
QuerymarketplaceIds
required
Una lista de identificadores de mercado. Aquí se especifican los sitios web en los que estará disponible la subida. Solo se puede especificar un mercado.
Recuento máximo : 1
< cadena > gama
QueryContenido MD5
required
El hash Content-MD5 que calculó en Paso 6. Calcule un hash MD5 de contenido.string
Pathrecurso
required
El recurso para el destino de carga que estás creando. Por ejemplo, si estás creando un destino de carga para la operación CreateLegalDisclosure de la API de mensajería, el {resource} sería /messaging/v1/orders/{amazonOrderId}/messages/legalDisclosure, y todo el camino sería /uploads/2020-11-01/uploadDestinations/messaging/v1/orders/{amazonOrderId}/messages/legalDisclosure. Si está creando un destino de carga para un documento de contenido de Aplus, el {resource} sería aplus/2020-11-01/contentDocuments y el camino sería /uploads/v1/uploadDestinations/aplus/2020-11-01/contentDocuments.string
QueryTipo de contenido
optional
El tipo de contenido de archivo que debe subirse.string

Ejemplo de solicitud

POST https://sellingpartnerapi-na.amazon.com/uploads/2020-11-01/uploadDestinations/messaging/v1/orders/7XX-5XXXXX-8XXXXXX/messages/invoice?marketplaceIds=A2Q3Y263D00KWC&contentMD5=qCcR3o%2BU0FUR1%2BgXhApNfQ%3D%3D

Respuesta

El esquema de respuesta para la operación createUploadDestination.

NombreDescripciónSchema
payload
optional
Información sobre un destino de subida.UploadDestination
errors
optional
Una lista de respuestas de error devueltas cuando una solicitud no tiene éxito.ErrorList

Ejemplo de respuesta

{ "payload": { "uploadDestinationId": "sc/7ae2d3b1-fdd3-42c4-98c4-9cc509fb95d8.png", "url": "https://aplus-media.s3.amazonaws.com/?x-amz-date=20201116T184623Z&x-amz-signature=c5c8efd95d883b6787a2b1a93c7c066f01cb4e8d7be3ece4360aa800332e0cf9&x-amz-meta-owner=A2CZ04NGKYDXDV&acl=private&key=sc/7ae2d3b1-fdd3-42c4-98c4-9cc509fb95d8.png&x-amz-algorithm=AWS4-HMAC-SHA256&policy=eyJjb25kaXRpb25zIjpbeyJidWNrZXQiOiJhcGx1cy1tZWRpYS1iZXRhIn0seyJrZXkiOiJzb3RhLzdhZTJkM2IxLWZkZDMtNDJjNC05OGM0LTljYzUwOWZiOTVkOC5wbmcifSx7ImFjbCI6InByaXZhdGUifSx7IngtYW16LW1ldGEtb3duZXIiOiJBMkNaMDROR0tZRFhEViJ9LHsieC1hbXotYWxnb3JpdGhtIjoiQVdTNC1ITUFDLVNIQTI1NiJ9LHsieC1hbXotY3JlZGVudGlhbCI6IkFLSUE2TDZSN1FFNTZGNkdNRzVFLzIwMjAxMTE2L3VzLWVhc3QtMS9zMy9hd3M0X3JlcXVlc3QifSx7IngtYW16LWRhdGUiOiIyMDIwMTExNlQxODQ2MjNaIn0sWyJjb250ZW50LWxlbmd0aC1yYW5nZSIsMSwzMTQ1NzI4XV0sImV4cGlyYXRpb24iOiIyMDIwLTExLTE2VDIxOjQ2OjIzLjg2OFoifQ==&x-amz-credential=AKIA6L6R7QE56F6GMG5E/20201116/us-east-1/s3/aws4_request", "headers": { "Content-MD5": "1jnGuPv7xwPiat6NesKL/w==" } } }
  1. Guarda los siguientes valores:

Paso 8. Subir el archivo adjunto

Sube a un bucket de Amazon S3 el archivo adjunto que el vendedor ha enviado a tu aplicación en el Paso 5. Recibir un archivo adjunto del vendedor (si es compatible).

El código Java de muestra de este paso contiene la lógica para subir un archivo adjunto. Este código de muestra utiliza el cliente HTTP Apache.

Utiliza lo siguiente como entrada para el código de muestra:

Ejemplo de código Java

package io.swagger.client.util; import java.io.IOException; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import java.util.Map; import io.swagger.client.model.CreateUploadDestinationResponse; public class UploadFileToDestination { private static String requestMethod = "PUT"; private static String contentType = "Content-Type"; private static String contentValue = "application/text"; private static URL url; private static Map < String, String > headers; /* Upload file to destination using the response returned in CreateUploadDestination. Reference https://docs.aws.amazon.com/AmazonS3/latest/dev/PresignedUrlUploadObjectJavaSDK.html) */ public static void uploadFileInDestination( CreateUploadDestinationResponse uploadDestinationPayload) throws IOException { url = new URL(uploadDestinationPayload.getPayload().getUrl()); headers = (Map < String, String > )uploadDestinationPayload.getPayload() .getHeaders(); // Create the connection and use it to upload the new object using the // pre-signed URL. HttpURLConnection connection = (HttpURLConnection)url.openConnection(); connection.setDoOutput(true); connection.setRequestMethod(requestMethod); connection.setRequestProperty(contentType, contentValue); // headers that are returned in createDestination call for (Map.Entry < String, String > headersEntry: headers.entrySet()) { connection.setRequestProperty(headersEntry.getKey(), headersEntry.getValue()); } OutputStreamWriter out = new OutputStreamWriter( connection.getOutputStream()); out.write("Text of the file"); out.close(); // Check the HTTP response code. To complete the upload and make the // object available, // you must interact with the connection object in some way. connection.getResponseCode(); System.out.println("HTTP response code: " + connection.getResponseCode() + connection.getResponseMessage()); connection.disconnect(); } }

El archivo adjunto se sube al bucket de Amazon S3.

Paso 9. Enviar un mensaje al comprador

To send a message from the seller to the buyer you need to call the operation that corresponds to the message type that the seller chose in Step 2. Get a list of available message types. For example, if the seller chose the "Confirm customization details" message type, you would call the confirmCustomizationDetails operation. Refer to the Messaging API reference for the list of operations that are available. In this example, we will call the confirmCustomizationDetails operation.

  1. Llama a la operación confirmCustomizationDetails de la API de mensajería, utilizando los siguientes parámetros:

Parámetro de ruta:

Parámetro Descripción Obligatorio
amazonOrderId Un identificador de pedido de Amazon. Especifica el pedido en el que debe enviarse un mensaje. Utiliza el identificador de pedido de Amazon que guardaste en el Paso 1. Obtener el pedido para el que el vendedor desea enviar un mensaje.

Tipo: cadena

Parámetro de consulta:

Parámetro Descripción Obligatorio
marketplaceIds Un identificador de sitio web. Especifica el sitio web en el que se realizó el pedido. Solo se puede especificar un sitio web.

Tipo: matriz [cadena]

Parámetro del cuerpo:

Parámetro Descripción Obligatorio
text El mensaje personalizado que se incluirá en el correo electrónico que se envíe al comprador. Utiliza el texto del mensaje del Paso 4. Obtener un mensaje de texto personalizado del vendedor (si es compatible).

Tipo: cadena

attachments Archivos adjuntos que se incluirán en el mensaje para el comprador

Ejemplo de solicitud

POST https://sellingpartnerapi-na.amazon.com/messaging/v1/orders/902-6786204-8179805/messages/confirmCustomizationDetails?marketplaceIds=ATVPDKIKX0DER { "text": "This is the message from the seller to the buyer that will appear in the email to the buyer.", "attachments": [ { "uploadDestinationId": "4370d51b-2954-445c-9f30-EXAMPLE6b9de", "fileName": "example.txt" } ] }

Respuesta

No hay respuesta. En su lugar, Amazon envía por correo electrónico el mensaje del vendedor al comprador.


¿Te ha ayudado esta página?