Other interfaces

interface ActionEventParams

Provides additional parameters to custom message action or conversation action events.

Properties

key (optional)
: string

Any number of key/value pairs that will be sent with the action event.

Add to action buttons in your theme components with the syntax data-<key>=<value>, or to action buttons in messages with the syntax action?<key>=<value>.

Examples:

The following action button theme component will emit a color action event when you click it, with a parameter called choice that takes the value red:

<ActionButton action="color" data-choice="red">Red</ActionButton>

The following action button message markup will emit a color message action event when you click it, with a parameter called choice that takes the value blue:

<actionbutton:color?choice=blue|Blue>

Both the key and the value must be strings; arbitrarily deeply nested JSON is not supported.

interface Conversation

Encapsulates an active conversation between two parties.

Use this object to send system messages to the conversation or to programmatically select a conversation by passing it to Inbox​.select.

Conversation objects are created with the deprecated Session​.getOrStartConversation method.

Deprecated. Use Session​.getOrCreateConversation instead

Properties

id
: string

The ID of the conversation

custom (optional)
: { [name: string]: string | null } | null

Optional custom conversation meta data

Set any property to null to delete the existing value (if any). When omitted or undefined, the existing value remains unchanged.

photoUrl (optional)
: string | null

An optional URL to a photo which will be shown as the photo for the conversation.

Set to null to delete the existing value (if any). When omitted or undefined, the existing value remains unchanged.

subject (optional)
: string | null

An optional conversation subject which is displayed in the chat header

Set to null to delete the existing value (if any). When omitted or undefined, the existing value remains unchanged.

welcomeMessages (optional)
: Array<string> | null

interface ConversationActionEvent

Emitted from Chatbox​.onCustomConversationAction when a user clicks on a custom action in a conversation within the TalkJS UI

Properties

action
: string
conversation
: ConversationData | null

The value will be null if the conversation action is triggered from inside the ConversationListHeader component.

interface ConversationSelectedEvent

This represents the interface of the event triggered from Inbox​.onConversationSelected.

Properties

conversation
: ConversationData | null

The current conversation object

The current TalkJS User

participants (optional)
: Array<UserSnapshot>

The participants in the conversation, including the current user

Deprecated others (optional)
: Array<UserSnapshot>

Deprecated.

When you are the only participant in the conversation, this property includes the current user. Use participants and filter out the current user instead.

The other participants in the conversation that are not the current user

interface CustomData

Used to store additional metadata on users, conversations and messages

Properties

key (optional)
: string

Any number of key/value pairs of your choosing to be stored along with the associated resource. You can use custom data for all kinds of purposes, such as customizing a user's email notification text, transmitting contextual user data, or making email login tokens.

Both the key and the value must be strings; arbitrarily deeply nested JSON is not supported. Example:

1{"country":"nl", "itemId": "720"}

Set to null to delete the existing value (if any). When omitted or undefined, the existing value remains unchanged.

interface CustomEmojiDefinition

Defines a custom emoji

See ChatboxOptions​.customEmojis

Properties

url
: string

Image file URL

Must be a fully-qualified URL of image file, eg an SVG, GIF or PNG. The image must be square (same width and height) and is always scaled down to the size of an emoji.

hidden (optional)
: boolean

Hides this emoji from the emoji picker and autocompleter

Hidden emojis can't be sent in new messages, or used in new emoji reactions, but they still display properly in existing messages and reactions. This lets you safely remove previously used custom emoji from the chat UI.

interface DesktopNotificationToggledEvent

This event is triggered when desktop notifications are toggled.

Properties

isEnabled
: boolean

Boolean indicating if desktop Notifications are enabled or not

interface FullStoryOptions

Properties

org
: string

Fullstory organization ID

host (optional)
: string

Fullstory hostname

interface KeyEvent

Emitted through Chatbox​.onKeyup when the user presses a key. All fields except isInputFocused precisely match the corresponding fields in the browser's KeyboardEvent.

Properties

altKey
: boolean
code
: string
ctrlKey
: boolean
isInputFocused
: boolean

True if the event was triggered while an element was focused that can handle keyboard events.

key
: string
location
: number
metaKey
: boolean
repeat
: boolean
shiftKey
: boolean

interface LeaveConversationEvent

Triggered when the user clicks a "Leave conversation" action in the chat UI.

Method Overview

preventDefault

Call this to prevent the conversation from being left, ie to cancel the user action.

Properties

conversation
: ConversationData

The conversation that the user intends to leave

preventDefault

leaveConversationEvent.preventDefault()

Call this to prevent the conversation from being left, ie to cancel the user action.

Doing this will turn the "Leave conversation" action into a no-op, so you might want to display some sort of error message to the user so they understand why their click didn't do anything.

You can only call preventDefault from inside the onLeaveConversation event handler or a function immediately invoked from it. Calling preventDefault later, or after some promise resolved, has no effect.

Returns

void

interface MarkConversationAsUnreadEvent

Triggered when the user clicks a "Mark as unread" action in the chat UI.

Method Overview

preventDefault

Call this to prevent the conversation from being marked as unread, ie to cancel the user action.

Properties

conversation
: ConversationData

The conversation that the user intends to mark as unread

preventDefault

markConversationAsUnreadEvent.preventDefault()

Call this to prevent the conversation from being marked as unread, ie to cancel the user action.

Doing this will turn the "Mark as unread" action into a no-op, so you might want to display some sort of error message to the user so they understand why their click didn't do anything.

You can only call preventDefault from inside the onMarkConversationAsUnread event handler or a function immediately invoked from it. Calling preventDefault later, or after some promise resolved, has no effect.

Returns

void

interface MessageActionEvent

Emitted from Chatbox​.onCustomMessageAction when a user clicks on a custom action, as defined on the "Chat UI" page of the dashboard.

Properties

action
: string
message
: Message

interface MessageField

Encapsulates the message entry field tied to the currently selected conversation.

Method Overview

focus

Focuses the message entry field.

getText

Gets the current content of the message field.

setText

Sets the message field to text.

setVisible

Sets the visibility of the Message Field to a given value or to a certain predicate.

typeText

Types the given text into the message field.

focus

messageField.focus()

Focuses the message entry field.

Note that on mobile devices, this will cause the on-screen keyboard to pop up, obscuring part of the screen.

This method will silently fail if the participant only has "Read" access in the current conversation.

Returns

void

getText

messageField.getText(): Promise<string>

Gets the current content of the message field.

Returns

Promise<string>

setText

messageField.setText(text)

Sets the message field to text.

Useful if you want to guide your user with message suggestions. If you want to start a UI with a given text showing immediately, call this method before calling Inbox​.mount

This method will silently fail if the participant only has "Read" access in the current conversation.

Parameters

text
: string

The text to be displayed in the message entry field

Returns

void

setVisible

messageField.setVisible(visible)

Sets the visibility of the Message Field to a given value or to a certain predicate.

See MessageFieldOptions​.visible for examples.

Parameters

visible
: boolean | ConversationPredicate

boolean or a more advanced predicate.

Returns

void

typeText

messageField.typeText(text)

Types the given text into the message field.

Inserts text wherever the cursor currently is.

This method may be useful for various bot/simulation scenarios. Additionally, it lets you make it so that any regular keypress lets the user start typing into the message field, even if it is not focused.

This method will silently fail if the participant only has "Read" access in the current conversation.

To do that, capture the keypress using a regular window event listener, ensure that the user isn't typing into a different input, and then call this method to type the key, followed by focus. Note that TalkJS already does this out-of-the box when the chat UI iframe has focus and ChatboxOptions​.captureKeyboardEvents is off.

Parameters

text
: string

The text to be inserted in the message entry field

Returns

void

interface MessageFieldOptions

Properties

autofocus (optional)
: false | "smart"

Determines whether the message field should automatically focus when the user navigates.

The default option is "smart", which means that focus is switched to the message field whenever a conversation is selected, if it is possible to do this without negative side effects. This is possible when:

- The message field is inside the browser viewport (so focusing will not unexpectedly cause the page to scroll)

- The user is likely on a desktop/laptop computer (so focusing will not unexpectedly expand a mobile on-screen keyboard).

Note: If you need more control, consider setting autofocus to false and calling MessageField​.focus at appropriate times.

enterSendsMessage (optional)
: boolean

If set to true, pressing the enter key sends the message (if there is text in the message field). When set to false, the only way to send a message is by clicking or touching the "Send" button. Defaults to true.

placeholder (optional)
: string

Overrides the placeholder text that is displayed in the message field when no text has yet been entered.

Defaults to "Say something..." (or a translation thereof).

spellcheck (optional)
: boolean

Specifies whether the spellcheck attribute is set on the message field. Note that setting this to true may also enable autocorrect on some mobile devices. Defaults to false.

visible (optional)
: boolean | ConversationPredicate

Determines whether the message field is visible. Pass either a boolean (false to hide it), or a ConversationPredicate. The latter approach lets you show/hide the message field based on properties of the current conversation.

For example, to hide the message field when the current user has no write access to the current conversation, do the following:

1// this predicate holds iff the current user's `access` to the current conversation is
2// set to "ReadWrite"`:
3const showMessageField = { access: ["==", "ReadWrite"] };
4session.createInbox(conversation, { messageField: { visible: showMessageField } });

Defaults to true.

interface SelectConversationEvent

Event data triggered from Inbox​.onSelectConversation.

Method Overview

preventDefault

Prevents the clicked conversation from being selected.

Properties

conversation
: ConversationData

The current conversation object

The current TalkJS User

participants
: Array<UserSnapshot>

The participants in the conversation, including the current user

Deprecated others
: Array<UserSnapshot>

Deprecated.

When you are the only participant in the conversation, this property includes the current user. Use participants and filter out the current user instead.

The other participants in the conversation that are not the current user

messageId (optional)
: string

The id of the message to scroll to (This property only exists when a message search result has been selected)

preventDefault

selectConversationEvent.preventDefault()

Prevents the clicked conversation from being selected.

Returns

void

interface SenderPredicate

Properties

custom (optional)
: { [key: string]: CustomFieldPredicate }

Only show messages from senders who have particular custom fields set to particular values.

Every key must correspond to a key in a user's custom data that you have set. It is not necessary for all senders to have these keys.

Each value must be one of the following:

A string, equal to "exists" or "!exists"

A 2-element array of [operator, operand] structure. The operand must be either a string or an array of strings (for the oneOf operators). Valid operators are: "==", "!=", "oneOf", and "!oneOf".

Example, assume you have some users with the alternateRole field in their custom data:

1// Only show messages from senders that have the field alternateRole set:
2{custom: {alternateRole: "!exists" }}
3
4// Only show messages from senders that have the field alternateRole set to "support":
5{custom: {alternateRole: ["==", "support"]}}

id (optional)
: FieldPredicate<string>

Only show messages from a sender(s) with a given id.

For example:

1// Don't show messages sent by user with ID 1
2{sender: {id: ["!=", "1"]}}

locale (optional)
: FieldPredicate<string>

Only show messages from senders with a given locale.

For example:

1// Only show messages from senders with locale: en-GB or en-US
2{sender: {locale: ["oneOf", ["en-GB", "en-US"]}}

role (optional)
: FieldPredicate<string>

Only show messages from senders who have a particular role.

For example:

1// Only show messages from senders with role: Admin and locale: en-GB
2{sender: {role: ["==", "Admin"], locale: ["==", "en-GB"]}}

interface SendMessageEvent

The event triggered when listening for the sendMessage event on the Inbox, Chatbox and Popup. This event is triggered before the message is sent to TalkJS, allowing you to modify the contents of the message or its metadata by using override().

Properties

conversation
: ConversationData

The current conversation object

The current TalkJS user

message
: SentMessage

The message that was sent

override
: ({ text, custom, }: { text?: string custom?: CustomData }) => void

This function allows you to modify the contents of the message or its metadata before the message is sent

interface SentMessage

A message that was sent to TalkJS

Properties

type
: "UserMessage" | "SystemMessage"

Identifies the message as either a User message or System message

conversationId
: string

The ID of the conversation that the message belongs to

id
: string | undefined

The message ID of the message that was sent

readBy
: string[]

Contains an Array of User​.id's that have read the message

senderId
: string

Contains the user ID for the person that sent the message

attachment (optional)
: { url: string size: number dimensions?: AttachmentDimensions }

Only given if the message contains a file. An object with the URL and filesize (in bytes) of the given file. Attachment dimensions (in px) are sometimes available for image and video attachments, used to set the size of the thumbnail before loading, to prevent content shift when loading media on slower connections.

location (optional)
: [number, number]

Only given if the message contains a location. An array of two numbers which represent the longitude and latitude of this location, respectively. Only given if this message is a shared location.

Example:

1[51.481083, -3.178306]

text (optional)
: string

Contains the message's text

interface SimpleConversationPredicate

Allows you to filter conversations down to a specific subset.

Use with Inbox​.setFeedFilter or pass InboxOptions​.feedFilter to Session​.createInbox. For example, to hide read conversations, use:

inbox.setFeedFilter({ hasUnreadMessages: true }).

To show everything (ie to disable the filter), use an empty object:

inbox.setFeedFilter({}).

Properties

Only select conversations that the current user as specific access to.

Must be an 2-element array of [operator, operand] structure. Valid operators are: "==", "!=", "oneOf", and "!oneOf".

The operand must be either a string (one of "ReadWrite", "Read" or "None") or an array of strings (for the oneOf operators).

Example:

1// to remove conversations that the user has no access to anymore, do:
2{ access: ["!=", "None"] }

createdAt (optional)
: NumberPredicate

Only select conversations that have been created in a particular time interval.

Must be an 2-element array of [operator, operand] structure. Valid operators are: ">", "<", ">=", "<=", "between", and "!between".

The operand must be either a number or a 2-element array of numbers (for the between operators).

Example:

1// to show only the conversations that have been created after the UNIX timestamp 1679298371586
2{ createdAt: [">", 1679298371586] }

custom (optional)
: { [key: string]: CustomFieldPredicate }

Only select conversations that have particular custom fields set to particular values.

Every key must correspond to a key in the custom conversation data that you set (by passing custom to ConversationBuilder​.setAttributes). It is not necessary for all conversations to have these keys.

Each value must be one of the following:

A string, equal to "exists" or "!exists"

A 2-element array of [operator, operand] structure. The operand must be either a string or an array of strings (for the oneOf operators). Valid operators are: "==", "!=", "oneOf", and "!oneOf".

Examples, assuming you have set a category custom field on your conversations:

1// only show conversations that have no category set:
2{ custom: { category: "!exists" } }
3
4// only show conversations of category "shoes"
5{ custom: { category: ["==", "shoes"] } }
6
7// only show conversations either category "shoes" or "sandals"
8{ custom: { category: ["oneOf", ["shoes", "sandals"] ] } }
9
10// only show conversations about shoes that are marked visible.
11// this assumes you also have a custom field called `visibility`
12{ custom: { category: ["==", "shoes"], visibility: ["==", "visible" ] } }

hasUnreadMessages (optional)
: boolean

Set this field to only select conversations that have, or don't have any, unread messages.

lastMessageTs (optional)
: NumberPredicate

Only select conversations that have the last message sent in a particular time interval.

Must be an 2-element array of [operator, operand] structure. Valid operators are: ">", "<", ">=", "<=", "between", and "!between".

The operand must be either a number or a 2-element array of numbers (for the between operators).

Example:

1// to show only the conversations that have the last message sent after the UNIX timestamp 1679298371586
2{ lastMessageTs: [">", 1679298371586] }

subject (optional)
: FieldPredicate<string | null>

Only select conversations that have the subject set to particular values.

Must be an 2-element array of [operator, operand] structure. Valid operators are: "==", "!=", "oneOf", and "!oneOf".

The operand must be either a string or an array of strings (for the oneOf operators).

Example:

1// to show only the conversations that have "Black leather boots" or "Hair Wax 5 Gallons" as the subject
2{ subject: ["oneOf", ["Black leather boots", "Hair Wax 5 Gallons"]] }

interface SimpleMessagePredicate

Lets you show only specific messages in the chat panel of a Chatbox, Inbox or Popup.

Used in methods like Chatbox​.setMessageFilter. For example, to hide all system messages (eg only show user messages), do:

chatbox.setMessageFilter({type: ["==", "UserMessage"]})

To show all messages (ie disable the filter), just pass an empty object:

chatbox.setMessageFilter({})

Properties

type (optional)
: FieldPredicate<"UserMessage" | "SystemMessage">

Only show messages of a given type, for example:

1{type: ["==", "SystemMessage"]}

createdAt (optional)
: NumberPredicate

Only select messags that have been sent in a particular time interval.

Must be an 2-element array of [operator, operand] structure. Valid operators are: ">", "<", ">=", "<=", "between", and "!between".

The operand must be either a number or a 2-element array of numbers (for the between operators).

Example:

1// to show only the messages that have been sent after the UNIX timestamp 1679298371586
2{ createdAt: [">", 1679298371586] }

custom (optional)
: { [key: string]: CustomFieldPredicate }

Only select messages that have particular custom fields set to particular values.

Every key must correspond to a key in the custom message data that you have set. It is not necessary for all messages to have these keys.

Each value must be one of the following:

A string, equal to "exists" or "!exists"

A 2-element array of [operator, operand] structure. The operand must be either a string or an array of strings (for the oneOf operators). Valid operators are: "==", "!=", "oneOf", and "!oneOf".

Examples, assuming you have set a category custom field on your messages:

1// Only show messages that have no category set:
2{ custom: { category: "!exists" } }
3
4// Only show messages of that have the category "shoes"
5{ custom: { category: ["==", "shoes"] } }
6
7// Only show messages that have the 'topic' either "inquiry" or "reservation"
8{ custom: { topic: ["oneOf", ["inquiry", "reservation"] ] } }
9
10// Only show messages about shoes that are marked visible.
11// this assumes you also have a custom field called `visibility`
12{ custom: { category: ["==", "shoes"], visibility: ["==", "visible" ] } }

origin (optional)
: FieldPredicate<"web" | "rest" | "email" | "import">

Only show messages that were sent by users (web), through the REST API (rest), via reply-to-email (email) or via the import REST API (import).

For example:

1// Don't show messages that were sent via the REST API
2{ origin: ["!=", "rest"] }

sender (optional)
: SenderPredicate

Only show messages that are sent by a sender that has all of the given properties

For example:

1// Only show messages sent by users with the role of 'admin' and if the user ID is 1.
2{sender: {role: ["==", "admin"], id: ["==", "1"]}}

interface Subscription

A subscription to an event

Method Overview

unsubscribe

Stop receiving events for this subscription

unsubscribe

subscription.unsubscribe()

Stop receiving events for this subscription

Returns

void

interface ThemeOptions

Properties

custom (optional)
: { [key: string]: JsonSerializable }

A map of values that will be available to your theme under the theme.custom namespace. The values can be anything that can be JSON-serialized. String and numeric values will also be made available as CSS custom properties in themes, available as var(--theme-<key>). where <key> is the value's key in the object.

name (optional)
: string

The name of the theme to use in this widget If no theme name is given, TalkJS will use the theme set in the user's role, falling back to the default theme if the user has no role.

interface ThirdPartyOptions

Used to configure supported third-party integrations with TalkJS. See third party integrations

Properties

fullstory (optional)
: FullStoryOptions

interface TranslationToggledEvent

This event is triggered when the user toggles real-time message translation using the built-in toggle.

Properties

conversation
: ConversationData

Conversation for which translation has been toggled

isEnabled
: boolean

Boolean indicating if translation is enabled or not

class TalkError

TalkJS Error class, inherits from the global Error class.

TalkJS methods may throw (or reject promises with) instances of this class if specific catchable information can be provided through the code property.

Properties

code
: ErrorCode

Machine-readable error code

message
: string

Human-readable error message

enum ErrorCode

A machine-readable error code enum.

Supports the following values:

- NOTIFICATIONS_PERMISSION_DENIED

- NOTIFICATIONS_NOT_SUPPORTED

- ARGUMENT_INVALID

type CompoundConversationPredicate

Allows you to filter conversations down to a specific subset.

Use with Inbox​.setFeedFilter or pass InboxOptions​.feedFilter to Session​.createInbox.

The first element must be the string "any", and the second element a list of SimpleConversationPredicate objects.

For example, to match all the conversations to which you have read access, or whose custom "accountId" field has the "my_account" value, use the following:

1["any", [{"access": ["==", "Read"]}, {"custom": {"accountId": ["==", "my_account"]}}]]

See SimpleConversationPredicate for all available options.

type CompoundMessagePredicate

Lets you show only specific messages in the chat panel of a Chatbox, Inbox or Popup.

Used in methods like Chatbox​.setMessageFilter.

The first element must be the string "any", and the second element a list of SimpleMessagePredicate objects.

For example, to match all the messages that are either of the type SystemMessage, or whose sender has the "admin" role, use the following:

1["any", [{"type": ["==", "SystemMessage"]}, {"sender": {"role": ["==", "admin"]}}]]

See SimpleMessagePredicate for all available options.

type ConversationAccessLevel

A string that must be "ReadWrite", "Read" or "None".

type ConversationPredicate

Allows you to filter conversations down to a specific subset.

Use with Inbox​.setFeedFilter or pass InboxOptions​.feedFilter to Session​.createInbox.

The ConversationPredicate can be either of the following:

- a single SimpleConversationPredicate object that filters based on all the fields of the predicate

- an array that gives you all the conversations that satisfy at least one of the SimpleConversationPredicates

See SimpleConversationPredicate and CompoundConversationPredicate for all available options.

type CustomFieldPredicate

A string or a two-element array that forms a predicate about a string field in a custom field.

Used in MessagePredicate and ConversationPredicate. Allows all forms in FieldPredicate plus the following:

- "exists"

- "!exists"

type FieldPredicate

A two-element array that forms a predicate about a field.

Used in MessagePredicate and ConversationPredicate. Possible forms:

- ["==", "someValue"]

- ["!=", "someValue"]

- ["oneOf", ["someValue", "someOtherValue"]]

- ["!oneOf", ["someValue", "someOtherValue"]]

type MessagePredicate

Lets you show only specific messages in the chat panel of a Chatbox, Inbox or Popup.

Used in methods like Chatbox​.setMessageFilter.

The MessagePredicate can be either of the following:

- a single SimpleMessagePredicate object that filters based on all the fields of the predicate

- an array that gives you all the messages that satisfy at least one of the SimpleMessagePredicates

See SimpleMessagePredicate and CompoundMessagePredicate for all available options.

type NumberPredicate

A two-element array that forms a predicate about a numeric field.

Used in ConversationPredicate. Possible forms:

- [">", someNumber]

- ["<", someNumber]

- [">=", someNumber]

- ["<=", someNumber]

- ["between", [lowerBound, upperBound]]

- ["!between", [lowerBound, upperBound]]