快速入門
本頁按大多數團隊的使用順序,介紹三種最簡便且可運行的集成方式:
- 在現有地圖上添加聊天。 聊天面板回答有關地點的問題,並將結果作為圖釘、相機移動和路線顯示在你的地圖上。
- 已發佈地圖。 將在 Kaleidr Studio 設計的地圖嵌入你的網頁。
- 底圖。 將 Kaleidr 設計的現成底圖放在你的網頁中。
每種方式只需要一個 HTML 檔案。三種方式均可使用 Free 套餐。
| 方式 | 產品 | 所需金鑰 | 顯示位置 |
|---|---|---|---|
| 在你的地圖上聊天 | chat | 發佈金鑰 | 網頁中,覆蓋在地圖上方 |
| 已發佈地圖 | viewer | 無需金鑰 | Kaleidr iframe 內 |
| 底圖 | tile | 發佈金鑰 | Kaleidr iframe 內 |
如果想先瞭解整體模型,請閱讀 Kaleidr 的工作原理。如果不確定需要哪個產品,請閱讀選擇適合的方案。
開始之前
-
Kaleidr 賬戶。 在 kaleidr.com 注冊。Free 套餐足以運行本頁所有示例。
-
發佈金鑰,用於聊天和底圖。請前往 kaleidr.com/api-keys 建立;它以
kld_pk_live_開頭。取得 API 金鑰介紹表單的操作方式。已發佈地圖不需要金鑰。 -
網頁服務器。 即使在本地,也請通過 HTTP 提供檔案服務。在檔案所在目錄中可使用以下任一種方法:
python -m http.server 8000# ornpx serve -l 8000然後打開
http://localhost:8000/your-file.html。不要直接從硬盤打開檔案:file://網頁沒有可以加入金鑰允許來來源清單的來來源。 -
如果金鑰設定了允許來來源,必須包含你的網頁來來源。 未設定允許來來源的金鑰可在任何網站使用;設定清單後只能在所列網站使用,因此測試時請添加
http://localhost:8000。 -
如果網站使用內容安全策略,必須允許 Kaleidr 資來源加載。 未傳送
Content-Security-Policy標頭的網站不需要額外設定。否則請閱讀內容安全策略。
三種方式都使用同一個 script 標籤。你只需自行加載這一個檔案,掛載產品時它會取得對應產品的程式碼。
<script src="https://cdn.kaleidr.com/embed/v1/kaleidr.js"></script>
在你的地圖上聊天
完成後,你將得到一張 MapLibre GL JS 地圖,聊天面板停靠在地圖中。詢問“在 Bryant Park 附近哪裡能吃到拉麵?”時,回答會流式顯示在面板內,為每個地點添加圖釘,並移動相機以展示這些地點。
此示例使用 MapLibre GL JS。Chat 也可連接 Mapbox GL JS、Google Maps JavaScript API 和 Leaflet;參閱支持的地圖。
1. 建立網頁
將檔案保存為 chat.html,並把 kld_pk_live_… 替換為你的發佈金鑰。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Kaleidr Chat on MapLibre</title>
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.17.0/dist/maplibre-gl.css" />
<style>
body { margin: 0; }
/* The chat panel docks inside this box, so it must be positioned and sized. */
#stage { position: relative; height: 100vh; }
#map { position: absolute; inset: 0; }
</style>
</head>
<body>
<div id="stage">
<div id="map"></div>
</div>
<!-- 1. Your map library, loaded as a page global (window.maplibregl). -->
<script src="https://unpkg.com/maplibre-gl@5.17.0/dist/maplibre-gl.js"></script>
<!-- 2. The Kaleidr loader. -->
<script src="https://cdn.kaleidr.com/embed/v1/kaleidr.js"></script>
<script>
const map = new maplibregl.Map({
container: 'map',
style: 'https://demotiles.maplibre.org/style.json', // replace with your own style
center: [-73.9857, 40.7484], // [longitude, latitude]
zoom: 11,
});
const chat = Kaleidr.mount('#stage', {
product: 'chat',
publishableKey: 'kld_pk_live_…',
map, // the live map instance, not a selector
contained: true, // dock the panel inside #stage
});
// When you remove the map (for example on a route change in a single-page app):
// chat.destroy();
</script>
</body>
</html>
請注意檔案中的三個細節:
- 地圖程式庫必須是網頁全局變量。 聊天程式碼從
window.maplibregl查找 MapLibre。通過 script 標籤加載 MapLibre 會自動設定它。如果改從 npm 導入,請在掛載前自行賦值:window.maplibregl = maplibregl。 map是地圖對象。 請傳入你建立的實例,而不是 CSS 選擇器。contained: true需要有定位方式和高度的容器。 面板顯示在掛載目標內。如果沒有contained,面板會作為固定窗口出現在瀏覽器視口左上角。
示例樣式是一張細節較少的世界地圖。圖釘仍會落在正確的坐標,但如需查看街道,請使用自己的地圖樣式。
2. 提供網頁服務並提問
在檔案所在目錄啓動本地服務器,打開 http://localhost:8000/chat.html。
預期結果:
- 地圖填滿窗口,左上角出現帶文本輸入框的聊天面板。
- 在瀏覽器“網路”標籤頁中,對
https://api.kaleidr.com/inference-api/b2b/v1/sdk/sessions的請求傳回200。這表示 SDK 正在用金鑰換取短期工作階段。 - 輸入一個有關地點的問題,例如
Where can I get ramen near Bryant Park?。回答會流式進入面板,每個地點出現圖釘,相機也會調整以顯示它們。“網路”標籤頁會出現對…/b2b/v1/chat/control/stream的請求,並在回答生成期間保持打開。 - 控制台不應出現包含
[kaleidr的行。
3. 如果無法正常運行
| 現象 | 原因 | 解決方法 |
|---|---|---|
面板未顯示,控制台先對 …/sdk/sessions 報 CORS 錯誤,隨後出現 [kaleidr:chat] 錯誤 | 金鑰錯誤、已被撤銷,或網頁來來源不在金鑰的允許來來源清單中。API 響應不包含 CORS 標頭,瀏覽器因此報告 CORS 失敗。 | 檢查金鑰。在 kaleidr.com/api-keys 添加包含端口的精確來來源,或在測試期間清空清單。 |
| 面板在瀏覽器左上角,而不是地圖內部 | 缺少 contained: true,或掛載目標沒有定位 | 傳入 contained: true,並為目標設定 position: relative 和高度。 |
| 面板能回答,但地圖上沒有圖釘 | 地圖程式庫不是網頁全局變量,聊天無法建立圖釘 | 用 script 標籤加載程式庫,或先設定 window.maplibregl 再調用 Kaleidr.mount。 |
故障排除按控制台原始消息解釋各種症狀。
下一步:將 Chat 連接到 MapLibre提供完整指南;功能和限制說明面板能做甚麼、不能做甚麼。
已發佈地圖
完成後,你將在自己的網頁中顯示 Kaleidr Studio 設計的地圖。這種方式無需 API 金鑰,只需地圖的公開 ID。
1. 發佈地圖並複製 ID
- 在 Kaleidr Studio 打開地圖,選擇 Publish(發佈)。
- 在 Publish & embed(發佈與嵌入) 頁面選擇 Go Live(上線)。
- 在 Embed code(嵌入程式碼) 下複製程式碼片段。ID 是地址的最後一段,例如
https://map-embed.kaleidr.com/embed/abc123的 ID 為abc123。
**預期結果:**項目狀態顯示 live,嵌入程式碼下的實時預覽會呈現訪客看到的地圖。
2. 建立網頁
將檔案保存為 map.html,把 YOUR_SHARE_ID 替換為複製的 ID。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>A published Kaleidr map</title>
</head>
<body>
<script src="https://cdn.kaleidr.com/embed/v1/kaleidr.js"></script>
<kaleidr-map
product="viewer"
share-id="YOUR_SHARE_ID"
style="display:block; height:480px"
></kaleidr-map>
</body>
</html>
元素需要設定高度,否則地圖使用 500 像素的後備高度。<kaleidr-map> 預設是 display:block,所以高度生效。程式碼片段也寫了 display:block,以兼容 Safari 16.4 之前的版本;那些版本中元素保持行內狀態,設定高度無效。
如果無法添加腳本(例如網站構建器或 CMS 字段),請使用 Studio 的 iFrame 標籤頁提供的普通 iframe。它不需要加載器:
<iframe
src="https://map-embed.kaleidr.com/embed/YOUR_SHARE_ID"
width="100%"
height="480"
style="border:0;"
loading="lazy"
referrerpolicy="no-referrer-when-downgrade"
allow="geolocation; microphone; fullscreen; clipboard-write"
title="Kaleidr map"
></iframe>
3. 提供網頁服務
打開 http://localhost:8000/map.html。
預期結果:
- 地圖寬度與頁面相同、高 480 像素,並從你在 Studio 保存的視圖開始顯示。
- 指標位於地圖上方時滾動會縮放地圖;指標位於地圖旁邊時,滾動會 移動頁面。
- 在“元素”面板中,有一個
<iframe>位於<kaleidr-map>內,其地址以https://map-embed.kaleidr.com/embed/開頭。
如果框架顯示 "This map isn't available — it may have been unpublished, paused, or the link is incorrect.",說明 ID 錯誤或地圖尚未上線。如果顯示 "This map isn't allowed to render on this site. Please contact the map owner.",說明地圖只允許在其他域名顯示。
下一步:嵌入地圖說明如何限制地圖的顯示域名;已發佈地圖上的聊天可讓訪客無需金鑰即可聊天。
底圖
完成後,你的網頁將顯示 Kaleidr 設計的現成互動底圖,無須安裝地圖程式庫,也不用自己編寫樣式。
1. 建立網頁
保存為 basemap.html,將 kld_pk_live_… 替換為你的發佈金鑰。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>A Kaleidr basemap</title>
</head>
<body>
<script src="https://cdn.kaleidr.com/embed/v1/kaleidr.js"></script>
<kaleidr-map
product="tile"
publishable-key="kld_pk_live_…"
style-id="kaleidr-morning"
center="-73.9857,40.7484"
zoom="11"
style="display:block; height:480px"
></kaleidr-map>
</body>
</html>
style-id指定底圖樣式。請始終填寫。kaleidr-morning是通用樣式之一;其他樣式見 Tile。center採用longitude,latitude格式。設定center後再設定zoom:單獨的zoom在沒有center時會被忽略。
2. 提供網頁服務
打開 http://localhost:8000/basemap.html。
預期結果:
- 底圖以曼哈頓中城為中心,高 480 像素。
- “網路”標籤頁中,對
https://api.kaleidr.com/inference-api/b2b/v1/sdk/sessions的請求傳回200,隨後從https://map-embed.kaleidr.com加載 iframe。 - 指標位於地圖上方時滾動即可縮放地圖。
如果沒有顯示內容,控制台對 …/sdk/sessions 報 CORS 錯誤,說明金鑰錯誤或你的來來源不在允許來來源清單中,與聊天方式的情況相同。
每個 Tile 工作階段都計入你所在組織每月地圖加載額度的一次加載。參閱配額與速率限制。
下一步:使用 Tile介紹運行時切換樣式與控制相機。
實際加載了甚麼
三種方式使用的是相同的兩個組件:
Kaleidr.mount(target, options)從 JavaScript 掛載產品,立即傳回句柄。產品程式碼在後台加載,產品就緒前對句柄發出的調用會被保留並在就緒後執行。<kaleidr-map>通過 HTML 完成同樣的工作。其屬性是帶連字符的掛載選項(share-id、style-id、publishable-key),但有兩個例外:enabled對應flag屬性,聊天的title選項對應chat-title屬性。
在自己的地圖上使用 Chat 時,請調用 Kaleidr.mount,因為它需要實時地圖對象。其他產品可以使用任意一種方式。
所有產品的句柄都包含 destroy() 方法。其他方法取決於產品,例如 setCamera 可用於 viewer、tile 和 editor,但不支持 chat;在 Chat 中,助手會自行移動地圖,而你仍可使用地圖程式庫自己的相機方法。完整清單參閱元素 <kaleidr-map>。
現在需要瞭解的限制
- Chat 會添加自己的圖釘、路線和相機移動。 它不會修改你的圖層或標記,也不會向 Kaleidr 傳送這些內容;網頁不會收到面板事件。參閱功能和限制。
- Viewer 和 Tile 在 iframe 中運行。 不能向它們添加自己的圖層或標記。需要自定義圖層時,請保留自己的地圖並連接 Chat。
- Kaleidr 底圖通過 Tile 顯示。 不支持在你自己的地圖程式庫中直接加載 Kaleidr 樣式或圖磚。
- SDK 用於網頁。 沒有 npm 軟件包或原生移動 SDK。後端應調用服務器 API。
- 使用金鑰的掛載會消耗額度。 Chat 回答消耗組織的 AI 積分,每個 Tile 工作階段消耗一次地圖加載。參閱Kaleidr 的工作原理。
下一步選擇
| 你想做甚麼 | 閱讀 |
|---|---|
| 將 Chat 接入 Mapbox GL JS | 連接 Chat 與 Mapbox |
| 將 Chat 接入 MapLibre GL JS | 連接 Chat 與 MapLibre |
| 將 Chat 接入 Google Maps | 連接 Chat 與 Google Maps |
| 將 Chat 接入 Leaflet | 連接 Chat 與 Leaflet |
| 放置面板並匹配品牌色彩 | 主題和佈局 |
| 讓訪客在已發佈地圖上聊天 | 已發佈地圖上的聊天 |
| 嵌入地圖並限制域名 | 嵌入地圖 |
| 顯示底圖並切換樣式 | 使用 Tile |
| 在網頁中放入地圖編輯器 | 連接編輯器 |
| 在 React、Next.js 或 Vue 中使用 SDK | 框架集成 |
| 從後端調用 Kaleidr | 服務器快速入門 |
| 使用自己的業務資料生成回答 | 你的資料 |
| 發佈到生產環境 | 上線檢查清單 |