更新地点的详细信息和营业时间
更改联系信息,发布包含一次性覆盖设置的完整每周营业时间表,标记临时停业,设置 Google 类别,并读取更新后的信息。
POST /locations/update 执行部分更新。所有字段都放在 input 下,input.id 是唯一的必填字段,省略的字段会保留当前值。以下各节仅更改 JSON 请求体。
1. 更新电话号码和网站
发送 id 以及需要更改的字段。发布平台会将 bizUrl 发布为网站 URL。Python SDK 的 locations.update() 接受一个使用 camelCase 键的 dict,Node SDK 的 updateLocation() 接受相同的对象。
curl -X POST https://listingsapi.com/api/v4/locations/update \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "id": "TG9jYXRpb246MTgwMDI4OQ==", "phone": "5125550199", "bizUrl": "https://acmekitchen.example.com" }}'{ "data": { "updateLocation": { "success": true, "errors": null, "location": { "id": "TG9jYXRpb246MTgwMDI4OQ==", "databaseId": 1800289, "name": "Jenny Home", "phone": "5125550199", "status": "APPROVED" } } }}验证失败时仍会返回 HTTP 200,同时返回 success: false,并在 data.updateLocation.errors 中提供原因,因此请检查 success,而不是状态码。在这种情况下,两个 SDK 都会抛出 ValidationError。
2. 设置每周营业时间
businessHours 是一个数组,一周中的每一天对应一个条目。请始终发送全部 7 个条目,并使用 type: "CLOSED" 和空的 slots 数组标记不营业的日期,而不是将其省略。同一天内的时间段不得重叠。
curl -X POST https://listingsapi.com/api/v4/locations/update \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "id": "TG9jYXRpb246MTgwMDI4OQ==", "businessHours": [ { "day": "MONDAY", "type": "OPEN", "slots": [{ "start": "09:00am", "end": "05:00pm" }] }, { "day": "TUESDAY", "type": "OPEN", "slots": [{ "start": "09:00am", "end": "05:00pm" }] }, { "day": "WEDNESDAY", "type": "OPEN", "slots": [{ "start": "09:00am", "end": "05:00pm" }] }, { "day": "THURSDAY", "type": "OPEN", "slots": [{ "start": "09:00am", "end": "05:00pm" }] }, { "day": "FRIDAY", "type": "OPEN", "slots": [{ "start": "09:00am", "end": "05:00pm" }] }, { "day": "SATURDAY", "type": "OPEN", "slots": [{ "start": "10:00am", "end": "02:00pm" }] }, { "day": "SUNDAY", "type": "CLOSED", "slots": [] } ] }}'对于节假日,请向同一数组追加一个 SPECIAL 条目。它仅覆盖该日期的设置,不会更改每周的常规安排:
{ "day": "SPECIAL", "type": "CLOSED", "specialDate": "2026-12-25", "slots": [] }3. 标记临时停业或隐藏地址
temporarilyClosed: true 将商家标记为停业,并停止发布其营业时间。将其设为 false 可恢复营业。对于服务区域商家,请设置 hideAddress: true:ListingsAPI 会在地点记录中保留地址,但不会将其提交给发布平台。
curl -X POST https://listingsapi.com/api/v4/locations/update \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "id": "TG9jYXRpb246MTgwMDI4OQ==", "temporarilyClosed": true } }'4. 设置 Google 类别
Google Business Profile 有自己的类别分类体系,与数值形式的 subCategoryId 相互独立。primaryGbpSiteCategoryId 接受一个 GCID,例如 gcid:restaurant,而 additionalGbpSiteCategoryIds 接受更多 GCID。两者都按 countryIso 解析,因此请在同一次调用中发送国家信息。
curl -X POST https://listingsapi.com/api/v4/locations/update \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "id": "TG9jYXRpb246MTgwMDI4OQ==", "countryIso": "US", "primaryGbpSiteCategoryId": "gcid:restaurant", "additionalGbpSiteCategoryIds": ["gcid:pizza_restaurant", "gcid:italian_restaurant"] }}'请勿将它们与 additionalCategoryIds 混淆,后者接受子类别端点返回的整数 databaseId 值。请参阅查询国家、州和类别。
5. 读取更新后的地点信息
GET /locations-by-ids 返回一个或多个 base64 ID 对应的完整记录,这些 ID 以 JSON 数组的形式通过 ids 查询参数传入。请将 phone、businessHours 和 temporarilyClosed 与您发送的值进行比较。
curl -G https://listingsapi.com/api/v4/locations-by-ids \--data-urlencode 'ids=["TG9jYXRpb246MTgwMDI4OQ=="]' \-H "Authorization: API $LISTINGSAPI_KEY"{ "data": { "getLocationsByIds": [ { "id": "TG9jYXRpb246MTgwMDI4OQ==", "databaseId": 1800289, "name": "Jenny Home", "phone": "5125550199", "hideAddress": false, "temporarilyClosed": true } ] }}您的账户中不存在的 ID 会从数组中移除,且不会报错,因此请将返回的数量与您请求的数量进行比较。
如果配置了 webhook,则会触发一个 profile.updated 事件。该事件采用前沿触发的防抖机制,每个地点每 60 秒最多投递一次:该时间窗口内的后续编辑会被合并,而 changed_fields 仅描述开启该窗口的那次编辑。请在事件到达时读取地点信息,并在时间窗口结束后再次读取。
后续步骤
- 上传徽标、封面和照片:为您刚刚更新的记录添加图片。
- 查找地点并归档您不再管理的地点:按门店代码搜索,并归档已停业的分店。
- 更新地点和按 ID 获取地点:参考页面,涵盖地点操作链接和所有可写字段。