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:包含latitude和longitude的对象。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),
并支持以下一种分页方式:
page和page_size。offset和limit。- 不透明的
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 不会覆盖该标签。
未来扩展
本接入约定涵盖报价请求。报价请求流程不要求支持其他服务操作, 例如预约。