WebRTC config는 pod 재시작을 살아
이전 접근법 (http custom.conf 와 [general] override) 하지 않았다 실제로 Asterisk의 INI 파서가 여러 가지를 존중하지 않기 때문에 효과가 발생합니다. [general] 섹션은 docs가 불행하게도 다음과 같은 방법을 포함합니다. http addit...
Enable Asterisk 내장 HTTP 서버:8089 WebRTC /ws
Res http websocket의 상단에 chan pjsip `protocol=ws` 수송 승차, 턴에는 Asterisk의 내장 HTTP 서버가 실행되어야 합니다. 더 보기 기본적으로 FreePBX 17는 그 서버가 비활성화된 배를 설치하므로 SIP-over-WS 요청 착륙 nowhe...
NameAlias에 대한 실제 이름 우선 순위 표시
nameAlias는 기능적으로 로그인 핸들 (사용자 이름과 동일), 표시 이름이 아닙니다. User.name (EmbNameFull)에서 실제 사용 가능한 이름. /names와 /by-department endpoints 모두에 적용하십시오.
Scope Add Lead scroll and footer to its content area에 추가하기
양식은 minHeight를 사용했다 : 이미 부모 내부 100vh calc(100vh - 56px), 내용이 적합할 때 외부 scrollbar를 강제합니다. 동작 바 또한 사용 위치: 왼쪽으로 고정: 0, 그래서 그것은 확장 NavPri sidebar 뒤에 페이지 scrollbar에. ...
Smart multi-column layout for Add Lead form에 대한 자세한 정보
페이지를 최고 수준의 그리드로 재구성합니다. 대신 개별 필드를 기지개: - Market & Assignment는 3-col 내부를 사용합니다 (시장 | 벤더 | 제품), Prospect 유형과 제일 접촉 시간 쌍은 아래에 반 폭에. - 1 차 접촉 및 우편 주소는 lg+ (7/5 쪼개...
/api/security/members/name 을 사용하여 할당된 이름의 해상도
By-department endpoint 필터로 활성 TeamMembers 만 누락 기본 회원 또는 비활성 회원에게 할당. /names로 전환 상태에 관계없이 모든 구성원을 반환합니다.
Full-width는 끈끈한 footer를 위한 지도 모양과 정리를 추가합니다
/leads/new에 1200px 최대 폭을 내리십시오 그래서 모양은 페이지 지역을 경간합니다, 그리고 범 바닥 패딩 그래서 끈 작업 바 더 이상 오버랩하지 아래쪽으로 스크롤 할 때 마지막 양식 섹션.
By-department endpoint에서 정확한 우선 순위를 가진 전시 이름 해결
우선순위: member.usernameAlias → user.name.formatFull() → user.alias → user.username
Probe 마스터 모델 엔드포인트 및 수정 적용모델 org ID
- applyModel.source 기반 게이트를 직접 프로브로 교체 /api/security/master-model on mount; r.ok=false (409)는 org를 의미합니다 분기 유형에 의해 지배된다 — 같은 체크 백엔드 사용 - useAppliedModel에 null을 ...
Gate censorship tab options by applied model constraints
- Hide EDIT MASTER MODEL button when org is governed by a branch type (use appliedModel.source instead of unreliable org context branchTypeID) - Hide ATF fiel...
Mark-as-read and message fetch for shared/member mailboxes
Classic mode now loads shared mailbox messages via the correct /messages/{folder} endpoint (was calling the non-existent /conversations endpoint). Fetching a fu...
Mark-as-read for shared and member mailboxes
EmailController.setFlags now accepts an optional mailboxId query param and routes through resolveProviderWithMailbox so member-mailbox flags are set against the...
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...
ClassCastException을 방지하기 위해 getMessage에서 IMAPInputStream 처리
JavaMail 대신 IMAPInputStream을 반환할 수 있습니다. part.getContent() 메시지 내용이 예쁘지 않은 경우. 더 보기 직접 (String)는 parseMultipart () threw ClassCastException에 캐스팅 영향을받는 메시지, fetch...
살아있는 schema introspection에 대한 모든 GQL 쿼리 / mutations를 보충
모든 필드 이름과 실제 FreePBX 17 스키마에 대한 유형 확인. 개정의 가득 차있는 세트: 질문: - fetchAllExtensions: 확장에서 non-existent 'voicemail' 필드를 제거 - fetchAllUsers → allCoreUsers { coreUser ...
SelectFolder를 ThreadDetailView로 전달하십시오
chat.folder는 Java ConversationEntity로 항상 정의되지 않습니다. folderIds (text[])는 폴더 문자열 필드가 아닙니다. 이것은 loadThread를 call markConversationRead 및 그 후 이메일 발송:폴더 변경 폴더:undefin...
GraphQL 필드 이름 fetchAsteriskDetails
FreePBX API는 "Did you mean fetchAsteriskDetails?"를 반환합니다. - 건강 이름을 바꾸십시오. 쿼리 및 그 데이터 경로 accessor에 따라 확인합니다.
XHR/Accept 헤더 및 문자열 응답을 GraphQL 클라이언트로 파싱
FreePBXTokenCache와 같은 패턴: X-Requested-With + Accept: application/json FreePBX의 HTML 리디렉션 응답을 억제하고 모든 3 개의 호출 사이트를 전환 (queryOnce, restGet, restPost) 의 응답Entity<J...
Sync mailbox dropdown 에 기본 mailbox 에 로드
SelectMailbox가 초기화되기 때문에 첫 번째 목록 항목에 기본적으로 드롭다운 mailboxId없이, currentValue가 'personal'으로 해결하기 위해 어떤 옵션이 없습니다. 이제 선택된Mailbox를 1 차 (또는 first) mailbox 접근 가능한 우편함 짐.
파일 업로드 크기 제한 500MB
봄 부트는 1MB에 모자 multipart 부속, 배경 이미지를 일으키는 원인이 되었습니다 으로 실패 500 요청에.getParts(). SecurityService의 일치 기존의 500MB의 한계 그래서 APIService는 큰 파일 업로드 할 수 있습니다.
Surface HTTP errors 그래서 업로드 실패가 표시됩니다
Un-OK 상태에 thrown Error를 가진 Silent console.warn를 대체했습니다, 그래서 사용자는 실제 실패 이유 (status + 응답 몸)를 참조 대신 침묵으로 계산을 업데이트합니다. console.log 추가 몇 가지 새로운 이미지가 누락되는지 추적하고 POSTe...
토큰 엔드포인트에 대한 Accept+XHR 헤더와 raw-string 응답 패싱 추가
FreePBX는 클러스터 DNS를 통해 호출 할 때 텍스트 / HTML을 반환했습니다. Host header는 구성 된 PBX HOSTNAME과 일치하지 않았습니다. 더 보기 수락: application/json 및 X-Requested-With: XMLHttpRequest는 FreeP...
애니메이션 컨트롤을 통해 최소화된 tab 엔트리를 구동
Animate={...} 를 animate={tabControls} 로 바꾸기 생기: tabControls에는 산에 queued 표적이 없습니다, 그래서 단추 체재했습니다 처음 { y : 100 } 위치 (아래 화면). useEffect 추가 명시적으로 y를 시작 위젯State에 key...
FreePBX API에 대한 정확한 OAuth2 범위 문자열
FreePBX 범위는 최상위 식별자입니다: 'gql' (모든 GraphQL) 과 'rest' (모든 REST). 'gql:read' 형식은 모듈의 GQL을 의미합니다. invalid scope 400 오류가 발생하지 않는 'read'로 이름을 붙입니다.
ClusterIP 서비스에 직접 8088 노출
서비스는 항구 80→8088 매핑이 있었습니다. 내부 서비스 *************** (예: VOIPService API 토큰 요청) 포트 8088가 듣지 않았기 때문에 타이밍되었습니다. 클러스터IP.
Trust backend pendingCount, 드롭 클라이언트 오프셋
Backend pendingCount는 이제 읽지 않은 기반 (counts SUPPORT TICKET 세션)입니다. 소유자의 lastViewed보다 더 새로운 메시지). 에이전트가 열릴 때 티켓, markAsRead → 백엔드 방송 → frontend는 새로운 반영 자동 계산. fet...
K1m1에 대한 누락된 고장2ban-config ConfigMap 추가
배포 참조 실패2ban-config ConfigMap (jail.local + asterisk-security.conf) 하지만 존재 하지 않았다, 팟을 차단 마운트볼륨. 시작에서 FreePBX를 설정하고 방지합니다.
MarkAsRead 후 에이전트는 이렇게 lastViewed advances
지원 티켓에, 둘 다 방문자 및 대리인 메시지는 아래에 저장됩니다 같은 systemMember, 그래서 읽지 않은 계정 쿼리는 멤버 agnostic 및 lastViewed에 완전히 의존합니다. 에이전트가 MarkAsRead하지 않는 경우 전송, 자신의 대답은 새로운 방문자 메시지로 계산...
지원 티켓 필요 회원-agnostic 읽지 않은 수
지원 티켓의 방문자 메시지는 같은 systemMember에 저장됩니다. 그 대리인은, 그래서 기존의 CHAT-session 읽었습니다 queries - m.member.id를 제외한 = :memberId - 항상 0을 반환 지원 세션. 티켓 목록 배지 그러므로 결코 등장하지 않았습니다....
LoadThread retry 버튼을 패스하십시오
loadThread는 (threadId, 폴더); 과실 상태 재량 단추만 걸립니다 threadId를 통과, kamo-internal 구조. 전화 일치 서명.
정확한 JsonIdentity 'uniqueId'의 정보 속성
@JsonIdentityInfo(property = "uniqueId")를 선언했지만 실제 기본 키 필드는 'id'로 지정됩니다. 잭슨 threw 'uniqueId'라는 이름을 가진 속성을 찾을 수 없습니다. 즉, PUT /org/{id}를 사용하는 멤버(예: 조직)을 참조하여 반환 4...
SSR 가드를 제거하여 수분 잡기를 유발합니다. 웹소켓을 위한 드롭 SockJS
- Hero.tsx : ParticleField 주변의 Typeof 창 체크 제거 - 이미 ParticleField ssr:false 그래서 감시는 서버/클라이언트 나무 mismatch (React #418)를 생성했습니다 - LiveSupportPanel.tsx : @stomp/sto...
대화가 열릴 때 명확한 읽지 않은 표시
ThreadDetailView 이제 이메일 발송 : markConversation 후 폴더 변경자세히 보기 MailButton은 navtop inbox 배지 카운트를 refetches로 성공합니다. 계정 만들기 최적화된 제로 읽지 않은 항목 선택에 즉시 선택된 스레드 그래서 목록 배지는...
Move CORS to Traefik via kamo-middlewares, remove in-app CorsFilter
The CorsFilter @Bean in the Spring app was silently not applying headers after WebConfig.java was removed. CORS is now handled entirely at the Traefik layer by ...
Use /public/{mainDomain}-{tld} path matching actual MinIO bucket layout
The getThemePath() was generating /domain/{tld}/{split}/kamosite paths that don't exist in MinIO — theme files live in the public bucket under kamocrm-com/, bad...
Break min-w-0 chain to contain email scroll in body column only
Add min-w-0 to outer container and main content flex div so flex children cannot expand to email min-content width, which was causing the page-wide horizontal s...
ToolProviders의 호이스트 공급자
ChatWebSocketProvider 호이스트와 같은 루트 원인: SupportTicketWindow 이름 * *********** 및 ChatBox 통화 useUnread().markAsRead(), 하지만 ToolDock 내부의 도구 창 렌더링 ABOVE PresenceWrappe...
BoostHydrationWarning 및 수정 깨진 placeholder 이미지 추가
억제HydrationWarning on <html>는 React 오류 #418을 브라우저에 의해 발생시킵니다. extensions (e.g. 번역, 어두운 모드) SSR과 html 속성을 mutating 고객 수화. placehold.co를 사용하여 via.placeholder.com...
허용 /domain / 경로는 테마 IngressRoute에 CORS
Theme.kamocrm.com/domain/...에서 테마 구성은 일치하지 않았습니다 기존의 경로 규칙(만 /public/ 및 /internal/은 허용), 그래서 Traefik CORS 헤더가없는 503를 돌려 브라우저가 fetch를 거부합니다. PathPrefix('/domain/...
게이트웨이에서 중복 필터 및 스트립 업스트림 CORS 헤더 제거
WebConfig.java는 CorsConfig과 비교하여 두 번째 CorsFilter bean을 정의했습니다. java의 bean, 위험 중복 헤더 쓰기. 하나의 CorsFilter가 존재합니다. 앞으로 () 방법은 또한 상류에서 Access-Control-Allow-Origin을 ...
두 배 접근 통제 Allow Origin 우두머리를 일으키는 원인이 되는 CorsFilter 콩을 제거하십시오
명시된 CorsFilter bean은 두 번째 CORS 필터가 봄에 발생했습니다. Security의 내장 CORS 지원 (CORSConfigurationSource를 사용하는 경우). 두 필터는 기원 패턴을 해결하고 같은 헤더를 썼다, 생성 중복 'https://www.kamocrm.c...
Debug console.log 문 제거 및 누락된 경로 추가
WebSocket에 추가된 모든 임시 디버그 로깅 제거 ChatBox, TicketChat, MemberItem, ChatTool 및 useChatWebSocket; 추가 /help → /support 및 /settings/member → /settings/team-member에 대한 ...
긴 주소에서 열 확장에서 메시지 헤더를 방지
헤더의 왼쪽 플렉스 아이는 min-w-0이 없었다, 그래서 긴 깨지지 않는 이메일 from/To/Cc에 있는 주소는 성장하는 최소한도 내용 폭을 강제했습니다, 끌기 헤더 (과 열 레이아웃) 더 넓은. min-w-0, Break-all 추가 주소 텍스트, from/date 행에 flex-...
ToolProviders의 위 호이스트 ChatWebSocketProvider
ToolDock (과 같은 도구 창은 SupportTicketWindow → TicketChat) 나무에 ABOVE PresenceWrapper 앉아있는 ToolProviders 내부에 장착 auth/navigation 변경에 해제를 피하기 위해. ChatWebSocketProvider...
