42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
import { RuntimeError } from '@botpress/client'
|
|
import { actions } from './actions'
|
|
import { channels } from './channels'
|
|
import { getFreshchatClient } from './client'
|
|
import { handler } from './handler'
|
|
import * as bp from '.botpress'
|
|
|
|
export default new bp.Integration({
|
|
register: async ({ client, ctx, logger }) => {
|
|
const freshchatClient = getFreshchatClient({ ...ctx.configuration }, logger)
|
|
|
|
if (!(await freshchatClient.verifyToken())) {
|
|
throw new RuntimeError('Invalid API token or domain name')
|
|
}
|
|
|
|
const channels = await freshchatClient.getChannels()
|
|
|
|
if (!ctx.configuration?.topic_name?.length) {
|
|
throw new RuntimeError('Topic name required')
|
|
}
|
|
|
|
const channel = channels.find((channel) => channel.name === ctx.configuration.topic_name)
|
|
|
|
if (!channel) {
|
|
throw new RuntimeError(`Topic with name '${ctx.configuration.topic_name}' doesn't exist on your account`)
|
|
}
|
|
|
|
await client.setState({
|
|
type: 'integration',
|
|
id: ctx.integrationId,
|
|
name: 'freshchat',
|
|
payload: {
|
|
channelId: channel.id,
|
|
},
|
|
})
|
|
},
|
|
unregister: async () => {},
|
|
actions,
|
|
channels,
|
|
handler,
|
|
})
|