Lasciare un membro RingCentral firmare invece di coniare un JWT
La scheda delle impostazioni telefoniche di un membro ha chiesto una credenziali JWT, e questo era l'unico modo di collegarli. Un RingCentral JWT appartiene a u...
Dica a RingCentral JWT dalle credenziali dell'app incollate nella sua casella
Un org ha incollato le credenziali dell'app RingCentral JSON — il {"clientId": ..., "clientSecret": ..., "server": ...} blob la console di sviluppo mostra sulla...
Lasci un rollout finire quello che il vecchio pod stava facendo
Deploys ha sostituito l'unico pod di ogni servizio con nulla per catturare le richieste in volo. Tre impostazioni, applicate attraverso la flotta: - preStop do...
Encode JustCall query valori esattamente una volta
Il cliente ha costruito la sua query con build(true), che dichiara i valori già encoded — quindi nulla è sfuggito affatto. Il personaggio che conta è "+": ogni ...
Applicare FreePBX config dopo ogni scrittura, o l'estensione non raggiunge mai Asterisk
Estensione 8777 (Aiden Perry, kamocrm) è stato creato da KamoCRM il 2026-09-02 e mai cantato. La mutazione di FreePBX GraphQL `addExtension` aveva scritto `user...
Un account senza numero a testo da è un 409, non un 500
Starting a text threw IllegalStateException when neither the member nor the instance had an outbound number, which Spring turned into a 500 with a stack trace. ...
Una fonte di verità per le impostazioni della piattaforma
"Test Connection" ha riferito "nessun account master id" su un server di telefonia il cui l'approvvigionamento era appena riuscito, minuti prima, utilizzando lo...
Un server telefonico a metà programmato non potrebbe mai essere finito, e ha detto la cosa sbagliata
Il server KamoPBX di un org ha segnalato Errore: non trovato l'istanza del fornitore di telefono: E' il momento giusto. da quando è stato creato. L'istanza no...
Outbound external calls were missing from FreePBX call history
On an outbound external call FreePBX rewrites the CDR `src` to the trunk's outbound caller ID — the org's own DID — so a call ext 8080 placed to 9493747110 is r...
Una registrazione i cui byte sono andati risponde 410, non 500
Stessa divisione del proxy di imaging e il download dei documenti. Una registrazione chiamata che è non in deposito non è permanentemente lì, e un giocatore ha ...
L'estensione spazza non cancella più ogni assegnazione dei membri
MemberVoipConfigController.put scrive un incarico a due posti - MEMBER VOIP CONFIG e... Poi ha liberato il secondo sul suo prossimo passaggio. No. provider memo...
Date al coder delle conversazioni di testo un tiebreaker così i timestamp legati non sono caduti
ultimaActivityAt, quindi una condivisione di conversazione che timestamp esatto è stato escluso dal perso dalla lista in modo permanente, non solo male ordinato...
Portare la voce numero nav su VIEW VOICEMAIL
Ho dato a qualsiasi membro autenticato. in possesso di una riga MemberVoipConfig il conteggio di posta non-leggeta a livello di istanza nessun controllo dei dir...
Stop RingCentral OAuth firma inquilini in white label
Due difetti, entrambi sullo stesso piano, e ognuno nasconde l'altro. RingCentral rifiuta ogni valore di portata che questa applicazione può chiedere — "invalid...
Tagliare il coperchio sopra il suo proprio JVM soffitto di salto [skip ci]
L'immagine inizia il JVM con -XX:MaxRAMPercentage=70 -XX:+ SemprePreTouch, così il heap da solo può prendere il 70% del limite del contenitore e pre-touch manti...
Lavorare con la segreteria prende una destra, non solo gestire PHI
VoipVoicemailController richiesto VIEW CALL LOGS su esattamente un percorso — riproduzione, e solo quando l'organizzazione gestisce PHI. Elencando voicemails co...
Isolare la chiamata ingest per riga e link solo dopo che commette
Due difetti con una radice: ingest hanno partecipato alla transazione della spazzata. Un tiro all'interno di una transazione partecipante segna la transazione ...
Skip soft-deleted estensioni nella spazzata call-history
syncExtensions soft-deletes sfogliando lo stato a UNKNOWN piuttosto che rimuovere la riga, quindi l'elenco accumula ogni estensione che un'istanza abbia mai avu...
Chiudere un foro di posta elettronica e altri sei difetti di squadra
Recensione avversaria di 6df0008 ha confermato 24 risultati. I più importanti: CRITICAL — qualsiasi membro potrebbe eliminare la posta di un collega. Squadre v...
Scansione dei repository MFA condivisi
MfaEnrollmentService è un @Service in kamo-shared-library, quindi la wildcard @ComponentScan("com.kamo") in questa applicazione lo costruisce se questo servizio...
Harden il kubectl download contro l'egresso sfacciato [skip ci]
dl.k8s.io sopra l'ingresso del corridore cade in modo intermittente metà del trasferimento: curl: (56) OpenSSL SSL read: decryption fail or bad record mac che f...
Smettere di pinning il segreto wildcard-kamocrm-com scaduto
wildcard-kamocrm-com era un segreto multi-SAN legacy che cert-manager orfano quando il suo certificato è stato rinominato in un segreto per-host. Nulla lo ha ri...
Guardia /internal/voip con InternalAuthFilter come documentato — esso 401'd su sessione auth
VoipInternalSyncController ha sempre documentato InternalAuthFilter come sua guardia, ma /internal/voip non è mai stato in PROTECTED PREFIXES né escluso da OTK ...
Confronto costante dell'età interna (oracolo di timing)
Sostituire String.equals con MessageDigest.isEqual risposta quindi la latenza non può fallire il X-Internal-Auth condiviso byte-byte. La spazzata su tutta la fl...
Ritorno 200 tutti Falso per funzionalità di org non configurate
GET /api/voip/capabilities ha lanciato ProviderNotConfiguredException (422) quando un org non aveva alcun fornitore di telefonia, registrando un errore di conso...
Escludere /api/voip/sms/templates dal filtro sessione OTK
Gli endpoint del modello doc-07 SMS sono chiamate interne senza sessione sorvegliate da InternalAuthFilter (X-Internal-Auth), ma OTKValida Filtra ancora correva...
Implementazione POST /api/bulktext/send interno SMS transazionale
SicurezzaServizio BulkTextSmsClient (password-recupero + Impostazioni account SMS) E' sempre stato arrestato. ma il controller non è mai stato costruito, così o...
Creare la registrazione chiave dell'oggetto MinIO come il flusso di immagini
Omettere l'estensione quando FILE EXT è null/empty quindi il nome dell'oggetto corrisponde RecordingImagingService e ImagingController. Java string concat con n...
Risolvere l'estensione della cronologia delle chiamate da member voip config, non phone extension
E' stato NULL per delle estensioni anche quando... member voip config correttamente mappato il membro alla loro estensione. Utilizzo member voip config (stessa ...
Surface imaging fallback when provider has no call history
KamoPBXProvider.getCallHistory now returns null instead of throwing **************** so the 501 response no longer bypasses the imaging fallback. The provider c...
Resolve member→extension before VM/CDR provider lookup
CallController was passing memberId where FreePBX (and other PBX-style providers) expect an extension number — voicemail listing returned empty because no PBX e...
Cattura nuovoExtNumber come finale per la cattura di agnello in MemberVoipConfigController
nuovoExtNumber è condizionatamente riassegnato all'interno del se (isVoipEnabled && ...) blocco, che lo rende non effettivamente finale. Il blocco di sincronizz...
Non pulire l'assegnazione dei membri sulla sincronizzazione da fornitori che mancano di metadati
E' il momento giusto. incondizionatamente PhoneExtension.assignedMemberId con qualsiasi cosa il fornitore restituito. FreePBX (e qualsiasi fornitore che non rin...
Use extensionId as external ID, not Relay node id
FreePBX returns the same Relay id (ZXh0ZW5zaW9uOg== = "extension:") for every extension because the id field is not populated. Using it caused all extensions to...
Riscrivi tutte le query/mutazioni GQL contro l'introspezione dello schema live
Verificato ogni nome del campo e digitare contro lo schema effettivo FreePBX 17. Set completo di correzioni: Query: - fetchAllExtensions: rimuovere il campo "v...
Corretto il nome del campo di GraphQL per fetchAsteriskDettagli
FreePBX API restituisce "Vuoi dire fetchAsteriskDetails?" — rinominare la salute controllare query e il suo percorso di dati accesso di conseguenza.
Aggiungere le intestazioni XHR/Accept e l'analisi della risposta di stringa al client GraphQL
Stesso modello di FreePBXTokenCache: aggiungere X-Requested-With + Accettare: applicazione/json per sopprimere le risposte redirect HTML di FreePBX, e passare t...
Aggiungete le intestazioni Accept+XHR e la parsing di risposta cruda per il punto finale di token
FreePBX stava ritornando testo/html quando viene chiamato tramite cluster DNS perché L'intestazione host non corrisponde al PBX HOSTNAME configurato. Aggiunta A...
Correggere le stringhe di portata OAuth2 per FreePBX API
Gli ambiti FreePBX sono identificatori di alto livello: 'gql' (tutti GraphQL) e 'rest' (tutti REST). Il formato 'gql:read' significa GQL per un modulo chiamato ...
Include com.kamo.z.shared.commerce nella scansione del repository
Ultimi propagatori di kamo-shared-library Non e' vero. (donotmodify.dao.services) che ha una dipendenza del costruttore E' il momento giusto. E' il momento gius...
Bump kamo-shared-library to 1.4.0
Docker Stage 1 builds kamo-shared-library main (now 1.4.0) and installs it to the local .m2; the service pom still referenced 1.0.0 which Maven could not find, ...
Handle RC webhook validation token; make body optional for verification requests
Explicitly stringify Long IDs in SmsController responses
**************** Long-as-string approach was not taking effect. Directly call .toString() on all Long IDs in the controller flat-map responses to guarantee no J...
Serialize Long IDs as strings to prevent JS precision loss
CockroachDB unique_rowid() generates 64-bit integers larger than Number.MAX_SAFE_INTEGER (2^53-1). JS JSON.parse silently rounds them, causing conversation ID m...
Return flat map from send endpoint to prevent LazyInitializationException
VoipMessage.conversation is FetchType.LAZY; after @Transactional commits, Jackson serializing the entity would throw LazyInitializationException causing a 500, ...
Fall back to org mainPhoneNumber when member has no VOIP config
Members without an individual MemberVoipConfig (or no fromPhoneNumber set) now use the org's mainPhoneNumber from VoipProviderConfig as the outbound number, ins...
Remove getJwtKey() from WebhookController after OAuth migration
Signature validation used jwtKey as HMAC secret which no longer exists on VoipProviderConfig. Skip validation for now consistent with ****************
Use correct session key casing for orgID and memberID
KSessionService stores keys as orgID and memberID (capital D). Both controllers were calling .get("orgId") and .get("memberId") which always returns null, causi...
Come quello che vedi la spedizione?
Tutto questo arriva nel vostro spazio di lavoro da solo. Iniziare sul piano gratuito e leggere di nuovo questa pagina in un mese.
