리뷰에 답글을 작성한 후 답글 수정 또는 보관하기

소유자 답글을 허용하는 리뷰를 찾아 답글을 게시하고, 게시 플랫폼에 전달되었는지 확인한 다음, 문구를 수정하거나 답글을 보관합니다.

소유자 답글은 API를 통해 게시 플랫폼에 대신 게시됩니다. API는 답글을 즉시 수락하고 비동기적으로 전달합니다. 따라서 답글을 작성할 수 있는 리뷰를 선택하고 답글을 게시한 다음 다시 조회하여 확인하는 순서로 진행합니다.

1. 답글을 작성할 수 있는 리뷰 선택하기

사업장의 리뷰를 조회하고 canRespond가 true이고 responded가 false인 리뷰를 추립니다. responseStatus=["PENDING"] 필터는 두 번째 조건을 서버 측에서 확인하며, 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. 웹훅으로 답글 이벤트 수신하기

답글이 게시, 수정 또는 보관되면 interaction.response 이벤트가 발생합니다. 페이로드는 data.interaction 아래에 있으며 type: "Response"가 지정되고 parent_id가 리뷰의 id로 설정되므로 추가 호출 없이 자체 레코드와 연결할 수 있습니다. interaction.review와 마찬가지로 해당 location_id는 정규화되지 않으며 null일 수 있습니다. 설정 방법은 웹훅으로 이벤트에 대응하기에 있습니다.

다음 단계