新增地點
使用發布平台所需的欄位建立地點、處理驗證錯誤,並確認地點已排入提交佇列。
商家資訊、評論、貼文和分析資料都以地點 ID 為索引。POST /api/v4/locations 會建立地點,並為您方案中的每個發布平台各排入一筆商家資訊。
1. 準備必填欄位
有 10 個必填欄位。服務區域型商家也必須傳送完整地址:使用 hideAddress: true 時,ListingsAPI 會儲存地址,但不會將地址提交至發布平台。發布平台會將省略的選填欄位顯示為空白,因此請傳送您擁有的所有資料。
2. 建立地點
POST /api/v4/locations 接收 JSON 請求主體中 input 物件內的欄位。Python SDK 方法 locations.add() 會以關鍵字引數接收相同欄位,並在傳送請求前驗證必填欄位。Node SDK 方法 createLocation() 則直接接收 camelCase 物件。
curl -X POST https://listingsapi.com/api/v4/locations \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "name": "Acme Kitchen", "storeId": "ACME-NYC-001", "description": "Acme Kitchen is a family-owned neighborhood restaurant in downtown New York serving wood-fired pizza, hand-rolled pasta, and a short seasonal menu built around produce from nearby farms. Open for lunch and dinner seven days a week, with takeout and delivery available.", "street": "123 Jump Street", "city": "New York", "stateIso": "NY", "postalCode": "10013", "countryIso": "US", "phone": "6443859313", "bizUrl": "https://acmekitchen.example.com", "subCategoryId": 1432, "businessHours": [ { "day": "MONDAY", "type": "OPEN", "slots": [{ "start": "11:00am", "end": "10:00pm" }] }, { "day": "TUESDAY", "type": "OPEN", "slots": [{ "start": "11:00am", "end": "10:00pm" }] }, { "day": "WEDNESDAY", "type": "OPEN", "slots": [{ "start": "11:00am", "end": "10:00pm" }] }, { "day": "THURSDAY", "type": "OPEN", "slots": [{ "start": "11:00am", "end": "10:00pm" }] }, { "day": "FRIDAY", "type": "OPEN", "slots": [{ "start": "11:00am", "end": "11:00pm" }] }, { "day": "SATURDAY", "type": "OPEN", "slots": [{ "start": "12:00pm", "end": "11:00pm" }] }, { "day": "SUNDAY", "type": "CLOSED", "slots": [] } ] }}'3. 閱讀回應
建立成功時會回傳 success: true,並在 data.createLocation.location 中回傳新地點。請保留這兩個識別碼:id 是後續每次寫入所需的 base64 值,而 databaseId 是儀表板和 webhook 承載資料中顯示的數值。
{ "data": { "createLocation": { "success": true, "errors": null, "location": { "id": "TG9jYXRpb246MTgwMDI5MA==", "databaseId": 1800290, "storeId": "ACME-NYC-001", "name": "Acme Kitchen", "city": "New York", "stateIso": "NY", "countryIso": "US", "status": "PENDING" } } }}地點進行驗證並排入佇列期間,status 為 PENDING。狀態會自行往下更新,您不需要再呼叫 API。
4. 處理驗證錯誤
建立作業可能在兩個環節失敗。請求格式錯誤或金鑰無效時,會回傳 4xx,其中包含頂層 errors 陣列。若請求格式正確,但有欄位遭 API 拒絕,則會回傳 200,其中包含 success: false,並在 data.createLocation.errors 中提供問題詳情,因此請檢查每次寫入的回應主體,而不只是狀態碼。
{ "data": { "createLocation": { "success": false, "errors": [ { "code": "SY10005", "message": "SY10005: description must be at least 200 characters", "path": ["input", "description"] } ], "location": null } }}兩個 SDK 都會在失敗時拋出例外。Python 的 locations.add() 會在本機檢查必填欄位,並在傳送請求前拋出 ValidationError。當 API 拒絕輸入時,Node 的 createLocation() 會拋出 ValidationError,這就是上方範例未檢查成功旗標的原因。
您最常遇到的代碼:
5. 確認提交程序已開始
建立地點後,系統會為您方案中的每個發布平台各排入一筆商家資訊。每筆商家資訊的初始狀態為 AVAILABLE 或 IN_PROGRESS,發布平台接受後,狀態就會變更為 SYNCED,並附有 listingUrl。
curl https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI5MA==/listings/premium \-H "Authorization: API $LISTINGSAPI_KEY"設定 webhook 後,就不需要輪詢。記錄存在時會觸發 profile.created 事件,而各發布平台的狀態變更時,都會觸發 listing.submission 事件。
後續步驟
- 更新地點:變更營業時間、標記暫時停業、新增 Google 類別。
- 上傳地點相片:標誌、封面和相簿圖片。
- 連結 Google 並匯入地點:連結 Google Business Profile,讓 Google 商家資訊、評論和貼文開始同步。
- 連結 Apple Business Connect:透過業主已驗證的 Apple Business 帳戶發布至 Apple Maps,或在業主沒有此類帳戶時,透過 ListingsAPI 帳戶發布。
- 查看商家資訊狀態和已上線連結:追蹤您剛排入佇列的提交項目。