UNPKG

@botonic/plugin-flow-builder

Version:

Use Flow Builder to show your contents

71 lines (61 loc) 1.96 kB
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() }