Changelog
O que há de novo.
Cada melhoria para a plataforma, como ele envia.
· VOIPService
Sincronizar telefone TeamMemberExtensão de trabalho no VOIP config save
· SecurityService
Backfill TeamTelefone de membroExtensão de trabalho do MemberVoipConfig na inicialização
· kamo-internal
Configurações de recursos de chamada de fio de ponta a ponta através da abstração do provedor
- voipApi: adicionar CallFeaturesDto tipo, getCallFeatures() e setCallFeatures() chamadas API - Usa o telefone. a partir da API na inicialização; setCallForward/setAutoAnswer actions persistem através da API; resposta automática e efeitos de chamada-avançar gatilho em chamadas de entrada quando os recursos estão ativos - SoftphonePanel: remover o estado do recurso de chamada somente local; número de entrada para o contexto do softphone; fio Resposta automática comuta para o contexto do softphone; renomear botão de navegação para 'Manage Extended A/V' Configurações' - A sincronização da barra deslizante de áudio já estava funcional através do barramento de eventos useAVSettings — nenhuma alteração necessária
· VOIPService
Adicionar recursos de chamada API — chamada para diante + resposta automática com fio através da abstração do provedor
- Adicionar Caracteres de ChamadasDto e SetCaracterísticasPedir POJOs - Adicionar sinalizadores callForward/autoResposta às Capacidades do Provedor - Adicionar padrão getCallFeatures/setCallFeatures to PhoneProvider interface - RingCentral: implementar através de Regras de Resposta API REST (UnconditionalForwarding) - FreePBX: implementado através da mutação GraphQL addCallforward - CallFeaturesController: GET/PUT /api/voip/calls/features — DB primário, provedor-native sync
· kamo-shared-library
Adicionar MemberCallCaracterísticas de entidade e repositório para as preferências de resposta automática e de chamada
· kamo-asterisk-support
Commit inicial — Carregador de gravação FreePBX (GO)
Relógios para gravações WAV terminadas, grupos multi-pernas chamadas pernas por Asterisco UNIQUEID, e carrega cada lote para APIService /api/voip/gravações/upload usando um VOIP RECORDING UPLOADS-scooped Chave API. Os arquivos são excluídos do disco apenas após a plataforma confirmar o armazenamento. Bootstrap fornece de forma imediata um usuário AMI via manager custom.conf e instala os ganchos MixMonitor() por canal via extensions custom.conf, então pede ao Asterisco para recarregar seus módulos dialplan/manager. Ambos os blocos geridos são cercados por banners claramente marcados para que personalizações admin sobreviver. Inclui arquivos Docker, manifestos k8s para k1m1 e k2m1 (Deployment + ConfigMap + Modelo secreto), ************* que espelha o resto da plataforma, e um README.txt não técnico para anfitriões FreePBX autônomos.
· kamo-internal
VOIP RECORDING UPLOADS escopo + contador de tubulação de registro/tunables
- APIManager: nova opção de escopo VOIP RECORDING UPLOADS (usada pelo kamo-asterisco-suporte no FreePBX hospeda para carregar mensagens de voz e chamar gravações via APIService). - VoipSmsTab: novo cartão "Recording Pipeline" com quatro contadores processo, chamadas para processo, mensagens de voz em erro, chamadas em erro) A cada 30 anos, usa o seu número. Nova "Gravação Processando" card com voipVmBatchTamanho / voipCallBatchTamanho / voipPollSegundos Tunbles. - systemConfigApi: extend update() para enviar os novos tunbles; add recordingStats(). - tipos/telefone: Configuração do Sistema Dto ganha os três novos tunbles; VoipRecordingStatsDto added.
· SecurityService
Estatísticas de gravação de configuração do sistema + ajustáveis de processamento de gravação
- Está bem. retorna os quatro contadores exposto nas configurações kamo-interna → Plataforma → Configuração → VoIP/SMS tab (vmPending, callPending, vmError, callError). - PUT /api/security/system-config agora aceita voipVmBatchSize, voipCallBatchSize, voipPollSeconds for DaemonService gravando-processador tunbles. - toDto() inclui os novos campos para que o frontend possa lê-los de volta.
· DaemonService
Processor de GravaçãoJob + atalho NATS para novos envios
- Novo trabalho de Quartzo GravaçãoProcessorJob ticks a cada minuto, despachos independentes VM e lotes de chamadas simultaneamente ao ConversionService **************************** usando ********************** voipCallBatchTamanho} como tampas. - Novo registroRecebidoConsumer assina voip.graving.recebido NATS assunto emitido pelo ConversionService em novos uploads e desencadeia uma execução imediata, então uma gravação em fase recente inicia o processamento em segundos em vez de esperar na sondagem periódica. - Configmap expõe daemon.jobs.gravings.cron e o Está a falar com ele.
· ConversionService
Ingerir gravação + FFmpeg canalização de processamento
- Novo... Endpoint stages multipart uploads enviado pela APIService para MinIO balde ******************* e cria uma linha de encenação UnprocessedRecording. Idempotente nas tentativas usando (phoneServerId, asteriscoUniqueId). - Novo **************** endpoint (chamado por DaemonService) drenos linhas: downloads WAVs encenados, misturas chamar pernas em um único Opus / WebM master via FFmpeg amix, transcodifica WAVs por canal como faixas ao lado do mestre, e uploads através de RecordingImagingService com VM RECORDING (8) / CALL RECORDING (9) ImageAssocType. - New FfmpegService wrapper (transcodeToOpusWebm / mixToOpusWebm) com timeout e limpeza tempfile. - NATS editor emite voip.graving.received em cada upload encenado assim DaemonService pode abreviar sua pesquisa periódica. - Dockerfile instala ffmpeg no estágio de execução (navios ffmpeg alpinos libopus por padrão). - ConfigMap expõe **************************** (interserviços partilhados para que os novos terminais possam autenticar o APIService e Chamadores de serviço de daemon.
· APIService
VoipRecordingUploadController for kamo-asterisco-suport uploads
POST /api/voip/gravações/upload aceita corpos multi-partes do suporte kamo-asterisco rodando em hosts FreePBX. Valida o X-Api-Key tem o novo VOIP RECORDING UPLOADS escopo (re-usando o ************* cache de validação), então encaminha os cabeçalhos de carga útil múltipla + metadados (X-Phone-Server-Id, X-Asterisk-Unique-Id, X-Recording-Kind, X-Primary-Extension) to ConversionService ****************************
· kamo-shared-library
UnprocessedGravando entidade de estadiamento, faixas ImgDat, serviço de gravação de imagem
- Corrigir a colisão do ID ImageAssocType: VM RECORDING=8, CALL RECORDING=9 (foram ambos Duplicando MY DOCS em 4). - Acrescente-me... por canal Opus/WebM rastreia ao lado do conceito de miniatura existente. - Adicionar ImageMimeType.AUDIO WEBM (audio/webm) para os recipientes Opus-in-WebM produzido pelo gasoduto de conversão. - Nova gravação não processada (IDUID, IS VM, PHONE SERVER ID, extensão, ASTERISK UNIQUE ID, IS PROCESSADO, IS ERROR, ERRO MENSAGEM, RESULT IMG ID, Data CREADA, DATA PROCESSADA) entidade de estágio + repositório para o kamo-asterisco-suporte → ConversionService → DaemonService pipeline. - Nova GravaçãoImagem Serviço que envia um mestre Opus/WebM mestre para imagens com faixas Opus/WebM por canal anexadas via ImgDat.trackCount. - Configuração do Sistema: adicionar voipVmBatchTamanho / voipCallBatchTamanho / voipPollSegundos para os aparelhos de gravação-processador DaemonService.
· kamo-asterisk-support
Commit inicial — Carregador de gravação FreePBX (GO)
Relógios para gravações WAV terminadas, grupos multi-pernas chamadas pernas por Asterisco UNIQUEID, e carrega cada lote para APIService /api/voip/gravações/upload usando um VOIP RECORDING UPLOADS-scooped Chave API. Os arquivos são excluídos do disco apenas após a plataforma confirmar o armazenamento. Bootstrap fornece de forma imediata um usuário AMI via manager custom.conf e instala os ganchos MixMonitor() por canal via extensions custom.conf, então pede ao Asterisco para recarregar seus módulos dialplan/manager. Ambos os blocos geridos são cercados por banners claramente marcados para que personalizações admin sobreviver. Inclui arquivos Docker, manifestos k8s para k1m1 e k2m1 (Deployment + ConfigMap + Modelo secreto), ************* que espelha o resto da plataforma, e um README.txt não técnico para anfitriões FreePBX autônomos.
· kamo-internal
Substituir a aba de contatos simulados por SoftphoneContactos com funcionalidades completas
Extrai um novo SoftphoneContacta o componente que liga os contactos do softphone aba para a API de contatos reais via useContacts(). Substitui 4 cópias codificadas contactos com dados ao vivo de todos os livros de contacto. Características: - Livro e filtrar grupo comprimidos com seletores dropdown - Pesquisa debitada, ordenar por último/primeiro/nome completo - Iniciações avatar codificadas por cores (hash determinístico), suporte a fotos - Lista de contactos com botão de chamada rápida hover-reveal - Vista detalhada (lista substitui) mostrando telefones, e-mails, org, notas - Modo de edição em linha para todos os campos (telefones/e-mails multi-valor com adicionar/remover) - Apagar o contacto com a etapa de confirmação - Vazio e carregamento de estados de esqueleto - "Novo contacto" navega para /contactos? action=create Atualiza contatos/page.tsx para abrir automaticamente a janela de criação quando o ?action=create query param está presente (utilizado pelo botão "Novo" do softphone).
· kamo-internal
Substituir a extensão Chip com texto em linha ao lado do papel no Interaction Center
· kamo-internal
Remover campo de extensão manual do telefone; escreva extensão VOIP através do SecurityService em salvar
· SecurityService
Incluir telefoneExtensão de trabalho na resposta by-department; aceitar telefoneWorkExtension on member PUT
· kamo-shared-library
Adicionar ************* Ajudantes ao membro da equipa
· kamo-internal
Fio VAD + push-to-talk; remover configurações não executáveis
- vadEnabled passou agora como voiceActivityDetection in buildAudioConstraints so o navegador honra a opção ao abrir o microfone para uma chamada - pushToTalk muda automaticamente o microfone na chamada aceita e instala keydown/keyup ouvintes que desmutam enquanto a tecla de atalho configurada é mantida - Configurações removidas que não tinham fiação funcional e não podem ser implementadas através de navegador padrão WebRTC APIs: micGain (sem GainNode em pipeline SIP), highPassFilter, noiseGate, vadThreshold, hdVoice, câmeraBackgroundBlur (requer ML), câmeraBrightness/câmeraContrast (apenas visualização CSS) - Limpeza da interface AVSettings e DEFAULT AV SETTINGS em conformidade; reequilibrar as grades após as remoções
· kamo-internal
Lista de toques com filtro de pesquisa
Faça o painel do catálogo do ringtone corresponder à altura da coluna direita e rolagem verticalmente quando a lista transborda, para que os membros possam navegar como mais tons são adicionados. Adiciona um campo de pesquisa que filtra por rótulo ou nome de arquivo, com botão de limpeza e uma mensagem de estado vazio.
· kamo-internal
Adicione mais sete toques ao catálogo
Adiciona Corno de batalha, Corno demoníaco, Linha de terra, anel de 1985, telefone de escritório, Telefone antigo tocando, e Olé em /público/sons / toques / e fios eles em RINGTONE CATALOG para que eles apareçam ao lado do existente Opções padrão / Sci-Fi / Buzzer / Silent na subtab toques.
· kamo-internal
Adicione toques Sci-Fi e Buzzer ao catálogo
Liberta dois novos activos de toque em /público/sons/ringtones/ e registra-os em RINGTONE CATALOG para que apareçam nos toques subtab e pode ser definido como o tom de softphone de entrada padrão.
· kamo-internal
Layout de áudio de três colunas, gota salva-banner, largura de preenchimento
Coloca o áudio subtab para fora como Microfone , alto-falante , avançado através do linha cheia em telas lg+ (md ainda os emparelha duas-up, pilhas xs). A Cartão avançado muda para uma pilha vertical dentro de sua coluna mais estreita. Remove o rodapé "Configurações salvas automaticamente" — o comportamento está implícito e o cartão estava apenas tomando espaço. Seção de ForçasPainel de cartão para largura: 100% e adiciona alinhamentoItens="stretch" para a grade de cada subtab para que as cartas preencham sempre a borda da coluna.
· kamo-internal
Dividir configurações AV em áudio/vídeo/ringtones subtabs
Reorganiza a aba Áudio/Vídeo em três subtabs internos e coloca cada um fora horizontalmente para que as configurações se ajustem dentro do viewport sem a parede de rolagem vertical que tínhamos antes. Também fixa o catálogo ringtone para apontar para o real /soms/ringtone.mp3 ativo em vez de caminhos fantasma sob /soons/ringtones/, por isso antevisões e a sessão de softphone sempre- on partilhar um único toque canónico.
· kamo-internal
Adicionar guia de configurações de áudio / vídeo e fio no softphone
Adiciona uma loja de preferências AV por dispositivo (localStorage, máquina específica, não roaming) mais um separador completo sobre /sets/member/<id> para configuração e teste de microfone, alto-falante, anel e câmera. A janela da ferramenta de softphone, reprodução de toque e adaptadores SIP SDK agora honra estas configurações ao vivo: roteamento do dispositivo via setSinkId, getUserMedia restrições (dispositivos + taxa EC/NS/AGC/amostra), volume de tom DTMF, Ringer dispositivo + seleção de tom, mudo-on-join, e notificações desktop.
· kamo-internal
Sempre-em sessão SIP com auto-popup + toque em chamadas de entrada
O softphone usado para se registar apenas enquanto a janela de contexto estava aberta — Fechem-na e as chamadas foram silenciosamente perdidas. Levantar a sessão para um SoftphoneProvider montado na ferramenta autenticadaWrapper, então SIP REGISTE é mantido continuamente enquanto o operador é assinado e qualquer INVITE de entrada chama a atenção do operador. - app/hooks/useSoftphone.ts: renomear o gancho de implementação para useSoftphoneSession para reforçar que ele deve ser montado exatamente uma vez por sessão (tem as credenciais SIP e o REGISTER). O novo SoftphoneProvider dirige a sessão. gancho uma vez, expõe o estado via contexto, e reage ao hasIncoming Chamada transições — abre a janela da ferramenta do softphone através de uma ferramenta:open custom event (única instance, por isso foca-se apenas se já estiver aberto) com ID de chamada em o título, e toca /sounds/ringtone.mp3 em um loop até o usuário aceita/rejeita/o comando desliga. Uso públicoSoftphone () hook reads do contexto. - Muda a importação para o contexto. Enrole a árvore de ferramentas com SoftphoneProvider para que a sessão viva enquanto o estado de autenticação. cadência NA clássica (440Hz + 480Hz, 2s on, 4s silencio) então audio.loop=true produz um padrão natural de anel/pausa/anel. ~72 KB. Navegadores podem bloquear o play() inicial até que o usuário tenha gesticulado no página; o operador normalmente clicou pelo menos uma vez na hora de uma chamada chega, então isso raramente é um problema na prática.
· KlusterServices
Seed pbx.k1.kluster.kamocrm.com como um domínio estático
O softphone do navegador precisa SIP-over-WSS para pousar em um hostname com um real TLS cert. Adicione o administrador FreePBX / WS hostname para Static DOMAINS para o auto- certificado semeador fornece um por- máquina Vamos criptografar certificado para ele incondicionalmente, em vez de confiar nele aparecendo em registros de acesso Traefik. Uma vez emitido o certificado, o caminho temporário internal.kamocrm.com/voip-ws (comprometido anteriormente como uma solução alternativa) pode ser aposentado e o softphone pode use o URL canônico pbx.k1.kluster.kamocrm.com/ws.
· kamo-register
Usar o nome e descrição curtos da org na cabeça HTML
Substituir a lógica de título baseada em org-API pelo site config.jsonNameShort para o o título segue o mesmo padrão de outros sites: "Registrar - {siteNameShort}". Adiciona meta tag descrição de config.json. Remove o uso não utilizadoThemeConfig import.
· kamo-login
Usar o nome e descrição curtos da org na cabeça HTML
O DynamicMetaLoader agora define document.title para "Login - {siteNameShort}" e escreve a descrição org na tag meta descrição. Layout estático.tsx back updated; os metadados de KamoCRM OG/Twitter foram removidos.
· kamo-internal
Usar o nome e descrição curtos da org na cabeça HTML
DynamicMetaLoader agora define document.title para o siteNameShort (foi siteName) e escreve a descrição org na tag meta descrição. Estático layout.tsx fallback atualizado para valores genéricos.

Seu universo está esperando.
Comece gratuitamente em minutos.Adicione produtos sempre que estiver pronto — sem migração, sem novos logins.
Gratuito para sempre — não é necessário cartão de crédito