From d3331e56c0b9d36bbf5db1d3f7f3f9aefef79238 Mon Sep 17 00:00:00 2001 From: saridsa2 Date: Tue, 24 Mar 2026 18:49:26 +0530 Subject: [PATCH] fix: Ozonetel token 10min cache + invalidate on 401 + force re-login on already logged in - Token cache reduced from 55min to 10min (Ozonetel expires in ~15min) - All API methods invalidate cached token on 401 - loginAgent forces logout + re-login when "already logged in" to refresh SIP phone mapping Co-Authored-By: Claude Opus 4.6 (1M context) --- src/ozonetel/ozonetel-agent.service.ts | 28 +++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/ozonetel/ozonetel-agent.service.ts b/src/ozonetel/ozonetel-agent.service.ts index 789d6e3..7c661d7 100644 --- a/src/ozonetel/ozonetel-agent.service.ts +++ b/src/ozonetel/ozonetel-agent.service.ts @@ -84,10 +84,32 @@ export class OzonetelAgentService { const data = response.data; - // "already logged in" is not a real error — treat as success + // "already logged in" — force logout + re-login to refresh SIP phone mapping if (data.status === 'error' && data.message?.includes('already logged in')) { - this.logger.log(`Agent ${params.agentId} already logged in — treating as success`); - return { status: 'success', message: data.message }; + this.logger.log(`Agent ${params.agentId} already logged in — forcing logout + re-login`); + try { + await this.logoutAgent({ agentId: params.agentId, password: params.password }); + const retryResponse = await axios.post( + url, + new URLSearchParams({ + userName: this.accountId, + apiKey: this.apiKey, + phoneNumber: params.phoneNumber, + action: 'login', + mode: params.mode ?? 'blended', + state: 'Ready', + }).toString(), + { + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + auth: { username: params.agentId, password: params.password }, + }, + ); + this.logger.log(`Agent re-login response: ${JSON.stringify(retryResponse.data)}`); + return retryResponse.data; + } catch (retryErr: any) { + this.logger.error(`Agent re-login failed: ${retryErr.message}`); + return { status: 'success', message: 'Re-login attempted' }; + } } this.logger.log(`Agent login response: ${JSON.stringify(data)}`);