Aggiungi una sede
Crea una sede con i campi richiesti dalle piattaforme di pubblicazione, gestisci gli errori di validazione e verifica che sia in coda per l'invio.
Schede, recensioni, post e dati analitici sono tutti associati all'ID di una sede. POST /api/v4/locations crea la sede e mette in coda una scheda per ogni piattaforma di pubblicazione inclusa nel tuo piano.
1. Raccogli i campi obbligatori
Dieci campi sono obbligatori. Anche un'attività che serve un'area geografica deve inviare l'indirizzo completo: con hideAddress: true, ListingsAPI memorizza l'indirizzo ma non lo invia alle piattaforme di pubblicazione. Le piattaforme di pubblicazione mostrano come vuoti i campi facoltativi omessi, quindi invia tutte le informazioni che hai.
2. Crea la sede
POST /api/v4/locations accetta i campi in un oggetto input nel corpo JSON della richiesta. Il metodo locations.add() del Python SDK accetta gli stessi campi come argomenti con nome e valida quelli obbligatori prima di inviare la richiesta. Il metodo createLocation() del Node SDK accetta direttamente l'oggetto 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. Leggi la risposta
Una creazione riuscita restituisce success: true e la nuova sede in data.createLocation.location. Conserva entrambi gli identificatori: id è il valore base64 che ogni successiva operazione di scrittura accetta e databaseId è il valore numerico mostrato nelle dashboard e nei payload dei 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 mentre la sede viene validata e messa in coda. Passa allo stato successivo senza un'ulteriore chiamata API.
4. Gestisci gli errori di validazione
Una creazione può fallire in 2 punti. Una richiesta malformata o una chiave non valida restituisce 4xx con un array errors al livello principale. Una richiesta ben formata con un campo rifiutato dall'API restituisce 200 con success: false e il problema all'interno di data.createLocation.errors, quindi controlla il corpo della risposta di ogni operazione di scrittura, non solo il codice di stato.
{ "data": { "createLocation": { "success": false, "errors": [ { "code": "SY10005", "message": "SY10005: description must be at least 200 characters", "path": ["input", "description"] } ], "location": null } }}Entrambi gli SDK sollevano un'eccezione in caso di errore. locations.add() di Python controlla localmente i campi obbligatori e solleva ValidationError prima di inviare la richiesta. createLocation() di Node solleva ValidationError quando l'API rifiuta i dati in ingresso, motivo per cui l'esempio precedente non controlla alcun flag di successo.
I codici che incontrerai più spesso:
5. Verifica che l'invio sia iniziato
La creazione della sede mette in coda una scheda per ogni piattaforma di pubblicazione inclusa nel tuo piano. Ogni scheda parte da AVAILABLE o IN_PROGRESS e passa a SYNCED con un listingUrl una volta che la piattaforma di pubblicazione l'ha accettata.
curl https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI5MA==/listings/premium \-H "Authorization: API $LISTINGSAPI_KEY"Con i webhook configurati, non è necessario effettuare polling. Un evento profile.created viene generato quando il record esiste e un evento listing.submission viene generato per ogni piattaforma di pubblicazione al variare del relativo stato.
Passaggi successivi
- Aggiorna una sede: modifica gli orari, indica una chiusura temporanea, aggiungi categorie Google.
- Carica le foto della sede: logo, copertina e immagini della galleria.
- Collega Google e importa le sedi: collega il Google Business Profile per avviare la sincronizzazione di schede, recensioni e post di Google.
- Collega Apple Business Connect: pubblica su Apple Maps tramite l'account Apple Business verificato del proprietario oppure tramite l'account ListingsAPI se il proprietario non ne ha uno.
- Controlla lo stato delle schede e i link alle schede pubblicate: monitora gli invii che hai appena messo in coda.