플랫폼의 Active 및 Void 탭 org 디렉토리
콘솔의 조직 탭은 이제 Active 및 Void sub-tabs로 나뉩니다. · voided 조직은 orgs.is active = FALSE (SecurityService의 void에 의해 설정) endpoint); 디렉토리는 여전히 Void 탭에 하나 나열됩니다. 그래서 연산자는 복원...
첫 번째 시도가 사망 한 웹훅 이벤트를 다시 실행하고 SDK를 거부 할 수 없습니다
처리되지 않은 행에 대한 잃어버린 주장은 항상 500 응답, 그래서 이벤트 그의 첫 번째 시도가 실패했습니다 (독립적 인 상황의 인종 내부 invoice.created/finalized/paid trio, transient DB 오류, 실패 커밋) 다시 실행할 수 없었다 : 모든 red...
실패한 책임은 다행히 시작하고, 줄무늬는 기절 행위의 앞에 동의해야 합니다
invoice.finalized는 status=각각에 따른 금액으로 엽니다. 충전 전 자동 충전 송장은 시도하고 송장 핸들러는 delinquency 시계를 시작하고, 지불을 보냈습니다 모든 송장 이벤트 유형에 대한 그 상태에 대한 편지. 지금 시계 청구서만 시작하세요. 결제하기 Str...
동결 재건 감시는 결코 불을 수 없었다, 그리고 digest check failed open
배포에 대한 보호는 아무것도 inert, 그래서 파이프라인 파드가 이전의 다이제스트에 머물면서 두 녹색 일자리를보고했습니다. 그것은 방법 billingservice ran 에 일 에 kamo-shared-library 너무 늙은 에 이름 ServiceType 35, 모든 시그널이 말한 ...
이 빌드가 해결되지 않는 앱의 카탈로그 행은 판매되지 않습니다
ServiceTypeConverter는 알 수없는 앱 ID를 던지고 해결하기 시작했습니다. null로, 어떤 서비스가 해야 하는지 - 각 항아리 내부의 enum ships 카탈로그는 공유, 그래서 새로운 응용 프로그램은 항상 데이터베이스에서 마지막 독자가 재건되어 2026-09-08에서...
가격 줄무늬는 결코 들리지 않는 결함, 침묵
카탈로그에 대한 mapped 가격을 비교하고 일찍 돌려 아무것도 전혀 매핑되지 않았습니다. 그래서 카탈로그는 얻었다 가격은 처음 만든 것은 아무것도에 의해보고되었다, 영원히. KamoCRM에 모든 TRIENNIAL 가격 : 계획은 3 년 동안 $ 49 및 $ 99에서 가격이 책정됩니다....
스크린이 말하는 것을 책임지고, pretend 보다는 오히려
살아있는 줄무늬 열쇠에 대하여 계획 & 빌링 콘솔의 감사는 솔기를 발견했습니다 한 번에 모든 방향으로 깨진 화면과 줄무늬 사이, 그리고 침묵 모든 것. 조직이 유료 구독을 완료하지 않았다, 그래서 모든 이 중 하나는 첫 번째 실제 고객에 불을 것이다. 고객이 위탁하는 것 광고된 제안...
계획의 시작 요금 및 라이브 제공, 와이어
PlanDto는 반복 비율 만 수행하므로 모든 표면은 가격을 인용했습니다. 고객은 청구되지 않습니다 : KamoCRM의 시작 요금은 $ 99이며 좌석은 $ 495입니다. 한 달 전에 5 좌석 스타터 주문은 청구됩니다. 공개 가격 페이지는 항상 그것을 보냈다; 인앱 표면은 아무 방법도 없...
고객의 플랜 페이지 뒤에 1개의 엔드포인트
GET /api/billing/self/plan 모든 응답 /myplan 렌더링: 계획, 무엇 조직은 실제로 사용할 수 있습니다, 카탈로그는에 대한 비교, 좌석과 로스터, 저장, 갱신 및 어떤 협상된 계약. 6 개 이상의 요청은 선적 상태를 넘어 이유 : 액세스 계층 브라우저에서 솔직...
에 의해 배포 digest, 태그에 의해
Preceding commit stops `set image` 침묵의 no-op. 이 주장 outcome : 롤아웃 후, 태그는 레지스트리에서 소화로 해결됩니다. 실행된 파드는 그것에 대하여 검사됩니다. 팟이 실행되지 않은 경우 생성, 빌드는 성공보고 대신 실패. 태그는 그 질문에 대...
동일한 커밋의 재건은 아무것도 배포하고 성공을보고
이미지는 커밋 SHA로 태그되어 있으므로 동일한 커밋 생성을 재구성합니다. 동일한 이미지 참조. `kubectl set image` 그런 다음 아무것도 변경, 배포는 결코 터치되지 않습니다, `rollout status`는 즉시 성공 OLD pods, 그리고이 파이프라인은 아무것도 배포...
계획에 대한 모든 경로에 대한 시작 수수료, 및 기록 협상 된 용어
두 개의 노선은 동일한 계획에 도달하고 그 중 하나가 새로운 충전하려고 per-seat 시작 요금. SubscriptionService를 통한 판매용 주문서, 스트립을 결코 느끼지 않는; 셀프 시트 체크 아웃은 체크 아웃에 똑바로 간다 세션과 서명 한 아무도 청구됩니다. 같은 계획 그것...
모든 돈 이동 청소를 잠그고, 2개의 팟을 달립니다
BillingService ran one pod 및 그 7 개의 예정된 청소는 그것 때문에만 정확했습니다. 더 보기 이 플랫폼에는 ShedLock이 없습니다. 그래서 두 번째 복제는 두 번 두 번씩 실행해야합니다. 태그: **************** 결제 제공 업체에 대한 계량된 사...
롤아웃은 오래된 파드가 행해지는 것
Deploys는 요청을 잡기 위해 아무것도와 함께 각 서비스의 유일한 파드를 대체 비행. 함대에 적용된 3개의 조정: - 프로세스가 SIGTERM을 참조하기 전에 10s를 잠그십시오. 쿠버네티스는 팟을 제거한다. EndpointSlice와 같은 순간에 신호, 그리고 Traefik는 제...
Stop offering the internal platform-owner plan for sale
listPlansForMarket filtered on isActive alone, and active is not the same as on the menu. OWNER_UNLIMITED ("Platform Owner — Internal") is active, carries no pr...
실행 제안을 시도하고 좌석이 실제로 PAID인지 말
GET /markets/{id}/promotion 추가. in-app 구매 표면에 대한 방법이 없었다 제안은 모두에서 실행되었다 — 마케팅 사이트 읽기 프로모션을 통해 공공 카탈로그 프록시 및 kamo-internal은 동등하지 않았으므로 계획 및 청구 kamocrm.com이 동일한 계...
세 년 기간을 빌리고 콘솔에 속도를 인용
BillingCycles는 TRIENNIAL을 얻고, 3 년으로 줄무늬로 표현했습니다. 30rty-six MONTHs 그래서 갱신은 가입 기념일을 추적 - 같은 이유 ANNUAL은 1 년입니다. months지금은 enum에 위임, 이는 번호를 소유: 그것은 여기에 명시되어 두 번 더 구...
확장 요약의 Per-server 라인
전화 서버의 확장 탭은 조직 전체 인물을 보여주고 아무것도 다른, 그래서 빈 KamoPBX 서버 표시 "21 청구 가능한 확장 — $63.00 / month" — 21는 FreePBX 서버와 같은 org. /api/billing/extensions/summary 이제는 `instanc...
플랫폼 org는 자체 카탈로그에 의해 문을 열지 않습니다
플랫폼 org는 "KamoPBX Hosting add-on"라고 말했습니다. 전화 서버 화면, 추가에 대한 게시. 그것은 계획 카탈로그, add-on 카탈로그 및 줄무늬 제품을 다른 소유합니다 조직은 판매되고 아무도 송장하지 않습니다 - 그래서 그 빈 active addon codes...
Self-serve Enterprise 구독을 참조하십시오
기업 협상. 가격을 결정하는 것은 발표; 이것은 한국어 기업 계획의 명칭은 콜러가 아닌 거절됩니다. 주요사업 *********** 그래서 플랜 코드를 추측하고 게시 직접 콘솔을 읽는 것과 같은 대답을 가져옵니다. CALLER-SUPPLIED 플랜 코드에만 불립니다. 밤의 reconci...
확장에 의한 빌 전화 서비스
PricingModel.PER EXTENSION, 자체 예약 수량 키, 할당자, nightly reconciler, 제거 게이트 및 요약 API - 전화 쌍둥이 per-mailbox 작업, 데이터가 어디에나 다릅니다. Multi-instance는 모든 것을 통해 실행되는 차이입니다. ...
공유형 이메일 스캔. 청구 저장소 패키지
@EnableJpaRepositories 목록은 명시적으로, 그래서 MailboxBillingDayRepository 보이지 않는 서비스로 인해 outright를 시작하지 못했습니다. 어떤 단위 시험에 의하여 아닙니다.
현재 kamo-shared-library에 대한 재건
CI clones는 이미지 빌드 시간에 공유합니다. 이 서비스는 마지막 전에 건축되었습니다 공유lib는 GMAIL PERSONAL과 OUTLOOK PERSONAL을 얻었다. 그래서 배포된 enum 공급자의 값 EmailService를 파싱할 수 없습니다. 모든 mailbox-billin...
Mailbox 당 빌 전자 메일, 밤새
수량은 요청된 키 아래 서버로 처리되지 않습니다. 도달하고 기존의 amend 경로를 통해 밀어 - 그래서 Stripe의 CREATE PRORATIONS 요금 일 추가 및 크레딧 일 출시. 또한 mailAdd-on mailboxes를 사용하되, 중지합니다 billing 그룹 변경 add...
Webhook idempotency gap BL0의 최종 리뷰 닫기
Finding 1 (Critical): 적색한 줄무늬 사건에 잃는 주장 행을 증명, 사전 시도가 완료되지 않습니다. 견적 요청 일시적인 실패 (Yugabyte 40001, Hikari timeout, 독특한-constraint 경주)는 정품과 동일 중복, 그래서 redelivery 대답...
키 ephemeral per-attempt Stripe 생성
라운드 2 리뷰 (Ruling 17) 발견 "이 생성?" 필요한하지만 아니. 문제의 질문: 이 주제를 할 수 있습니다 열쇠 24h 창 안쪽에 한 번 이상 합법적으로 창조됩니다, 네트워크 재량 이외의 이유? 두는 대답을 창조합니다 예와 1 라운드에서 잘못 키워 : - SetupInten...
Keys는 Stripe에 속합니다만, mutations에 아닙니다
라운드 1 리뷰 (Ruling 15) 긴요한 발견 : 안정적인 idempotency update/cancel/attach/detach에 열쇠는 safeguard가 아닙니다, 그것은 버그입니다. 그들은 이미 명시된 대상 상태를 설정, 그래서 그들은 어떤 열쇠 없이 효력에서 idempote...
모든 줄무늬 쓰기 idempotent, 그리고 키없이 새로운 일에 빌드 실패
Stripe의 소켓 타임아웃은 실제로 성공한 것 indistinguishable, 우리의 측에서, 하지 않았다; 없이 idempotency 열쇠는 retry 두번째 구독, 체크 아웃을 창조합니다 세션, 또는 가격과 테넌트는 두 번 청구됩니다. StripeIdempotency.forKe...
돈 쓰기로 처리 된 플래그를 시작, 그 앞에
markProcessed was REQUIRES NEW, 그래서 그것은 처리 된 = true 동안 핸들러의 돈 쓰기는 여전히 중단 된 외부에 손상되지 않았습니다. 거래. Jpa번역 Manager는 중단 된 persistence를 플러시하지 않습니다. context, 그래서 내부 커밋은 ...
Prove library HQL는 Hibernate이 서비스에 대해 실제로 실행됩니다
kamo-shared-library 빌드 에 Boot 3.3.4 / Hibernate 6.5; BillingService 실행 시동 3.1.5 / Hibernate 6.2.13. 라이브러리 자체 HQL 테스트는 따라서 전달 함대의 이전 반에 대 한 vacuously — 같은 skew 그...
재생 된 줄무늬 이벤트 no-op
BillingWebhookEventClaimService 를 자신의 콩에 추가하고, REQUIRES NEW 를 모든 방법, 그리고 그것은 파견 스위치의 앞에 ProcessEvent로 타전합니다. 잃는 주장은 파견없이 반환, 그래서 줄무늬의 돈의 redelivery 이벤트는 두 번 쓰는 ...
핀 kamo-shared-library 1.6.0
라이브러리는 1.6.0으로 이동하여 모든 소비자가 1.5.0에 머물렀습니다. 소비자 CI 신선한 클론에서 차가운 ~/.m2 및 ci-settings.xml에 라이브러리를 구축 거울 Maven Central 만, 그래서 1.5.0은 어디와 빌드에서 fetchable 해결하지 못합니다. 그...
이미 선택한 플랜을 판매 중지
카탈로그는 항상 계획 번들을 추가하는 것을 기록했습니다. ****** *************************************************************************************************************************...
추적 된 조직에 대한 유료 변환 게시
이제 BillingSourceType.PAID가 마케팅.visitor.paid를 게시하는 두 경로, 단 하나의 침묵으로 절반 트래픽을 놓기 때문에 - AccountSubscription (주) 콘솔의 자신의 구독을 처리, ConsumerCheckoutService 스트립 체크 아웃. ...
자신의 JVM 힙 천장 위의 포드 크기 [skip ci]
이미지는 -XX를 가진 JVM를 시작합니다: MaxRAMPercentage=70 -XX:+ 항상PreTouch, 그래서 heap 혼자 걸릴 수 있습니다 70% 컨테이너 제한 및 사전 터치 모든 최선을 다하고 자주 묻는 질문 Non-heap - uncapped 메타 스페이스, 코드 캐시,...
Decide 플랫폼은 공용 해결사에 접근합니다
@PlatformAdminOnly는 이제 플랫폼에 이름을 붙입니다 (과태로 MANAGE ORGANIZATIONS는 이 서비스 플랫폼 표면이 대략인 것 입니다) 그리고 verdict 에서 온다 platformRightsResolver — 같은 규칙 SecurityService가 시행합니다...
적용 및 그룹 페이로드의 갱신 날짜를 수행
이제 두 표면은 현재PeriodEnd 및 cancelAtPeriodEnd를 보고합니다. 날짜는 무엇입니까? 취소 확인은 실제로 말해야합니다 - "당신은 끝까지 좌석을 유지 기간"은 추상에 재흡입, "당신은 14 3 월까지 좌석을 유지" reassurance 누군가가 행동 할 수 있습니다...
취소 중지 미래 청구 및 다른 아무것도
더 이상 "immediate" 플래그를 제거하고 고객 기반 경로가 묻지 않습니다. 한국어 진정한 구독을 종료하는 동시에 Stripe 요청 금지를 위해, 그래서 조직은 그 기간의 나머지를 잃었다 이미 지불하고 환불되지 않았습니다. 하루에 두 번 취소하는 Somebody 달은 그 달을 샀습...
조직 당 한 계획, 25 좌석 기업 천장, 그리고 지불하는 방법
계획은 이제 조직 수준 결정이며 다른 것은 무시 할 수 없습니다. 셀프 페이너 또는 그룹 관리자가 친절과 같은 자신의 읽기를 선택 정확한 버그: **************** "이 org를 사용 OR-ing에 의해이 응용 프로그램을 가지고 모든 라이브 구독 대상 org, 그래서 하나 1...
그룹 플랜 취소 및 1인용 더블 결제
마지막 배송의 세 가지 간격 : 계획이있는 그룹은 제거 할 수 없습니다. delete()는 살아있는 동안 거부합니다. 구독은 존재하지 않습니다., 그룹 행이 점유하는 것은 Stripe 구독 — 하지만 취소 할 방법이 없었다, 그래서 the safeguard was 죽은 끝. cance...
빌링 그룹은 끝을 끝내고, 아무것도 셀프 페이 충전을 중지
그룹은 사람들이 모여, 매니저의 자신의 카드에 계획을 살 수, 손 그것의 좌석. 그 존재의 아무도 : 유일한 운영은, approve 그리고 삭제, 그래서 그룹을 만든 소유자는 라벨과 그것을 사용하지 않는 방법. BillingGroupSeatService는 돈 이동 및 제목이 발행되는 ...
Renamed pay-group 테이블에 대하여 재건
법인은 billing groups에서 billing pay groups로 이전했습니다. 이전은 다른 모양의 라이브 레거시 테이블입니다. 이 서비스는 여전히 오래된 매핑에 내장 된 이미지를 보유하므로 목록 그룹이 실패합니다. 더 이상 존재하지 않는 열. 재건을 넘어 행동 변화 없음.
Config default로 공유된 자격 발송
플랫폼의 공유 암호는 DB PASSWORD에 대한 fallback으로 구워졌습니다. MINIO ROOT PASSWORD, 그래서 그것은이 저장소에 살았고 내장 된 이미지뿐만 아니라 클러스터에서. 생산은 DB 기본값을 사용하지 않는 — *** 공급 envFrom를 통해 DB PASSWO...
자신의 지불이 실패하고, 구독을 아래로 서
존재하지 않았다. invoice.payment failed는 행을 썼습니다. 이메일, 플래그 없음, 국가 변경 없음, billing.email-service-url 구성 Java 코드가 전혀 없습니다. webhook는 이제 첫번째 실패에 delinquency 시계를 시작하고 그것을 삭...
회원은 자신의 좌석을 구입하고 몸 모수 구멍을 닫습니다
Self-pay는 콘솔 내부의 경로가 없습니다. 청구 표면의 모든 것 account-shaped — 당신은 이미 Plans &의 앞에 AccountMember 행을 붙들어야 합니다 빌링은 아무것도 보여줍니다, 그리고 하나를 얻는 유일한 방법은 소유자 행동이었다 — 그래서 스스로 지불하고...
Org 정책 및 청구 그룹 API
조직 내에서 누가 Kamo를 지불 할 수 있습니다 지금 대답 및 설정할 수 있습니다. 둘 다 경로는 org-scoped이며 따라서 /api/billing/accounts/** 밖에 deliberately 입니다. 그리고 그 인터셉터: "내 직원은 자신의 좌석을 구입" 응답 할 수 두 번...