@botonic/plugin-flow-builder
Version:
Use Flow Builder to show your contents
71 lines (61 loc) • 1.96 kB
text/typescript
import { ActionRequest } from '@botonic/react'
import axios from 'axios'
const HUBTYPE_API_URL = process.env.HUBTYPE_API_URL || 'https://api.hubtype.com'
type ConditionalQueueStatusArgs = {
request: ActionRequest
queue_id: string
queue_name: string
check_available_agents: boolean
}
enum QueueStatusResult {
OPEN = 'open',
CLOSED = 'closed',
OPEN_WITHOUT_AGENTS = 'open-without-agents',
}
export async function conditionalQueueStatus({
queue_id,
check_available_agents,
}: ConditionalQueueStatusArgs): Promise<QueueStatusResult> {
const data = await getQueueAvailability(queue_id, check_available_agents)
if (check_available_agents && data.open && data.available_agents === 0) {
return QueueStatusResult.OPEN_WITHOUT_AGENTS
}
return data.open ? QueueStatusResult.OPEN : QueueStatusResult.CLOSED
}
export class HubtypeQueuesApi {
public queueId: string
public checkAvailableAgents: boolean
constructor(queueId: string, checkAvailableAgents?: boolean) {
this.queueId = queueId
this.checkAvailableAgents = checkAvailableAgents || false
}
async getAvailability(): Promise<AvailabilityData> {
const response = await axios.get(
`${HUBTYPE_API_URL}/external/v1/queues/${this.queueId}/availability/`,
// TODO: Make it configurable in the future
{
params: {
check_queue_schedule: true,
check_waiting_cases: false,
check_available_agents: this.checkAvailableAgents,
},
}
)
return response.data
}
}
export interface AvailabilityData {
available: boolean
waiting_cases: number
availability_threshold_waiting_cases: number
open: boolean
name: string
available_agents: number
}
export async function getQueueAvailability(
queueId: string,
checkAvailableAgents = false
): Promise<AvailabilityData> {
const queuesApi = new HubtypeQueuesApi(queueId, checkAvailableAgents)
return await queuesApi.getAvailability()
}