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.
renderChat(element, tockBotApiUrl, themeOptions)
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
}
}
) ;