v3.0
No active call
📵
Call ID
— no active call —
Join URL
📡 CALL 1 · operation_selection
🚪 CALL 2 · walk_in
Start a call to begin
🚀 POST /aikiosk/callstart STEP 1
ℹ️Simulates kiosk motion detection triggering a new AI call session. Returns callId + joinUrl.
📡 Request Config
🪪 Identity Headers
🖥 Kiosk Context Headers
📬 Response
// Response will appear here...
📊 System Architecture Flow
📹 Kiosk Camera
Motion Detected
HTTP POST
🖥 Node.js Backend
/aikiosk/callstart
REST API
🤖 Ultravox
Agent + templateContext
🔊 Ultravox Speaks
voiceprompt → TTS
🎤 Guest Voice
Audio stream
WebSocket
🤖 Ultravox STT
Processes audio
🔧 Ultravox Tool
nextstep_and_valuestore_tool
HTTP Tool Call
🖥 Backend
/sendCallResponse
Socket.IO emit
📺 Kiosk Screen
GUEST_RESPONSE event
✅ Voice Screen
ACK with next screen data
OR
⌨️ Input Screen
Email / Text — no voice
/sendKioskResponse
Silent context + forced speech
⟳ Loop repeats until call ends — Ultravox speaks next question, guest responds again
🏷 Component Legend
📹 Kiosk/Guest 🖥 Node.js Backend 🤖 Ultravox AI 📡 Socket.IO ⌨️ Manual Input

operation_selection
Agent greets → language choice → operation menu
walk_in
Agent greets → reservation confirmation → check-in flow
templateContext
Hotel policy, property data, current date/time injected at call start
ACK pattern
emitAndWaitForAck — backend blocks until kiosk confirms next screen
⚙️ Global Configuration
💡Values saved here auto-populate all test forms. Stored in sessionStorage only — never sent anywhere until you trigger an API call.
📡 Server
🪪 Identity Headers
🖥 Kiosk Context Headers
🤖 Ultravox
🔌 API Endpoint Reference
POST {baseUrl}/aikiosk/callstart
Body: propertyid, kioskid, operation | Headers: subdomainname, accesskey, token, uid, companyid, ...
POST {baseUrl}/sendCallResponse
Body: subdomainname, kioskid, screenname, data_feature (JSON string)
POST {baseUrl}/sendKioskResponse
Body: callid, screenname, previousscreenname, voiceprompt, options[], keyalias[], collecteddata{}
POST https://api.ultravox.ai/api/calls/{callId}/send_data_message
Header: X-API-Key | Body: type, text/content, urgency
WS {joinUrl}
Binary: s16le PCM 48kHz bidirectional | Text: JSON (state, transcript, playback_clear_buffer, ...)