For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
主导航

本地服务“获取报价”转化规范

将本地服务报价请求插件集成到 ChatGPT 转化流程中的接入约定。

ChatGPT 中的本地服务“获取报价”转化插件目前处于测试阶段, 正在与获准参与的合作伙伴一起测试。如需申请使用权限,请填写 ChatGPT 商家表单

目的

对于请求报价等用户意向明确的本地服务使用场景, ChatGPT 可以直接调用合作伙伴插件。

要启用此流程,请提供可标识您所提供服务的本地商家数据, 并提供一个用于打开报价请求小组件的 MCP 工具。

如果您希望构建符合此规范的插件,请通过 ChatGPT 商家表单申请使用权限。

用户体验

当用户搜索符合条件的本地商家时,商家卡片或 侧边栏可以显示 获取报价 按钮。选择该按钮后, ChatGPT 会在模态窗口中打开提供商的报价请求小组件。

仅当商家具有符合条件的服务提供商, 且该提供商已配置合作伙伴插件时,ChatGPT 才会显示该按钮。

必须遵守的接入约定

注册一个名为 request_service 的 MCP 工具, 并将 ui://widget/request-service.html 设为其小组件资源。 当用户选择 获取报价时,ChatGPT 会以 modal 显示模式启动小组件, 并发送提供商的商家 ID:

const launcherTool = {
  name: "request_service",
  _meta: {
    ui: {
      resourceUri: "ui://widget/request-service.html",
    },
  },
};

const launcherInput = {
  business_id: "biz_123",
};

对于小组件直接调用的所有辅助工具,均需设置 _meta["openai/widgetAccessible"] = true。 此元数据适用于小组件可访问的辅助工具, 不能仅因启动器会打开小组件,就认为启动器也需要设置它。

启动器的输入 business_id 必须使用 匹配的服务提供商记录中的 provider_business_id。此值可以不同于 包含该服务提供商记录的本地商家记录的 ID。

商家数据源要求

商家数据源是您向 ChatGPT 提供的本地商家记录集合,支持分页。 ChatGPT 会为这些记录建立索引以供搜索, 并根据其中的服务提供商数据判断商家是否支持 获取报价

商家必填字段

每条商家记录必须包含:

  • id:稳定的商家 ID,在您的数据源中唯一。
  • name:商家名称。
  • address:结构化地址或便于人阅读的格式化地址。
  • location:包含 latitudelongitude 的对象。
  • phone_number:商家电话号码,建议使用 E.164 格式。
  • website_url:商家网站。
  • platform_url:该商家在您平台上的详情页规范 URL。

报价请求操作

对于每个接受报价请求的商家,添加一个 service_providers 数组, 其中包含一条具有以下字段的记录:

  • provider:您的提供商名称,必须与已配置的合作伙伴插件匹配。
  • provider_business_id:您为该商家指定的非空标识符。 ChatGPT 会将此值作为 business_id 传递给 request_service
  • action_type:对于报价请求,将此字段设为 request_a_quote
  • provider_action_url:用于您的报价请求操作的 有效 HTTP 或 HTTPS 绝对 URL。
  • display_name:由提供商提供的显示名称,可选。

分页列表端点

提供一个列表端点(例如 GET /v1/businesses), 并支持以下一种分页方式:

  • pagepage_size
  • offsetlimit
  • 不透明的 next_page_token

接受可选的 changes_token,用于标识上一次同步的检查点。 返回 checksum 以表明数据源是否发生变化, 同时返回当前页的 businesses,以及所用分页方式对应的元数据。

例如,以下请求从基于页码分页的数据源中获取一个商家:

GET /v1/businesses?page=1&page_size=1&changes_token=sync_001

返回完整的商家记录及其报价请求操作:

{
  "checksum": true,
  "page": 1,
  "page_size": 1,
  "total_pages": 1,
  "businesses": [
    {
      "id": "local_biz_456",
      "name": "Acme Plumbing",
      "address": {
        "line1": "123 Market St",
        "locality": "San Francisco",
        "region": "CA",
        "postal_code": "94105",
        "country": "US",
        "formatted": "123 Market St, San Francisco, CA 94105, US"
      },
      "location": {
        "latitude": 37.793,
        "longitude": -122.396
      },
      "phone_number": "+14155551234",
      "website_url": "https://acmeplumbing.example",
      "platform_url": "https://provider.example/businesses/local_biz_456",
      "service_providers": [
        {
          "provider": "example_provider",
          "provider_business_id": "biz_123",
          "action_type": "request_a_quote",
          "provider_action_url": "https://provider.example/request-quote/biz_123",
          "display_name": "Get Quote"
        }
      ]
    }
  ]
}

报价启动条件

只有在所属商家的 ID 非空、 服务提供商的 provider_business_id 非空且 provider_action_url 有效,并且提供商已配置合作伙伴插件时,ChatGPT 才会创建聊天内启动器。 报价按钮使用 ChatGPT 界面标签 获取报价; 对于 request_a_quote 操作,提供商的 display_name 不会覆盖该标签。

未来扩展

本接入约定涵盖报价请求。报价请求流程不要求支持其他服务操作, 例如预约。