Chat Client
Installation
npm install @botpress/chat
yarn add @botpress/chat
pnpm add @botpress/chat
Usage
API Queries
The @botpress/chat
package exports a Client
class that can be used to interact with the Botpress Chat API. Here's a basic example:
import { Client } from '@botpress/chat'
const main = async () => {
const webhookId = process.env.WEBHOOK_ID
if (!webhookId) {
throw new Error('WEBHOOK_ID is required')
}
const client = new Client({
apiUrl: `https://chat.botpress.cloud/${webhookId}`,
})
const { user, key: xChatKey } = await client.createUser({})
const { conversation } = await client.createConversation({ xChatKey, participants: [user.id] })
const { message } = await client.createMessage({
xChatKey,
conversationId: conversation.id,
payload: {
type: 'text',
text: 'hello world',
},
})
console.log('message', message)
await new Promise((resolve) => setTimeout(resolve, 2000))
const { messages } = await client.listMessages({
xChatKey,
conversationId: conversation.id,
})
console.log('messages', messages)
}
void main()
.then(() => {
console.log('done')
process.exit(0)
})
.catch((err) => {
console.error(err)
process.exit(1)
})
Realtime Events
You can also listen for messages and events in real-time:
const listener = await client.listenConversation({ id: conversation.id, xChatKey })
listener.on('message_created', (ev) => {
if (ev.userId === user.id) {
return
}
console.log('message received >>>', ev)
})
Reconnection
The Client
class does not automatically reconnect to the server if the connection is lost. This allow's you to handle reconnection in a way that makes sense for your application. To be notified when the connection is lost, you can listen for the error
event:
const state = { messages }
const onDisconnection = async () => {
try {
await listener.connect()
const { messages } = await client.listMessages({ xChatKey, conversationId: conversation.id })
state.messages = messages
} catch (thrown) {
console.error('failed to reconnect, retrying...', thrown)
setTimeout(onDisconnection, 1000)
}
}
listener.on('error', (err) => {
console.error('connection lost', err)
void onDisconnection()
})