feat: nova conversa com número avulso + normalização WhatsApp + dark mode no modal

- Botão '+' na sidebar para iniciar conversa com qualquer número
- Busca automática: cliente → dependente → número novo
- Campo de mensagem inicial personalizável no modal
- Normalização de número (DDI 55) ao enviar via Evolution API
- Modal de nova conversa com suporte a dark mode
- Correção: foto do cliente não é mais atualizada a cada mensagem
- Correção: triagem não processa respostas se já tem atendente+equipe
This commit is contained in:
2026-06-24 16:52:48 +00:00
parent 29190cd71c
commit bb80be896f
4 changed files with 222 additions and 8 deletions
+20 -2
View File
@@ -68,8 +68,26 @@ function _request(baseUrl, apiKey, endpoint, method, body) {
}
// ============================================================
// Função auxiliar: extrai credenciais da instância
// Função auxiliar: normaliza número para formato WhatsApp
// ============================================================
function _normalizarNumero(numero) {
let n = String(numero || '').replace(/\D/g, '');
if (!n) return '';
// Adiciona DDI Brasil (55) se não tiver código de país
if (!n.startsWith('55') && !n.startsWith('1') && !n.startsWith('3') &&
!n.startsWith('4') && !n.startsWith('6') && !n.startsWith('7') &&
!n.startsWith('8') && !n.startsWith('9')) {
n = '55' + n;
}
// Corrige celular sem o 9º dígito: DDD(2) + 8 dígitos → DDD(2) + 9 + 8 dígitos
if (n.startsWith('55')) {
const resto = n.slice(2);
if (resto.length === 10) {
n = '55' + resto.slice(0, 2) + '9' + resto.slice(2);
}
}
return n;
}
function _extrairCredenciais(instancia) {
return {
url: ((instancia.INS_URL || '').trim()).replace(/\/+$/, ''),
@@ -134,7 +152,7 @@ async function sendMedia(instancia, numero, tipo, midiaBase64, nomeArquivo) {
const { url, apiKey, instanceName } = _extrairCredenciais(instancia);
if (!url || !apiKey || !instanceName || !numero || !midiaBase64) return;
const numeroLimpo = numero.replace(/\D/g, '');
const numeroLimpo = _normalizarNumero(numero);
const fileName = nomeArquivo || 'arquivo';
let endpoint, payload;