Create web UIs for Tock chatbots
Include react
, react-dom
, @emotion-core
, @emotion-styled
, emotion-theming
and tock-react-kit
in an HTML page.
React must be at least version 16.8 (must have hooks)
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script crossorigin src="https://unpkg.com/@emotion/core@10/dist/core.umd.min.js"></script>
<script crossorigin src="https://unpkg.com/@emotion/styled@10/dist/styled.umd.min.js"></script>
<script crossorigin src="https://unpkg.com/emotion-theming@10/dist/emotion-theming.umd.min.js"></script>
<script
crossorigin
src="https://unpkg.com/tock-react-kit@latest/build/tock-react-kit.umd.js"
></script>
Render your app in an element:
<body>
<div id="chat"></div>
<script>
TockReact.renderChat(document.getElementById('chat'), '<TOCK_BOT_API_URL>');
</script>
</body>
You can also use it as a module (i.e Create React App) and bundle it:
npm i tock-react-kit
npm i @emotion/core@10
npm i @emotion/styled@10
npm i emotion-theming@10
import { renderChat } from 'tock-react-kit';
renderChat(document.getElementById('chat'), '<TOCK_BOT_API_URL>');
Use the third argument of renderChat
to style your app:
renderChat(document.getElementById('chat'), '<TOCK_BOT_API_URL>', 'referralParameter', {
palette: {
text: {
user: 'limegreen',
bot: 'rebeccapurple',
card: 'black',
input: 'black',
},
background: {
user: readableColor('black'),
bot: readableColor('white'),
card: readableColor('black'),
input: readableColor('black'),
inputDisabled: '#b6b4b4',
},
},
sizing: {
loaderSize: '8px',
borderRadius: '8px',
conversation: {
width: '720px',
},
},
typography: {
fontFamily: 'monospace',
fontSize: '24px',
},
overrides: {
chat: `background: #fff;`,
},
});
You can use createTheme function to init a valid theme.
renderChat(document.getElementById('chat'), '<TOCK_BOT_API_URL>', 'referralParameter', createTheme({}));
If the chat does not suit your needs you can also use the components separately.
Renders an entire chat in a target element.
Argument name | Type | Description |
---|---|---|
element |
Element |
Target element where the chat will be rendered |
tockBotApiUrl |
string |
URL to the Tock Bot REST API |
referralParameter |
string |
Optional referal parameter |
theme |
TockTheme |
Optional theme object |
options |
TockOptions |
Optional options object |
Hook that provides chat history and methods to communicate with the Tock Bot. It must be used alongside with TockContext
. Returns a useTock interface.
Argument name | Type | Description |
---|---|---|
tockBotApiUrl |
string |
URL to the Tock Bot REST API |
A TockTheme
can be used as a value of a ThemeProvider
of emotion-theming
(bundled with the library) or as a third argument of renderChat
.
Property name | Type | Description |
---|---|---|
palette |
Palette |
Object for customising colors (see below) |
sizing |
Sizing |
Object for customising elements sizing (see below) |
typography |
Typography |
Object for customising typographies (see below) |
overrides |
Overrides? |
Object allowing further styling (see below) |
Property name | Type | Description |
---|---|---|
background |
BackgroundPalette |
Object for customising background colors (see below) |
text |
TextPalette? |
Object for customising text colors (see below) |
Property name | Type | Description |
---|---|---|
user |
string? |
CSS color used mainly for the user's chat speech balloons |
bot |
string? |
CSS color used mainly for the bot's chat speech balloons |
card |
string? |
CSS background color for cards |
input |
string? |
CSS background color for the main user text input |
inputDisabled |
string? |
CSS background color for the main user text input disabled |
Property name | Type | Description |
---|---|---|
user |
string? |
CSS color used mainly for the user's chat speech balloons |
bot |
string? |
CSS color used mainly for the bot's chat speech balloons |
card |
string? |
CSS background color for cards |
input |
string? |
CSS background color for the main user text input |
Property name | Type | Description |
---|---|---|
loaderSize |
string? |
Loader component size |
borderRadius |
string? |
Border radius used in various chat components |
conversation |
Shape |
Object for customising chat size (see below) |
Property name | Type | Description |
---|---|---|
width |
string? |
CSS max-width of the chat interface |
Property name | Type | Description |
---|---|---|
fontFamily |
string? |
CSS font-family used in the chat |
fontSize |
string? |
CSS base font-size used in the chat |
Property name | Type | Description |
---|---|---|
card |
TockThemeCardStyle |
Object for adding CSS styles on card component (see below) |
chatInput |
TockThemeInputStyle? |
Object for adding CSS styles on chat input component (see below) |
carouselContainer |
string? |
Additional CSS styles for carousel cards container (overrides base styles) |
carouselItem |
string? |
Additional CSS styles for carousel cards container (overrides base styles) |
carouselArrow |
string? |
Additional CSS styles for carousel scrolling arrows (overrides base styles) |
messageBot |
string? |
Additional CSS styles for the bot's speech balloons (overrides base styles) |
messageUser |
string? |
Additional CSS styles for the user's speech balloons (overrides base styles) |
quickReply |
string? |
Additional CSS styles for the quick reply buttons (overrides base styles) |
chat |
string? |
Additional CSS styles for the chat container (overrides base styles) |
Property name | Type | Description |
---|---|---|
cardContainer |
string? |
Additional CSS styles for carousel cards container (overrides base styles) |
cardTitle |
string? |
Additional CSS styles for carousel cards title (overrides base styles) |
cardSubTitle |
string? |
Additional CSS styles for carousel cards subtitle (overrides base styles) |
cardImage |
string? |
Additional CSS styles for carousel cards image (overrides base styles) |
cardButton |
string? |
Additional CSS styles for carousel cards button (overrides base styles) |
buttonList |
string? |
Additional CSS styles for carousel cards button list (overrides base styles) |
buttonContainer |
string? |
Additional CSS styles for carousel button list container (overrides base styles) |
Property name | Type | Description |
---|---|---|
container |
string? |
Additional CSS styles for input container (overrides base styles) |
input |
string? |
Additional CSS styles for input (overrides base styles) |
icon |
string? |
Additional CSS styles for input icon (overrides base styles) |
Property name | Type | Description |
---|---|---|
timeoutBetweenMessage |
number? |
Timeout between message |
widgets |
any? |
Custom display component |
Tock web connector can send custom messages :
{
data: {
departure: 'Paris',
arrival: 'Nice'
},
type: 'TrainCardWidget',
}
You can define your own display components for this custom message :
import React from 'react';
import { renderChat, MessageContainer, Message } from 'tock-react-kit';
const TrainCardWidget = ({departure, arrival}) => {
return (
<MessageContainer>
<Message>
<p>Departure: {departure}</p>
<p>Arrival: {arrival}</p>
</Message>
</MessageContainer>
);
};
renderChat(
document.getElementById('chat'),
'<TOCK_BOT_API_URL>',
'referralParameter',
{},
{
widgets: {
TrainCardWidget
}
}
);