고객 포털 및 공유

로그인 없는 링크로 청구서를 공유하고, 고객이 온라인으로 보고, 다운로드하고, 결제할 수 있도록 하며, 언제 열었는지 정확히 확인합니다

포털 개요

고객 포털은 Invotify의 고객 대면 측면입니다 — 고객이 계정을 만들지 않고도 볼 수 있고 할 수 있는 모든 것입니다. 안전한 공유 링크를 생성하여 고객에게 보내면, 고객은 청구서를 읽고, PDF를 다운로드하고, (Pro에서는) 온라인으로 결제할 수 있는 깔끔한 브랜드 페이지를 받습니다. 한편 고객이 언제 어디서 열었는지에 대한 정확한 기록을 조용히 얻을 수 있습니다.

포털이 하는 일:

  • 공개 청구서 보기 — 토큰 기반 링크가 브라우저에서 청구서를 엽니다. 로그인, 비밀번호, 고객 측 마찰 없이 사용할 수 있습니다.
  • PDF 다운로드 — 고객이 클릭 한 번으로 청구서의 픽셀 완벽한 A4 PDF를 다운로드합니다.
  • 온라인 결제 (Pro) — "지금 결제" 버튼이 고객을 전체 또는 부분 결제를 위한 안전한 Stripe 체크아웃으로 안내합니다.
  • 보기 추적 — 모든 열기가 기록됩니다: 언제, 어디서, 보기 횟수, 첫/마지막 열람 타임스탬프.
  • 이메일 기본 설정 — 원클릭 구독 취소 및 고객이 받는 이메일에 대한 세부적인 제어.

두 가지 링크 유형:

  • 단일 청구서 링크 (/invoice/{token}) — 전체 세부 정보 및 다운로드/결제 작업이 있는 특정 청구서를 표시합니다.
  • 고객 포털 링크 (/portal/{token}) — 고객의 최근 청구서, 총 미결 잔액, 연체 여부, 신용 메모 잔액을 통합적으로 보여주며, 각 청구서마다 결제 작업이 있습니다.

플랜: 공개 보기, PDF 다운로드, 보기 추적, 이메일 기본 설정 관리는 모든 플랜에서 사용할 수 있습니다. 포털에서 온라인 결제하려면 Stripe가 연결된 Pro 플랜이 필요합니다.

모든 포털 페이지는 비즈니스 이름과 로고로 브랜딩되어 있으며, 조용한 "Powered by Invotify" 푸터를 표시하고, 검색 엔진에 표시되지 않도록 noindex로 표시됩니다.

로그인 없는 링크

토큰 기반 URL이 모든 브라우저에서 즉시 열립니다. 고객에게 계정이 필요 없습니다.

셀프 서비스 PDF

고객이 필요할 때마다 자신의 A4 PDF 사본을 다운로드합니다.

온라인 결제 (Pro)

"지금 결제" 버튼이 안전한 Stripe 체크아웃으로 연결됩니다 — 전체 또는 부분 결제.

보기 추적

고객이 링크를 언제, 어디서, 몇 번 열었는지 알 수 있습니다.

청구서 공유하기

청구서를 공유하면 고유하고 추측하기 어려운 공유 토큰이 생성되어 고객이 로그인 없이 열 수 있는 공개 링크로 전환됩니다. 토큰은 무작위 UUID로 — 숫자를 증가시켜 추측할 수 없으며 — 정확히 하나의 청구서에 매핑됩니다.

공유 토큰 작동 방식:

  • 링크를 생성하면 청구서에 대한 share_token이 생성되고 https://your-app/invoice/{token} 형식의 URL이 반환됩니다.
  • 해당 청구서에 이미 토큰이 존재하는 경우 Invotify는 동일한 토큰을 반환합니다 — 다시 공유해도 링크가 변경되거나 이미 보낸 URL이 끊기지 않습니다.
  • 링크가 유일한 자격 증명입니다. 링크를 가진 누구나 청구서를 볼 수 있으므로 비공개 링크처럼 취급하세요.
  • 언제든지 공유 링크를 취소할 수 있습니다. 취소하면 토큰이 지워지고 이전 URL이 즉시 작동을 멈춥니다("찾을 수 없음" 반환). 새 링크를 생성하여 다시 공유하세요.

권한: 공유 링크 생성 또는 취소는 "청구서 관리" 권한이 필요하므로 권한이 있는 팀원만 청구서를 노출할 수 있습니다.

고객이 받는 것: 이메일로 청구서를 보내면 링크(Pro에서는 결제 링크)가 함께 전송됩니다. 공유 URL을 복사하여 채팅, 자체 이메일 클라이언트, 메시징 앱 등 모든 채널을 통해 보낼 수도 있습니다.

WhatsApp, Telegram, Slack 등으로 PDF 공유하기: 청구서 및 견적서의 공유 대화 상자는 렌더링된 PDF를 기기의 공유 시트에 직접 전달합니다(폰, 태블릿, 최신 데스크탑 브라우저에서). WhatsApp, Telegram, Slack 또는 Messenger를 탭하면 PDF가 이미 첨부됩니다 — 수신자를 선택하고 보내면 됩니다. 공유 시트 파일 지원이 없는 브라우저에서는 Invotify가 PDF를 다운로드하고 앱을 열어 수동으로 첨부할 수 있도록 폴백합니다.

단계

  1. 1

    청구서 열기

    공유할 청구서의 세부 정보 페이지로 이동합니다.

  2. 2

    공유 링크 생성

    공유 링크를 생성합니다. Invotify가 고유한 토큰을 발행하고 공개 URL(/invoice/{token})을 반환합니다.

  3. 3

    복사 또는 전송

    URL을 복사하여 모든 채널을 통해 공유하거나, 청구서를 이메일로 보내 링크가 함께 전송되도록 합니다.

  4. 4

    필요할 때 취소

    링크가 더 이상 작동하지 않아야 할 경우 취소합니다. 토큰이 지워지고 URL이 즉시 해석을 멈춥니다.

  • 토큰은 무작위 UUID로, 순차적 ID가 아닙니다 — 링크를 숫자를 세어 추측할 수 없습니다
  • 청구서를 다시 공유하면 기존 토큰이 재사용되므로 이미 보낸 URL이 계속 작동합니다
  • 링크가 만료되어야 하는 즉시 취소하세요 — 별도 비밀번호 관리가 필요 없습니다
중요
  • 링크를 가진 누구나 청구서를 볼 수 있습니다 — 의도한 수신자에게만 공유하세요
  • 공유 링크 취소는 영구적입니다: 이전 URL이 끊기고 다시 공유하려면 완전히 새로운 링크를 생성해야 합니다

고객 포털 (보기, 다운로드, 결제)

고객이 공유 링크를 열면 로그인이 필요 없는 깔끔하고 모바일 친화적인 페이지가 나타납니다. 링크에 따라 두 가지 경험이 있습니다.

단일 청구서 페이지 (`/invoice/{token}`): 고객은 전체 청구서를 봅니다 — 비즈니스 이름과 로고, 청구서 번호와 상태, 발행 및 기한 날짜, 청구 세부 정보, 수량 및 합계가 포함된 모든 품목, 추가한 메모. 하단에 작업이 있습니다: - PDF 다운로드 — 전문적인 A4 PDF를 생성하고 다운로드합니다. 서버 측에서 필요에 따라 생성됩니다. - 지금 결제 — 결제 링크가 있고 청구서가 이미 결제되거나 취소되지 않은 경우에만 나타납니다(Pro — 아래 온라인 결제 참조).

통합 포털 페이지 (`/portal/{token}`): 고객의 모든 청구서에 대한 대시보드 스타일 개요: - 미결 잔액 — 모든 미결 청구서(클릭한 청구서만이 아님)에 걸쳐 아직 미결된 총액, 기한이 지난 것이 있으면 연체 표시. - 신용 메모 잔액 — 발행되거나 적용된 크레딧. - 청구서 목록 — 최근 비초안 청구서, 페이지 매김, 번호, 날짜, 상태, 금액, 결제 작업이 각각 표시됨.

설계 원칙 — 개인 정보 보호: 포털은 안전한 데이터 하위 집합만 반환합니다. 내부 ID, 공유 토큰 자체, 해당 고객과 관련 없는 모든 것은 응답에서 제거됩니다. 통합 포털은 토큰이 속한 한 명의 고객으로 엄격하게 범위가 지정됩니다. 포털 응답은 no-store 캐싱으로 전송되므로 민감한 정보가 중간자에 의해 캐시되지 않습니다.

브랜드 청구서 보기

로고, 비즈니스 이름, 품목, 날짜, 메모 — 로그인 없이 깔끔하게 렌더링됩니다.

PDF 다운로드

이메일로 보내는 버전과 동일한 주문형 A4 PDF.

잔액 개요

통합 포털에 총 미결 금액, 연체 표시, 신용 메모 잔액이 표시됩니다.

안전한 데이터만

내부 ID와 토큰이 제거됩니다; 포털은 한 명의 고객으로 범위가 지정됩니다.

  • 일회성 청구서에는 단일 청구서 링크를 보내고, 모든 것을 한 곳에서 보고 싶은 반복 고객에게는 통합 포털 링크를 보내세요
  • 초안은 포털에 나타나지 않습니다 — 실제로 발행한 청구서만 나타납니다
  • 다운로드된 PDF는 매번 새로 생성되므로 항상 현재 청구서를 반영합니다

포털에서 온라인 결제 (Pro)

Stripe가 연결된 Pro 플랜에서 포털은 보기를 결제로 전환합니다. 고객이 "지금 결제"를 클릭하면 Stripe의 안전한 호스팅 체크아웃에 도달합니다 — Invotify는 카드 세부 정보를 절대 처리하지 않습니다.

포털 결제 흐름: 1. 고객이 청구서 또는 통합 포털을 열고 결제를 클릭합니다. 2. Invotify가 해당 청구서에 대한 Stripe 체크아웃 세션을 생성하고 고객을 리다이렉트합니다. 3. 고객이 Stripe의 호스팅 페이지에서 결제합니다. 이메일이 더 빠른 체크아웃을 위해 미리 채워집니다. 4. 성공 시 확인 페이지로 돌아갑니다; 취소 시 정상적으로 돌아갑니다. 5. Stripe가 결제를 확인하고 청구서 상태가 자동으로 지불 완료로 업데이트됩니다.

전체 또는 부분 결제: - 기본적으로 고객은 전체 미결 잔액(원래 총액이 아닌 미결 금액 — 이전 부분 결제가 고려됨)을 결제합니다. - 청구서에 부분 결제를 활성화한 경우 고객이 더 적은 금액을 결제할 수 있습니다. Invotify는 설정한 최소 결제 금액을 적용하고 고객이 아직 미결된 금액보다 더 많이 결제하지 못하도록 합니다.

내장된 보호 장치: - 이미 결제되거나 취소된 청구서는 다시 결제할 수 없습니다 — 결제 버튼이 숨겨지고 요청이 서버 측에서 거부됩니다. - 포털 결제 엔드포인트는 남용을 방지하기 위해 속도가 제한됩니다. - 세션이 생성되기 전에 결제 금액이 라이브 미결 잔액 및 Stripe의 최소 청구 금액에 대해 검증됩니다.

중요: 온라인 결제에는 Pro 플랜과 연결된 Stripe 계정이 필요합니다. Stripe가 연결되지 않으면 포털이 여전히 보기와 다운로드를 위해 작동하지만 결제 버튼이 없습니다.

Stripe 체크아웃

고객이 Stripe의 호스팅 페이지에서 결제합니다. Invotify는 카드 세부 정보를 볼 수 없습니다.

부분 결제

활성화된 경우 고객이 보증금을 결제할 수 있습니다 — 최소 금액과 잔액으로 제한됩니다.

자동 상태 업데이트

Stripe가 결제를 확인하는 즉시 청구서가 지불 완료로 전환됩니다.

검증 및 속도 제한

라이브 잔액에 대해 금액 확인; 결제된/취소된 청구서에 대한 결제 차단됨.

중요
  • 포털에서의 온라인 결제에는 Stripe가 연결된 Pro 플랜이 필요합니다
  • 부분 결제는 특정 청구서에 활성화한 경우에만 제공됩니다

청구서 열람 추적

고객이 청구서를 실제로 열었는지 궁금해하지 마세요. 공유된 청구서가 열람될 때마다 Invotify가 기록합니다 — 언제, 몇 번, 어디서 열람했는지 정확히 알 수 있습니다.

각 열람 시 기록되는 정보: - 타임스탬프 — 열람이 발생한 시간. - 출처 — 열람이 어디서 왔는지: link(공유된 단일 청구서 링크), email, portal, 또는 api. 기본값은 link. - 열람자 IP — 고객의 IP 주소(포워딩 헤더에서 파싱됨), 같은 장소의 반복 열람을 새로운 열람과 구별할 수 있습니다. - 사용자 에이전트 — 브라우저/기기 문자열, 안전한 길이로 잘림.

Invotify가 청구서별로 유지하는 집계 통계: - 열람 횟수 — 총 열람 합계. - 첫 열람 시간 — 청구서가 처음 열렸을 때 정확한 시간(한 번 기록됨, 덮어쓰이지 않음). - 마지막 열람 시간 — 가장 최근의 열람. - 고유 IP — 열람한 고유 IP 주소 수.

보이는 곳: 청구서의 열람 통계가 청구서 세부 정보 페이지에 표시됩니다 — 컴팩트한 배지에 열람 횟수가 표시되고, 마우스 오버 시 첫/마지막 열람 타임스탬프가 표시되며, 청구서가 최근에 열렸을 때 라이브 인디케이터가 표시됩니다. 전체 열람 로그(출처, IP, 사용자 에이전트가 포함된 모든 개별 열람)는 회사 범위로 청구서의 열람 데이터를 통해 사용할 수 있습니다.

남용 방지: 추적 엔드포인트는 IP 및 토큰당 속도가 제한되므로 단일 고객이 반복적으로 새로 고침하여 열람 횟수를 부풀릴 수 없으며, 숫자를 패딩하기 위해 엔드포인트를 반복 요청할 수 없습니다.

모든 열람 기록

공유된 청구서가 열릴 때마다 열람 기록이 작성됩니다.

출처 귀속

열람이 링크, 이메일, 포털 또는 api에서 왔는지 추적합니다.

IP + 사용자 에이전트

열람자의 IP와 브라우저를 기록하여 열람을 구별할 수 있습니다.

첫 / 마지막 / 횟수

청구서별 첫 열람 및 마지막 열람 타임스탬프와 함께 누적 열람 횟수.

  • 열람은 있지만 결제가 없으면 친근한 안내를 보낼 신호입니다 — 고객이 봤습니다
  • 열람 급증은 고객이 검토 중이거나 행동하려고 함을 의미하는 경우가 많습니다 — 후속 조치를 취하기 좋은 타이밍입니다
  • 고유 IP 수는 "고객이 계속 다시 열고 있는지"와 "주변에 전달했는지"를 구별하는 데 도움이 됩니다

이메일 기본 설정 및 구독 취소

Invotify가 고객에게 보내는 모든 이메일에는 구독 취소/기본 설정 링크가 포함되어 있으므로 고객이 항상 받은 편지함에 들어오는 내용을 제어할 수 있습니다. 링크는 로그인 없이 작동합니다 — 구독 취소 토큰 자체가 이메일 주소 소유권을 증명합니다.

고객이 제어할 수 있는 것: - 문서 이메일 — 청구서, 견적서 및 기타 문서 발송. - 알림 이메일 — 연체 및 결제 예정 알림. - 마케팅 이메일 — 모든 홍보 또는 공지 메시지.

각 카테고리는 독립적인 켜기/끄기 토글입니다. 청구서만 원하고 알림은 원하지 않는 고객은 정확히 그렇게 설정할 수 있습니다 — 전부 또는 아무것도 아닌 방식이 아닙니다.

원클릭 구독 취소: 기본 설정 페이지는 모든 이메일의 구독 취소 링크와 동일한 화면입니다. 고객이 단일 카테고리를 끄거나 한 곳에서 모든 것을 선택 해제할 수 있습니다. 변경 사항이 즉시 저장되고 이후 발송에 적용됩니다.

보안 유지 방법: - 기본 설정 엔드포인트는 유효한 토큰이 필요하며(너무 짧거나 없으면 거부됨), 그 토큰 하나로 기본 설정 읽기 및 업데이트가 승인됩니다 — 계정 필요 없음. - 알려지고 허용된 기본 설정 키만 수락되고 부울 값만 허용되므로 엔드포인트가 다른 것을 변경하도록 강제될 수 없습니다. - 읽기와 쓰기 모두 IP당 속도가 제한됩니다.

이러한 기본 설정을 준수하면 발송 평판이 건전하게 유지되고 스팸 방지 규정에 부합합니다 — 수신 거부를 선택한 고객은 단순히 해당 카테고리 수신이 중단됩니다.

세부적인 토글

문서, 알림, 마케팅 이메일에 대한 별도 스위치.

원클릭 구독 취소

모든 이메일에 기본 설정 페이지 링크가 포함됩니다 — 하나의 카테고리 또는 모든 것에서 선택 해제.

토큰 승인

구독 취소 토큰이 소유권을 증명합니다; 기본 설정 관리에 로그인이 필요 없습니다.

잠긴 엔드포인트

알려진 부울 키만 수락되고, 읽기 및 쓰기 속도가 제한됩니다.

고객이 청구서를 보거나 결제하려면 계정이 필요한가요?

아니요. 포털은 완전히 로그인 없이 사용할 수 있습니다. 링크의 안전한 토큰이 청구서 보기, PDF 다운로드, 이메일 기본 설정 관리, 결제(Pro에서)에 필요한 유일한 자격 증명입니다.

고객이 청구서를 열었는지 알 수 있나요?

네. 청구서 열람 추적은 타임스탬프, 출처, IP, 브라우저와 함께 모든 열람을 기록하며, 청구서 세부 정보 페이지에서 볼 수 있는 청구서별 열람 횟수와 첫/마지막 열람 타임스탬프를 유지합니다.

공유 링크를 취소하면 어떻게 되나요?

토큰이 지워지고 URL이 즉시 작동을 멈춥니다 — "찾을 수 없음"을 반환합니다. 다시 공유하려면 새 링크를 생성하여 새로운 토큰을 발행합니다.

포털에서의 온라인 결제가 모든 플랜에서 사용 가능한가요?

아니요. 보기, 다운로드, 열람 추적, 이메일 기본 설정은 모든 플랜에서 작동합니다. 포털에서 온라인으로 결제하려면 Stripe가 연결된 Pro 플랜이 필요합니다.

  • 수신 거부를 준수하면 전달 가능성이 보호됩니다 — 반복적인 원치 않는 이메일은 발신자 평판을 떨어뜨립니다
  • 알림과 문서 이메일은 별도이므로 고객이 알림을 끄면서도 청구서를 계속 받을 수 있습니다