Skip to content
Console

Events and Rich Output

SDK responses may contain more than plain text. A reply can include speech, display items, event metadata, or policy information.

Build clients so they can read the normalized response first, then inspect richer fields when the app needs them.

Output Use it for
text The collected answer text, which can contain SSML.
display_text Answer text with markup removed for visual display.
display_items() Text, choices, tables, images, and attachments.
events The collected events, including their name, data, and context.
handled, ok, and failure_event Whether the request completed and any recorded runtime failure.

These are Python names. Node uses displayText, displayItems(), and failureEvent; its events array exposes the same event concepts. There is no shared speech, raw_event, or policy_denied reply property. See the language’s SDK page for its exact API.

Use SDK constants when a language exposes them. The underlying event names stay stable across SDKs.

Event Meaning
recognizer_loop:utterance A client sends a user utterance.
speak The hub returns speech or reply text.
ovos.intent.unmatched A request matched no skill (current OVOS name).
complete_intent_failure A request matched no skill (legacy Mycroft name; still emitted by older runtimes).
hive.policy.denied Access policy blocked the request.
mycroft.skill.handler.start A skill handler started.
mycroft.skill.handler.complete A skill handler finished.

Display items let apps show structured results without reverse-engineering the text.

Text

A paragraph, title, subtitle, or status message.

Choice

A selectable option that can map back to send_action.

Table

Rows and columns for comparison, status, or inventory style output.

Image

A URL or attachment reference that the client can render.

from thalovant import ThalovantClient
with ThalovantClient.from_identity_file("_identity.json") as client:
reply = client.ask("Show the next maintenance steps.")
print(reply.display_text)
for item in reply.display_items():
print(item.kind, item.text, item.data, item.url)

For a choices item, item.data contains the choices. Each choice can carry a title and a string payload that the app passes to send_action. Render only the item kinds your app supports.

Case Recommended handling
Answer text is present Show display_text in a visual client; handle text or utterances according to your voice renderer’s SSML support.
display_items() returns items Render the items the client understands and ignore unknown kinds.
A hive.policy.denied event arrives Show a safe denied message and keep the request ID for troubleshooting.
A request raises a runtime error Handle it as a failed request; some failures are raised before a reply object exists. Intent inventory also has a typed policy error.
A reply has no useful output Check handled, failure_event, and event names before presenting it as an answer. Redact event data before logging diagnostics.

Last reviewed: September 9, 2026. Review this page when reply models, display item helpers, event names, or policy-error behavior changes.