Skip to main content

Client SDK

The JavaScript SDK is available as soon as you integrate your application with either the Web SDK or via Canvas Theme. It enables client-side automation with your Digital Twin—such as sending messages, listing favorites, and running assistant instructions.
To use the JavaScript SDK, your Digital Twin must be integrated into a web application using the Web SDK or injected into Canvas via Theme.

Integration Options

Integrate your Digital Twin in one of these ways to access the SDK:
  • Web SDK: Embed the Digital Twin directly in your web app by installing the Web SDK for easy setup, user management, and customization.
  • Canvas Theme: Inject the Digital Twin into Canvas using the Theme for direct access to SDK features within the Canvas LMS.
Both methods offer secure, flexible options to maximize your Digital Twin’s functionality. Select the approach that best fits your environment.

Global Window Object

When your Digital Twin is integrated, the pria object is injected directly onto the global window (DOM), making it the central access point for all Pria SDK API calls from anywhere in your application. This allows you to easily interact with Pria’s messaging, UI control, and event management methods without additional imports or setup—simply reference window.pria.
By being attached to the DOM, pria acts as your always-available gateway for secure and seamless integration with all Pria interfaces and backend services—enabling features like messaging, automation, and UI control from any context in your client-side code.

Messaging Technology

Communication between your web application and the Praxis AI Middleware via the Web SDK is powered by browser messaging, which securely enables cross-origin interactions between window objects, such as between a main application and an embedded iframe or pop-up. Requests are sent to the backend middleware server using the pria.send() API method, ensuring safe and reliable message delivery for seamless integration and robust application workflows.

Voice (Convo Mode) in Embedded Contexts

When your Digital Twin uses voice conversations (Convo Mode) inside an iframe you control — including LMS embeds such as Canvas — the host page’s iframe must delegate microphone and audio permissions, or the browser will hard-block voice regardless of what the user allows:
Without this, the in-app “Tap to start talking” screen still renders, but tapping surfaces a microphone-permission error instead of starting the conversation. If the instance has Start Convo mode on login enabled, the embedded app raises its tap-to-start screen automatically after the SDK session begins. Host-page display options (such as convoMode in displayOptions) and explicit convo.start / convo.stop commands keep priority over that instance-level setting.

Sending a Request

Request Message

To make a request, simply compose a Javascript object containing the command and arguments like below:

Available Commands

Sample Requests

Send a text message to your digital twin:

Error Handling

The pria.send() function may throw these errors:
  • “Connect Pria first, then retry” - Pria is not properly initialized
  • “Function requires valid JSON” - Invalid request format
  • “Unauthorized” - Request unauthorized for user

Receiving Responses

Subscribe to Responses

To receive responses from Pria, you must first subscribe:

Response Message

A response message from the Pria AI Middleware follows a clear and structured format to ensure consistent integration and robust client parsing. Each response includes standard fields that define its source, content, format, and compatibility.
Response Fields type The literal string constant "pria-response". Use as a filter or discriminator in your message handling logic. response Top-level object that wraps all core response details from Pria AI Middleware. version Integer value indicating the version of the response structure. Used for ensuring compatibility with various client parsers.
Always check the version field to ensure your parser correctly supports all required fields and response shapes.

Sample Responses

See Object Definitions for a complete list of responses

UI Control Methods

The SDK provides several methods to control Pria’s visibility and display state.

Visibility Control

Control whether Pria is visible on the page at all. When hidden, both the button and UI panel are completely removed from view.

Display Control

Control whether the Pria UI panel is expanded or collapsed to the button.

Ready State

Check if Pria is fully initialized and ready to receive commands before sending messages:
Always check isReady() before sending commands to ensure the SDK is fully connected to the middleware.
Recommended Ready Check Pattern: When integrating Pria, use this pattern to safely check if the SDK is ready:

Convo Ready State

After the user authenticates, the Digital Twin sends a convo.ready event to the SDK indicating whether real-time voice (speech-to-speech) mode is authorized for the current user. The SDK captures this and exposes it via isConvoReady().
isConvoReady() returns false until the Digital Twin sends the convo.ready event after login. This happens automatically — you do not need to request it.
The convo.ready event: The convo.ready event is a proactive notification sent by the Digital Twin after the user logs in. It tells the embedding application whether real-time voice is available. You can listen for this event via pria.subscribe():
Full-screen voice mode example (hide UI while loading, show when voice is ready): This pattern keeps the Digital Twin hidden during initialization and only reveals it when voice mode is confirmed ready, providing a seamless voice-first experience:
For a simpler approach without custom subscriber logic, use the convoMode display option which handles auto-start automatically. See Convo Mode display option.

Cleanup and Destroy

Properly destroy and remove Pria when no longer needed:
The destroy() method performs complete cleanup:
  • Removes all UI elements (iframe, button, containers)
  • Removes injected CSS and OAuth scripts
  • Cleans up all event listeners (keyboard shortcuts, drag handlers, message handlers)
  • Clears internal state and subscriber callbacks
  • Removes window.pria and window.priasdk references
After calling destroy(), the SDK must be completely reloaded to use Pria again. All references to pria become invalid.
Destroy and Reload Pattern: If using the Web SDK wrapper (PriaIntegration), use these methods for clean lifecycle management:

UI Control Reference

Working with the SDK

Authentication & Security

The SDK uses the identity of the user currently connected to the digital twin. Ensure proper authentication is in place before making requests.

Requirements

  • Pria must be properly configured and fully connected
  • User must be authenticated with appropriate permissions
  • Valid session must be established

Content Format

Pria outputs content in Markdown format. Parse responses accordingly in your application.

Error Handling

It is best practices to wrap function calls in a try/catch block to avoid unhandled exceptions

Response Processing

It is best practive to handle responses from Pria by looking at response message type, isError, command, etc to handle responses for all situations

Cleanup

Consider removing the event handlers you have declared when subscribing to receive response messages before your application terminates

Troubleshooting

Common Issues

Debug Mode

Enable debug logging to troubleshoot integration issues:

SDK Playground Example

You can take a look at a running example at SDK Playground Example.
SDK Playground Example This example demonstrates how to cleanly initialize the integration, detects when sucessfully connected, execute specific commands; such as starting conversation, listing favorites, conversations or assistants, posting a new message, and more.

API Class Example

This example is provided AS IS to demonstrate how you can cleanly integrate a Digital Twin in your Web Application and sendvarious commands programatically in response to user actions on the page. It is extracted from the playground example code.