가이드

가이드12분 분량

Mailchimp 임베드 없는 뉴스레터 가입 폼

직접 작성한 마크업으로 뉴스레터 가입 폼을 만들고, 동의를 기록하고, 봇 가입을 막고, 각 구독자를 Kit, MailerLite, beehiiv 등 어떤 도구로든 넘깁니다.

Preet SutharIkiform 창업자

이메일 서비스의 임베드 코드를 붙여 넣는 대신 가입 폼을 직접 HTML로 작성하고 폼 백엔드를 가리키게 하세요. 백엔드가 주소와 동의 체크박스를 검증하고, 봇을 걸러 내고, 서명된 웹훅을 보내면, 작은 릴레이가 이메일 도구의 API로 구독자를 추가합니다. 확인 이메일, 뉴스레터, 수신 거부 링크는 이메일 도구가 보내므로, 나중에 도구를 바꿔도 모든 폼이 아니라 릴레이만 바꾸면 됩니다.

모든 이메일 도구는 임베드를 제공합니다. 페이지에 붙여 넣는, 생성된 마크업 블록입니다. 동작은 하지만 폼이 그 도구의 것이 됩니다. 그 서비스로 바로 POST하고, 서비스의 마크업과 대개 스타일과 스크립트까지 담고 있으며, 다른 도구로 옮기는 날에는 사이트 곳곳의 사본을 모두 찾아야 합니다. 이 가이드는 이미 쓰고 있는 마크업과 프레임워크로 내 소유의 가입 폼을 만들고, 뉴스레터를 보내는 도구가 무엇이든 연결합니다.

가입이 전달되는 과정

여기에는 두 가지 일이 있고, 각각 다른 곳에 속합니다. 가입을 받는 것은 폼의 일입니다. 주소를 검증하고, 동의 체크박스를 확인하고, 봇을 막고, 언제 일어났는지 기록합니다. 뉴스레터를 보내는 것은 이메일의 일입니다. 주소를 확인하고, 호를 발송하고, 수신 거부와 반송을 처리합니다. Ikiform이 첫 번째를, 이메일 도구가 두 번째를 합니다. 서명된 웹훅이 둘을 연결합니다.

뉴스레터 가입이 페이지에서 이메일 도구까지 전달되는 과정가입 폼푸터, 사이드바, 글Ikiform동의와 스팸 확인대시보드동의와 함께 모든 가입알림 이메일나에게, 선택서명된 웹훅submission.created이메일 도구확인, 발송, 수신 거부전송릴레이뉴스레터 가입이 페이지에서 이메일 도구까지 전달되는 과정가입 폼푸터, 사이드바, 글Ikiform동의와 스팸 확인대시보드동의와 함께 모든 가입알림 이메일나에게, 선택서명된 웹훅submission.created이메일 도구확인, 발송, 수신 거부전송릴레이
  1. 독자가 페이지의 가입 폼을 작성하면 Ikiform 엔드포인트로 POST됩니다.
  2. Ikiform이 주소, 필수 동의 체크박스, 허니팟, 스팸 점수, 레이트 리밋을 검사합니다.
  3. 받아들여진 가입이 타임스탬프, origin, referrer와 함께 대시보드에 저장됩니다.
  4. Ikiform은 각 가입을 나에게 이메일로 알릴 수 있습니다. 독자에게는 절대 이메일을 보내지 않습니다.
  5. Ikiform이 서명된 submission.created 웹훅을 보냅니다.
  6. 릴레이가 서명을 검증하고 독자를 이메일 도구에 추가하면, 이메일 도구가 확인 이메일과 이후 모든 호를 보냅니다.
어떤 이메일 도구를 쓰는지 아는 것은 릴레이뿐입니다. 도구가 바뀌어도 폼, 스팸 필터링, 저장된 기록은 바뀌지 않습니다.

뉴스레터 가입을 받는 네 가지 방법

방식잘하는 것단점
Mailchimp, Kit, MailerLite, beehiiv 같은 이메일 도구의 임베드운영할 것이 없습니다. 확인, 태그, 환영 이메일이 도구 자체 설정에 연결되어 있습니다.마크업과 동작이 도구의 것입니다. Mailchimp는 임베드 폼이 사이트의 스타일을 상속해 페이지에서 다르게 보일 수 있다고 안내하며, 기존 폼에 reCAPTCHA를 켜려면 새 코드를 생성해 다시 붙여 넣어야 합니다. 모든 사본이 한 서비스에 묶입니다.
도구의 API를 호출하는 자체 서버 라우트API 키를 서버에 둔 채 폼과 요청을 완전히 제어할 수 있습니다.검증, 봇 필터링, 레이트 리밋, 동의 기록을 직접 만들어야 하고, 사이트가 정적이어도 서버가 필요합니다.
Typeform과 Zapier처럼 호스팅 폼 빌더와 자동화의 조합코드가 없고, 자동화 도구가 모든 이메일 서비스를 압니다.페이지와 어울리지 않는 iframe에 구독이 두 개 생깁니다. 웹훅과 브랜딩은 플랜에 따라 다릅니다.
Ikiform 같은 폼 백엔드와 릴레이의 조합어떤 사이트에서든 직접 작성한 마크업, 스팸 필터링, 저장된 동의 기록, 서명된 웹훅을 폼용 서버 없이 쓸 수 있습니다.Ikiform은 독자에게 이메일을 보내지 않습니다. 확인 이메일과 모든 뉴스레터는 작은 릴레이나 자동화를 거쳐 이메일 도구에서 나갑니다.

사이트 하나, 도구 하나, 그 임베드로 만족한다면 그대로 쓰세요. 폼이 디자인과 맞아야 하거나, 여러 사이트에 걸쳐 있거나, 도구보다 오래 쓸 수 있다면 직접 만드세요.

폼

좋은 뉴스레터 폼은 작습니다. 이메일, 인사말용 선택 입력인 이름, 그리고 레이블이 곧 약속인 동의 체크박스입니다. hidden source 입력이 사이트의 어디서 가입했는지 기록합니다. 스택을 고르세요. 선택한 스택은 이 가이드들의 모든 코드 예제에 이어집니다.

폼을 푸터, 사이드바, 글 끝에 붙여 넣으세요. 일반적인 방식으로 POST하고 내 감사 페이지로 이동하므로 JavaScript 없이 동작합니다.

footer.html
<form id="newsletter" action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post">
  <label for="nl-email">Email</label>
  <input id="nl-email" name="email" type="email" required autocomplete="email" placeholder="you@example.com" />

  <label for="nl-name">First name (optional)</label>
  <input id="nl-name" name="first_name" type="text" maxlength="80" autocomplete="given-name" />

  <label>
    <input name="consent" type="checkbox" value="true" required />
    Email me the newsletter. I can unsubscribe at any time.
  </label>

  <input type="hidden" name="source" value="footer" />
  <input type="hidden" name="_redirect" value="https://example.com/subscribed" />
  <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden />

  <button>Subscribe</button>
  <p id="nl-status" role="status" hidden></p>
</form>

독자를 글에 머물게 하려면 폼 뒤에 이 스크립트를 추가하세요. fetch로 POST하고, 폼을 받은편지함을 확인하라는 문구로 바꾸며, 이메일이나 체크박스에 대한 서버의 메시지를 보여 줍니다.

newsletter.js
const form = document.querySelector("#newsletter");
const status = document.querySelector("#nl-status");
const button = form.querySelector("button");

form.addEventListener("submit", async (event) => {
  event.preventDefault();
  const body = new FormData(form);
  button.disabled = true;
  status.hidden = false;
  status.textContent = "Subscribing";
  try {
    const response = await fetch(form.action, { method: "POST", headers: { Accept: "application/json" }, body });
    const result = await response.json();
    if (result.ok) {
      form.replaceChildren(status);
      status.textContent = "Almost done. Open the email we sent you and confirm your address.";
      return;
    }
    const fields = result.error.fields ?? {};
    status.textContent = fields.email?.[0] ?? fields.consent?.[0] ?? result.error.message;
  } catch {
    status.textContent = "Couldn't reach the server. Try again.";
  }
  button.disabled = false;
});
  • frm_xxxxxxxxxxxxxxxx를 대시보드에 있는 폼 ID로 바꾸세요.
  • 이메일 입력의 이름은 email로 유지하세요. Ikiform이 검증하고, 도메인을 소문자로 바꾸고, 일회용 이메일 도메인인지 확인합니다.
  • hidden _gotcha 입력이 허니팟입니다. 사람에게는 보이지 않고, 모든 입력을 채우는 봇은 스스로 스팸임을 드러냅니다.
  • 체크박스는 체크되면 true를 POST합니다. 체크되지 않으면 아무것도 보내지 않으며, 필수 체크박스는 This box must be checked로 거부됩니다.
  • 이메일 도구가 확인 이메일을 보내므로 성공 문구는 받은편지함을 확인하라고 안내합니다. 더블 옵트인을 껐다면 간단한 감사 문구로 바꾸세요.
  • 서버 측 버전은 브라우저의 Origin 헤더를 전달합니다. Ikiform은 이 헤더로 무료 localhost 테스트를 알아보는데, 서버 자체의 fetch는 이를 보내지 않기 때문입니다.
서버 측 버전은 시크릿 키로 POST하므로 Ikiform이 Allowed domains와 사람 확인을 건너뜁니다. 그러면 모든 POST가 서버의 IP에서 오고, 방문자당 분당 5회인 Standard 한도가 모든 방문자를 합쳐서 계산합니다. 서버를 거쳐 POST하는 폼에는 Relaxed 또는 Custom 레이트 리밋을 고르고, IKIFORM_SECRET_KEY는 서버 전용 환경 변수에 두세요.

프레임워크 설정은 문서에 있습니다: Next.js, Astro, SvelteKit, Nuxt, React, Vue, 일반 HTML. 뉴스레터 폼 템플릿은 같은 필드를 HTML, React, Next.js 서버 액션으로 생성합니다.

필드와 정의

폼의 Fields 탭에 아래 정의를 붙여 넣으면 페이지가 무엇을 보내든 Ikiform이 서버에서 강제합니다. 미리보기는 같은 검증기를 브라우저에서 실행합니다. 체크박스를 비운 채 제출하면 봇이나 망가진 페이지가 받을 오류를 볼 수 있습니다.

미리보기

Ikiform의 검증기를 브라우저에서 실행합니다. 아무것도 전송되지 않습니다.

실제 페이지에서 source는 hidden 입력입니다. 여기서는 시험해 볼 수 있도록 보이는 텍스트 필드로 두었습니다.
필드이유유의할 점
email구독자필수. type="email"로 휴대폰에서 알맞은 키보드가 뜹니다
first_name매 호의 인사말선택. 대부분의 이메일 도구에 매핑할 이름 필드가 있습니다
consent이메일을 요청했다는 기록필수 체크박스. true로 저장됩니다
source사이트의 어느 폼이 효과가 있었는지: 푸터, 글, 팝업hidden. 위치마다 다른 값을 설정하고 태그나 필드로 넘기세요

필드를 정의하면 Ikiform은 모르는 입력을 unknown_field로 거부하므로, 페이지에 입력을 추가하기 전에 정의에 필드를 추가하세요. _redirect처럼 _로 시작하는 이름은 Ikiform에 대한 지시이며 필드로 집계되지 않습니다.

뉴스레터는 누군가 요청한 이메일입니다. 체크박스가 요청을 명시적으로 만들고, 저장된 제출이 이를 기록합니다. Ikiform이 받아들인 각 가입에 대해 보관하는 것은 다음과 같습니다.

data.fields
{
  "email": "ada@example.com",
  "first_name": "Ada",
  "consent": true,
  "source": "footer"
}

필드 외에 각 제출에는 created_at 타임스탬프, 페이지의 origin과 referrer, 국가, 브라우저의 user agent가 있습니다. 이를 합치면 그 사람이 언제 어디서 체크박스를 선택했는지 알 수 있습니다. 나중에 이 기록을 유용하게 만드는 습관이 두 가지 있습니다.

  1. 레이블을 약속으로 쓰세요. "뉴스레터를 이메일로 받겠습니다. 언제든 수신 거부할 수 있습니다."는 무엇을 받는지 말해 줍니다. 광고도 보낸다면 레이블에 밝히세요.
  2. 문구가 바뀌면 날짜를 기록하세요. 저장된 true는 그 사람이 동의했다는 뜻이지, 어떤 문구에 동의했는지는 말해 주지 않습니다. 레이블의 짧은 변경 기록을 날짜와 함께 남기면 어떤 가입이든 그때 본 문구와 맞춰 볼 수 있습니다.

Ikiform은 기록을 보관할 뿐, 나와 독자가 사는 곳의 규정이 무엇을 요구하는지는 알려 줄 수 없습니다. 그 부분은 잘 아는 사람에게 확인하세요.

확인 이메일은 이메일 도구에서 나갑니다

Ikiform은 폼을 작성한 사람에게 이메일을 보내지 않습니다. 알림 이메일은 나와 팀에게만 가므로 자동 응답, 확인 이메일, 더블 옵트인이 없습니다. 그런 이메일은 웹훅으로 트리거해 이메일 도구에서 보내세요. 이렇게 나눈 것은 의도적입니다. 뉴스레터를 보내는 도구는 이미 누가 확인했는지, 누가 수신 거부했는지, 어떤 주소가 반송되는지 추적합니다. 두 번째 시스템이 확인 이메일을 보내면 그 기록이 서로 어긋납니다.

그래서 릴레이는 이메일 도구가 자체 확인 이메일을 보내는 상태로 독자를 추가하고, 독자가 클릭하면 도구가 활성으로 표시합니다. 도구마다 켜는 방식이 다릅니다. 폼 설정, 계정 토글, 또는 API 요청의 플래그입니다. 더블 옵트인 가이드에서 세 가지 모두와, 기존 구독자가 다시 가입할 때 일어나는 일을 다룹니다.

릴레이

릴레이는 Ikiform의 웹훅을 받아 서명을 확인하고 이메일 도구의 API를 호출하는 짧은 함수입니다. 공개 HTTPS URL과 양쪽에 시크릿 하나씩이 필요합니다. 이것은 Next.js 라우트 핸들러이며, 같은 코드가 fetch가 있는 어떤 런타임에서든 동작합니다.

app/api/newsletter/route.ts
import { verifyWebhook, WebhookVerificationError } from "@ikiform/sdk/webhooks";
import { addSubscriber } from "@/lib/email-tool";

export async function POST(request: Request) {
  const payload = await request.text();
  let event;
  try {
    event = await verifyWebhook({ payload, headers: request.headers, secret: process.env.IKIFORM_WEBHOOK_SECRET! });
  } catch (error) {
    if (error instanceof WebhookVerificationError) return new Response(error.reason, { status: 400 });
    throw error;
  }
  if (event.type !== "submission.created") return new Response(null, { status: 204 });

  const fields = event.data.fields;
  if (fields.consent !== true) return new Response("No consent, skipped", { status: 200 });

  const answer = await addSubscriber({
    email: String(fields.email),
    firstName: typeof fields.first_name === "string" ? fields.first_name : undefined,
    source: typeof fields.source === "string" ? fields.source : "unknown",
    referrer: typeof event.data.meta.referrer === "string" ? event.data.meta.referrer : undefined,
  });
  if (answer.status === 429) {
    return new Response("Email tool rate limit", {
      status: 503,
      headers: { "retry-after": answer.headers.get("retry-after") ?? "60" },
    });
  }
  if (!answer.ok) return new Response(`Email tool answered ${answer.status}`, { status: 502 });
  return new Response(null, { status: 204 });
}
  • verifyWebhook이 HMAC 서명과 타임스탬프를 확인합니다. 이게 없으면 URL을 찾은 누구나 목록에 주소를 추가할 수 있습니다.
  • 대시보드의 Send test에서 오는 endpoint.test 이벤트는 204로 응답하고 건너뜁니다.
  • 동의 확인은 폼 정의 뒤의 두 번째 잠금입니다.
  • 도구에 의존하는 부분은 addSubscriber뿐입니다. 도구별 본문은 Kit, MailerLite, beehiiv 페이지에 있습니다.

릴레이의 응답이 Ikiform의 다음 행동을 정합니다.

이메일 도구의 응답별로 릴레이가 Ikiform에 보내는 응답200 또는 201추가 또는 업데이트204내용 없음완료전달 성공429레이트 리밋503Retry-After 포함대기그다음 재시도4xx 또는 5xx거부 또는 다운502도구의 상태 포함재시도같은 webhook-id이메일 도구의 응답릴레이의 응답Ikiform이메일 도구의 응답별로 릴레이가 Ikiform에 보내는 응답200 또는201추가 또는업데이트204내용 없음완료전달 성공429레이트 리밋503Retry-After포함대기그다음 재시도4xx 또는5xx거부 또는 다운502도구의 상태 포함재시도같은webhook-id이메일 도구의 응답릴레이의 응답Ikiform
  1. 이메일 도구가 구독자를 추가하거나 업데이트하면 릴레이가 204로 응답하고 전달이 성공으로 표시됩니다.
  2. 이메일 도구가 레이트 리밋에 걸리면 릴레이가 Retry-After와 함께 503으로 응답하고, Ikiform은 그만큼 기다렸다가 다음 시도를 합니다.
  3. 이메일 도구가 요청을 거부하거나 다운되면 릴레이가 502로 응답하고, Ikiform은 같은 webhook-id로 일정에 따라 재시도합니다.
모든 시도가 릴레이의 응답과 함께 엔드포인트의 전달 로그에 남으므로, 도구의 상태를 담은 502가 무엇을 고쳐야 할지 알려 줍니다.

대시보드의 Webhooks에서 릴레이의 URL을 추가하고, 뉴스레터 폼을 고르고, whsec_ 시크릿을 IKIFORM_WEBHOOK_SECRET에 복사하세요. 워크스페이스에는 엔드포인트를 3개까지 둘 수 있습니다. URL은 443 포트의 공개 HTTPS여야 하며 workers.dev와 pages.dev 호스트 이름은 거부되므로 Worker에는 커스텀 도메인을 주세요. 재시도, 페이로드, 서명 방식은 웹훅 문서에 있고, 폼 제출을 자체 서버로 보내기에는 각 전달을 한 번만 저장하는 버전이 있습니다.

코드 없이 하려면 웹훅을 자동화 도구로 보내고, 릴레이 대신 그 도구의 이메일 도구 액션을 쓰세요. Zapier, Make, n8n을 참고하세요. 원클릭 연동은 없습니다. 모든 도구는 서명된 웹훅으로 직접, 또는 Zapier나 n8n 같은 자동화 도구를 거쳐 연결합니다.

봇과 리스트 폭탄 막기

봇 가입은 대부분의 폼보다 뉴스레터에 더 큰 피해를 줍니다. 봇이 가입시킨 실제 주소는 요청한 적 없는 이메일을 받고, 그 사람들의 신고가 발송 도메인에 피해를 줍니다. 어떤 봇은 피해자의 받은편지함을 묻어 버리려고 그 주소를 수백 개 폼에 한꺼번에 가입시키며, 확인 이메일을 보내는 모든 폼이 여기에 가담하게 됩니다.

방어막는 것설정
허니팟모든 입력을 채우는 봇숨겨진 _gotcha 입력
필수 동의이메일만 POST하는 스크립트정의에서 required: true인 consent 체크박스
스팸 점수일회용 주소(+2), 동일한 반복(+3), 링크와 스팸 문구. 5점이면 가입이 스팸으로 저장됩니다없음
레이트 리밋반복해서 POST하는 방문자 한 명기본으로 켜짐: Standard, 방문자당 분당 5회
사람 확인실제 브라우저를 구동하는 봇키 관리 없이 Cloudflare Turnstile을 쓰려면 Spam check를 Ikiform으로 설정하세요
허용 도메인다른 사이트에 복사된 폼 엔드포인트폼이 있는 모든 도메인을 나열하세요

스팸은 실제 가입과 같은 성공 응답을 받지만 웹훅을 보내지 않으므로 이메일 도구에 닿지 않고 확인 이메일도 트리거하지 않습니다. 실제 독자가 스팸으로 분류되면 스팸 아님으로 표시하세요. 그때 웹훅이 나갑니다. 각 검사와 점수는 스팸 문서에서 설명합니다.

사람은 한 번만 구독하므로 뉴스레터 폼에는 방문자당 엄격한 한도가 맞습니다. 독자가 IP 하나를 공유하는 사무실이나 캠퍼스에서 읽는다면 Standard는 그들을 함께 세므로, 거기서는 방문자당 분당 20회인 Relaxed가 더 안전합니다. 레이트 리밋을 참고하세요.

여러 페이지에 하나의 폼

엔드포인트 하나를 모든 페이지의 푸터, 각 글의 끝, /newsletter 페이지에 둘 수 있습니다. 어느 위치가 가입을 이끄는지 알 수 있도록 위치마다 고유한 source 값을 주세요.

  • footer: 모든 페이지에 보입니다. 이메일과 체크박스만 두세요.
  • post: 글을 끝까지 읽은 독자로, 대개 전환율이 가장 좋습니다.
  • newsletter-page: 소셜 프로필이 링크하는 곳입니다. 샘플 호를 보여 줄 공간이 있습니다.

모든 제출에는 독자가 있던 정확한 페이지인 referrer도 기록되므로, source는 위치를, referrer는 글을 알려 줍니다. 폼이 있는 각 도메인을 Allowed domains에 추가하세요. 폼당 최대 20개이며, 나열한 도메인의 서브도메인은 자동으로 허용됩니다.

같은 독자가 두 번

Ikiform은 같은 이메일의 반복 제출을 합치거나 거부하지 않습니다. 24시간 안의 동일한 반복은 스팸 점수만 올립니다. 중복 제거는 목록이 있는 곳이나 내보낼 때 하세요. 뉴스레터에서는 거의 문제가 되지 않습니다. Kit, MailerLite, beehiiv 모두 이메일을 키로 구독자를 관리하므로, 반복 가입은 두 번째 연락처를 만들지 않고 기존 연락처를 업데이트합니다.

나중에 이메일 도구 바꾸기

폼을 소유한 덕을 보는 곳이 여기입니다. 이메일 도구를 바꾸려면 보통 사이트의 모든 임베드를 교체해야 합니다. 여기서는 폼이 뒤에 어떤 도구가 있는지 모릅니다.

다른 이메일 도구로 옮길 때 바뀌는 것임베드를 쓸 때내 폼을 쓸 때모든 페이지붙여 넣은 임베드 코드이전 도구폼이 여기로 POST새 도구모든 페이지에 새 임베드모든 페이지변경 없음Ikiform변경 없음릴레이함수 하나만 변경전송전부 교체전송웹훅다른 이메일 도구로 옮길 때 바뀌는 것임베드를 쓸 때내 폼을 쓸 때모든 페이지붙여 넣은 임베드 코드이전 도구폼이 여기로 POST새 도구모든 페이지에 새 임베드모든 페이지변경 없음Ikiform변경 없음릴레이함수 하나만 변경전송전부 교체전송웹훅
  1. 임베드를 쓰면 모든 페이지에 이전 도구로 바로 POST하는 코드가 있으므로, 옮기려면 사본을 하나하나 교체해야 합니다.
  2. 내 폼을 쓰면 모든 페이지가 계속 Ikiform으로 POST하고, Ikiform은 계속 같은 웹훅을 보냅니다.
  3. 새 도구의 API를 호출하도록 릴레이의 addSubscriber 함수만 바뀝니다.
원한다면 일주일 동안 두 도구를 함께 운영하세요. 웹훅 엔드포인트 둘, 릴레이 둘, 폼 하나입니다. 그런 다음 이전 엔드포인트를 제거하세요.

기존 구독자는 이전 도구 자체의 내보내기로 옮기세요. 누가 확인했고 누가 떠났는지는 그 도구만 압니다. 파일당 최대 100,000행인 Ikiform의 CSV 내보내기는 숫자를 확인하는 용도이지 가져오기용이 아닙니다.

상황별 가이드

위 폼은 어디서나 같습니다. 아래 페이지들은 확인 이메일, 서버 없는 사이트, 세 가지 이메일 도구의 정확한 API 호출을 다룹니다.

작동 확인하기

폼을 모든 페이지에 추가하기 전에 아래를 확인하세요. Ikiform에는 무료 플랜이 없습니다. 테스트는 무료입니다. 플랜이 없는 워크스페이스는 localhost에서 월 50건의 테스트 제출을 받습니다. 실제 운영하려면 월 $6부터 500건을 제공하는 Pro를 고르거나, 한 번 결제로 10,000건 $49 또는 50,000건 $149를 구매하세요. 크레딧은 만료되지 않습니다. 요금을 참고하세요.

  1. 폼의 Allowed domains에 사이트 도메인을 추가하고, 개발하는 동안에는 localhost도 추가하세요. 비워 두면 어디서든 POST를 받습니다.
  2. 브라우저 개발자 도구에서 체크박스를 비운 채 폼을 제출하거나, 잠깐 required를 제거하세요. This box must be checked와 함께 422를 받고 아무것도 저장되지 않습니다.
  3. 내 주소로 제대로 제출하세요. 받은편지함을 확인하라는 문구가 보이거나 감사 페이지로 이동합니다.
  4. 대시보드에서 Submissions를 여세요. 보낸 모든 필드가 담긴 새 제출이 있습니다.
  5. Webhooks에서 엔드포인트를 여세요. 전달에 succeeded와 릴레이의 응답이 표시됩니다.
  6. 이메일 도구를 여세요. 구독자가 있고, 더블 옵트인이 켜져 있다면 미확인 상태이며, 확인 이메일이 받은편지함에 와 있습니다.
  7. 허니팟을 채워서 _gotcha=bot으로 POST하세요. 여전히 성공 응답을 받지만, 제출은 스팸으로 저장되고 이메일이나 웹훅을 보내지 않습니다.
  8. 아무것도 도착하지 않았나요? 대시보드의 상태 필터를 Spam으로 바꾸세요. 스팸도 실제 제출과 같은 성공 응답을 받습니다.

문제 해결

문제해결 방법
consent와 함께 422 validation_failed체크박스가 선택되지 않았거나 입력의 name이 consent가 아닙니다. 서버 측 버전은 true, "true", "on" 중 하나를 보내야 하며, 체크되지 않은 상자는 아무것도 보내지 않습니다.
unknown_field와 함께 422 validation_failed페이지가 정의에 없는 입력을 보냅니다. 나중에 추가한 hidden source나 추적용 입력인 경우가 많습니다. 정의에 추가하거나 입력을 제거하세요.
403 origin_not_allowed, 또는 모든 POST가 스팸으로 분류됨페이지의 도메인이 폼의 Allowed domains에 없습니다. 도메인을 추가하고, 로컬 테스트용으로 localhost도 추가하세요. 등록된 도메인의 하위 도메인은 허용됩니다.
429 rate_limited한 방문자가 폼의 레이트 리밋보다 많이 보냈습니다. Standard는 방문자당 분당 5회를 허용합니다. Retry-After만큼 기다리거나, 공유 IP 하나에서 POST하는 폼이라면 Relaxed나 Custom을 고르세요.
제출은 대시보드에 있는데 이메일이나 웹훅이 오지 않았습니다스팸으로 저장되었습니다. 스팸은 아무것도 보내지 않습니다. Spam 필터에서 열어 이유를 확인하고, 스팸이 아님으로 표시하면 이메일과 웹훅이 발송됩니다.
가입이 Ikiform에는 오는데 이메일 도구에는 오지 않음Webhooks에서 전달 로그를 읽으세요. 400은 릴레이의 시크릿이 틀렸다는 뜻입니다. 502에는 이메일 도구의 상태가 담겨 있으며, 대개 API 키, 리스트 ID, 폼 ID가 틀린 경우입니다.
구독자는 이메일 도구에 있는데 확인 이메일을 받지 못함도구에서 더블 옵트인이 꺼져 있거나, 릴레이가 구독자를 이미 확인된 상태로 만들었습니다. 도구별 설정은 더블 옵트인을 참고하세요.
브라우저가 내 페이지가 아니라 Ikiform의 감사 페이지로 이동합니다_redirect는 도메인이 Allowed domains에 있고 https: URL일 때만 따릅니다. 도메인을 추가하거나, 대신 폼 설정에서 Redirect after submit을 설정하세요.

질문

막히는 단계가 있거나 내 상황에 맞는 가이드가 필요하다면 이메일을 보내세요: hello@ikiform.com.