"use client"; import { useEffect, useRef } from "react"; import { getSoftphoneConfig } from "./agent-me-actions"; const SCRIPT_ID = "handphone-widget-script"; /** * Softphone WebRTC embutido (Handphone, PHASE 66) — o FreeSWITCH deste * projeto nunca fala WebRTC: quem faz a ponte WebRTC↔SIP é um OpenSIPS * externo já em produção, configurado pelo Platform Super Admin em * Sistema > Softphone WebRTC. O ramal continua puro SIP; o widget só * pega username/domain/senha do ramal vinculado ao agente e o endereço * do proxy, e se autoconecta via `data-sip-*` (ver dist/handphone.js e * docs/SOFTPHONE.md) — nenhum estado de ACD (Disponível/Pausa/Offline) * interfere aqui, é o mesmo tipo de registro SIP que um telefone físico * faria. */ export function SoftphoneWidget({ hasExtension }: { hasExtension: boolean }) { const loadedRef = useRef(false); useEffect(() => { if (!hasExtension || loadedRef.current) return; if (document.getElementById(SCRIPT_ID)) return; loadedRef.current = true; getSoftphoneConfig().then((result) => { if (!result.ok || !result.config.hasExtension || !result.config.proxyUrl) { if (result.ok && result.config.hasExtension && !result.config.proxyUrl) { console.warn("[Softphone] proxy WebRTC nao configurado (Platform > Sistema > Softphone WebRTC)"); } return; } const { username, domain, password, proxyUrl } = result.config; const script = document.createElement("script"); script.id = SCRIPT_ID; script.src = "/handphone.js"; script.dataset.sipUser = username; script.dataset.sipDomain = domain; script.dataset.sipPassword = password; script.dataset.sipServer = proxyUrl; script.dataset.position = "bottom-right"; document.body.appendChild(script); }); }, [hasExtension]); return null; }