更新日志新功能

推出 Place Lookup

Place Lookup
西雅图地图上餐厅 Canlis 的图钉连向四张引擎卡片:ChatGPT 找到了 Yelp 地点信息,Gemini 和 Copilot 找到了同一条 Google Maps 地点信息,Google 卡片显示 Not found

一次调用即可就一家门店询问 ChatGPT、Gemini、Google、Copilot,在韩国还会询问 Naver,并返回每个引擎展示的地点信息、它的来源,以及与官方信息不同的地方。

获得的结果

  • POST /v1/place-lookup 接收一家门店的名称和地址或地图坐标,有电话、网站和地点 ID 时也一并接收,然后向 CHATGPT、GEMINI、GOOGLE、BING_COPILOT 询问该门店,KR 门店还会询问 NAVER_AI_TAB。
  • GET /v1/place-lookup/{id} 按引擎返回该门店的 record:google_maps、naver_place、yelp 等 source,placeId 和页面,以及引擎展示的名称、地址、电话、网站和评分。
  • issues 指出地点信息的问题:phone_mismatch、website_mismatch、location_mismatch、other_business_record,以及标记为停业的信息。
  • summary 列出展示了该门店的引擎和各引擎地点信息之间的差异(differences),credits 显示该查询目前扣除的积分。

工作原理

每个引擎问两次,例如 Show Canlis on a map 以及加上地址的同一问题,每个问题都作为该引擎的普通任务运行。KR 门店用韩语提问,只有 ChatGPT 的第二个问题用英语。在回答出现的地点中,按地点 ID、电话、网站、坐标、地址和名称与门店最吻合的那个就是门店的地点信息,吻合的项目列在 match 中。每次读取时都会根据已保存的回答重新判定,大多数查询在两分钟内完成。

应用场景

  • 找出错误电话号码来自哪条地点信息。一条 Google Maps 地点信息中的错误会出现在所有读取它的引擎中,查询会指出这条地点信息。
  • 了解每个引擎在你的市场读取哪个地图数据库。在对 20 家美国门店的测试中,ChatGPT 为其中 15 家展示了 Yelp 地点信息。
  • 在本地营销活动之前,为连锁品牌的每家分店各做一次查询。

发送请求

在 Authorization 请求头中带上 API 密钥发送请求。

curl -X POST https://api.querying.ai/v1/place-lookup \
  -H "Authorization: Bearer $QUERYING_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "place": {
      "name": "Canlis",
      "address": "2576 Aurora Ave N, Seattle, WA 98109",
      "location": { "latitude": 47.6430534, "longitude": -122.3467361 },
      "phone": "(206) 283-3313",
      "website": "https://canlis.com/"
    },
    "country": "US",
    "idempotencyKey": "canlis-2026-10"
  }'

请求字段

place.namestring必填
门店名称,1 到 200 个字符。连锁店请带上分店名。
place.addressstring
街道地址,最多 500 个字符。查询需要它或 place.location,也可以两者都提供。
place.locationobject
门店的图钉位置(latitude、longitude)。提供后,每条地点信息都会带上与门店的距离,并报告偏离超过 300 米的图钉。
place.phonestring
官方电话号码,格式不限。每条地点信息的电话都会与它比较。
place.websitestring
官方网站,http 或 https URL。每条地点信息的网站都会按站点与它比较。
place.googlePlaceIdstring
门店的 Google Place ID。带有此 ID 的地点信息就是该门店。
place.naverPlaceIdstring
门店的 Naver Place ID,或该地点的 map.naver.com 或 place.naver.com 页面。带有此 ID 的地点信息就是该门店。
place.yelpUrlstring
门店的 yelp.com/biz/… 页面。这家商家的地点信息就是该门店。
countrystring必填
门店所在国家的 ISO 3166-1 alpha-2 代码,例如 US 或 KR。
enginesarray
要询问的引擎,不可重复:CHATGPT、GEMINI、GOOGLE、BING_COPILOT,KR 还可选 NAVER_AI_TAB。默认:KR 为全部五个,其他国家为前四个。
idempotencyKeystring
查询的 id,1 到 200 个字符。默认为服务器生成的 UUID。用它再次发送同一请求时,会补上缺少的问题。

响应

响应如下,已截取部分内容。

JSON
{
  "success": true,
  "lookup": { "id": "canlis-2026-10" },
  "tasks": [
    {
      "engine": "CHATGPT",
      "ask": 1,
      "success": true,
      "task": {
        "id": "…",
        "taskType": "CHATGPT",
        "status": "QUEUED",
        "priority": 1,
        "createdAt": "…",
        "idempotencyKey": "canlis-2026-10:CHATGPT:1"
      }
    },
    { "engine": "CHATGPT", "ask": 2, "…": "…" },
    { "engine": "GEMINI", "ask": 1, "…": "…" }
  ]
}
lookup.idstring
查询的 id。用 GET /v1/place-lookup/{id} 读取结果。
tasksarray
每个问题一条:engine、ask、success,以及已排队的 task、等待空位时的 status: "PENDING" 或带代码的 error。任务的 idempotencyKey 由查询 id、引擎和问题序号连接而成,例如 canlis-2026-10:CHATGPT:1。

获取结果

之后每 5 到 10 秒用 ID 读取查询,直到 lookup.status 变为 COMPLETED。问题完成后 24 小时内都可以读取。

curl "https://api.querying.ai/v1/place-lookup/$LOOKUP_ID" \
  -H "Authorization: Bearer $QUERYING_API_KEY"

Canlis 的查询结果精简后如下。ChatGPT 展示了这家餐厅的 Yelp 地点信息,Gemini 和 Copilot 展示了同一条 Google Maps 地点信息,Google 结果页的回答中没有地点,因此 found 为 false。

JSON
{
  "success": true,
  "lookup": {
    "id": "canlis-2026-10",
    "status": "COMPLETED",
    "country": "US",
    "engines": [
      {
        "engine": "CHATGPT",
        "status": "COMPLETED",
        "found": true,
        "via": [{ "…": "…" }],
        "record": {
          "name": "Canlis",
          "source": "yelp",
          "provider": "yelp-feed",
          "phone": "+1 206-283-3313",
          "website": "https://canlis.com/",
          "rating": 4,
          "reviewCount": 1935,
          "match": {
            "same": true,
            "by": ["phone", "website", "location", "address", "name"],
            "nameScore": 1,
            "distanceMeters": 5
          },
          "…": "…"
        }
      },
      {
        "engine": "GEMINI",
        "status": "COMPLETED",
        "found": true,
        "via": [{ "…": "…" }],
        "record": {
          "name": "Canlis",
          "source": "google_maps",
          "placeId": "ChIJRXCfNwUVkFQRxraD8U-dANE",
          "phone": "+1 206-283-3313",
          "rating": 4.6,
          "reviewCount": 2892,
          "…": "…"
        }
      },
      {
        "engine": "GOOGLE",
        "status": "COMPLETED",
        "found": false,
        "…": "…"
      },
      {
        "engine": "BING_COPILOT",
        "status": "COMPLETED",
        "found": true,
        "…": "…"
      }
    ],
    "summary": {
      "foundIn": ["CHATGPT", "GEMINI", "BING_COPILOT"],
      "notFoundIn": ["GOOGLE"],
      "failed": [],
      "pending": [],
      "differences": []
    },
    "credits": 10
  }
}
lookup.statusstring
所有引擎结束前为 PROCESSING,结束后为 COMPLETED。
lookup.engines[].foundboolean
回答展示了门店时为 true,两个问题都结束且没有门店时为 false,问题仍在运行或两个都失败时为 null。
lookup.engines[].recordobject
该引擎中门店的地点信息:两个回答的地点中与门店最吻合的一条,包含引擎展示的名称、地址、电话、网站和评分。
lookup.engines[].record.sourcestring
地点信息来源的地图数据库:google_maps、naver_place、yelp、tripadvisor 或 unknown。placeId 和 url 是它在该来源中的 ID 和页面。
lookup.engines[].record.matchobject
判定这条信息就是该门店的依据。by 列出一致的项目,nameScore 是 0 到 1 的名称相似度,distanceMeters 是与 place.location 的距离。
lookup.engines[].issuesarray
地点信息有错误时出现:phone_mismatch、website_mismatch、location_mismatch、other_business_record、closed_permanently 或 closed_temporarily。
lookup.summaryobject
按结果列出的引擎(foundIn、notFoundIn、failed、pending),以及 differences:各引擎之间不同的名称、电话、网站或图钉,每个值附带显示它的引擎。
lookup.creditsnumber
到目前为止该查询的问题已扣除的积分。

错误

所有问题都被拒绝时,响应就是第一个拒绝,例如 402 或 403。部分问题被接受时返回 200,每个被拒绝的问题都带有 error。套餐的并发名额用满时,其余问题以 PENDING 等待,正在运行的任务完成后自动开始。因此在同时运行 2 个任务的免费套餐中,一次请求也能跑完整个查询。

VALIDATION_ERRORHTTP 400
缺少字段或取值超出范围。details 会指明该字段。
INSUFFICIENT_CREDITSHTTP 402
余额低于任务价格。充值积分或升级套餐后再发送。
KEY_SCOPE_DENIEDHTTP 403
该引擎在密钥的“允许的引擎”之外。换用其他密钥,或在“管理密钥”中添加该引擎。
RESOURCE_ALREADY_EXISTSHTTP 409
该 idempotencyKey 已对应另一门店、国家或引擎列表的查询。使用新的 idempotencyKey 即可开始新的查询。

价格

询问该国家全部默认引擎的查询消耗 10 积分:KR 共 10 个问题,每个 1 积分;其他国家共 8 个问题,每个 1.25 积分。只选部分引擎时按发送的问题计费,失败的问题消耗 0 积分。套餐价格见 https://querying.ai/pricing 。

更多更新

接收最新消息

通过邮件接收产品更新。

RSS 订阅