mirror of
https://dev.azure.com/globalhealthx/EMR/_git/helix-engage-server
synced 2026-04-11 18:08:16 +00:00
32 lines
1.2 KiB
TypeScript
32 lines
1.2 KiB
TypeScript
import { Injectable, Logger } from '@nestjs/common';
|
|
import type { ExotelWebhookPayload, CallEvent } from './exotel.types';
|
|
|
|
@Injectable()
|
|
export class ExotelService {
|
|
private readonly logger = new Logger(ExotelService.name);
|
|
|
|
parseWebhook(payload: ExotelWebhookPayload): CallEvent {
|
|
const { event_details, call_details } = payload;
|
|
|
|
const eventType = event_details.event_type === 'answered' ? 'answered'
|
|
: event_details.event_type === 'terminal' ? 'ended'
|
|
: 'ringing';
|
|
|
|
const callEvent: CallEvent = {
|
|
exotelCallSid: call_details.call_sid,
|
|
eventType,
|
|
direction: call_details.direction,
|
|
callerPhone: call_details.customer_details?.number ?? '',
|
|
agentName: call_details.assigned_agent_details?.name ?? 'Unknown',
|
|
agentPhone: call_details.assigned_agent_details?.number ?? '',
|
|
duration: call_details.total_talk_time,
|
|
recordingUrl: call_details.recordings?.[0]?.url,
|
|
callStatus: call_details.call_status,
|
|
timestamp: new Date().toISOString(),
|
|
};
|
|
|
|
this.logger.log(`Parsed Exotel event: ${eventType} for call ${call_details.call_sid}`);
|
|
return callEvent;
|
|
}
|
|
}
|