등록 정보 오류 찾기 및 수정
사업장의 등록 정보에서 주의가 필요한 행만 필터링하고, 게시 플랫폼이 제공한 사유를 확인한 뒤, 해당하는 수정 조치를 적용하고, 안전하게 다시 폴링하고, 계정 전체를 점검합니다.
대부분의 등록 정보는 별도의 조치 없이 동기화됩니다. 동기화되지 않는 등록 정보는 displayStatus와 syncIssue에 그 이유가 표시되며, 거의 모든 원인에 5가지 수정 방법 중 하나를 적용할 수 있습니다. 이 가이드에서는 원본 등록 정보 행을 확인하는 단계부터 차단된 항목과 필요한 조치를 정리한 계정별 보고서를 작성하는 단계까지 설명합니다.
1. 등록 정보를 가져와 문제가 있는 행만 남기기
프리미엄 등록 정보를 가져와 정상인 행을 모두 제외합니다. actionRequired가 true이거나 syncStatus가 FAILED, CANNOT_SUBMIT 또는 REQUIRING_ACTION인 행은 주의가 필요합니다. IN_PROGRESS와 PENDING_APPROVAL은 오류가 아니라 게시 플랫폼의 대기열에 있음을 나타냅니다.
curl -s https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/listings/premium \-H "Authorization: API $LISTINGSAPI_KEY" \| jq '[.data.listingsForLocation[] | select(.actionRequired or (.syncStatus | IN("FAILED", "CANNOT_SUBMIT", "REQUIRING_ACTION")))]'{ "data": { "listingsForLocation": [ { "site": { "name": "Google Maps", "url": "maps.google.com" }, "syncStatus": "REQUIRING_ACTION", "displayStatus": "Connect your account to sync the listing", "actionRequired": true, "syncIssue": null }, { "site": { "name": "Local Mint", "url": "localmint.com" }, "syncStatus": "FAILED", "displayStatus": "Partner experiencing issues; awaiting response", "actionRequired": false, "syncIssue": "Publisher requires website URL" } ] }}2. 사유 확인
2개의 필드가 문제가 있는 행을 설명합니다. displayStatus는 플랫폼이 해당 행의 현재 상태를 요약한 내용입니다. syncIssue는 게시 플랫폼이 사유를 제공한 경우 표시되는 해당 게시 플랫폼의 사유입니다. 둘 다 확인합니다. 위 예시에서 Local Mint의 displayStatus는 파트너에게 문제가 있다고 설명하지만, syncIssue는 웹사이트 누락이라는 실제 원인을 알려 줍니다.
모든 사업장 조회에서 읽을 때마다 사업장 자체에도 createErrors 배열이 포함됩니다. 이 배열에는 레코드를 생성할 때 발견된 유효성 검사 문제가 들어 있으며, syncIssue 없이 행이 실패할 때 추가로 확인할 수 있는 곳입니다.
3. 원인에 맞는 수정 방법 찾기
거의 모든 차단된 행은 몇 가지 원인에서 비롯됩니다.
국가 및 주소 숨김 규칙을 확인하려면 요금제 사이트 목록을 한 번 가져와 캐시합니다. 이 목록은 페이지로 나뉘지 않으며 거의 변경되지 않습니다.
curl -s https://listingsapi.com/api/v4/plan-sites \-H "Authorization: API $LISTINGSAPI_KEY" \| jq '.data.planSites[] | select(.name == "Yelp") | {name, supportedCountries, hideAddressSupportedCountries}'{ "name": "Yelp", "supportedCountries": ["US", "CA", "GB", "DE", "FR"], "hideAddressSupportedCountries": ["US", "CA", "AU", "GB"]}사업장의 countryIso가 supportedCountries에 없으면 해당 게시 플랫폼의 행은 CANNOT_SUBMIT 상태에서 절대 벗어나지 않습니다. 재시도하는 대신 등록 범위 수치에서 제외합니다.
4. 수정 후 다시 폴링
사업장을 업데이트하면 영향을 받는 게시 플랫폼에 새로 제출됩니다. 행은 FAILED 또는 REQUIRING_ACTION에서 다시 IN_PROGRESS로 이동한 다음, 게시 플랫폼이 수락하면 SYNCED로 이동합니다. 게시 플랫폼의 처리에는 몇 분에서 몇 주까지 걸리므로, 초 단위가 아닌 시간 단위의 일정으로 폴링합니다.
모든 폴링은 요청 빈도 제한에 산입됩니다. 429가 발생하면 Retry-After를 읽고 해당 초 수만큼 기다립니다. SDK는 동일한 값을 포함한 RateLimitError를 발생시킵니다.
# -D - prints response headers so you can see Retry-After on a 429curl -s -D - https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/listings/premium \-H "Authorization: API $LISTINGSAPI_KEY" \| grep -i -E "^HTTP|^Retry-After"lastUpdate가 더 최신 값으로 갱신되는 것은 syncStatus가 변경되기 전이라도 게시 플랫폼이 새 제출을 처리했다는 신호입니다. 웹훅을 사용한다면 listing.submission 이벤트가 이 반복 처리를 대체합니다.
5. 계정 전체 점검 실행
계정 전체에서 차단된 모든 행을 찾으려면 GET /locations(커서 기반 커넥션: first, after, edges[].node)의 페이지를 순회하고 사업장마다 프리미엄 엔드포인트를 1번 호출합니다. 문제가 있는 행을 사업장을 키로 하는 하나의 보고서로 모읍니다. Python SDK는 auto_paging_iter()로 커서를 따라가며, Node SDK는 fetchAll: true로 같은 작업을 수행합니다. 예제에서는 4단계의 백오프 헬퍼를 재사용합니다.
# One page of locations, then one listings call per location.# Repeat with &after=<pageInfo.endCursor> while hasNextPage is true.curl -s "https://listingsapi.com/api/v4/locations?first=50" \-H "Authorization: API $LISTINGSAPI_KEY" \| jq -r '.data.allLocations.edges[].node.id' \| while read -r id; do curl -s "https://listingsapi.com/api/v4/locations/$id/listings/premium" \ -H "Authorization: API $LISTINGSAPI_KEY" \ | jq --arg id "$id" '[.data.listingsForLocation[] | select(.syncStatus != "SYNCED" and .syncStatus != "COMPLETED") | {location: $id, site: .site.name, status: .syncStatus, issue: .syncIssue}]' sleep 6 # stay under 10 requests a minute on Launch done이 보고서는 아직 처리 중인 행과 실제로 차단된 행을 함께 묶습니다. 다른 사람에게 전달하기 전에 3단계의 표에 따라 분류합니다. IN_PROGRESS와 PENDING_APPROVAL은 기다려야 하고, REQUIRING_ACTION은 연결이 필요하며, FAILED는 사업장에 필드가 필요합니다.
다음 단계
- 등록 정보 상태 및 실제 링크 확인: 동일한 데이터에서 정상 상태인 부분을 확인합니다.
- 사업장 업데이트:
bizUrl, 설명, 카테고리를 설정합니다. - Google 연결 및 사업장 가져오기 및 Facebook 페이지 연결:
REQUIRING_ACTION행의 문제를 해결합니다. - 참조: 프리미엄 등록 정보 조회, 요금제 사이트 목록 조회, 모든 사업장 조회, 오류 코드.