콘텐츠로 건너뛰기
KAMOUniverse

변경 로그

무슨 일이야?

플랫폼에 대한 모든 개선 사항, 그것이 선적.

  1. · VOIPService

    Persist 통화 및 동료 통화, 텍스트 및 음성 메일 리드

    통화는 어디에서나 기록되지 않았습니다. - VoipCallEventService는 NATS 이벤트를 발표했습니다. 브라우저를 위해 아무것도 유지하고, RECORDINGS는 오디오가되었을 때만 존재합니다. 다운로드 per-instance sync는 이제 PhoneProvider를 통해 통화 내역을 끌어냅니다. 요약 및 경고 PHONE CALL LOG, 키 입력 (instance, 공급자 호출 ID). 그것은 FreePBX 및 Microsoft 팀에 대한 작동 유일한 경로, 아니 웹훅을 호출할 수 있습니다. 청소는 단일 작가입니다. RingCentral webhook에서 파생 시도하고 제거되었습니다 : 알림은 telephonySessionId를 운반합니다. call-history API는 다른 레코드 ID를 반환하므로 두 개의 작가가 2 개를 생산했습니다. 행과 두 개의 타임 라인 항목은 하나의 호출합니다. 호출은 그 확장이 실제로 있을 때만 확장에 속성 전화. RingCentral의 엔드포인트는 extension/~이며, 인수를 무시합니다. 확장 당 다른 파일은 각 구성원의 호출을 하나씩 파일 루프가 지속되었습니다. Recording ids는 RecordingLookupService를 통해 페이지 당 해결됩니다. softphone 내역을 풍부하게합니다 - 탭없이 녹음을 알고 존재하지만 재생할 수 없습니다. send/receive에 텍스트 링크; 동기화에서 voicemails 링크.

  2. · InitializerService

    납 통신을 위한 Schema와 접촉 점씨

    Hibernate는 shared-lib entities에서 3개의 새로운 테이블을 창조합니다; 이것은 추가합니다 표현할 수 없는 것 — 부분적인 고유한 인덱스는 대부분의 것을 엽니다 (lead, slot) 당 접촉 점 창 및 DESC 덮음 지수 timeline의 keyset 검사. 씨앗은 인덱스를 미리 지정한 모든 리드의 첫 번째 창을 엽니다. 아니다. 통신 back-fill: 역사적인 전화 또는 메시지는 관련이 없습니다 이름 * 전 확고한 지도 없이는 아무 접촉점도 전혀 없고 할 수 있었습니다 들어오는 전화에 결코 일치하지 않습니다, 그래서 모든 탭은 영원히 비어있을 것입니다. 그것은 대량 INSERT..SELECT 보다는 오히려 LeadContactPointService를 통해 실행합니다 canonicalisation의 정확히 하나의 구현이 있습니다. SQL 트윈은 re-derive digit stripping, NANP 처리, 확장층 및 주소 unwrapping, 그리고 나중에 divergence는 보이지 않을 것입니다 — 시드된 줄은 단순히 일치 라이브 트래픽을 중지. 생산에 대하여 적용하는: 45의 지도의 맞은편에 66의 접촉점.

  3. · kamo-shared-library

    Point-in-time contact-point 인덱스 및 리드 통신 링크

    Lead Communications 탭을 추가합니다. LEAD CONTACT POINTS는 모든 전화 번호와 전자 메일을 기록했습니다. activeFrom/activeTo를 가진 창으로. LEAD COMMUNICATIONS는 내구성을 기록합니다. 리드와 한 통화, 음성 메일, 텍스트 또는 전자 메일 간의 연결, 작성 순간 그것은 그 순간에 접촉 점에 대해 발생합니다 — 그래서 변경 리드의 숫자는 미래 트래픽 만 결합하고 그것이 정확히 역사를 나타낸다. PHONE CALL LOG 는 플랫폼이 없었다는 통화 기록입니다: RECORDINGS는 단지 가지고 있습니다 오디오가 캡처 될 때 행, so missed and un-recorded call left no trace. ContactCanon은 전체의 "동물"의 단일 정의입니다. 플랫폼; LeadController.canonical 지금 전화는 너무 반전 lookup 그리고 커뮤니케이션 일치는 disagree 할 수 없습니다. LeadContactPointService 및 LeadCommunicationLinker는 deliberately 아닙니다 stereotypes - shared-lib @Service가 저장소가 컨텍스트 시작 실패 패키지를 추가하지 않은 모든 서비스에서, 이는 생산을 촬영 세 번 아래로. 자신의 서비스는 콩을 선언합니다. LeadService는 그들에게 @Autowired (required=false) 그래서 다른 곳에 아직도 철사.

  4. · MediaService

    예약 단계 전에 데모 리드 캡처

    마케팅 사이트 데모 양식 수집 이름, 이메일, 회사, 회사 크기, 산업 및 메시지, 다음 누구에게도 알리지 않고 스케줄링에 고급. 지도 창조는 단지 안쪽으로 살았습니다 *********** 그래서 예약을 완료하지 않은 모든 방문자 — 모든 방문자 해당 이용 후기에 달린 코멘트가 없습니다. 상세 정보 - POST ***********는 자체에 지도를 씁니다. 회사 소개 X-Public-Chat-Org-Id 헤더 APIService 스탬프 제공 유효한 열쇠, 몸에서 결코. - findOrCreatePublicLead는 이제 모든 3의 단일 리드 쓰기 경로입니다. 공공 표면 (데모 폼, 일정, 가입), 그래서 하나의 방문자는 하나의 리드를 생산 그러나 많은 단계 그들은 완료. org의 "KamoCRM"/ "Demo를 각인합니다. Request" 납품업자 제품은 그 납품업자에게서 시장을 가지고 가고, 노선 LeadService.createLead를 통해 직접 엔터티를 저장하는 대신 - 오래된 인라인 저장은 역사 행과 LEAD CREATED 사건을 일으키지 않습니다, 그래서 그 이미 오픈 그리드에 결코 등장하지 않습니다. - 회사 크기, 산업 및 방문자의 메시지가 리드 역사로 유지됩니다. 입력; 지도에는 그들 중 어떤 열도 없고 그들은 부속입니다 Salesperson는 실제로 읽습니다. - GET /api/public/webinar/types는 공공 페이지가 유형 ID를 오히려 발견할 수 있도록 합니다. hardcoded copy와 slots/available를 실행하는 것보다 이제도 반환합니다. availableTimes — org의 자체에 대해 해결된 동일한 가용성 timezone는 예정된StartTime으로 다시 게시될 수 있는 순간으로.

  5. · kamo-shared-library

    공개 데모 요청 리드 캡처 primitives

    마케팅 사이트의 데모 양식을 작성하는 방문자는 결코 시간을 책정하지 않습니다. left no trace: 리드는 예약 거래 밖에서 작성되었습니다. 앞의 캡쳐는 3 조각의 라이브러리가 없습니다. - ****************는 반복 제출을 다시 일치 같은 형태를 이미 생산합니다. 공급 업체 제품으로 Scoped 혼자 이메일에 그래서 익명 양식은 결코 채택 할 수 없습니다 (그리고 다시 스탬프) 리드 그 주소로 만든 직원. - PublicWebinarDateSlotsDTO : 절대로 해결되는 가용성. 더 보기 저장된 구멍은 지역 날짜 플러스 지역 없이 벽 시간, 입니다 브라우저는 예약 가능한 ScheduleStartTime으로 설정할 수 없습니다. - PublicWebinarTypeDTO : 현재 로스터없이 웹 세미나 유형, 그래서 공공 페이지를 찾을 수 있습니다 유형 ID 없이 새기 현재 이메일 주소.

  6. · kamo-internal

    Navigation: 엠에디터 도움말

    Provider Setup 탭은 SettingsView 내부에 렌더링되었지만 별만 도달했습니다. URL을 입력 - 목록 설정의 두 곳에서 누락되었습니다. 대상: 설정 nav 메뉴와 설정 방문 페이지. 지금 지도 각, 일치하는 탭 순서, 어느 공급자가 회의를 결정하기 때문에 다른 설정도 가능합니다. 5개의 기존 탭의 빠른 팁은 결코 쓰지 않았습니다. — 모든 문자열은 placeholder ( "Help Heading", "Bullet Lobby Title"). 그들은 지금 뭔가 말, 그리고 Zoom 및 Teams에 추가된 설정을 커버합니다: in-meeting controls, passcode 정책, 로비 우회 및 발표자 역할, 먼 기록 잡아당기기 및 성적표, 그리고 공급자 sent 초대장. 각 탭은 또한 공급자가 다를지도 모른다. 장애인 통제는 다만 보고 보다는 오히려 진술한 이유가 있습니다.

  7. · kamo-internal

    페이지 부하에 Geo 및 IP 액세스 규칙 강화

    checkAccess는 규칙 자체를 평가하고 전체 생활에 대한 아무것도 일치 : 그것은 관련 규칙 **************** 출판사 WHITELIST/BLACKLIST/TEMP BLOCK 의 이름을 씁니다. Geo는 Node가 말한 의견이었습니다. GeoLite 데이터베이스 없음. 모두 halves 갔다 — 그것은 이제 verdict SecurityService를 읽습니다 Redis의 캐시가 놓기에 서비스를 요청하므로 하나의 구현이 있습니다. 정책과 사본은 여기 드리프트에 왼쪽. 주소는 왼쪽보다 X-Forwarded-For의 가장 큰 대중적인 호입니다. Proxies append, 그래서 왼쪽 요소는 클라이언트가 전송되고, 그것을 읽고 방문자가 처리 한 국가를 결정할 수 있습니다. 차단 된 방문자는 원시 JSON 대신 일반 403 문서를 가져옵니다 — 이것은 도달 최고 수준의 탐색을 하는 브라우저. 그것은 규칙과 국가를 지명하지 않습니다: 독자는 할 수 없습니다 그 위에 행동하고, 누군가가 경계를 깎아서는 것은 그 지도가 될 수 없다. 실패는 모든 경로에 열립니다. Redis가 간략하게 접근 할 수없는 경우 블록 프록시 전체적인 tenant 오프라인.

  8. · APIService

    게이트웨이의 10개의 액세스 규칙을 강화하십시오

    이 필터는 기록 된 이후로 비활성되었습니다. resolveOrgId read org:domain:<host> Redis에서 아무도 키를 썼고, null 반환은 허용하도록 떨어졌다. Geo 분지는 SecurityService에 대한 코멘트를 가진 빈 if-block이었습니다. 하지 않습니다. 통과되는 각 요구. 그것은 이제 verdict SecurityService 캐시를 읽었고 그 서비스를 놓습니다. 그래서 정책은 여기에 단순화 된 것보다 한 곳에서 생활합니다. 뜨거운 경로 이다 한 redis read; miss cost one short-timeout HTTP call per organization and address per 30s. 클라이언트 주소는 X-Forwarded-For의 가장 큰 공개 hop입니다. Proxies append, 그래서 left element is attacker-supplied — 그것을 읽는 것은 헤더가 선택하는 것을 국가 요청은 다음과 같이 판단됩니다. 비효율 조사, CORS preflight 및 결정 결점 자체, 결코 클러스터 내부 주소 : 서비스 - 서비스 트래픽은 국가가 없으며 그것을 막는 것은 플랫폼 아래로 가지고 갈 것입니다. 각 경로에 실패, 종속 당 시험. 이 모든 열렬한 앞에 앉아 API 트래픽은 Redis가 느리게 될 때 블록을 필터링합니다. 자주 묻는 질문 **************** — 템플릿 초기 커밋에서 비계, @SpringBootConfiguration없이 패키지 제품 정보 그것은 결코 통과하지 않았다; CI는 -DskipTests로 구축 그래서 아무것도 통지. 그것을 제거 'mvn test'를 사용할 수 있습니다.

  9. · SecurityService

    실제로 Geo 및 IP 접근 규칙을 시행

    규칙은 저장되었다, Redis에 캐시하고 결코 상담. AccessCheckController는 평가의 유일한 호출자 및 AccessCheckController라는 아무것도; APIService's 필터는 Redis 키에서 orgs를 수정하지 않고 권한으로 놓습니다. 지오 블록 구성은 전혀 없습니다. AccessDecisionService는 이제 단일 권한입니다. 로그인이 직접 호출, Gateway 필터와 kamo-internal 프록시는 체크 엔드포인트를 통해 동일한 결정을 도달, 그리고 정책은 층 당 한 번 대신 한 번 존재한다. 노드 복사본은 먼 걸렸다. 아무것도 일치하기에 충분한 : 규칙 유형에 비해 "whitelist"/"temp-block" 동안 발행인은 WHITELIST/TEMP BLOCK을 작성합니다. GeoLite 해상도는 Redis에서 하루, 긍정적이고 부정적인, 건너뛰고 있습니다. 완전히 개인 주소. 주소는 헤더에서 온다, 그래서 부정적인 캐시없이 콜러 회전 붕대는 5.7M-row 테이블의 신선한 프로브로 모든 요청을 전환합니다. DoS 모양 findByIpInRange는 이미 피하기 위해 rewritten되었습니다. ClientIpResolver는 X-Forwarded-For의 Right-most public hop를 읽습니다. 왼쪽 요소는 클라이언트가 전송 된 것은: 프록시 부트, 그래서 "X-Forwarded-For: 8.8.8.8" 플러스 Traefik의 자신의 부록은 누구가 그들의 블록을 선택 할 수 있도록 에 대한 판단. 모든 지분은 우회에서 한 번의 헤더가있을 것입니다. 의존성 당 실패 열려있는, 및 신뢰성 당 asserted. 액세스 제어 Redis wobble 잠금에서 닫히지 않는 플랫폼에서 모든 지연, 악화 창문보다 사고가 닫습니다. 흰색 목록 주소도 우회 지오, 그래서 관리자 자신의 국가를 차단하는 사람들은 다시 길을 유지.

  10. · kamo-internal

    Zoom Marketplace 앱 플랫폼 등록

    Zoom의 원클릭 연결 경로 완료. 백엔드는 이미 해결 PlatformOAuthProviderType.ZOOM 는 카드가 없습니다. 마켓 플레이스 자격 증명을 입력 할 수없는, 그래서 회의 제공자 설정 스크린은 항상 원클릭으로 연결됩니다. 디자인에 의해 선택: per-org Server-to-Server 경로 필요 아무것도 여기와 추천된 기본값을 유지, 그래서 빈 카드는 단순히 숨겨진 클릭을 유지. 팀은 기존 Microsoft 365 등록을 재사용합니다.

  11. · kamo-internal

    Microsoft 팀 전화 공급자, 뒤로 정면

    팀 추가 **************** 전체 경로 를 통해: 공급자 선택, Entra + Azure 통신 서비스 구성, tenant admin 동의, per-member 연결, 및 in-browser softphone. softphone는 구조적으로 다른 공급자에게서 다릅니다. Teams는 제3자에게 SIP 레지스트라가 없으므로 팀 라인은 할 수 없습니다. SIP.js 또는 RingCentral의 웹 폰으로 등록하십시오. 지원된 경로는 Azure입니다. Communication Services' custom Teams endpoint: 백엔드 교환 ACS 토큰의 Entra 토큰 및 TeamsAcsPhoneSdk는 같은 PhoneSdk 인터페이스 뒤에 호출 에이전트 SIP 어댑터 구현, 그래서 useSoftphone 및 모든 UI 구성 요소 제공 업체-agnostic. 회사 소개 옵션 acs* 필드를 얻을; sipInfo는 단순히 팀에 대 한 빈. ACS 번들은 브라우저 전용이며 동적 인 내부 시작 ()으로 수입됩니다. 정적 수입은 서버 렌더링을 중단합니다. 두 팀 별 진실은 UI에 표면이 아닌 왼쪽보다 실패 런타임: in-browser 호출은 선택 사항입니다 (ACS 공백 및 org는 여전히 존재와 통화 기록, 오히려 오류보다 숨겨진 다이얼러와), voicemail은 팀의 음성 메일 API가 없기 때문에 기본적으로 꺼집니다. — 메시지 토지 각 회원의 교환 사서함에서, 그래서 그들을 읽는 것은 물질적으로 더 넓은 관리자는 deliberately로 선택해야 한다. 회원은 전화 설정 탭에 카드를 연결합니다. 대신 공급자 인식 RingCentral 전용. 둘 다 공급자는 per-member 허가를, 요구합니다 다른 이유: RingCentral 때문에 softphone만 등록할 수 있습니다 연결 계정의 자신의 확장, 존재 쓰기 및 호출하기 때문에 팀 토큰 교환은 위임 전용입니다. 브랜딩: 타일은 Microsoft 법인 마크와 일반 제품 이름을 사용합니다. Microsoft는 통합을 설명하기 위해 naming 팀을 허용하지만 팀 제한 인증 된 팀 파트너에게 로고 및 브랜드, 그래서 팀 글리프가 배송되지 않습니다. 인증: npm 테스트 - 40 파일, 394 테스트, 0 실패; tsc --noEmit 깨끗; i18n 열쇠 감시와 클라이언트 neavigation는 통행을 둘 다 감시합니다. 사전 문자열 착륙 첫 번째 kamo-translation-dictionary 0801a17.

  12. · VOIPService

    Microsoft Teams Phone as a provider

    Teams is not one API, so the provider glues three control planes together: • Graph, app-only — call history (getPstnCalls), presence reads, directory and Teams device inventory. Call records are application-permission by design; Microsoft states plainly that they have no delegated form. • Graph, delegated — presence writes (Presence.ReadWrite exists only as a delegated, self-only permission) and voicemail, which lives in the member's Exchange mailbox because Teams has no voicemail resource at all. • Azure Communication Services — the in-browser softphone on the member's own Teams Phone line, via the custom Teams endpoint token exchange. This is the only supported route: Teams exposes no SIP registrar to third parties, and the Graph calling API joins as a bot rather than as the user. Capabilities are computed from what an instance is actually configured for rather than hardcoded, so an org without ACS reports voiceCalls=false and the UI hides the dialler instead of surfacing a 501 mid-call. Deliberately absent, because no Microsoft API exists at any version: SMS from a Teams number, call queues, call forwarding, auto-answer, and starting/stopping recording. Those stay on the interface defaults that raise 501. Credentials resolve per-instance first (an org registers its own Entra app — the common enterprise shape, and it needs nothing of Kamo the platform) and fall back per-field to a MICROSOFT_TEAMS row in the platform OAuth registry. Onboarding runs in two hops because the tenant must be discovered before it can be pinned: an admin signs in, the id_token's `tid` gives the real tenant, then they are sent to that tenant's /v2.0/adminconsent. Consent is confirmed by minting an app token and calling Graph — Microsoft returns admin_consent=True even on failure, and warns that the `tenant` redirect parameter is forgeable, so neither is trusted. Both Teams flows and the per-member delegated connect multiplex onto /api/voip/oauth/callback, the one path already public at the gateway, so APIService needs no new route. Change notifications ride the existing /api/voip/webhook for the same reason. Graph's handshake differs from RingCentral's — a ?validationToken query parameter echoed as text/plain — and is answered before anything else, since Graph drops notifications for ten minutes if an endpoint is slow. Subscriptions are created unfiltered on purpose: the subscription filter still targets the legacy `participants` collection that stopped returning data in June 2026. Two pre-existing defects fixed because Teams makes them load-bearing: • CallController, CapabilitiesController and CallFeaturesController resolved the provider via getPrimaryForOrg — the org's oldest active instance of ANY type. That is only ever right for a single-provider org. Teams will usually be a second provider, so every member's history, voicemail and agent state would have been served by whichever provider was created first. They now use a member-aware getForMember, mirroring what SipController already did. • Deleting an instance left member_voip_oauth_token rows behind, since there is no FK to cascade from, and they kept reporting "connected". Verified: mvn test — 133 tests, 0 failures (49 new).

  13. · kamo-internal

    공급자 설정 탭 및 기능 조정 회의 설정

    Provider Setup 탭을 /settings/features/meets에 추가하고 다른 모든 것을 만든다. 공급자에 대해 정직한 탭은 구성입니다. useMeeting no longer builds meet.<domain>/<room> in the browser — 그것이 무엇인지 구성에 관계없이 Kamo Meets 회의에 모든 회의를 만들었습니다. 현재 위치 backend를 통해 회의를 작성하고 공급자의 반환 URL을 사용합니다. 그래서 상호 작용 센터, 채팅 도구 창 및 회원 디렉토리 모두 자신의 변화없이 요약을 통해 경로 : 그들은 공유 MeetingDialog, 이 후크를 공유합니다. - Provider Setup : 설정 커버 바가있는 공급자 카드, 그래서 비용 Switching은 스위치의 앞에 오히려 발견한 후에 그 후에 눈에 보입니다 그레이드 아웃 컨트롤 탭. Credential 형태는 쓰기 전용입니다 — 서버 어떤 필드가 설정되지 않는다, 절대 값 - 플러스 라이브 연결 테스트 그리고 per-provider 설정 지침. - Capability gating: useMeetProvider는 공급자의 지원한 조정을 읽습니다 MeetSettingRow는 제공 업체의 툴팁으로 나머지를 비활성화합니다. 지원되는 설정은 숨겨지기지 않고 실제로 비활성화되어 있습니다. 그냥 흐리게, 그래서 그들은 키보드로 변경할 수 없습니다. 그들을 완전히 저장합니다. Gating faileds open — 실패한 기능 조회는 회색부터 모두를 보여줍니다 작업 화면에서 backend를 제어하는 것보다 악화됩니다. - 새로운 설정 다른 제공 업체 지원: Join-before-host, in-meeting 채팅, 화면 공유, 다이얼 인, 정통 사용자 전용, 암호 길이 및 embedding, 로비 우회 범위, 선물 및 출석 통제, 구름 기록, 성적표, 기록 다운로드 및 공급자 - sent 초대. - /meet/join/<ref>는 이제 공급자 인식입니다: Kamo Meets는 여전히 한 번의 키를 가져옵니다 클릭 시간, 급상승 및 팀은 공급자의 자신의 URL로 리디렉션. · 회의 ID 또는 룸 이름, 그래서 초대는이 변경 전에 보내 계속하기. - 이메일 초대 링크는 UUID-validated Meeting id로 제작됩니다. 클라이언트 공급 URL이 결코 아닌 기존 규칙을 유지 org-branded 이메일에 신뢰할 수 있습니다.

  14. · kamo-shared-library

    MICROSOFT TEAMS 공급자 유형

    MICROSOFT TEAMS 를 VoipProviderType 에 추가합니다. ORDINAL으로 enum persists *********** 그래서 위치는 짐 방위이고 상수가 지속됩니다. 클래스 Javadoc은 이제 다음을 떠나기보다 오히려 말한다. 그것을 infer에 사람. DDL 변경 없음 - ORDINAL 열은 값이 없다 흰색 목록, 그래서이 필요 KamoInitializer 실행. MemberVoipOAuthTokenRepository에 2개의 파생된 쿼리를 추가하십시오: • findByProviderAndInstanceId — 인바운드 공급자 정체성을 지도합니다 (Microsoft) Entra object id 에 the Teams call record) 뒤 에 the Kamo 회원. • deleteByInstanceId — 이 행은 FK가 인스턴스에 없으므로 삭제 공급자는 여전히 "연결"보고 뒤에 그들을 떠나.

  15. · APIService

    회의 제공 업체 OAuth 콜백

    Zoom 및 Microsoft는 org Authorises 후이 게이트웨이에 브라우저를 리디렉션 Kamo의 앱. 여기에 팝업 토지는 열렬한 세션이 없습니다. — org 여행에서 ?state — 그래서 콜백은 sessionless, auth-stripping passthrough를 필요로 이메일 제공 업체 콜백 이미 사용, 일반 /api/meet/** 앞으로.

  16. · MediaService

    Zoom 및 Microsoft 팀과의 회의 제공 업체 요약

    회의는 Kamo Meets by Construction — MeetService가 미팅룸에 참석했습니다. 이름과 다른 아무것도. 이것은 요약 및 두 개의 원격 제공 업체를 소개합니다. 뒤로. meet/provider 거울 이메일 공급자 층: MeetingProviderResolver는 모입니다 MeetingContext (암호화 된 자격, 새로 고침 된 OAuth 보조금, org 정책, 공급자 측 주인 계정)와 기능 지도, 그래서 외침은 요구합니다 공급자 유형에 지칭 보다는 오히려 MeetingScheduler. 네 번째 추가 공급자는 bean를 추가하고, 호출 사이트를 편집하지 않습니다. - KamoMeetProvider : 룸 naming 및 URL 구축, 서버 측 이동. 더 보기 org-namespacing은 Prosody 회의를 공유하는 두 개의 10ants를 중지합니다. 브라우저에서 라이브; 그것은 지금 테스트에 의해 핀. - ZoomProvider: REST v2, Server-to-Server OAuth 또는 Marketplace 앱. 생성 조직 구성원을 대신하여 클라우드 녹음 및 성적을 끌어냅니다. - MicrosoftTeamsProvider: Graph onlineMeetings, 앱 전용 또는 위임. 제품정보 연결 시험 조사 회의 창조, 신청 접근 정책 때문에 Teams는 일반적으로 admin misses - 혼자 권한 모든 회의에서 벌금과 그 후에 403s를 정정합니다. 회사연혁 기능은 admin UI와 계약을 맺고 있습니다. 각 공급자는 선언합니다. 설정은 명예 할 수 있으며 설정 화면이 나머지를 비활성화합니다. 관심상품 신뢰할 수 있는 시험에서 asserted, 지나치게 하는 공급자가 일하기 때문에 침묵적으로 아무것도하지 않는 toggles - 실패 이 층은 방지 할 수있다. ProviderRecordingSweep은 Kamo의 자체 저장소로 원격 녹음을 끌어냅니다. 유지, 할당량 및 게시물-meeting summaries는 모든 공급자에 동일하게 작동합니다. 다운로드: 이 서비스는 또한 1Gi의 채팅 및 회의를 제공합니다 제한, 그래서 대형 기록은 위험보다 경고로 건너 뛰기 팟. Credentials는 기존 플랫폼 키로 암호화되므로 새로운 비밀이 없습니다. 제출하기 meet endpoints가 공유하는 세션 처리 MeetSessionResolver - 권한 확인을 확장하지 않고 deliberately.

  17. · InitializerService

    멀티 프로바이더 회의 층을위한 Schema

    계정 만들기 *********** 및 org meeting oauth tokens, 추가 MEETING RECORDS 및 MEETING RECORDINGS 및 MEETING Zoom/Teams-capable 설정에서 ORG MEET CONFIG, 그리고 모든 기존의 백필 명시적인 KAMO MEET/ACTIVE 행에 조직. 이 두 가지는 우리를 가르쳤다, 모두 여기에 인코딩. Hibernate의 ddl-auto 빌드 모든 CommandLineRunner 앞에 SessionFactory, 그래서 CREATE TABLE 문 일반적으로 no-op 및 열은 기본적으로 도착하지 않습니다 - backfill 그러므로 id 및 timestamps 명시적으로 그에 의존하는 것보다, 왜 첫 번째 버전은 침묵적으로 아무것도 삽입. 그리고 독특함은 entities는 Hibernate가 자체 제약을 유지하므로 지명 된 인덱스 이전 개정은 중복되었다; 그들은 여기에 떨어졌다. com.kamo.z.shared.meet을 명시 @EnableJpaRepositories 목록에 추가하십시오. 새로운 저장소에는 어떤 러너 화재 전에 콩과 KI 낙관이 없습니다.

  18. · kamo-shared-library

    공급 업체-agnostic로 모델 회의

    Kamo Meets는 가능한 백엔드였습니다. OrgMeetConfig는 평면 대회였습니다. 설정 가방과 MeetingRecord는 아무것도 개최하지만 룸 이름. 이 추가 Zoom 또는 Microsoft 팀에 조직을 실행하기위한 스키마. - meet.provider: MeetingProviderType / MeetingProviderStatus, 의 OrgMeetingProviderEntity (암호화, 지속 상태) 및 OrgMeetingOAuthTokenEntity, 이미 이메일 provider 패키지를 미러링 이메일 공급자 요약을 백업합니다. - MeetingRecord는 호스팅 공급자의 자신의 정체성을 얻습니다. - 원격 회의 ID, 로그인 및 호스트 URL, 패스코드, 호스트 계정 — 그래서 회의는 rejoined 할 수 누구든지 그것을 호스팅합니다. - MeetingRecording는 공급자를 얻습니다RecordingId는, 리모트의 잡아당기기를 지킵니다 공급자의 구름 기록 idempotent. - OrgMeetConfig은 설정 Zoom 및 팀의 미팅 전용 지원 config는 수행 할 이유가 없었다 : join-before-host, passcode shaping, 로비 bypass 범위, 선물 및 참석자 제어, 클라우드 녹음, 성적표, 공급자의 초대, 그리고 fallback 주인 회의는 아래에 창조됩니다 회원이 공급자에 계정이 없습니다. 공급자 행이 KAMO MEET에 해결하지 않는 모든 org, 그래서이가 될 때까지 admin는 다르게 선택합니다. 칼럼은 KamoInitializer의 생산에 적용되었습니다. 이 착륙하기 전에. PlatformOAuthProviderType은 Zoom Marketplace 앱의 ZOOM(9)을 얻습니다. 팀 회의 재사용 MICROSOFT(3). 그것의 감시 시험은 그것으로, enum이기 때문에 움직입니다 시험은 그것의 persisted ids를 따로따로 착륙할 수 없습니다.

  19. · kamo-internal

    Geo-blocking 카드에 대한 허용 목록 국가

    카드는 단지 deny 국가, 그래서 하나의 국가를 봉사하는 org는 enumerate 다른 사람. 이제 두 목록이 있습니다. 선택한 국가를 나열하는 모드 toggle Picks 땅에, 그리고 두 테이블은 측면에 의해 앉아. 빈 허용 목록은 차단되지 않는 모든 것을 허용한다; 모든 국가 비 면제 그것에서 absent. 즉, 역대는 카드의 상태에 충분합니다. 발견, 그래서 테이블 위의 통지는 규칙이 힘에 있다는 것을 말한다. 독특한 (org, country) 제약은 정확히 하나의 목록에 국가를 유지, 이는 만들 것 다른 것에 다시 추가 실패, 그래서 각 행은 PUT를 통해 그것을 플립 움직임 작업을 수행 대신.

  20. · SecurityService

    Geo 블록을 따라 국가 허용 목록

    이 지역은 단지 거부 : 국가가 차단되었거나 부패되었다. Orgs 그 한 국가를 봉사 하 고 모든 다른 하나에 대 한 enumerate, unmaintainable 그리고 조용히 새로운 국가 코드가 나타납니다. org geo block rules.is blocked는 이미 존재하고 열심히 진정한, 그래서 허용 규칙은 열 집합 false - schema 변화가 없습니다. 평가: 명시된 블록 승리, 그런 다음 목록은 모든 것을 아낌없이 허용하고 빈은 목록을 허용 차단되지 않는 모든 것. 즉, 기존의 블록 전용 orgs는 이전처럼 정확하게 구합니다. publishGeoRules 이제는 규칙 세트의 양쪽을 발송합니다. 규칙은로드 베어링입니다. 한 번 존재합니다. 이 변경 전에 작성된 예약된 페이로드는 no isBlocked 필드를 수행하고 배포를 통해 캐시 TTL를 생존, 그래서 누락 된 필드는 차단으로 읽습니다. 또한 setBlocked 범위와 caller의 org로 삭제합니다. 이전에 삭제된 규칙 혼자 UUID에 의해, 그래서 다른 10ant에서 id는 명예를 받았다.

  21. · kamo-shared-library

    조정 및 가이드라인 버전에 품질 읽기

    조립된 가격은 기본적인 세포 PLUS 그것에 겹쳐 쌓이는 조정, 그래서 judging입니다 단지 세포는 절반 숫자를 판단합니다: 미묘한 -1.250를 가진 청결하 독서 99.875 상단에 LLPA는 여전히 잘못된 가격입니다. MlosPriceAdjustment는 지금 읽기 질을 나릅니다 그 1개의 조정의, 그래서 표시 떨어져 문은 약한 연결을 주변에 가지고 갈 수 있습니다 전체적인 집합. MlosGuidelineVersion은 rate-sheet spine과의 일관성을 위해 동일한 필드를 가져옵니다 -- 이미 sourceDocumentId를 수행하므로 입증을 완료합니다. nullable 둘 다; null은 좋지 않다는 것을 의미하지 않습니다. prod에 적용된 란 KamoInitializer를 통해 CockroachDB.

  22. · kamo-internal

    탭에서이 응용 프로그램에 다시 링크를 열고 회원은 이미

    판독의 메일은 새 탭의 모든 링크를 엽니다. 모든 인터넷과 우리를 위해 잘못. 우리의 알림 이메일은 거의 모든 링크입니다. 앱으로 돌아가고 신선한 탭으로 보내면 세션을 끊습니다. 회원이 이미 가지고 있으며,이 탭에 도달하기 위해 추운 부팅을 통해 앉아 즉시 렌더링 할 수 있습니다. 동일한 근원은 전체적인 시험입니다 — 페이지에 byte-equal는 이메일, 아닙니다 "카모 도메인처럼 보이는" org의 도메인에 스프릭스 일치하지 않습니다. 그것은 현재 세션의 URL 설정은 유효하다, 이는 전체 이 탭에 머무는 이유, 그것은 메일에 의해 신뢰할 수없는: 또 다른 tenant의 호스트, a lookalike, or userinfo 다른 호스트를 지적하는 것은 다른 모든 기원과 다른 낯선 링크와 같은 새로운 탭으로 이동합니다. 위치 지정 보다는 오히려 Routing: 완전한 문서 짐은 React를 찢습니다 나무와 파괴 모든 오픈 도구 창 어떤 unsent 초안과 함께, 왜 이 repo에는 단단한 내부 항법에 대하여 건축 문이 있습니다. 수정 및 중간 clicks are left alone — 그 제스처는 사용자가 새 탭을 요청하는 것입니다. sandbox가 이미 허용-same-origin을 유지했기 때문에 부모에서 듣기 omitting Allow-scripts, 그래서 이메일에서 아무것도 자체가 실행됩니다. 핸들러는 외부에 붙어 있습니다. 기록의 한 트랩, 자신의 테스트에 의해 잡은 : URL보다 오히려 경로 반환 필요하지만 충분하지 않습니다. "https://host//evil.test"는 정말 동일합니다. 그리고 그것의 pathname은 "/evil.test"입니다 - 라우터가 프로토콜 관계로 읽습니다. 관련 기사 이메일이 공개되었습니다. 그런 다음 이제 브라우저가 실제, 무해한 URL을 해결하는 새로운 탭으로 떨어졌습니다. 오히려 조용히 rewritten 에 어딘가에 이메일 하지 않았다.

  23. · kamo-shared-library

    퍼셀 추출 신뢰 + eligibility-matrix 입증

    신뢰 모델의 두 가지 간격, 돈 경로에 모두. 퍼셀 시트 전체 층은 1 개의 가격을 배양하기위한 잘못된 곡물입니다 : 단일 badly-read 쿠폰은 전체 시트를 내려 놓고 모든 OTHER 가격을 보낼 것입니다 인간에게, 높은 장 지면은 특정한 세포에 대 한 아무것도 알 수 없습니다 실제로 인용되었습니다. ****** ********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** 자주 묻는 질문 이 요금/가격/lock 행은 읽었습니다, 그래서 misread 쿠폰은 자신의 가격 만. 신뢰성 입증. MlosEligibility는 Matrix는 소스 문서에 대한 경로가 없었다. 모든 -- 그것의 유일한 노선은 NULLABLE guidelineVersionId이었습니다, 그래서 승진된 모체는 할 수 있었습니다 시트에 추적되지 않습니다. Eligibility는 대출이 있는지 결정합니다. denial이 설명 할 수있는 정확히 만드는 제안 가능한; 입증 갭은 차용인이 말한 시점에서 틈이 없다. 지금 이동 sourceDocumentId와 같은 추출 신뢰 계약 속도 시트 척추. null이 없고, null은 SIGNAL이 좋지 않습니다. KamoInitializer를 통해 CockroachDB에 적용된 란.

  24. · kamo-signer-monorepo

    에이전트의 전화, toll-free 및 고객의 사본에 이메일 표시

  25. · kamo-internal

    에이전트의 전화를 표시, toll-free and email on the preview

    자체 라인에 각각: 두 개의 숫자와 주소의 run-on은 하나의 문자열로 읽습니다. 잘못된 다이얼을 가져옵니다.

  26. · SecurityService

    에이전트의 출판 연락처를 해결

    이메일은 TeamMember.emailWork 보다는 오히려 멤버의 1 차 우편함에서 옵니다 — 열은 무료 텍스트 사전 mailbox 제공 및 일상적으로 동의 그들이 실제로 보낸 주소. mailbox가 1 차일 때 fallback가 남아 있습니다. 확장을 가진 VOIP-enabled 일원은 org의 자신의 선 플러스로 간행됩니다 확장, toll-free 번호를 너무 제공 할 때 org 하나. 연장 없이, 그들의 업무 전화 — 그들이 출판 될 의미있는 유일한 번호. 도움 받기 VOIP config는 그 확장이 응답하지 않기 때문에 아무것도 게시합니다. 모든 조회는 적습니다: mailbox이기 때문에 customer-facing 문서를 렌더링하는 실패 행은 누락될 것입니다 접촉을 만드는 1개의 더 적은 방법 보다는 더 나아질 것입니다.

  27. · kamo-shared-library

    에이전트에 도달 할 수있는 모든 방법을 게시, 그냥 이름

    이름과 제목은 혼자 인용을 소유하는 고객을 말하지만 그것에 대해 묻지 않습니다. 블록은 이제 이메일과 전화를 수행하고, 콜러에 의해 해결 - 기본 메일 박스 이메일 공급자 schema 및 VOIP config의 확장에 살고, 도 정적 헬퍼에서 도달 할 수 있습니다. 메인 라인과 toll-free는 별도의 필드이므로 문서는 모두 인쇄 할 수 있습니다. 선택 그 사이에 전화가 고객의 비용을 선택하는 것입니다. lineWithExtension는 org 라인과 확장을 설정하고, null을 반환합니다. 반은 누락됩니다. orphan "ext. 204"는 누군가가 호출 할 수있는 번호가 아니라 베어 org 라인은 에이전트가 된 것처럼 스위치 보드에 고객을 잘못합니다.

  28. · kamo-shared-library

    카탈로그에 대한 추출 신뢰 spine + 자동 로그인 기반

    가격은 시트로 신뢰할 수있는 것뿐만 아니라 조립 된, 아무것도에 신호가 주어진 가격 경로: 신뢰는 pre-promotion에에서만 존재했습니다 staging rows (MlosExtractedCandidate) 생산 코드가 읽지 않은. ****************는 WEAKEST 원필드 신뢰입니다. 승인 된 후보자는 버전으로 승진 -- 최소, 결코 의미하지 않습니다. 200의 깨끗한 세포와 1개의 0.20의 misread 평균은 0.996에 이고 명확할 것입니다 어떤 임계 값, 그 한 셀은 대출을 잘못하는 것입니다. Null 의미 없음 SIGNAL(핸드-authored, 또는 열이 존재하기 전에 홍보) 및 소비자는 자동 승인에 대한 거부; 좋은만큼 애정을 읽는 것은 명백한 가격 자주 묻는 질문 다른 가격의 열과 같은 WORM 보호 -- snapshotted @PostLoad에서 그리고 @PreUpdate에서 확산, 또는 그것은 침묵의 mutable 구멍이 될 것입니다 감사 사슬. MlosPricingSignoff는 자동화된 / base confidence / threshold applied를 얻습니다. 없음 기계 승인은 회원을 제외하고 인간에게서 구별할 수 있습니다 id, 돈 경로에 감사 결함. 임계 값은 옆에 저장됩니다. 설정이 이동하기 때문에 값 : 'confidence was 0.72' 나중에 판단 할 수 없습니다 그 날이 0.70 또는 0.90이었다는 것을 알기 없이. KamoInitializer를 통해 CockroachDB에 적용된 란.

  29. · kamo-internal

    Quotes 탭 - 계정의 리드를 통해 모든 견적

    Leads 외에도 서버 페이지 DataGrid, 수와 제목, 상태, 총 검색 범위 및 생성 된 범위. 필터는 하나의 debounce를 공유하고 단일 쿼리로 붕괴, 그래서 범위를 조정하는 동안 원스톱 당 1개 보다는 오히려 원스톱 당 1개 보다는 태우는 비용. 모든 필터 변경 페이지 1에 재설정 - 좁은 결과의 페이지 6에 머물 빈 그리드로 읽습니다. 유효성은 상태에서 출발합니다. SENT 견적은 유효성 날짜를 과거로 확인할 수 있습니다. SENT로 읽으십시오. 그래서 그 행은 침묵으로 대신 자신의 마커를 수행 기타 제품 행과 리드 컬럼 모두 경로로 그 리드의 인용 탭.

  30. · SecurityService

    GET /quotes/account/{uid} - 페이지, 필터링, 정렬

    날짜는 ISO 문자열로 도착하고 leniently : 필터 클라이언트가 나쁜 것을 보내 400 이상의 전체 그리드가 없습니다. 날짜 전용 "to" 경계는 전체를 다룹니다 그날, 그렇지 않으면 오늘 필터링은 자정 이후 아무런 상승하지 않습니다.

당신의 우주는 기다리고 있습니다.

몇 분 안에 무료로 시작하세요. 준비가 되면 언제든지 제품을 추가할 수 있습니다.

영원히 무료 - 신용 카드 필요 없음