Zamok Kiosk API
    Preparing search index...

    Zamok Kiosk API

    Release Notes for DEV-2483

    This release introduces new ability for Accounts to subscribe to Notifications.

    The primary goal of this phase is to let users manage notification preferences directly from the Account page and from Managed Accounts in the Dashboard, without changing the existing Contacts notification UI.

    • Users can now configure notification preferences on their own account.
    • Administrators can now configure notification preferences for managed accounts from the Managed Accounts table.
    • Users can target specific notification problem types without creating a contact.
    • Users can define blackout dates to suppress notifications on specific days.
    • Existing Contacts-based notification management remains in place and was intentionally not changed.
    • SMS might not be functional, because the AI had a hard time with it, and I decided to just see what happens.
    • Added a new reusable account notifications editor component.
    • Added account-level notification settings storage on account documents.
    • Added dynamic loading of available notification problem types to state from module metadata.
    • Extended notification delivery so account recipients can receive the same notification events as legacy contacts.
    • Added blackout-date suppression to account-based notifications.
    • Preserved backward compatibility with the legacy Contacts notifications experience.

    The Account page now includes a new Notifications card.

    Users can now:

    • Enable or disable email notifications.
    • Save an SMS phone number.
    • Choose notification window start and end times.
    • Choose timezone offset.
    • Select days of the week when notifications are allowed.
    • Set a recovery wait duration in minutes.
    • Select notification problem types from dynamically loaded module metadata.
    • Add blackout dates that suppress notifications on selected calendar days.

    The Managed Accounts table now includes a notifications button for each managed account.

    Selecting that button opens a dedicated notifications dialog for the selected manager. The dialog uses the same shared form as the Account page so both entry points behave consistently.

    The Contacts notifications UI was intentionally left unchanged.

    Email delivery continues to use the existing SendGrid-based notification pipeline.

    SMS delivery might be broken because AI struggled with it. We'll verify in QA.

    Notification scheduling now includes eligible Accounts documents in addition to legacy Contacts documents.

    An account is considered eligible when:

    • The account belongs to the same instance.
    • The account has the detected problem type selected in notifications.problemTypes.
    • Email notifications are enabled.
    • The account has at least one enabled notification day.
    • The account has a valid email address.

    Blackout dates suppress notifications on matching local dates for the configured notification timezone.

    Missed notifications are not backfilled after the blackout date passes.

    When the same recipient could be matched through more than one source, delivery now deduplicates notification recipients before sending.

    Account records now support two new optional properties:

    • smsPhoneNumber
    • notifications

    The notifications object now supports:

    • email
    • days
    • duration
    • time.from
    • time.to
    • time.timezoneOffset
    • problemTypes
    • blackoutDates

    New action types introduced in this release:

    [
    {
    "type": "SUBMIT_UPDATE_ACCOUNT_NOTIFICATIONS",
    "purpose": "Submit self-service account notification settings from the Account page",
    "payload": {
    "smsPhoneNumber": "string | undefined",
    "notifications": {
    "email": "boolean",
    "days": "[boolean, boolean, boolean, boolean, boolean, boolean, boolean]",
    "duration": "number",
    "time": {
    "from": { "hour": "number", "minute": "number" },
    "to": { "hour": "number", "minute": "number" },
    "timezoneOffset": "number"
    },
    "problemTypes": ["string"],
    "blackoutDates": ["string"]
    },
    "helpers": "FormikHelpers"
    }
    },
    {
    "type": "INSTANCE_SET_NOTIFICATION_PROBLEMS",
    "purpose": "Store dynamic notification problem definitions loaded from module metadata",
    "payload": [
    {
    "key": "string",
    "label": "string",
    "group": "string | undefined"
    }
    ]
    }
    ]

    The existing managed-account update action was extended to carry notifications data.

    {
    "type": "INSTANCE_UPDATE_MANAGER_ACCOUNT",
    "payload": {
    "managerId": "string",
    "firstName": "string",
    "lastName": "string",
    "roles": ["string"],
    "smsPhoneNumber": "string | undefined",
    "notifications": {
    "email": "boolean",
    "days": "[boolean, boolean, boolean, boolean, boolean, boolean, boolean]",
    "duration": "number | string",
    "time": {
    "from": { "hour": "number", "minute": "number" },
    "to": { "hour": "number", "minute": "number" },
    "timezoneOffset": "number | string"
    },
    "problemTypes": ["string"],
    "blackoutDates": ["string"]
    },
    "helpers": "FormikHelpers | undefined"
    }
    }

    New Redux state paths introduced in this release:

    • state.instance.notificationProblems

    New persisted account document paths used by this release:

    • Accounts/{accountId}.smsPhoneNumber
    • Accounts/{accountId}.notifications
    • Accounts/{accountId}.notifications.email
    • Accounts/{accountId}.notifications.days
    • Accounts/{accountId}.notifications.duration
    • Accounts/{accountId}.notifications.time.from.hour
    • Accounts/{accountId}.notifications.time.from.minute
    • Accounts/{accountId}.notifications.time.to.hour
    • Accounts/{accountId}.notifications.time.to.minute
    • Accounts/{accountId}.notifications.time.timezoneOffset
    • Accounts/{accountId}.notifications.problemTypes
    • Accounts/{accountId}.notifications.blackoutDates

    The following backend behavior was added or updated:

    • Account update validation now accepts smsPhoneNumber and notifications.
    • Managed account update validation now accepts smsPhoneNumber and notifications.
    • Self-account updates persist notification settings through the existing account update route.
    • Managed-account updates persist notification settings through the existing manager update route.
    • Manager updates only write notification-related fields when present in the request, which avoids wiping data during unrelated edits.

    Available notification problem types are now loaded dynamically from module metadata instead of being hardcoded in the new account-based UI.

    This allows the UI to stay aligned with the notification problem definitions already declared by enabled modules.

    Key implementation areas for engineering review:

    • packages/module-common-account/lib/AccountNotifications.tsx
    • packages/module-common-account/lib/epics.ts
    • packages/module-common-instance/lib/accountNotifications.ts
    • packages/module-common-instance/lib/dashboard/components/AccountNotificationsEditor.tsx
    • packages/module-common-instance/lib/dashboard/components/AdminInstances/ManagedAccountNotificationsDialog.tsx
    • packages/module-common-instance/lib/epics.ts
    • packages/module-common-instance/lib/reducers/notificationProblems.ts
    • packages/shell-functions/src/auth/account.ts
    • packages/shell-functions/src/notifications/notifyer.ts
    • packages/shell-functions/src/notifications/scheduler.ts
    • SMS delivery may not be implemented in this phase, needs testing.
    • Contacts notifications remain on the legacy model and were not migrated.
    • Blackout dates suppress delivery but do not reschedule missed notifications.
    • Send throttling is iffy, we need to check platform limits where applicable, and then apply business rules on top of that.

    Release Notes for v21.0.0

    In this release we introduce our new agentic AI kiosk browser, Zamok Genie. Conversational and intelligent, the Zamok Genie is capable of assisting users in exciting new ways. Try it today!

    Introducing Zamok Genie — The Agentic Kiosk Browser

    We’re excited to announce Zamok Genie, a new AI-powered agentic browser built directly into the Zamok kiosk platform. Genie brings conversational intelligence, real-time kiosk awareness, and actionable automation to every kiosk running the latest version of Zamok.**

    **Genie is designed to help customers navigate complex websites, complete multi-step workflows, resolve common questions, and perform kiosk-specific actions—naturally and reliably.

    Genie uses Google Gemini to provide fast, context-aware voice and text interaction. The model can reason over kiosk data, user intent, website data, and third-party APIs to deliver accurate step-by-step assistance.

    Genie can call the Zamok Kiosk API tools to perform real actions, not just answer questions.

    This enables the AI to do things such as:

    • Pull contact details from a directory and initiate a VoIP call

    • Help user navigate a website or fill out complex web forms

    • Greet users and guide them to their destination

    • Translating webpages on demand

    All tool calls follow the same permissions and auditing rules as standard Zamok operations.

    Genie can inspect the current webview and kiosk state, allowing it to:

    • Understand the user’s position in a website

    • Provide contextual reminders (i.e. “Click the button that says, 'Continue' to proceed”)

    • Detect errors or missing fields

    • Invoke kiosk functionality (i.e. “Would you like me to call customer support?”)

    This makes Genie a natural fit for sites with complex navigation or long workflows.

    Users can interact in the mode most comfortable for them:

    • Natural voice conversations with full speech-to-text and text-to-speech

    • Text chat for quiet environments or accessibility needs

    Voice mode has been optimized for kiosk acoustics, and the AI works seamlessly across multiple written and spoken languages.

    Administrators can configure Genie’s behavior centrally:

    • Organization-level and kiosk-level AI instructions

    • Dynamic prompt fragments with environment context

    • Custom knowledge and workflow hints

    • Optional restrictions on tool use

    • Optional guardrails for kiosk-safe language

    Changes apply instantly across the kiosk fleet.

    Zamok Dashboard now includes detailed reporting for AI usage:

    • Token consumption per kiosk

    • High-traffic periods

    • Chat session summaries

    • Tool-use reports

    • Cost-estimation export

    This gives organizations full visibility into usage and spending.

    Zamok Genie is now available for all customers on Zamok’s latest release. Contact your Advanced Kiosks representative for onboarding, pricing, or custom integrations.

    Some features require microphone, speakers, and/or camera.

    General Kiosk Experience

    Revamps the No Network experience:

    • Fully offline-ready content

    • Auto-displays when no internet is detected

    • New settings card (enable/disable, RTE for content, timeout control)

    • Fixes related to maintenance mode and kiosk-level overrides

    Improves email entry on kiosks by adding “@” key and “.com” key

    Device Integration & Hardware Support

    Full integration with the Pertech 6100 check scanner: https://www.pertechindustries.com/server-side/downloads/support/6100-information-sheet.pdf

    Kiosk API functions and scan state available now.

    Fixes an issue where VOIP calls reset Windows mic volume to 75%.
    Volume now remains consistent across sessions.

    API Documentation

    Our API documentation has been updated as well. Check it out at: https://kiosk-api-docs.web.app/