Viewer 참고 문서
product="viewer"는 Kaleidr Studio에서 게시한 지도를 표시합니다. SDK는 마운트 대상의 내용을 https://map-embed.kaleidr.com/embed/<id>를 로드하는 iframe으로 교체합니다. 지도는 이 iframe 안에 그려집 니다.
| 키 | 필요 없습니다. 전달하지 마세요. |
| 요금제 | Free를 포함한 모든 요금제. |
| 렌더링 위치 | https://map-embed.kaleidr.com에서 제공하는 iframe. |
| 사용량 | 조회당 지도 로드 1회, 지도 소유자 조직에 청구. |
| CSP | script-src https://cdn.kaleidr.com 및 frame-src https://map-embed.kaleidr.com. |
단계별 안내는 게시된 지도 임베드를 참조하세요.
마운트
요소를 사용하는 경우:
<script src="https://cdn.kaleidr.com/embed/v1/kaleidr.js"></script>
<kaleidr-map product="viewer" share-id="YOUR_MAP_ID"
style="display:block; height:480px"></kaleidr-map>
JavaScript에서:
const handle = Kaleidr.mount('#map', {
product: 'viewer',
shareId: 'YOUR_MAP_ID',
});
SDK 없이:
<iframe src="https://map-embed.kaleidr.com/embed/YOUR_MAP_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>
채팅 바
layout="bar"는 Viewer를 채팅 바로 바꿉니다. 페이지에 질문 입력란 하나만 두고, 방문자가 질문하기 전까지는 지도를 표시하지 않습니다. 질문하면 게시된 지도가 열리고 지도의 Kaleidr AI가 그곳에서 답합니다.
<script src="https://cdn.kaleidr.com/embed/v1/kaleidr.js"></script>
<kaleidr-map product="viewer" share-id="YOUR_MAP_ID" layout="bar"
chat-title="Ask about the neighborhood"
prompts="Coffee within a short walk|Parks nearby"></kaleidr-map>
답변은 다음 두 곳 중 하나에서 열립니다.
| 설정 | 질문 시 동작 |
|---|---|
results-url 없음(기본값) | 지도가 페이지 위에 창 전체를 채우며 열리고 질문을 보냅니다. 방문자는 닫기 버튼으로 지도를 닫습니다. 이후의 질문도 같은 지도에 보내므로 대화가 이어집니다. |
results-url="/map" | 브라우저가 ?q=<question>과 함께 해당 페이지로 이동합니다. 그 페이지에서 prompt-param="q"를 지정한 Viewer가 지도 가 열릴 때 질문을 보냅니다. 단, 방문자가 같은 출처의 페이지에서 온 경우에만 그렇습니다. |
결과 페이지:
<script src="https://cdn.kaleidr.com/embed/v1/kaleidr.js"></script>
<kaleidr-map product="viewer" share-id="YOUR_MAP_ID" prompt-param="q"
style="display:block; height:600px"></kaleidr-map>
- 답변은 지도가 합니다. 질문은 지도 자체의 Ask Kaleidr 패널로 전달되므로 지도에서 Control Tower가 켜져 있어야 하며(Studio, Kaleidr AI), 게시된 지도의 Kaleidr AI 규칙이 적용됩니다. 비용은 소유자가 부담하고, 답변하는 위치는 지도의 허용 도메인이 정합니다. Control Tower가 없는 지도에서는 지도는 열리지만 질문은 전달되지 않습니다.
- 채팅 바는 지도를 로드하지 않습니다. 방문자가 질문할 때 지도가 로드되며 지도 로드 1회로 집계됩니다.
- 채팅 바는 자체 섀도 루트에 그려지므로 페이지의 CSS가 스타일을 바꾸지 않으며, 스타일에
style-src권한이 필요 없습니다. 너비는 요소와 같고 높이는 콘텐츠에 맞춰집니다. - 채팅 바 자체의 레이블은
lang을 따르며,lang이 없으면 방문자의 브라우저 언어를 따릅니다. 지원 언어는 영어, 스페인어, 프랑스어, 독일어, 포르투갈어, 일본어, 한국어, 중국어 간체 및 번체, 아랍어입니다. 직접 지정한chat-title,placeholder,prompts는 작성한 그대로 표시됩니다. prompt는 입력란을 미리 채우고,handle.send()는 코드에서 질문합니다.handle.send('Parks nearby')는 해당 질문을 보내고,handle.send()는 입력란의 내용을 질문합니다.
template.kaleidr.com의 빌더가 선택한 지도에 맞는 두 스니펫을 모두 작성해 줍니다.
장소 레이아웃
layout="locator"와 layout="listings"는 지도가 그리는 장소 라이브러리 컬렉션의 목록을 컬렉션의 필터 및 카드와 함께 게시된 지도 옆에 표시합니다.
<script src="https://cdn.kaleidr.com/embed/v1/kaleidr.js"></script>
<kaleidr-map product="viewer" share-id="YOUR_MAP_ID" layout="locator"
filters="search|category|open_now"
style="display:block; height:600px"></kaleidr-map>
<kaleidr-map product="viewer" share-id="YOUR_MAP_ID" layout="listings"
filters="price|beds|baths"
style="display:block; height:720px"></kaleidr-map>
| 레이아웃 | 목록 | 핀 |
|---|---|---|
locator | 거리순으로 정렬된 장소. 검색 필드, 내 주변 버튼, 필터, 개수가 있습니다. 목록의 어떤 장소와도 일치하지 않는 검색은 검색한 장소로 지도를 이동합니다. | Studio에서 스타일을 지정한 컬렉션 레이어. |
listings | 사진 카드. 넓은 프레임에서는 두 열로 표시되며 거리, 가격 낮은 순, 가격 높은 순으로 정렬합니다. | 가격 레이블. |
- 프레임 너비가 768픽셀 이상이면 목록이 지도 옆에 있고, 그보다 좁으면 방문자가 위로 끌어 올리는 지도 위 시트에 있습니다.
- 목록과 지도는 함께 움직입니다. 목록에서 장소를 선택하면 지도가 그곳으로 이동해 카드를 열고, 핀을 선택하면 목록이 그 장소로 스크롤됩니다. 목록, 핀, 개수는 항상 같은 장소를 보여 줍니다.
- 목록은 한 번에 50곳을 표시하며, 더 보기로 더 표시합니다.
- 내 주변은 방문자에게 위치를 요청합니다. SDK가 만드는 iframe은 이를 허용하지만, 직접 사용하는 iframe에는
allow="geolocation"이 필요합니다. - 컬렉션을 그리지 않는 지도에서는 두 레이아웃 모두 지도만 표시합니다.
filters는 컬렉션 자체의 방문자 필터 중 표시할 것을 |로 구분해 고릅니다. 작성한 순서와 관계없이 컬렉션의 순서대로 나타나며, 컬렉션이 제공하지 않는 필터는 무시됩니다. filters가 없으면 레이아웃은 컬렉션의 모든 필터를 표시합니다.
| 필터 | 표시 | 일치 대상 |
|---|---|---|
search | 텍스트 필드 | 이름, 주소 또는 카테고리에 해당 텍스트가 포함된 장소. |
category | 카테고리 버튼(가장 많은 30개까지) | 선택한 카테고리 중 하나에 속한 장소. |
price | 최솟값과 최댓값 | 가격이 범위 안에 있는 장소. 범위를 좁히면 가격이 없는 장소는 숨겨집니다. |
beds, baths | 전체, 1+, 2+, 3+, 4+ | 그 수 이상인 장소. |
open_now | 스위치 | 장소 자체의 시간대 기준으로 지금 영업 중인 장소. 켜져 있는 동안 영업시간이 없는 장소는 숨겨집니다. |
방문자가 설정한 필터는 모두 함께 적용됩니다.
card는 장소 카드에 표시할 양을 정합니다. 기본값인 auto는 Studio에서 디자인한 카드입니다. compact는 작은 프레임을 위해 제목, 부제목, 작업만 표시합니다.
장소 작업은 컬렉션이 정의한 대로 동작합니다. 길찾기는 지도 안에 경로를 그리고 Apple 지도와 Google 지도를 제공합니다. 링크는 새 탭에서 열리고, 전화는 전화 링크를 엽니다. Schedule a Tour 같은 요청 작업은 업체의 요청 양식을 지도 위에 엽니다.
가이드 레이아웃
layout="guide"는 시설 지도를 열고 그 옆에 Ask Kaleidr 패널을 표시합니다. 호텔의 동네 안내나 시설 주변 지도에 사용합니다. 시설 컬렉션(collection, 없으면 지도가 그리는 첫 번째 시설 컬렉션)을 나열하며 Control Tower가 켜져 있어야 합니다. 시설 컬렉션을 그리지 않는 지도에서는 지도만 표시합니다.
<script src="https://cdn.kaleidr.com/embed/v1/kaleidr.js"></script>
<kaleidr-map product="viewer" share-id="YOUR_MAP_ID" layout="guide"
style="display:block; height:640px"></kaleidr-map>
- 채팅이 먼저입니다. 너비 769픽셀 이상인 프레임에서는 패널이 너비 400픽셀로 지도 왼쪽에 놓입니다. 더 좁으면 지도 위에 높이 45%의 시트로 표시되며, 방문자가 85%까지 끌어올릴 수 있습니다. 답변이 AI로 생성된다는 안내는 입력란 아래에 그대로 남습니다.
- 입력란 위의 카테고리 칩은 컬렉션에서 가장 많은 카테고 리 8개입니다. 칩을 누르면 해당 카테고리의 핀을 보여 주고, 방문자의 언어로 "앵커 근처의 카테고리 보여 줘"라고 질문합니다. Plan My Day는 "앵커 주변으로 하루 일정을 짜 줘"라고 질문합니다.
- 앵커는 Studio의 지도 설정에서 지정하는 지도의 기준 핀입니다. 지도가 그리는 컬렉션의 장소이거나, 호텔처럼 지도 위에 놓은 지점입니다. 이름이 붙은 별도의 핀으로 그려지며, 가이드에서 "근처"는 그 근처를 뜻합니다. 앵커가 없는 지도는 지도 중심을 사용합니다.
- 하루 일정. 하루 일정을 요청받으면 가이드는 앵커에서 출발해 먼저 내 컬렉션의 장소를, 그다음 Kaleidr 자체 장소 데이터를 방문하는 경로를 그리고, 이름과 시간이 있는 정류 지점 카드로 방문자의 언어로 보여 줍니다.
- 시설 카드는 Studio에서 디자인한 카드를 보여 주고, 표시한 장소에는 Staff Pick이 붙으며, 그 아래에 연결의 카드가 표시됩니다. 연결된 콘텐츠는 카드에만 나타나고 가이드의 답변에는 쓰이지 않습니다.
- 요청. 시설의 Reserve 작업은 업체의 요청 양식을 엽니다.
채팅 스트림의 가이드
viewer는 지도의 Kaleidr AI에 어떤 레이아웃을 표시 중인지 알립니다. POST /chat/control/stream 클라이언트는 가이드에 속한 필드 두 개를 보게 됩니다.
| 필드 | 위치 | 형태 |
|---|---|---|
layout | 요청 본문 | 가이드 레이아웃을 표시하는 동안 "guide"이며, 그렇지 않으면 생략되어 일반 지도 턴이 됩니다. 최대 16자이며, 넘으면 요청이 422 invalid_layout으로 거부됩니다. |
itinerary | 스트림의 이벤트이며 end 이벤트에도 반복됩니다 | { title, stops: [{ name, time?, note? }] }: 하루 일정의 제목과 이름이 있는 정류 지점 1~12개로, 이미 방문자의 언어로 되어 있습니다. note는 내 장소에만 붙습니다. |
하루 일정을 표시하지 않는 클라이언트는 이 이벤트를 무시해도 됩니다.
실시간 레이아웃
layout="live"는 차량이 지금 어디에 있고 오늘 어디에 정차하는지 보여 줍니다. 푸드트럭 노선, 셔틀, 이동형 서비스에 사용합니다. 컬렉션 두 개를 읽습니다. 위치가 실시간 추적에서 오는 차량 컬렉션과, 일정이 담긴 정류장 컬렉션입니다.
<script src="https://cdn.kaleidr.com/embed/v1/kaleidr.js"></script>
<kaleidr-map product="viewer" share-id="YOUR_MAP_ID" layout="live"
collection="VEHICLES_COLLECTION_ID" stops="STOPS_COLLECTION_ID"
style="display:block; height:640px"></kaleidr-map>
| 옵션 | 기본값 | 읽는 내용 |
|---|---|---|
collection | 지도가 그리는 첫 번째 차량 컬렉션 | 실시간으로 표시할 차량. |
stops | 지도가 그리는 첫 번째 정류장 컬렉션 | 정류장과 운행 시간대. |
둘 다 그리지 않는 지도에서는 지도만 표시합니다. 패널은 너비 769픽셀 이상인 프레임에서는 지도 옆에, 그보다 좁으면 지도 위의 시트로 표시됩니다.
- 패널 맨 위에 실시간 표시가 나오며, 근무 중인 차량이 없 으면 현재 운행하지 않음이 표시됩니다.
- 표시된 차량마다 한 줄: 차량 이름, 이동 중, 정차 중, 정차 위치와 정류장 이름, 또는 마지막 보고가 플릿의 오래됨 표시 기준보다 오래되면 5분 전에 확인됨. 그리고 다음 정류장과 약 12분, 예상 태그.
- 오늘의 경로: 오늘의 정류장을 시간대 순서로 나열하고, 각각의 시간대, 담당 차량, 배지를 표시합니다.
- **나까지 얼마나 걸리나요?**는 방문자의 위치를 요청하고, 거부하면 도시의 대략적인 위치를 사용해 표시된 차량이 도착하는 데 걸리는 시간을 보여 줍니다. 위치는 이 추정에만 쓰이며 저장되지 않습니다.
- 차량을 선택하면 방문자가 지도를 움직일 때까지 그 차량을 따라갑니다. 정류장을 선택하면 오늘의 시간대나 다음 운행 날짜가 담긴 카드가 열립니다.
| 배지 | 조건 |
|---|---|
| 지금 여기 | 차량이 그 정류장에 체크인했습니다. |
| 오늘 휴무 | 운전자가 차량을 오늘 휴무로 표시했습니다. |
| 영업 중 | 정류장의 시간대에 지금이 포함됩니다. |
| 다음: 11:00–14:00 | 정류장에 오늘 이후 시간대가 있습니다. |
| 오늘 없음 | 정류장에 오늘 시간대가 없습니다. 카드에는 14일 이내의 다음 운행 날짜가 표시됩니다. |
방문자에게 보이는 움직임은 부드럽고, 추측하지 않습니다. 차량은 보고된 위치에서 다음 위치로 미끄러지듯 이동하며 마지막 보고보다 앞서 나가지 않습니다. 위치는 10초마다 새로 고쳐지며(지도 작성자가 5~60초의 다른 간격을 고른 경우 그 간격), 페이지가 숨겨져 있는 동안은 멈춥니다. 오늘의 상태와 추정 시간은 1분마다 새로 고쳐집니다. 새로 고침에 실패하면 마지막 화면을 유지합니다.
근무 중인 차량만 표시되며, 정밀도는 플릿의 공개 정밀도가 허용하는 수준입니다. 근무가 끝난 차량은 다음 새로 고침에서 사라집니다.
모든 시간은 추정치입니다. 도로 거리와 일반적인 속도로 계산하며 교통 상황은 포함하지 않습니다. 분 단위로 올림하여 약 12분 또는 약 1시간 20분처럼 표시하고, 도착 시각으로는 표시하지 않습니다. 두 지점 사이에 도로 경로가 없으면 예상 없음라고 표시됩니다. 도로 경로는 OpenStreetMap 데이터로 만들며, © OpenStreetMap contributors, ODbL에 따릅니다.
Request Pickup은 정류장 컬렉션의 요청 작업입니다. 작성자가 방문자가 픽업 위치와 목적지를 고르게 하기를 켰다면, 방문자는 먼저 픽업 위치(바꾸지 않으면 정류장 자체)와 목적지를 주소 검색이나 지도 탭으로 정한 다음 요청 양식을 작성합니다. 두 지점 모두 요청과 함께 전달됩니다.
패널의 레이블은 viewer의 언어를 따르며, 채팅 바와 같은 10개 언어를 지원합니다.