변경 로그
무슨 일이야?
플랫폼에 대한 모든 개선 사항, 그것이 선적.
· EmailService
DKIM 키와 relaxed/relaxed rsa-sha256 서명자 조직의 전송 도메인
DkimKeys는 도메인의 RSA-2048 키 생성 (org의 암호화 된 대량 공급자 blob에서 작동) TXT kamoXXXXXX. domainkey.<domain>에 회원 게시를 합니다. DkimSigner는 메시지가 정확히 표시됩니다. 전송을 보낼 것 — read from writeTo after the final saveChanges — 덮음 에서 과 어느 쪽 헤더 수신기 및 피드백 루프 사용은 현재 (Feedback-ID 포함, X- 헤더가없는, 이후 릴레이 스트립 X-Kamo-Ref). Apache jDKIM의 테스트에서 검증 된 독립적 인 구현 : 캠페인 - 모양 메시지는, 아직도 한 번 릴레이 스트립 X-Kamo-Ref를 정의하고, 변경된 몸에 실패하거나 이름 *.
· EmailService
도메인 전송을위한 DNS - 각 도메인의 자신의 네임서버 먼저 SPF 평가, DNS 공급자 이름
LiveDnsResolver는 Zone's authoritative 네임서버(1.1.1.1/8.8.8.8를 통해 확립)을 요청하므로 레코드를 DNS 제공 업체에서 방금 저장된 회원은 해결자의 부정적인 캐시 후 한 번에 볼 수 있습니다. 만료; 그것은 추천 또는 타임 아웃에 대중적인 결의자에 다시 떨어질, 그리고 TCP에 retries 때 답변은 datagram에 적합하지 않습니다 (dnsjava 3.5는 Google을 파고하지 않습니다. com는 다른 TXT를 truncated. SpfEvaluator는 수신 서버로 하나의 IPv4 주소에 대한 도메인의 정책을 평가합니다 (RFC 7208: *********** 리디렉션, 10-lookup 및 2-void-lookup 제한), 그래서 CNAME에 contact.kamocrm.com, 포함, 또는 베어 ip4 모든 읽기 같은. DnsProviders는 회사 이름을 실행 네임서버의 DNS, 공급자별 지침.
· EmailService
공유 org 릴레이 (47.181.8.86)는 모든 조직에 대 한 시드; 플랫폼 릴레이는 KamoCRM의 유지
PlatformRelayProperties는 이제 클러스터 릴레이를 모두 알고 있습니다. postfix-bulk (47.181.8.87, hello.kamocrm.com) and postfix-orgs (47.181.8.86), egress 주소, DKIM selector 및 DNS 대상 조직과 함께 도메인 CNAME을 (contact.kamocrm.com)로 전송합니다. 둘 다 릴레이로, 그래서 둘 다 납품 보고를 얻습니다. 스타트업 백필씨 k3m1-org-relay as a SHARED 플랫폼 호스트 (STARTTLS + PLAIN Sign-in from the 선택적 비밀 bulk-org-relay-auth, 자체 서명 그래서 tlsVerify off), KamoCRM의 자신의 교체에서 전환 그래서 그것의 메일은 .87에 체재; 서명에서 형성될 때까지 종결은, 그것의 credentials는 구성을 따릅니다 모든 시작. k3m1-bulk-relay는 한 번 PLATFORM ONLY를 만들었습니다.
· KlusterServices
Postfix-orgs, 공유 대량 릴레이 모든 조직은 47.181.8.86로 전송
KamoCRM의 자체 캠페인 메일은 postfix-bulk (47.181.8.87) 및 일반 메일을 통해 유지 포스트픽스 (47.181.8.84). 다른 조직의 캠페인 메일은 자신의 IP를 가져옵니다 : postfix-orgs는 켜집니다 k3m1의 호스트 네트워크이며, SMTP를 eno1 (k3m1-ext)로 묶어 노드 구성/k3m1-ext 경로 그 포트와 아무것도 다른 용도. HELO는 contact.kamocrm.com, 이름 Frontier 설정 이다 IP의 PTR. hostNetwork listener에는 NetworkPolicy가 없습니다. 따라서 제출은 포트 587의 필수 STARTTLS에 SASL입니다. 클러스터 주소에서 노드의 내부 주소( mail/SECRETS.md의 secrets). 그것은 뿐만 아니라 릴레이 전송 도메인 EmailService는 확인, 모든 분 새로 고침 - 그 맵이 도착 때까지, 아무것도. postfix-bulk와 동일한 egress는 eno1가 .86로 떠나기 위하여 확인될 때까지 납품을 붙듭니다, 동일한 납품 조차 sidecar는 결과를 보고합니다. 모든 refusal은 4xx, 결코 5xx입니다. 파일에 Appended는 배포 워크플로우가 이미 적용되므로 워크플로우(및 전체 재구성) 각 성분)는 untouched.
· kamo-internal
캠페인 탭은 선택한 탭을 숨기지 않고 스크롤 화살표를 다시 가져옵니다
5개의 sub-tabs를 위해 너무 좁은 스크린에, 지구는 지금 좌우를 보여줍니다 아래 화살표, 최대 창 탭 스트립으로. 그것은 아무 것도 없었다 첫 번째 버전, MUI의 "auto" 스크롤 버튼이 링크에 의해 열린 탭을 잘라 (?tab=archived) 반에서 : MUI가 선택한 후만 나타나는 보기로 탭, 스트립에서 80px를 가져와 MUI의 자신의 스크롤 애니메이션 다음 overwrote 어떤 개정. CampaignTabStrip은 평범한 scroller의 탭을 자신의 막대기로 넣었습니다. (data-kamo-scrollbar="off")는 탭 오버 플로우만 표시하고, 선택된 탭을 다시 스크롤하면 변경할 때마다 볼 수 있습니다. arrows는 오거나 폭을 변경합니다. 화살표 및 ARROW SCROLL FRACTION maxdTabStripModel에서 온다, 그래서 두 스트립은 화살표가 될 때에 동의 살고 얼마나 멀리 이동. Chrome에서 확인: 1600px에서 화살표 없음; 700px 및 520px에 의해 열 모든 탭 링크는 중간 하나를 포함한 지표와 완전히 볼 수 있습니다; 화살표 페이지 스트립 각 방법; 화살표는 탭과 함께 초점 이동 보기에 초점을 맞춘 탭을 유지하고, 선택 입력합니다. 화살표 라벨은 구성 요소입니다. 스크롤, 모든 로컬에서 손으로 수리 kamo-translation-dictionary cc484906 (아라빅은 스크롤 오른쪽에 "담"했다. Vitest reds here are not from this changes and failed 동일하게 on main: oneScrollbar.test.ts (나 NavTopMenuPanel.tsx에) 및 수신자Status.test.ts (4, 러브 98156e52).
· kamo-internal
이메일 캠페인 위젯에 라이브 전송은 스포트라이트 카드를 가져옵니다
한 번의 진행을 보내고, In-Progress 탭은 단일 얇은 행이었습니다. 더 많은 방과 함께, 순간 위젯이 가장 중요. 시간 : 탭의 모든 캠페인은 전송 또는 일시적으로, 패널은 각을 제공합니다 최소한의 높이, 각 이제 카드를 얻을: - 목록까지 얼마나 멀리, 큰 숫자에서 둥근, 그래서 그것 아무것도 왼쪽으로 100 %를 말한다; - 10px, 머리와 그녀는 눈에 띄는; - 속도와 시간 왼쪽, 그리고 "총의 N"; - 전달, 열리고, 클릭 및 반송, 펑클 옆에 높이에서 예비 (true bar lengths and rate) 또는 더 짧은 또는 더 좁은 것에 그림의 행; - 마지막 5 분 동안의 속도, 시계의 자신의 15 초 당 막대기 한국어 막대기는 아직도 채우고, pane의 앞에 시간 보았습니다 보내는 것은, 0이 아닙니다. 카드는 행의 링크와 일시 중지 / 이력서 (지금 공유, 에서 캠페인Row 그것은 그것을 축하하는 끝을 통해서 붙듭니다. 두 보내 앉아 넓은 pane에 있는 측에 의하여. 선택은 패널의 크기 만 읽습니다. 어떤 것도 변경할 수 있습니다. 그래서 그것은 흔들림 할 수 없습니다. 어쨌든 과잉하는 카드는 그것을 기억 패널 크기, 그 후에 줄을 보여줍니다. 카드 안쪽의 레이아웃은 카드의 자신의 크기에 컨테이너 쿼리. 모형: speedBuckets는 2개의 구조 사이에서 시간 이상 움직이는 것을 퍼집니다 그들 사이에. PushSample는 창을 가지고 있고, 걸이는 당 5 분을 지킵니다 살아있는 보내, 일시 중지 및 끝을 통해. 10x 클럭에 흠뻑 빠릅니다. 키가 큰, 460 및 668x420 팬, 그리고 2는 넓은 키 큰 팬에 보냅니다: 카드는 과잉 없이 적합하고, 속도 막대기는 구조를, 포함하여 따릅니다 조용한 스트레칭. 감소된 움직임의 밑에 아무것도 이동.
· kamo-internal
이메일 캠페인 위젯 탭은 캠페인 화면의 단계입니다
위젯은 자신의 라이브 / 센드 / 초안에서 캠페인을 신청했습니다. 센드 아래에서 취소된 캠페인 및 라이브 중 하나를 예약하십시오. 현재 탭 In-Progress, Not Started, Paused 및 Complete, CampaignTabOf에 의해 제출 및 이름 marketing.bulkEmail.tabs.*로, 그래서 발사패드 및 /marketing/email 결코 두 곳에서 하나의 캠페인을 넣으십시오. counts는 emailService의 새로운 `stages`에서 왔습니다. (7481f15); 이전 서버의 응답은 전송 된 캠페인에서 계산됩니다. 탭 선택: - 회원이 한 번을 맞이할 때까지, 어떤 일이 일어나고 체류하는 것에 대한 팬 땅 그 탭은 여전히 아무것도를 보유. 그것은 단지 전송을 표시하는 것만 이동 시작, 또는 자체 탭이 실행될 때. A는 다만 완성된 파악을 보냅니다 그 축하에 대한 보상, 다음 팬은 켜집니다. - 회원 일시 중지 또는 이력서는 그들이 그것을 눌러, 그와 함께 이력서, 그들은 탭을 떠날 때까지. - "N more"외에 맞는 단계 이름 표시, 숨겨진에 대해 측정 회원의 언어에 복사; 그렇지 않으면 각 단계는 아이콘을 보여줍니다. 도구의 이름과 접근 가능한 이름. 브라우저에서 확인하는 동안 수정 : - 새로운 오픈에서 불꽃과 완성 된 캠페인의 클릭은 결코 볼 수 없었다 : 그림 선은 그(것)들을 곱했습니다. 지금 클립은 단지 아래에와 게다가, 그리고 불꽃은 미터의 끝에서 비행, 그래서 그들은 바 드롭핑을 살아. - 그림에 너무 좁아서 클릭한 열린 미터를 흘렸습니다. 더 보기 막대기는 340px의 밑에 첫째로 이동하고, 아직도 포장을 적합하지 않는 아무것도 전체 시계. - KPI 타일은 그 이름과 비율을 좁아 이름 ("Ope..."). 이 비율은 대신 눈에 띄지 않습니다. - "N more"은 이전 탭을 떠난 행을 계산했습니다. pane 폭 322에서 1360까지 검사된 headless: 줄 커트 없음, 탭 과잉, name/icons 스위치와 없이 “N 더 많은”, 화살표 열쇠, 그 후에 붙은 끝 668, 460번으로 옮겼습니다. pause 테스트 서버 지금 일시적인 캠페인에 대한 답변. 그것은 위젯의 때 부하에 실패 일시 중지 후 다시 400ms는 여전히 캠페인을 전송합니다.
· EmailService
캠페인 위젯은 단계에 의해 읽습니다, 단계는 캠페인 화면 파일에 의해
Launchpad 위젯은 이제 그룹을 읽고 단계별 캠페인 계산 /marketing/email's 탭 사용: In-Progress (sending), 시작하지 않음 (draft 또는 예정), 일시 정지 (사용 또는 취소), 완료 (특허). 어떻게 파일 실패 지금까지는 캠페인TabOf가 있습니다. 각 단계는 자체에 넣었습니다: 초안 전에 예정하고 가장 빨리 첫 번째; 취소하기 전에 일시 중지. `stages`는 `groups` 옆에 추가되어 위젯이 읽을 때까지 유지 그것은 배포됩니다. 이 전에 취소된 캠페인은 완료된대로 계산됩니다. 사용자가 오늘 결정하는 것은 속하지 않습니다.
· kamo-internal
캠페인 목록은 동료가 캠페인에 무엇을합니까
BulkEmailWorkspace는 변경 프레임 사용EmailCampaignsWebSocket을 지금 사용 전달 (onChanged, d0b56adf). 프레임은 캠페인과 무슨 일이 있었는지, 캠페인 자체가없는 목록은 다시 한 번 캠페인을 읽습니다. /campaigns/{id} 을 얻고 그 자리에 넣으십시오. colleague의 아카이브 또는 복원 이동 탭 사이의 행이 일어나기 때문에 새로운 또는 복제 캠페인이 나타납니다. 그리고 삭제 된 것, 또는 그 지금 답변 404, 목록을 남겨. 단계별 outbox 조사는 동일한 구조를 따릅니다. createCampaignChangeFollower는 한 번에 캠페인에 대해 읽습니다. 프레임 그 캠페인이 읽는 동안 도착 (슬라이스에 업로드 된 목록은 각 발표 슬라이스) 한 번 더 읽으면 반환, 그래서 파열 비용 두 번 읽고 오래된 대답은 더 새로운 것의 위에 착륙하지 않습니다. 자주 묻는 질문 반환 할 때 방법이 다시 넣어되지 않았습니다. 훅을 통해 프레임을 밀어서 실제 구성 요소에 대한 크롬에서 확인 : 복원은 한 번에 보관 된 행을 이동, 삭제는 행을 제거 아무도, 창조 된 초안은 시작되지 않고 등장, 하나를위한 다섯 프레임 캠페인 비용은 두 번 읽습니다.
· kamo-internal
이메일 캠페인 위젯, Launchpad에 살고
새로운 홈 위젯, email.campaigns, 공개 할 수있는 모든 사람의 시작 패드에 행사일정 그것의 5권 (EMAIL CAMPAIGNS WIDGET, 321-325) 떨어져 걸기 VIEW BULK EMAIL 및 ADDED, OPTIONAL 및 MOVABLE 씨앗이 있습니다. SecurityService, 그래서 그것은에 도착하고 회원의 제거. 문도 마케팅 앱과 VIEW BULK EMAIL 자체를 요청합니다. 이메일서비스의 새로운 /api/email/widget/campaigns를 한 번 읽는 것 그 후에 이동 살아있는: - 지난 2주 동안 4개의 숫자(초청, 개방, 클릭, 반송), 각각 pointer 또는 화살표 키에 의해 읽는 하루 바, 개방 및 클릭 속도 지정된 메일의 규칙에 의해 전달성 카드 사용 (engagementRate, 이제 모두 공유합니다. - 라이브 / 전송 / 초안, 수와. 전송 캠페인은 이동 차선, 그 속도와 시간을 왼쪽으로; 열리고 클릭으로 상승합니다. · 일시적인 것은 왜 보낼 수 없는지 말한다; 예정된 것 카운트 다운; 전송 된 것 오픈 및 클릭률을 보여줍니다. 일시 중지 및 이력서는 회원을위한 행에 앉아 MANAGE BULK EMAIL로. - 팬이 그 순간에 살고있는 동안 끝나는 캠페인, 파열로, 전송하기 전에. - 하단 라인은 뉴스가 발생합니다. 넓은 팬은 그것을 유지 오늘 총 열. - 그것은 그것의 방을 위해 밖으로 놓습니다: 1개의 란에 2개의 숫자 및 조밀한 줄, 전체 모든 높이에서만 행합니다 (목록은 절단 보다는 오히려 포장합니다), 그리고 2개의 란의 한 번에 한 번 넓은 pane에서 캠페인을 숨길 것입니다. 라이브 반 타고 /topic/campaigns/<orgId>. useEmailCampaignsWebSocket 읽기 readCampaignFrame을 통해 모든 프레임과 onEngagement, onChanged 및 이득 onSnapshot, 플러스 requestSnapshot, 위젯이 시작 패드를 해제 스냅 샷을위한 전체 조직을 묻지 마십시오. onProgress는 여전히 단지 볼 진행 프레임. 마무리 chime 이제 SENT로 전환에 불, 아니 여전히 SENT (late Bounc and Delivery Report)를 말한다 모든 나중에 프레임 시간을 위해 그것을 다시 출판), 그리고 후크는 더 이상 그 핸들러를 복구하는 동안 이름 * tsc, 가드 스크립트, 새로운 영향을 미치는 바이러스 파일 및 1x1, 2x1, 2x2, 2x3 및 전체 폭의 실제 부품에 대한 헤드리스 하네스.
· kamo-internal
In-Progress, Not Started, Paused, Complete and Archived tabs, 그리고 李俊億
/marketing/email은 5개의 하위탭으로 캠페인을 분할하고, 각각은 라이브 카운트로, 그리고 모든 캠페인은 정확히 하나 아래에 있습니다: - In-Progress : 전송 - 시작하지 : 초안 및 예정된 캠페인 - 일시 : 일시 및 취소 캠페인 - 완료 : 전송 - Archived: 모든 회원 아카이브 실패는 자신의 단계가 아닙니다 : 수신자는 실패, 캠페인은하지 않습니다, EmailService는 결코 그것을 놓지 않습니다. 그것을 보내는 방법 이름 * 탭은 ?tab=, 그래서 다시로드, 백 버튼과 공유 링크 유지 그것은; 캠페인 변경 탭 자체로 그것의 상태 변경 살고; 그리고 빈 탭은 무엇을 위해 말한다. Archive and Restore는 각 캠페인의 李俊億 한국어 보내지 않는 아무것도 가진 캠페인은 아카이브 될 수 있습니다: 초안, 또는 전송 또는 한국어 ☸ 버튼은 캠페인뿐만 아니라 메뉴를 엽니다. AG 그리드 화재 행 클릭 React의 앞에 실행되는 행컨테이너에서 delegated onClick, 그래서 셀 렌더링의 stopPropagation 너무 늦게 와서 행 메뉴 아래 편집기로 이동합니다. 행 핸들러는 이제 data-campaign-own-click control 내부를 클릭하고 추적 코드 그리드가 수행됩니다. 그리고 캠페인의 이름을 더 이상 밀어 편집기 경로 두 번. 실제 구성 요소에 대한 크롬에서 확인: 기원/주에 李俊億 **************** 이 변경으로 메뉴를 열고 간다 이름 * 탭, 카운트, 아카이브 및 복원, 빈 탭 및 520px 스트립이었다 같은 방법을 검사합니다. 낱말은 kamo-translation-dictionary 02109cfc에 있고, 첫번째를 밀어넣고 쓰기 모든 현지에서 손으로.
· EmailService
캠페인 보관, 위젯은 아카이브를 나타낸다
POST *********** 및 /unarchive (MANAGE BULK EMAIL) 설정 및 캠페인의 archivedAt 및 CampaignDTO를 명확하게합니다. /marketing/이메일 화면 파일 자체 Archived 탭에서 아카이브 캠페인을. - 전송할 수 없는 아무것도 없는 캠페인만 보관할 수 있습니다. 예약, 전송 또는 일시적인 것은 거절됩니다. 첫 번째 날짜를 다시 유지. - 지금, 일정 및 최신 Clear archivedAt로 전송, 그래서 캠페인을 다시 보내 작업 탭에 다시. - 둘 다 ARCHIVED/UNARCHIVED 변화 구조로 발표됩니다, 그래서 각 열리는 캠페인 화면과 홈 위젯 업데이트 라이브. - CampaignWidgetReads는 최근, inStatuses 및 countByStatus의 특징 kamo-shared-library ebdd15f1 *********** 및 archived at 열, 둘 다 이미. TransactionalSendRatchetTest는이 커밋하기 전에 주에 빨간색이었습니다. sendToUser에 대해 다른 1554 테스트 패스.
· kamo-shared-library
캠페인은 아카이브 될 수 있습니다
EmailCampaignEntity는 archivedAt (archived at)를 얻습니다. 회원이 아카이브 될 때 캠페인, null이 아닙니다. /marketing/email 스크린은 보관된 탭을 가져옵니다 그리고 홈 위젯은 아카이브 캠페인을 떠나. 열은 클러스터에 이미, 각 schema 변화로 손으로 적용: 이메일 campaign.email campaigns ADD COLUMN IF EXISTS archived at 타임스탬프(6) 시간대; 기본적으로 Nullable, 테이블에 다른 인스턴트처럼, 그래서 코드 내장 이 커밋 전에 테이블을 변경하지 않았습니다.
· EmailService
이메일 캠페인 홈 위젯을위한 라이브 읽기 및 라이브 프레임
GET /api/email/widget/campaigns는 Launchpad 위젯의 하나의 읽기, 내장 매일 모든 캠페인 뷰어의 홈 페이지에 앉아있는 팬 : 린 행 없음 body (CampaignLine), 첫 번째 라이브 캠페인 (오픈, 일시 중지, 예정된 soonest), 그 후 가장 최근에 완료하고 가장 최근 편집 된 초안, 각 그룹 모자를 씌우는; 그룹 당 정확한 조사; 각 보이는 캠페인의 열리고, 누르고 1개의 파이프라인 Redis에 있는 릴레이 보고; 조직의 마지막 4teen 일; 그것의 추적 선택; 그리고 카운트다운을 위한 서버 시계. 그것은 걸립니다 VIEW BULK EMAIL, 캠페인 목록입니다. 구조의 3 종류는 지금 /topic/campaigns/<orgId>를 진행합니다: - 참여 : CampaignEngagementPulse 석탄은 첫 번째 열린, 첫 번째 클릭 및 캠페인 당 릴레이 보고서와 파드 당 두 번째 프레임에 전송, 마지막 프레임과 Redis가 그 자리에서 새로운 것이 무엇인지. - 변경 : CampaignController는 회원의 생성, 편집, 삭제, 발표 중복, 일정, 전송, 일시 정지, 재시작, 취소, 청중 및 수령 서비스 호출 후 변경은 id 및 동사로만 사용됩니다. - Neither는 최고 수준의 캠페인을 실시합니다. ₢ 킹 모든 캠페인 화면은 프레임을 읽습니다. 진행 중 하나와 카운터를 행에 복사하므로 프레임의 다른 모양 나르는 것은 아직도 스크린에 카운트를 공백일 것입니다 이전 코드. sender는 또한 배치 당 일의 받아들여진 메시지를 한 번 계산합니다 (stats.daily "sent"), 위젯의 2 주 스파클 라인에서 그리는. 풀 스위트는 1개의 실패, TransactionalSendRatchetTest를 가진 1534의 시험입니다, c47fcf6 이후 3 sendToUser 과부하를 계산하고 관련이 없습니다.
· SecurityService
이메일 캠페인 위젯은 캠페인을 열 수있는 모든 사람에게 도착합니다
EMAIL CAMPAIGNS WIDGET 및 ADDED, OPTIONAL 및 MOVABLE 정책 씨앗 VIEW BULK EMAIL에서 부팅을 소개, 그래서 팬 땅에 이미 캠페인을 읽을 수있는 모든 회원의 실행 패드, 그리고 그것은 그들의 제거 또는 이동. REQUIRED는 씨앗이 아닙니다. 모든 위젯 : a 누군가의 홈 페이지에 결코 핀을 배치.
· kamo-shared-library
이메일 캠페인 홈 위젯의 다섯 권리
EMAIL CAMPAIGNS WIDGET (321) 및 4 개의 정책 어린이 (322-325), hung 오프 VIEW BULK EMAIL: 위젯 뒤에 모든 읽기, 캠페인 목록, 그 카운터와 라이브 진행 프레임, 이미 그 권리를 가지고, 그래서 위젯은 할 수 없습니다. 326은 다음 무료 ID입니다.
· kamo-internal
이메일 캠페인은 첫번째 마케팅 탭입니다
마케팅 도구 탭 스트립 이제 이메일 캠페인, 마케팅 자료, 소셜 미디어, 추적 코드. 대량 이메일은 새로운 이름으로 앞으로 이동, 그리고 재료는 이미 자신의 페이지에 이름을 걸립니다. 첫 번째 탭의 /marketing 인덱스 토지는 회원이 열 수 있으므로 주문 스트립으로 이동: 기본적으로 이메일 캠페인, 마케팅 자료 이메일없이 회원. 경로, 라벨 키 및 VIEW BULK EMAIL 이름 유지 낱말은 kamo-translation-dictionary 98a21a21에, 첫째로 밀어 줬습니다, 각 locale에서 손으로 쓴 두 개의 라벨.
· kamo-marketing
솔루션은 리소스, 한 수준 아래로 이동
상단 행은 전화 번호 전에 다섯 가지 범주를 수행, 언어 선택자 및 세 CTA. 솔루션은 이제 자원 내부의 첫 번째 항목입니다, 두 개의 문서 링크 위에, 그리고 그것의 8 산업 페이지를 유지 세 번째 레벨 비행. 렌더링가 변경되지 않음 : NavChild는 이미 자체를 운반 `children`, 그리고 법적은 이 방법을 따라 다루고 있습니다. 데스크탑과 모바일 어코드 모두에서. 이것은 단지 자료입니다. "모든 산업"은 접힌 것보다 첫 번째 할머니로 유지 모바일 부모가 toggle 버튼이기 때문에 부모 행으로 링크 - /solutions 자체는 휴대 전화에 접근 할 수 없습니다. /solutions 페이지는 여전히 범주를 빛: isCategoryActive 이미 grandchildren을 산책, 그래서 리소스는 솔루션에 사용되는 것을 강조합니다. /en/solutions/real-estate에 확인 - 자원은 #ffffffff를 렌더링합니다. rgba(107,142,58,0.1) 및 기타 4 체재 #9a9a9a. 실행 페이지에 대해 확인, 소스가 아닙니다. 상단 행 읽기 특징, 서비스, 가격, 회사, 자원; 호버링 리소스 다음 솔루션은 /en 접두사로 8개의 산업을 엽니다. 플라이아웃 1001, 1001, 1076, 1316에 200px의 넓게 그리고 그것의 적당한 가장자리 땅입니다 1024의 전망 포트 (이 네브가 모두 등장하는 lg breakpoint), 1280, 1440 및 1920 - 가로가없는 모든 곳에서 시청포트 내부 오버플로우 390여 개의 전화 리소스가 열리고 있습니다. 그리고 모든 8 개의 링크가 있습니다. tsc, 체크-클라이언트-navigation 및 check-i18n-keys는 청결합니다.
· kamo-marketing
응용 개발, 웹 디자인 및 웹 마케팅
**************** 기업을 지불하는 사업 좌석 당 지불 소프트웨어에 대 한 기관 구축 하지 않았다, 호스트, 또는 유지 실행. 돈을 얻고 결코하지 않았다 누가 묻지 않고 끝 점에 문. 이것은 문입니다. /services의 밑에 59 페이지: 허브, 3개의 기둥, 30의 기능 페이지, 12 증거 페이지, 5 비교, 그리고 실제로 참여하는 방법에 6 실행. TypeScript의 구조, 사전에서 prose — 패턴 37개의 기업, 45의 통합 및 41의 광택 있는 기간은 이미, 이렇게 합니다 번역자는 모든 문장을 읽을 수 있으며 슬러그 또는 손상할 수 없습니다. 오시는 길 4개의 새로운 컬렉션, `services`namespace에 문지르는 `collections`: 후자는 이미 많은 로컬로 번역됩니다. 그리고 프랑스 서비스 페이지를 주장할 것 이다 그것은. 오늘 모든 서비스 페이지 canonicals 에 English 과 표시 에 English sitemap은 이미 기계가 무엇인지, 그 사본이 번역되지 않은 페이지. 포트폴리오는 우리가 할 수있는 유일한 것이기 때문에 우리의 자신의 플랫폼입니다 방문자 검사 : 메일 서버, 전화 스위치, WebRTC 미디어 스택, attribution 파이프라인, 클러스터, 그리고이 웹 사이트. 그 페이지의 모든 수는 명령을 실행하고 하루 그것은 읽고, 및 스크립트/check-services.ts는 사실에 빌드 실패 - 기둥 슬러그와 함께 정전기 /services 아이 그림자, dangling 증거 참고, orphan 일 페이지, 및 그 자체에 대한 사례를 지명 할 수없는 비교. 마지막 규칙은 아니다 장식 : 스스로 논쟁 할 수없는 비교 페이지는 테이블을 착용하는 광고. 가격은 테이블보다 오히려 메커니즘을 게시합니다. 우리는 후에 인용합니다 발견하고 첫 번째 번호를 수정; 어떻게 이동, 그것은 절대로 (광고 지출의 비율 없음, 당신을 위해 샀어 아무것도에 마크 업) /services/how-we-quote에 모두 찾을 수 있습니다. /서비스/스타트 기존 주제를 deliberately — 지원 서비스 해결 화제 이미 존재하고 답변 400 그렇지 않으면, 그래서 "Web Design"항목은 컴파일, 배포, 수정, 수정, 모든 제출을 거부합니다. 두 가지 접근성 고정은 엄격하게이 기능이지만 배에 모든 페이지의 그것. globals.css:52 원시를 사용하지 않는 것을 말한다 --color-primary* 작은 텍스트의 경우, 쿠키 동의 배너는, 2.18:1, 각 페이지에 사이트 및 관련 콘텐츠는 솔루션, 통합, 대안 및 광택. 이제는 읽기 쉬운 악센트를 사용하고, 배너의 정책 링크는 흰색입니다 --색상에 --캔버스는 준수 정확히 충돌 4.5:1 캔버스에 대 한, 어떤 헤드룸에 대 한 약간 올려진 표면 배너에 앉아. 모든 19 서비스 페이지, 홈페이지, /pricing 및 /solutions/* 이제 WCAG 2.2 AA에서 0을 통과 위반; 수수료 기사의 자신의 테이블-of-contents 배지 여전히 실패하고 혼자 왼쪽.
· kamo-marketing
소프트웨어 구독을 계산하는 기사, 배너 포인트
/all-in-one-business-software는 많은 구독이 사업을 지불하는 방법을 물었다 : 체크리스트 그(것)들을 계산하고 달을 합계하고 독자로 그(것)들을 그(것)들을 그(것)들을 그(것)들을 합계합니다. 청구서, 모든 사람이 어떤 가치가 있는지, 연결하기 전에 묻는 질문, 그리고 KamoCRM이 같은 땅을 다룹니다. 2개의 외부 그림, 사본에서 지명된 각 및 연결해 발: Zylo의 2026 SaaS 관리 인덱스에 사용되지 않는 라이온스 및 누가 소프트웨어 지출을 제어, 그리고 Cledara's 2025 Software Spend 보고서는 얼마나 많은 기업들이 툴 수를 예측하는지 보여줍니다. 배너의 공개 서비스 발표는 이제 좌석 서류 기사보다는 여기에 지적합니다. 제품정보 라벨은 새로운 열쇠이며, 이전의 새로운 가치는 아닙니다. 사전 파이프라인은 핵심을 건너 뛸 수 있습니다. 번역은 영어와 다를 수 있으므로 다른 모든 언어가 오래된 것을 유지해야합니다. 이 문서에 대한 링크를 통해 질문. 자원 메뉴에서 목록, 자원 허브 및 사이트 맵.
· kamo-internal
발사 패드 밴드는 막대기의 자신의 dropdown 표면으로 엽니다
관리자 바와 pinned-app 밴드는 상단 바로 그려집니다. gradient, 그리고 그 후에 다른 앱에서 뭔가와 호버를 대답: a 화이트 툴팁 카드 부동 12 밴드 아래 픽셀, 그리고 — pinned app's 칩 - 회색 captions를 가진 MUI popover 및 그것이 밖으로 온 것에 솔기 없음. 그들 중 나 의 각 나 는 그 들 에 게 나 멸 하 며 잘못된 팔레트, 잘못 모양, 잘못된 장소에서 도착. 이제 SAME 표면 상단 바 메뉴 사용으로 엽니다. 그것은 그려집니다 조직의 상표, 그것의 최고 가장자리는 정확한 색깔 밴드가 반점에 가지고 갑니다 그것은 그 가장자리에 그것을 용접하고, 1개의 표면 glides 및 점퍼가 행을 여행함에 따라 항목에서 크기를 조정합니다. — 그래서 밴드는 읽습니다. launchpad에 놓은 카드로 오히려 오프닝. • NavTopMenuHost는 NavTop의 헤더가 아닌 바와 같은 요소가 걸립니다. 호스트 당 `edgeGap`, 밴드가 막대기를 둥글게 되었기 때문에, 패널과 그 필렛 모두 그려진 밴드를 만날 수 있습니다. 방에는 패널이 있습니다 실제로 시작 (--kmenu-max-height) nav의 높이보다는 페이지의 절반이 없다는 것을 의미합니다. • NavTopMenuPanel은 `kind="note"를 얻습니다: 동일한 표면 및 동일한 동의, 선택 대신 트리거에 대해 prose. 그것은 메뉴 역할을 주장 그리고 초점이 없다, 그래서 관리자 바의 설명을 유지 그리고 아직도 그들이 묘사한 연결을 따르십시오. • pinned app의 칩은 아주 줄을 그릴 nav draws (NavToolSectionsPanel, NavToolBarMenu에서 해제 됨), 그래서 하나의 메뉴와 하나의 옵션의 답변 그것은 제공 - 배열 된 그룹, 배지, 필터 박스 및 모든. • 두 밴드는 navTopSeam.ts에서 그라디언트를 읽습니다. 리터의 사본 중지는 정확히 무슨 무서운, 그리고 솔기만 보이지 않는 동안 패널과 밴드는 그것에 동의합니다. 테스트 : 관리자 바 렌더링 및 마우스, 손가락 및 작업 키보드 (1개의 표면, 입장에서 입장까지, 결코 훔치는 초점), 플러스 소스 가드 그 밴드는 팝업 또는 두 번째 사본에 도달 gradient 다시.
· kamo-marketing
Embed 홈페이지 마케팅 비디오에 흰색 라벨 CRM 수수료 기사
독자에게 resold-software 단면도의 앞에 intro 후에 홈페이지에서 동일한 제품 권선을 주십시오.
· kamo-shared-library
WebinarNotifyMember, 조직의 추가 지정 목록
Webinar notify member의 1 행(편리, 팀원) KamoInitializerService의 WebinarNotifyMemberMigration 및 이미 적용. 더 보기 repository fetch-joins 팀 구성원, 모든 독자가 사람을 원하기 때문에. 외국 열쇠 없음, 마이그레이션 일치, 그래서 초기의 ddl 자동 업데이트 아무도 추가하지 않습니다.
· MediaService
현재 이메일에 등록된 회원이 없습니다
GET/PUT /api/webinar/notify-members (MANAGE SUPPORT) 읽기 및 교체 조직의 또한 통보된 명부; 각 ID는 팀 일원이어야 합니다 그 조직, 대부분의 25. WebinarEmailNotifier를 추가합니다. 조직의 목록은 각 편지에 대한 블라인드 사본으로 선물 - 책, 참석자, 참석자 취소, 세션 취소, 알림 — 절대로 참석자의 편지, 선물자가 자신의 주소, 한 사람이 한 번, 그리고 아직 썼을 수 있습니다.
· EmailService
Service-to-service 템플릿에 대한 블라인드 복사
SendTransactionalRequest는 sendToUser를 통해 수행된 옵션 bcc 목록을 가지고 있습니다. SMTP envelope에 전달합니다. - platform-address retry를 포함한 - 그래서 a copied 사람 gets exactly the message the addressee gets. BlindCopies 손질, 주소와 중복을 떨어뜨리고 25에서 목록을 캡합니다. 전화번호 변경 : bcc없이 전송은 항상 길을 걸립니다.
· InitializerService
Webinar notify member, 현재 이메일에 복사된 팀원
(organization, team member) 당 한 줄 : 추가 통지 목록 Webinars 설정 탭을 계획했습니다. MediaService Blind-copies 이러한 주소 모든 웹 세미나 이메일은 조직에 대한 선물로 전송됩니다. 웹 세미나 유형. 새로운 테이블, 그래서 테이블 다른 서비스는 변경되지 않습니다; 행 없음 아무도 복사되지 않습니다. 생산에 적용 2026-09-13.
· kamo-internal
Admin가 현재 이메일에 복사하는 것을 선택하자
Scheduled Webinars 탭은 "Additionally Notified"섹션을 나타낸다. 웹 세미나 유형의 목록. 팀이 선택한 팀 구성원은 블라인드 사본을받습니다. 현재 발송된 모든 자동화된 이메일 (새 예약, 참석자 가입 또는 모든 조직의 취소, 세션 취소, 알림) 웹 세미나. /api/webinar/notify-members를 통해 목록을 읽고 교체합니다. 동일한 다중 선택 디렉토리 선택기를 가진 사람들 현재 탭 사용, 그리고 unsaved-changes 힌트와 저장된 확인을 명시적으로 저장합니다. A 403은 섹션을 숨깁니다. 실패한 부하는 빈 값이 아닌 재부트를 제공합니다. 목록, 거부 저장은 서버의 이유를 보여줍니다, 다른 관리자의 변경 웹 세미나 org-change 주제에 대한 라이브 도착.
· kamo-shared-library
모든 웹 세미나 예약 편지의 Canonical Templates
Seven meet.webinar * 템플릿 — 현재 예약 / 참석자 / 참석자 취소 통지, 참석자 확인 및 취소, Session-cancelled Letter 및 예정된 알림 — 등록 CANONICAL KEYS, WebinarEmail과 함께 한 변수 맵을 작성합니다. 독자의 영역에서 시간, the booker's form Answer for the presenter, the 게스트는 참석자에게 링크 및 개인 취소 링크에 가입, 콘솔 링크 현재, 그리고 그 붕괴는 아무것도 표시 할 때.
· kamo-marketing
자주 묻는 질문
/webinar/cancel/<token>는 웹 세미나 확인 이메일이 누군가에게 보내는 곳입니다. 더 이상 만들 수 없습니다. 그것은 대중을 통해 등록을 보인다 웹 세미나 API, 웹 세미나, 현재, 날짜 및 시간 (방문자에서 자신의 Locale 및 timezone, 영역 이름) 및 길이, 그리고 그것을 취소 뒤에 확인 단계. 알 수없는 링크, 이미 취소 등록 그리고 이미 진행된 웨비나는 각각 자신의 상태를 얻고, API에서 refusal은 API 단어로 표시됩니다. noindex/nofollow, and not in the sitemap: 경로는 동적이므로 sitemap walker는 그것을 건너 뛰고 그 항목이 생성되지 않습니다. 본문 바로가기 새로운 webinarCancel 네임스페이스.
· KlusterServices
DKIM 서명에 대한 피드백 ID
Gmail은 피드백-ID 헤더가 있을 때만 피드백 루프로 캠페인 메시지를 계산합니다. 전송 도메인의 DKIM 서명에 의해 커버. local.d/dkim.conf는 rspamd의 기본값이 서명합니다. 헤더와 피드백-id를 추가합니다.

당신의 우주는 기다리고 있습니다.
몇 분 안에 무료로 시작하세요. 준비가 되면 언제든지 제품을 추가할 수 있습니다.
영원히 무료 - 신용 카드 필요 없음