Responde a las reseñas y luego edita o archiva una respuesta

Busca reseñas que admitan respuesta del propietario, responde, confirma su llegada a la plataforma de publicación y luego corrige el texto o archívala.

Una respuesta del propietario se publica en la plataforma de publicación en tu nombre. La API la acepta de inmediato y la entrega de forma asíncrona; la secuencia es: elige una reseña que se pueda responder, publica la respuesta y luego confirma su publicación mediante una nueva consulta.

1. Elige reseñas que se puedan responder

Enumera las reseñas de la ubicación y conserva aquellas en las que canRespond sea true y responded sea false. El filtro responseStatus=["PENDING"] realiza la segunda comprobación en el servidor; el valor JSON debe estar codificado para URL, de lo que se encarga --data-urlencode.

Answerable reviews
curl -G "https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/reviews" \-H "Authorization: API $LISTINGSAPI_KEY" \--data-urlencode 'responseStatus=["PENDING"]' \--data-urlencode 'first=25'
JSON
{  "node": {    "id": "9e26d2a8-a6ed-42ea-8454-47d1c92ea841",    "source": "maps.google.com",    "rating": 5,    "content": "nice place for family together",    "responded": false,    "responseCount": 0,    "canRespond": true  }}

El valor de canRespond es false para las fuentes que no admiten respuestas del propietario a través de la API. Omítelas; un intento de respuesta no llegará a la plataforma de publicación. Para redactar, Enumera las frases de las reseñas te indica qué mencionan más los clientes, de modo que la respuesta pueda abordar esos temas.

2. Publica una respuesta

POST /locations/reviews/respond recibe los campos directamente en el cuerpo, sin envolverlos en input. interactionId es el id de la reseña. respondedWith es opcional e indica el nombre de una plantilla de respuesta si has usado alguna.

Respond
curl -X POST https://listingsapi.com/api/v4/locations/reviews/respond \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "interactionId": "9e26d2a8-a6ed-42ea-8454-47d1c92ea841",  "responseContent": "Thank you for visiting Jenny Home: we are glad you enjoyed your experience!"}'
JSON
{  "data": {    "respondToInteraction": {      "interaction": {        "id": "2090753a-ece6-4837-8336-8494ad308523",        "interactionId": "9e26d2a8-a6ed-42ea-8454-47d1c92ea841",        "content": "Thank you for visiting Jenny Home: we are glad you enjoyed your experience!",        "interactionStatus": "CREATED",        "editedResponse": false      },      "errors": null    }  }}

Guarda interaction.id: es el responseId que necesitas para editar o archivar la respuesta más adelante. Una respuesta rechazada se devuelve como 200 con errors rellenado dentro de data.respondToInteraction, así que lee el cuerpo. Los SDK lanzan ValidationError en ese caso.

3. Confirma que haya llegado a la plataforma de publicación

El valor de interactionStatus es CREATED al principio y avanza sin llamadas adicionales. Vuelve a consultar la reseña por su identificador tras una breve espera y comprueba responded, responseCount y el estado de la respuesta dentro de responses[].

EstadoSignificado
CREATEDAceptada y en cola para la plataforma de publicación.
COMPLETEDPublicada en la plataforma de publicación. Algunas plataformas se detienen aquí.
CONFIRMEDPublicada y confirmada por la plataforma de publicación.
FAILEDLa plataforma de publicación la rechazó. remarks en la respuesta indica el motivo.
Re-read
curl -G "https://listingsapi.com/api/v4/reviewDetails" \-H "Authorization: API $LISTINGSAPI_KEY" \--data-urlencode 'interactionIds=["9e26d2a8-a6ed-42ea-8454-47d1c92ea841"]'
JSON
{  "id": "9e26d2a8-a6ed-42ea-8454-47d1c92ea841",  "responded": true,  "responseCount": 1,  "responses": [    {      "id": "2090753a-ece6-4837-8336-8494ad308523",      "content": "Thank you for visiting Jenny Home: we are glad you enjoyed your experience!",      "interactionStatus": "CONFIRMED",      "editedResponse": false    }  ]}

responded: true con una respuesta en estado CONFIRMED o COMPLETED significa que el cliente puede verla. Si ves FAILED, lee remarks en la respuesta para conocer el motivo de la plataforma de publicación antes de volver a intentarlo.

4. Edita una respuesta

POST /locations/reviews/respond/edit necesita ambos identificadores: reviewId corresponde a la reseña y responseId a la respuesta del paso 2. La edición se vuelve a enviar, por lo que el valor de interactionStatus de la respuesta vuelve a CREATED y editedResponse pasa a ser true cuando se publica.

Edit reply
curl -X POST https://listingsapi.com/api/v4/locations/reviews/respond/edit \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "reviewId": "9e26d2a8-a6ed-42ea-8454-47d1c92ea841",  "responseId": "2090753a-ece6-4837-8336-8494ad308523",  "responseContent": "Thank you again: we have updated our reply to include our new store hours."}'
JSON
{  "data": {    "editResponse": {      "status": "true",      "reviewId": "9e26d2a8-a6ed-42ea-8454-47d1c92ea841",      "responseId": "2090753a-ece6-4837-8336-8494ad308523"    }  }}

El valor de status es la cadena "true" cuando se acepta la edición. Confirma la nueva redacción de la misma forma que en el paso 3.

5. Archiva una respuesta

POST /locations/reviews/respond/archive solo recibe responseId. Al archivar, se elimina la respuesta de responses de la interacción en Listings API. Esto no retira una respuesta que ya esté publicada en Google o Facebook, así que usa esta acción para eliminar un borrador que haya fallado o haya sido reemplazado, y usa la edición para cualquier respuesta publicada.

Archive reply
curl -X POST https://listingsapi.com/api/v4/locations/reviews/respond/archive \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "responseId": "2090753a-ece6-4837-8336-8494ad308523" }'
JSON
{  "data": {    "archiveResponse": {      "status": "true"    }  }}

Tras archivar, el valor de responseCount de la reseña disminuye y responded refleja las respuestas restantes.

6. Recibe eventos de respuesta mediante un webhook

Se dispara un evento interaction.response cuando se publica, edita o archiva una respuesta. La carga útil se encuentra en data.interaction, con type: "Response" y parent_id establecidos en el identificador de la reseña, de modo que puedes asociarla con tu propio registro sin otra llamada. Al igual que en interaction.review, su location_id no está normalizado y puede ser null. La configuración se describe en Reacciona a eventos con webhooks.

Próximos pasos