Skip to content

Messaging & Presentation

Copy page

This group shapes the conversation around the model: the standing instructions it carries, the copy a visitor meets before typing, and how replies are rendered.

SettingFieldIn the SDK?
Thread prefixthreadPrefix✅ (as a string)
Message prefixmsgPrefix✅ (as a string)
Conversation startersconversationStarterconversationStarters
Welcome messagechatWelcomeMessage (+ overrides)
Chat CTAchatCTA
DisclaimerchatDisclaimer
Terms of servicetermsOfService
Response typesresponseTypeConfigOverride
ThemethemeOverride, pictureOverridethemeOverride

Both inject standing instructions; they differ in when.

Thread prefix is injected once, at the very start of a conversation. Persona, tone, ground rules for the whole thread:

await divinci.releases.updateInWorkspace(workspaceId, releaseId, {
threadPrefix:
"You are Aurora, the shopping assistant for Aurora Outfitters. " +
"Friendly, knowledgeable, and always mention free returns when relevant.",
});

Message prefix (msgPrefix) re-injects before every message. Use it for a rule that must survive many turns — a formatting constraint, an output shape — where a single instruction at thread start would drift out of the model’s attention.

The trade is cost: a message prefix is re-sent every turn and pays its tokens every turn. Put durable personality in the thread prefix and reserve the message prefix for rules that genuinely decay.

The clickable prompts on an empty chat — a handful of short options, each capped at 200 characters.

await divinci.releases.updateInWorkspace(workspaceId, releaseId, {
conversationStarters: [
"What's your return policy?",
"Help me find a winter jacket",
],
});

The first thing a visitor sees when they open chat. Welcome messages are managed globally for the workspace; the Release form overrides each message’s active status for this Release only.

That is what makes A/B testing welcome copy cheap: write both messages once at workspace level, then activate a different one per Release via chatWelcomeMessageOverrides — no duplication, and the copy stays in one place.

Shown before a visitor can start chatting. The admin UI offers a rewrite with Divinci shortcut — write it roughly, and the assistant cleans up the wording.

await divinci.releases.updateInWorkspace(workspaceId, releaseId, {
chatDisclaimer: "Responses are AI-generated and may be inaccurate.",
});

A disclaimer is presentation, not consent — it informs, and nothing records that the visitor read it. When you need a recorded, versioned agreement, use Terms of Service.

The one section with its own nested publish cycle, and the only one that can force existing users to act.

FieldMeaning
draftContentWorking copy. Editing it never changes what users see
publishedContentWhat users actually accept. Set only by an explicit publish
publishedVersion0 = never published
versionHistoryPrior published versions

Acceptance is recorded per identity — an Auth0 userId or an anonymous session id, with timestamp, IP, and user agent — so anonymous visitors are gated and recorded too.

Controls whether replies may include generated diagrams or images.

presetAllows
text-onlyText
text+diagramsText, mermaid diagrams
text+imagesText, generated images
text+diagrams+imagesEverything
customExactly allowedTypes

enforcement decides how hard the rule is: advisory adds prompt guidance and hopes, while strict strips disallowed content from the response after generation. Advisory is cheaper and occasionally leaks; strict costs the generated tokens anyway but guarantees the output shape.

Leave the override unset to inherit the platform default.

themeOverride sets this Release’s appearance, taking priority over the workspace theme; null clears it and re-inherits. pictureOverride does the same for the avatar or logo.

The admin UI’s derive from storefront points at your site and pulls brand colours straight off the page, runs a legibility check, and drops a ready-to-use theme into the draft — reachable directly at POST /white-label/{workspaceId}/release/{releaseId}/derive-theme.

  • msgPrefix costs tokens every turn. Unlike threadPrefix, its price scales with conversation length — that, not availability, is the reason to prefer a thread prefix where either would do.
  • A Chat CTA attached here still needs to be active on its own page. Attaching references the CTA; the CTA’s own active flag is what fires it. See Chat CTAs.
  • An unpublished ToS gates nothing, and a published one gates everyone on every Release using it. There is no middle setting.
  • Welcome messages are global; only their active status is per Release. Editing the copy changes it everywhere it is active.
  • advisory enforcement is a request, not a guarantee. If a response type must never appear, use strict.