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)}`);