レビューに返信し、返信を編集またはアーカイブする

オーナーからの返信を受け付けるレビューを探し、返信を投稿して掲載先に届いたことを確認してから、文面を修正するかアーカイブします。

オーナーからの返信は、代理で掲載先に投稿されます。APIは返信を即座に受け付けて非同期で配信するため、返信可能なレビューを選び、返信を投稿してから、再取得して確認するという順序で進めます。

1. 返信可能なレビューを選ぶ

拠点のレビューを一覧取得し、canRespondがtrueで、かつrespondedがfalseであるレビューを残します。responseStatus=["PENDING"]フィルターは2つ目の条件をサーバー側で確認しますが、JSON値はURLエンコードする必要があり、この処理は--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  }}

API経由でオーナーからの返信を受け付けないソースでは、canRespondはfalseです。これらはスキップしてください。返信を試みても掲載先には届きません。返信の下書きを作成する際は、レビューのフレーズを一覧取得するで顧客が最もよく言及している内容を確認できるため、それに対応した返信を作成できます。

2. 返信を投稿する

POST /locations/reviews/respondでは、フィールドをinputで囲まずに、リクエストボディに直接指定します。interactionIdはレビューのidです。respondedWithは任意で、返信テンプレートを使用した場合にその名前を指定します。

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    }  }}

interaction.idを保存してください。これは、後で返信を編集またはアーカイブする際に必要なresponseIdです。返信が拒否された場合は、data.respondToInteraction内のerrorsに値が設定された200が返されるため、本文を確認してください。この場合、SDKはValidationErrorを発生させます。

3. 掲載先に届いたことを確認する

interactionStatusは最初はCREATEDで、追加の呼び出しを行わなくても進行します。少し待ってからIDでレビューを再取得し、responded、responseCount、およびresponses[]内の返信のステータスを確認してください。

ステータス意味
CREATED受け付けられ、掲載先への送信キューに入っています。
COMPLETED掲載先に投稿されています。一部のプラットフォームでは、この段階が最終ステータスです。
CONFIRMED投稿され、掲載先によって確認されています。
FAILED掲載先が返信を拒否しました。レスポンスのremarksに理由が示されています。
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で、返信がCONFIRMEDまたはCOMPLETEDの場合は、顧客がその返信を閲覧できることを意味します。FAILEDが表示された場合は、再試行する前にレスポンスのremarksを読み、掲載先が示した理由を確認してください。

4. 返信を編集する

POST /locations/reviews/respond/editには両方のIDが必要で、reviewIdはレビューのID、responseIdは手順2の返信のIDです。編集内容は再送信されるため、返信のinteractionStatusはCREATEDに戻り、掲載先に届くとeditedResponseはtrueになります。

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"    }  }}

編集が受け付けられると、statusは文字列"true"になります。手順3と同じ方法で新しい文面を確認してください。

5. 返信をアーカイブする

POST /locations/reviews/respond/archiveにはresponseIdのみを指定します。アーカイブすると、Listings APIのインタラクションのresponsesから返信が削除されます。GoogleまたはFacebookですでに公開されている返信は取り消されないため、アーカイブは投稿に失敗した下書きや別の下書きに置き換えられたものを整理するために使用し、公開済みの返信には編集を使用してください。

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"    }  }}

アーカイブ後は、レビューのresponseCountが減少し、respondedに残りの返信が反映されます。

6. Webhookで返信イベントを受信する

返信が投稿、編集、またはアーカイブされると、interaction.responseイベントが発生します。ペイロードはdata.interaction内にあり、type: "Response"とparent_idにレビューのIDが設定されているため、追加の呼び出しを行わずに自社のレコードと照合できます。interaction.reviewと同様に、そのlocation_idは正規化されておらず、nullになる場合があります。設定方法はWebhookでイベントに対応するに記載されています。

次の手順