Tek bir konum veya hesabınızın tamamı için yorumları getirin

Konumun son yorumlarını listeleyin, yanıtsız düşük puanlıları filtreleyin, imleçle sayfalarda gezinin, hesabı tarayın ve webhook ile bildirim alın.

API'de yorumlar interactions olarak adlandırılır. Google, Facebook veya Yelp'teki tüm yorumlar, konum başına tek bir listede ve hesap genelinde tek bir toplu sonuçta döndürülür; böylece tek bir entegrasyon, bağladığınız tüm kaynakları kapsar.

1. Tek bir konumun en son yorumlarını listeleyin

GET /locations/{locationId}/reviews, data.interactions adresindeki imleç tabanlı bir bağlantıdır. Sonuçlar en yeniden başlayarak döndürülür ve first varsayılan olarak 20'dir; bu nedenle tek bir çağrı hiçbir zaman geçmişin tamamını getirmez. Yol, base64 kimliğini veya düz sayıyı kabul eder.

Latest reviews
curl "https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/reviews?first=10" \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "interactions": {      "pageInfo": { "hasNextPage": true, "endCursor": "SW50ZXJhY3Rpb246MV8xNTU0..." },      "edges": [        {          "node": {            "id": "9e26d2a8-a6ed-42ea-8454-47d1c92ea841",            "source": "maps.google.com",            "content": "nice place for family together",            "authorName": "vaibhav nakate",            "rating": 5,            "date": "2019-04-02T22:11:13.036997+00:00",            "responded": false,            "responseCount": 0,            "canRespond": true,            "permalink": "https://maps.google.com/maps?cid=..."          },          "cursor": "SW50ZXJhY3Rpb246MV8xNTU0..."        }      ],      "totalCount": 425    }  }}

data.interactions.edges[].node değerini okuyun. id, base64 Relay kimliği değil, düz bir UUID'dir ve yanıt verirken ilettiğiniz değerdir. totalCount, bu sayfadaki değil, sonuç kümesinin tamamındaki eşleşme sayısıdır. canRespond, ilgili kaynağın API üzerinden işletme sahibi yanıtlarını kabul edip etmediğini belirtir.

2. Yanıtsız düşük puanlı yorumları filtreleyin

Dizi filtreleri, sorgu dizesinde JSON dizeleri olarak yer alır: ratingFilters=[1,2] bir ve iki yıldızlı yorumları, responseStatus=["PENDING"] ise işletme sahibi yanıtı olmayan yorumları seçer. Köşeli parantezler ve tırnak işaretleri URL kodlamasından geçirilmelidir; bu nedenle cURL örneğinde, her değeri kodlayıp sizin için URL'ye ekleyen -G, --data-urlencode ile birlikte kullanılır. Buna karşılık gelen sorgu dizesinin doğrudan yazılmış hali ratingFilters=%5B1%2C2%5D&responseStatus=%5B%22PENDING%22%5D şeklindedir.

Unanswered 1-2 stars
curl -G "https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/reviews" \-H "Authorization: API $LISTINGSAPI_KEY" \--data-urlencode 'ratingFilters=[1,2]' \--data-urlencode 'responseStatus=["PENDING"]' \--data-urlencode 'sortOrder=["NEWEST_FIRST"]' \--data-urlencode 'first=50'

Birlikte kullanabileceğiniz filtreler:

ParametreDeğerlerNotlar
siteUrls["maps.google.com"], ["facebook.com"], ["yelp.com"]Bir hesabın yorum kaynaklarını listeleyin bölümünden alınan ana makine adları.
ratingFilters[1,2] ve benzerleriSeçilecek yıldız puanları.
responseStatus["PENDING"] veya ["RESPONDED"]İşletme sahibi yanıtının bulunup bulunmadığı.
sortOrder["NEWEST_FIRST"], ["OLDEST_FIRST"], ["LAST_RESPONDED"]Varsayılan sıralama en yeniden başlar.
startDate, endDateYYYY-MM-DDJSON değil, düz dizeler.
searchStringserbest metinYorum gövdesinde tam metin araması.

3. İmleçlerle sayfalar arasında ilerleyin

pageInfo.endCursor değerini after olarak geri gönderin. hasNextPage değeri false olduğunda veya bir sayfa boş bir edges dizisi döndürdüğünde durun; sınırın en eski yoruma denk gelmesi durumunda ardından bir boş sayfa gelir. Her iki SDK da sayfaları sizin için okuyabilir.

Next page
curl "https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/reviews?first=50&after=SW50ZXJhY3Rpb246MV8xNTU0..." \-H "Authorization: API $LISTINGSAPI_KEY"

Her istek, istek hızı limitinizden düşülür ve 425 yorumu olan bir konum için first=50 kullanıldığında dokuz çağrı gerekir. 429 durumunda, sonraki sayfayı istemeden önce Retry-After uyarınca bekleyin. Zamanlanmış bir senkronizasyon için geçmişi yeniden okumak yerine çalıştırmanın kapsamını startDate ve endDate ile sınırlayın. İstek hızı limitleri bölümüne bakın.

4. Toplu sonuçla hesabın tamamını tarayın

GET /rollup_interactions, anahtarın erişebildiği tüm konumlardaki aynı düğümleri data.rollupInteractions adresinde döndürür ve her düğümde bir locationId bulunur. Aynı filtrelere ek olarak, varsayılan değeri all olan tag parametresini kabul eder. Konum filtresi yoktur; locationId değerine göre gruplamayı kendiniz yapın. Henüz iki SDK'dan hiçbiri bu uç nokta için bir sarmalayıcı sağlamaz; bu nedenle SDK örnekleri bu uç noktayı requests ve fetch ile çağırır.

Account-wide pending
curl -G "https://listingsapi.com/api/v4/rollup_interactions" \-H "Authorization: API $LISTINGSAPI_KEY" \--data-urlencode 'responseStatus=["PENDING"]' \--data-urlencode 'sortOrder=["NEWEST_FIRST"]' \--data-urlencode 'first=50'

Her düğüm, 1. adımdakiyle aynı yapıdadır ve ek olarak mağazanın databaseId değeri olan sayısal bir locationId içerir. Toplu sonucun pageInfo alanı endCursor içermeyebilir; bu nedenle son kenarın cursor değerini after olarak alın; iki değer eşdeğerdir.

5. Kimliğe göre tüm ayrıntıları getirin

Kaydettiğiniz kimlikler varsa GET /reviewDetails, sayfalama yapmadan güncel kopyaları döndürür. interactionIds, diğer filtreler gibi URL kodlamasından geçirilmiş bir JSON dizisidir. Yanıt, data.interactionDetails.interactions konumunda düz bir dizidir ve her interaction kendi responses alanını içerir.

Details by id
curl -G "https://listingsapi.com/api/v4/reviewDetails" \-H "Authorization: API $LISTINGSAPI_KEY" \--data-urlencode 'interactionIds=["9e26d2a8-a6ed-42ea-8454-47d1c92ea841"]'
JSON
{  "data": {    "interactionDetails": {      "interactions": [        {          "id": "9e26d2a8-a6ed-42ea-8454-47d1c92ea841",          "responded": true,          "responseCount": 1,          "responses": [            {              "id": "2090753a-ece6-4837-8336-8494ad308523",              "content": "Thank you so much for the kind words!",              "interactionStatus": "CONFIRMED"            }          ]        }      ]    }  }}

Başka bir hesaba ait kimlik kullanıldığında interactionDetails: null ve bir SY90001 hatasıyla birlikte 200 döndürülür; bu nedenle dizinle erişmeden önce null olup olmadığını kontrol edin.

6. Düzenli sorgulama yerine webhook olaylarını alın

Bir webhook URL'si yapılandırıldığında, bir yorum sisteme alındığında veya değiştiğinde interaction.review olayı tetiklenir. Yorum alanları doğrudan data altında değil, data.interaction altındadır ve data.interaction.id, listenin döndürdüğü UUID ile aynıdır.

Dikkat edilmesi gereken iki nokta. Bu olaydaki location_id normalleştirilmeden iletilir: sayısal bir dize veya null olabilir, bu nedenle türüne güvenmek yerine dönüştürmeyi kendiniz yapın. Ayrıca yorum her değiştiğinde aynı id yeniden gelir, bu nedenle olayı tek seferlik bir ekleme olarak değil, yorumu yeniden okumak için bir sinyal olarak ele alın. İletim yalnızca bir kez denenir ve yeniden deneme yapılmaz, bu nedenle yedek önlem olarak 4. adımdaki periyodik taramayı sürdürün. Kurulum, Webhook'larla olaylara tepki verme bölümünde açıklanmıştır.

Sonraki adımlar