import { Controller, Post, Body, Logger, HttpCode } from '@nestjs/common'; import { ExotelService } from './exotel.service'; import { CallEventsService } from '../call-events/call-events.service'; import type { ExotelWebhookPayload } from './exotel.types'; @Controller('webhooks/exotel') export class ExotelController { private readonly logger = new Logger(ExotelController.name); constructor( private readonly exotelService: ExotelService, private readonly callEventsService: CallEventsService, ) {} @Post('call-status') @HttpCode(200) async handleCallStatus(@Body() payload: ExotelWebhookPayload) { this.logger.log(`Received Exotel webhook: ${payload.event_details?.event_type}`); const callEvent = this.exotelService.parseWebhook(payload); if (callEvent.eventType === 'answered') { await this.callEventsService.handleIncomingCall(callEvent); } else if (callEvent.eventType === 'ended') { await this.callEventsService.handleCallEnded(callEvent); } return { status: 'received' }; } }