Typing Indicators
Users, agents and bots can emit typing indicators which appear in messaging apps and live agent software.
Typing indicators are a helpful way to indicate to a user that the agent or bot is active and in the process of responding. Likewise, agents can also appreciate being able to see when the user is responding.
Take a look at what typing indicators look like in Zendesk Chat (left) and the Orb (right):
This guide covers everything you need to know to use typing indicators effectively.
Types of indicators
There are three types of typing indicators: user
, agent
, or bot
.
The user and agent will see each other's typing indicators. Both the user and the agent will see the bot's typing indicators.
Type of indicator | Seen by |
---|---|
user | Agent |
agent | User |
bot | User and agent |
Integrations
Not all integrations support typing indicators. Refer to the table below for a list of integrations that currently support typing indicators.
Integration | Category | user | bot | agent |
---|---|---|---|---|
Orb | Messaging | ✅ ➡️ send | ✅ ⬅️ receive | ✅ ⬅️ receive |
Web v1 | Messaging | ❌ ➡️ send | ✅ ⬅️ receive | ✅ ⬅️ receive* |
Sunshine Conversations | Messaging | ✅ ➡️ send | ✅ ⬅️ receive | ✅ ⬅️ receive |
Salesforce Live Agent | CSP | ✅ ⬅️ receive | ✅ ⬅️ receive | ✅ ➡️ send |
Zendesk Chat | CSP | ✅ ⬅️ receive | ✅ ⬅️ receive | ✅ ➡️ send |
* appear as "Bot is typing..."
Disabling typing indicators
Typing indicators are turned on by default, but can be disabled.
Bot
To prevent the bot from generating typing indicators, add typing: false
to your app's bot/default.yaml
file. Here's an example:
type: meya.bot.element
name: Hello World Bot
markdown: true
typing: false
Integrations
Typing indicators can be disabled on a per-integration basis. This means that any presence.typing.on
and presence.typing.off
entries received by the integration will be ignored.
To disable typing indicators, add typing: false
to the integration file. Here's an example for the Orb integration:
type: meya.orb.integration
typing: false
In this case, an agent would no longer see the Orb user's typing indicators, but would still see the bot's typing indicators. The Orb user would still see the agent and bot typing indicators.
Since typing indicators are turned on by default there's no need to add
typing: true
to your integration file orbot/default.yaml
file unless you want to be explicit.
The typing
component
typing
componentFor users and agents, presence.typing.on
and presence.typing.off
entries are sent automatically when the user or agent starts or stops typing.
For the bot, however, typing indicators are explicitly turned on and off using the typing
component. Here's an example:
- typing: on|off
Using delay
with typing
delay
with typing
When the bot is speaking, it can be helpful to add delays to some flow steps. From a user experience perspective, this helps prevent the bot from displaying messages too quickly and overwhelming the user.
Also, if the bot works too quickly, it is likely the presence.typing.on
and presence.typing.off
entries will be received in rapid succession causing the typing indicator to flash on and off, or to not display at all.
For these reasons, we recommend adding a 1-2 second delay to steps that display messages to the user, like this:
steps:
- say: Here is some text.
- typing: on
- delay: 2
- say: Here is some more text.
Implicit typing off events
Notice in the above example that there was no need to explicitly turn off the typing indicator. Components that generate output, like the
say
component, also create apresence.typing.off
entry.
Examples
To demonstrate the different ways typing indicators can be used, try adding the code below to your app.
In your app's flow
folder, create a subfolder called typing_indicator
. Inside the new folder, create a file called typing_indicator.yaml
and copy this code into it:
steps:
- typing: on
steps:
- say: Typing on...
- typing: on
- delay: 2
- say: Typing off...
- typing: off
steps:
- typing: off
steps:
- typing: on
- delay: 2
- say: Done.
steps:
- typing: on
- delay: 2
- say: Choose
quick_replies:
- text: First
- text: Second
steps:
- typing: on
- delay: 2
- type: component.tile.yes_no
text: Do you want to continue?
steps:
- typing: on
- delay: 2
- status: This is a status
Test with a supported messaging integration
To run these examples, we recommend using the Orb integration with the chat window open (i.e. not in embed mode).
Updated about 2 years ago