diff --git a/src/ozonetel/ozonetel-agent.service.ts b/src/ozonetel/ozonetel-agent.service.ts index 7df60a1..2ea43a8 100644 --- a/src/ozonetel/ozonetel-agent.service.ts +++ b/src/ozonetel/ozonetel-agent.service.ts @@ -70,28 +70,40 @@ export class OzonetelAgentService { }): Promise<{ status: string; message: string }> { const callerId = process.env.OZONETEL_DID ?? '918041763265'; const callbackBase = process.env.KOOKOO_CALLBACK_URL ?? 'https://engage-api.srv1477139.hstgr.cloud'; + const roomId = `room-${Date.now()}`; - this.logger.log(`Kookoo outbound: dialing ${params.customerNumber}`); + this.logger.log(`Kookoo outbound: dialing ${params.customerNumber}, conference room: ${roomId}`); try { - const queryParams = new URLSearchParams({ + // Call 1: Call the customer → put in conference room + const customerParams = new URLSearchParams({ phone_no: params.customerNumber, api_key: this.apiKey, outbound_version: '2', caller_id: callerId, callback_url: params.callbackUrl ?? `${callbackBase}/webhooks/kookoo/callback`, + extra_data: `Please wait while we connect you to an agent${roomId}`, }); - // When customer answers, Kookoo hits our IVR endpoint which dials the agent's SIP - const ivrUrl = params.ivrUrl ?? `${callbackBase}/kookoo/ivr`; - queryParams.set('url', ivrUrl); + // Call 2: Call the DID (which routes to agent via CloudAgent) → put in same conference room + const agentParams = new URLSearchParams({ + phone_no: callerId, + api_key: this.apiKey, + outbound_version: '2', + caller_id: params.customerNumber, + extra_data: `${roomId}`, + }); - const response = await axios.get( - `https://in1-cpaas.ozonetel.com/outbound/outbound.php?${queryParams.toString()}`, - ); + // Fire both calls + const [customerRes, agentRes] = await Promise.all([ + axios.get(`https://in1-cpaas.ozonetel.com/outbound/outbound.php?${customerParams.toString()}`), + axios.get(`https://in1-cpaas.ozonetel.com/outbound/outbound.php?${agentParams.toString()}`), + ]); - const responseText = typeof response.data === 'string' ? response.data : String(response.data); - this.logger.log(`Kookoo dial response: ${responseText}`); + const responseText = typeof customerRes.data === 'string' ? customerRes.data : String(customerRes.data); + const agentResponseText = typeof agentRes.data === 'string' ? agentRes.data : String(agentRes.data); + this.logger.log(`Kookoo customer dial: ${responseText}`); + this.logger.log(`Kookoo agent dial: ${agentResponseText}`); // Parse XML response: queuedSID const statusMatch = responseText.match(/(.*?)<\/status>/);