OpenTable 的拒绝现在使用原生错误码
- 在由 OpenTable 管理的门店,OpenTable 给出原因的拒绝,现在会返回与 Maple 原生门店相同的错误码和 Maple 自己的表述,而不再是带有 OpenTable 原文的
422 provider_rejected。时间太近返回422 outside_booking_window(details.reason: inside_min_lead);预订已开始或即将开始返回409 not_changeable/409 not_cancellable(details.reason: outside_policy_window);需要信用卡的时段返回422 payment_instrument_required。其他拒绝仍为provider_rejected。见错误。
仅修改预订备注
POST /v1/bookings/{bookingId}/change可以只传notes而不传slot_token,仅修改客人的备注:预订的时间、人数和桌位保持不变,因此无需报价。两个字段都不传会返回400 change_required。见修改或取消。
特色体验
- 在提供特色体验(固定套餐、品鉴、需购票的场次)的门店,可用时段中会按开始时间顺序,与标准时段一并列出这些体验。每个
booking_slot都有experience(id、name、description、prepayment_required),标准预订则为null。experience_id可将搜索限定为某一项体验。OpenTable 门店提供此功能;booking_profile.capabilities.experiences说明某门店是否提供。 - 体验时段通过常规的保留与预订流程预订,
Booking资源(及其 webhook 负载)带有experience(id、name),标准预订则为null。修改时会保留该体验:改为其他体验的时段,或在体验与标准桌位之间切换,会返回422 capability_unsupported。 - 保留一个要求预先付款的体验时段会返回
422 payment_instrument_required:Maple 目前还无法收取付款。见特色体验。
OpenTable 门店的已入座预订
- 在由 OpenTable 管理的门店,修改或取消一个客人已入座或已结束的预订时,现在会在 Maple 调用 OpenTable 之前就返回
409 not_changeable或409 not_cancellable(原因为in_service或terminal_state),与 Maple 原生门店的行为一致。
门店可控制客人短信
- 餐厅经理现在可以为其门店关闭 Maple 的客人短信。已关闭的门店,
POST /v1/waitlist_entries/{entryId}/notify会返回422 guest_messaging_unavailable,与尚未开通客人短信的门店一致。请改为安排入座或移除该组客人。见管理候位。 - 配置发布后,经理也可以自行开启 Maple 预订,因此
booking_profile.enabled可能在 Maple 不介入的情况下发生变化。请在提供可用时段之前继续检查它。
配置修订版本
- 预订配置带有
revision。发布时带上expected_revision,如果餐厅经理在您读取之后又在 Maple 控制台中编辑过配置,您会收到409 stale_configuration,而不是覆盖他们的修改;null表示预期尚无配置。不带它发布仍会无条件替换配置。见发布时不覆盖门店的修改。
每个用餐区域都可预订
- Maple 原生的可用时段现在会在每个已配置的区域安排客人入座,而不只是第一个区域:先尝试第一个区域,再按
poolId顺序尝试其他区域,并在第一个有空桌或可拼桌的区域预订。只有其他区域才能容纳的组(例如露台的大桌)现在也会被提供。人数上下限涵盖所有区域。见发布规则。
按电话或确认码查找预订
GET /v1/bookings新增phone和confirmation_code,用于查找客人询问的预订。两者都需要location_id;电话号码会先被规范化。不带时间窗口时,查找会匹配任意时间的预订,无论是原生门店还是由第三方管理的门店。不带location_id的查找会返回400 location_required。见查找客人的预订。
预订停订日期
GET /v1/locations/{locationId}/booking_profile会返回门店的blackout_dates:不接受预订的时间窗口。PUT /v1/locations/{locationId}/booking_blackouts在bookings:configure权限下替换该列表,原生门店和第三方管理的门店均可。把配置中的blackout_dates_revision作为expected_revision发送,如果门店有更新的修改,您会收到409 stale_blackout_dates,而不是覆盖它们。无效的范围会返回400 invalid_blackout_dates。见停订日期。
验证错误与反馈提示
- 路径参数、查询、请求头或请求体未通过验证的请求,现在会返回
400和DeveloperApiBadRequest响应体(code: "invalid_request"),并指明出错的字段,此前返回的是空响应体。 - 每个错误响应体都带有一行
feedback,指向POST /v1/feedback。见错误。
反馈
POST /v1/feedback用于报告 bug、缺失的功能、错误的文档或不清楚的错误信息,并引用相关请求的 ID。只有kind和summary是必填项。Maple 无法与您最近的请求匹配的 ID 会按原样保留,不会被拒绝。任何凭证都可以发送;不需要权限范围。其契约不会被破坏:字段只会新增,不会删除或改为必填。见反馈。
散客入座与门店取消
候位
配送区域
- 已连接门店的配送区域增删改查:在
delivery_zones:read/delivery_zones:write下列出、创建、获取、更新和删除区域,范围限定为您应用的有效连接。 POST /v1/locations/{locationId}/delivery_zones/check报告某个坐标是否可配送,并返回匹配的区域和费用。见管理配送区域。
预订:按门店逐步开放
- 预订配置、有界的可用时段搜索、保留,以及预订的列表/获取/创建/修改/取消。
bookings:manage下的门店操作,带版本检查和标明应用来源的审计记录。bookings:configure下的原生配置发布/读取,保留现有菜单。- 按需读取实时楼面、八种预订 webhook 类型,以及可选的预订沙盒开通。
- 应用持有的原生/第三方保留、每个应用/门店原子化的十个保留配额,以及带
Retry-After的独立预订请求/搜索限流。 - 持久化的第三方写入声明、版本预留、稳定的请求标识,以及在写入结果不确定或镜像失败后的对账。重试规则见接受预订。
配送地址、订单补齐和更密集的 webhook 重试
- 配送地址:订单资源和
order.notification负载现在带有delivery_address(街道、单元、城市、州、邮编,以及顾客在notes中的配送说明)。自取订单和没有已存地址的外送订单为null。见接收订单。 - 订单补齐:
GET /v1/orders支持since、starting_after和limit。使用since时,结果从一个不含端点的检查点开始,按从旧到新排序,让您在停机后逐页处理积压。见列表。 - 订单重发:
POST /v1/orders/{orderId}/resend为一个错过 webhook 的有效订单重新发布一条order.notification,不改变订单状态。需要webhooks:write;终态订单无法重发。 - 更密集的 webhook 重试:失败的推送现在最多重试 9 次(此前为 6 次),前几次尝试落在六分钟的 POS 决定窗口内。见重试与自动停用。
Developer API 上线
Maple Developer API 现已面向 POS 和平台合作伙伴开放。
- 身份验证:带权限范围的 API 密钥(沙盒使用
mpk_test_…,生产使用mpk_live_…)。 - 门店与连接:列出已授权的门店,并作为门店的订单接收方进行连接。
- 订单:接收
order.notification,读取完整订单,并通过 accept / deny / ready / complete / cancel / status 作出决定。可选的预先验证。 - 菜单:以一份以您自己的外部 ID 为键的 JSON 文档发布门店的完整菜单,并可读回。
- Webhooks:订阅事件类型,验证经 HMAC 签名的推送,并从事件记录重放。