가이드

가이드11분 분량

웹사이트나 앱에 피드백 폼 추가하기

어떤 페이지나 앱 안에든 피드백 폼을 둡니다. 평점, 코멘트, 보낸 페이지, 스팸 필터링, 낮은 점수 알림까지 다룹니다.

Preet SutharIkiform 창업자

1~5점 평점, 선택 입력인 코멘트와 이메일로 된 짧은 폼을 만들고 폼 백엔드로 POST하면 이를 위해 서버를 운영할 필요가 없습니다. 브라우저는 전체 URL을 알아서 알려 주지 않으므로 모든 답변에 페이지 주소를 함께 보내세요. 낮은 점수는 당일에 팀 채팅으로 보내고, 추세를 보기 위해 모든 답변을 한곳에 모아 두세요.

대부분의 사람은 사이트의 문제를 말해 주지 않습니다. 그냥 떠납니다. 작은 피드백 폼은 말해 줄 소수의 사람을, 그들이 문제를 알아차린 순간, 문제가 생긴 페이지에서 붙잡습니다. 이 가이드는 어떤 사이트나 앱에도 맞고, 보낸 페이지를 함께 전송하고, 봇을 막고, 불만족스러운 답변을 당일에 팀 앞에 가져다 놓는 폼을 만듭니다.

피드백 폼의 작동 방식

폼은 Ikiform으로 POST합니다. Ikiform은 점수를 검증하고, POST의 스팸 여부를 검사하고, 저장하고, 팀에 이메일을 보내고, 서명된 웹훅을 보냅니다. 웹훅에서 낮은 점수는 채팅 채널로 보내고, 모든 답변은 시트나 데이터베이스로 보낼 수 있습니다.

피드백 하나가 페이지에서 팀까지 전달되는 과정어떤 페이지나 앱 화면평점, 코멘트, 페이지 주소Ikiform검증, 스팸 필터링, 저장대시보드폼과 날짜로 필터, CSV내보내기알림 이메일팀에게, 답장은 방문자에게서명된 웹훅필드와 meta가 담긴submission.created팀 채팅1점이나 2점만전송릴레이피드백 하나가 페이지에서 팀까지 전달되는 과정어떤 페이지나 앱화면평점, 코멘트, 페이지 주소Ikiform검증, 스팸 필터링, 저장대시보드폼과 날짜로 필터, CSV내보내기알림 이메일팀에게, 답장은 방문자에게서명된 웹훅필드와 meta가 담긴submission.created팀 채팅1점이나 2점만전송릴레이
  1. 방문자가 점수를 고르고 코멘트를 쓸 수도 있으며, 폼이 페이지 주소와 함께 POST합니다.
  2. Ikiform이 점수가 1~5의 정수인지 확인하고, 스팸 검사를 실행하고, 답변을 저장합니다.
  3. 답변이 대시보드에 표시되고, 거기서 필터링하거나 CSV로 내보낼 수 있습니다.
  4. Ikiform이 팀에 이메일을 보냅니다. 방문자가 이메일을 남겼다면 답장이 바로 그 사람에게 갑니다.
  5. Ikiform이 필드와 브라우저 메타데이터를 담은 서명된 submission.created 웹훅을 보냅니다.
  6. 작은 릴레이가 낮은 점수만 팀 채팅에 올리므로 그날 안에 읽힙니다.
릴레이는 선택 사항입니다. 이메일과 대시보드로 시작하고, 답변이 쌓이기 시작하면 채팅 알림을 추가하세요.

피드백을 모으는 방법

도구마다 맞는 일이 다릅니다. 위젯의 모양이 아니라 답변이 도착했을 때 무엇을 봐야 하는지로 고르세요.

방식잘하는 것단점
Hotjar나 Usersnap 같은 웹사이트 피드백 도구script 태그 하나 외에는 코드 없이 스크린샷, 주석, 페이지 맥락을 받을 수 있습니다.모든 페이지에 서드파티 스크립트가 들어가고, 답변은 그 제품에 저장되며, 가격은 그쪽 플랜이 정합니다.
Sentry User Feedback 같은 에러 트래커의 위젯리포트를 에러와 연결하고, 세션 리플레이를 켜면 무슨 일이 있었는지 녹화본과도 연결합니다.의견이 아니라 버그용입니다. 먼저 앱에 트래커의 SDK가 있어야 합니다.
Typeform, Tally, Google Forms 같은 폼 빌더코드 없이 다듬어진 폼을 만들 수 있습니다. 링크로 보내는 설문에 좋습니다.iframe이나 별도 페이지이므로, URL로 넘기지 않으면 답변이 어느 페이지에 대한 것인지 잃어버립니다.
Canny 같은 피드백 보드기능 요청에 대한 공개 투표와 상태 업데이트.빠른 반응이 아니라 아이디어용입니다. 답변은 설계상 공개됩니다.
직접 만든 API 라우트와 데이터베이스데이터와 모든 로직을 완전히 제어할 수 있습니다.스팸 필터링, 레이트 리밋, 알림 이메일, 내보내기를 직접 만들어야 하고 서버가 필요합니다.
Ikiform 같은 폼 백엔드어떤 사이트나 앱에서든 직접 작성한 마크업을 씁니다. 서버 없이 검증, 스팸 필터링, 저장, 이메일, 서명된 웹훅을 제공합니다.파일 업로드를 지원하지 않으므로 스크린샷은 없고, 투표나 세션 리플레이도 없습니다.

모든 리포트에 스크린샷이 필요하다면 피드백 도구나 에러 트래커의 스크립트를 쓸 만합니다. 폼이 내 사이트처럼 보이고, 답변을 옮기기 쉽게 두고, 어디로 보낼지 직접 정하고 싶다면 폼 백엔드를 쓰세요. 이 가이드의 나머지는 그 방법을 다룹니다.

폼

질문은 세 개면 충분합니다. 점수, 코멘트, 선택 입력인 이메일입니다. 점수는 사람들이 답하는 부분이고, 코멘트에 가치가 있고, 이메일은 후속 대응을 하는 수단입니다. 아래에서 스택을 고르세요. 선택한 스택은 이 가이드들의 모든 코드 예제에 이어집니다.

마크업 한 블록과 짧은 스크립트입니다. JavaScript가 없어도 폼은 POST하고 리디렉션되며, JavaScript가 있으면 방문자는 페이지에 머물고 버튼 옆에서 서버의 오류를 봅니다. 스크립트는 page에 쿼리 문자열을 뺀 주소를 채우므로 URL 속 토큰이 받은편지함에 닿지 않습니다.

feedback.html
<form id="feedback" action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post">
  <fieldset>
    <legend>How useful was this page?</legend>
    <label><input type="radio" name="rating" value="1" required /> 1</label>
    <label><input type="radio" name="rating" value="2" /> 2</label>
    <label><input type="radio" name="rating" value="3" /> 3</label>
    <label><input type="radio" name="rating" value="4" /> 4</label>
    <label><input type="radio" name="rating" value="5" /> 5</label>
  </fieldset>
  <label for="comment">What would make it better?</label>
  <textarea id="comment" name="comment" rows="4" maxlength="4000"></textarea>
  <label for="feedback-email">Email, if you'd like a reply</label>
  <input id="feedback-email" name="email" type="email" />
  <input type="hidden" name="page" />
  <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden />
  <button>Send feedback</button>
  <p id="feedback-status" role="status"></p>
</form>

<script>
  const form = document.getElementById("feedback");
  const status = document.getElementById("feedback-status");
  form.elements.page.value = location.origin + location.pathname;

  form.addEventListener("submit", async (event) => {
    event.preventDefault();
    const button = form.querySelector("button");
    button.disabled = true;
    status.textContent = "Sending";
    try {
      const response = await fetch(form.action, {
        method: "POST",
        headers: { Accept: "application/json" },
        body: new FormData(form),
      });
      const result = await response.json();
      if (result.ok) {
        form.replaceChildren(Object.assign(document.createElement("p"), { textContent: "Thanks. The team reads every note." }));
        return;
      }
      const fields = result.error.fields ?? {};
      status.textContent = fields.rating?.[0] ?? fields.comment?.[0] ?? fields.email?.[0] ?? result.error.message;
    } catch {
      status.textContent = "Couldn't send it. Try again in a moment.";
    }
    button.disabled = false;
  });
</script>
  • frm_xxxxxxxxxxxxxxxx를 대시보드에 있는 폼 ID로 바꾸세요.
  • rating은 다섯 값의 라디오 그룹입니다. Ikiform이 숫자로 저장하므로 평균을 낼 때 파싱이 필요 없습니다.
  • email은 선택 입력입니다. 사람들은 신원을 밝히지 않아도 될 때 더 솔직하게 쓰고, 답변을 원하는 사람은 이메일을 남깁니다.
  • hidden _gotcha 입력이 허니팟입니다. 사람에게는 보이지 않고, 모든 입력을 채우는 봇은 스스로 스팸임을 드러냅니다.
  • page는 답변이 어느 페이지에 대한 것인지 기록합니다. 왜 직접 보내야 하는지는 다음 섹션에서 설명합니다.
서버 측 버전은 시크릿 키로 POST하므로 Ikiform이 Allowed domains와 사람 확인을 건너뜁니다. 그러면 모든 POST가 서버의 IP에서 오고, 방문자당 분당 5회인 Standard 한도가 모든 방문자를 합쳐서 계산합니다. 서버를 거쳐 POST하는 폼에는 Relaxed 또는 Custom 레이트 리밋을 고르고, IKIFORM_SECRET_KEY는 서버 전용 환경 변수에 두세요.

문서의 프레임워크 가이드에서 설정을 더 자세히 다룹니다: Next.js, Astro, SvelteKit, Nuxt, React, Vue, 일반 HTML. 피드백 폼 템플릿은 같은 필드를 HTML, React, 서버 액션으로 생성하고, 버그 리포트와 설문 템플릿은 더 긴 폼을 다룹니다.

필드 정의하기

폼의 Fields 탭에 정의를 붙여 넣으면 Ikiform이 어느 페이지에서 오든 모든 POST에 이를 강제합니다. 아래에서 시험해 보세요. 미리보기는 브라우저에서 Ikiform의 검증기를 실행하므로 점수 0이나 잘못된 이메일을 넣으면 실제로 돌려받을 422가 표시됩니다.

미리보기

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

이 페이지가 얼마나 유용했나요?

쿼리 문자열을 뺀 페이지 주소를 스크립트가 채웁니다.

rating은 1부터 max(여기서는 5)까지의 정수를 받습니다. 10까지 올릴 수 있지만 선택지가 다섯 개면 더 빨리 답할 수 있습니다.
필드유형이유
ratingrating, 최대 5클릭 한 번. 숫자로 저장되므로 페이지별 평균을 낼 수 있습니다
commenttextarea, 최대 4,000자점수의 이유
emailemail, 선택질문한 사람에게 답장합니다. 알림의 reply-to가 됩니다
pageurl, 선택답변이 어느 페이지에 대한 것인지

필드를 정의하면 POST에 담긴 다른 이름은 Unknown field로 거부됩니다. 나중에 앱 버전이나 플랜 이름 같은 맥락을 더 보내려면 먼저 그 필드를 추가하세요. 필드 ID는 소문자 snake_case입니다.

어느 페이지에 대한 것인지 알기

페이지 없는 점수는 대응하기 어렵습니다. Ikiform은 모든 제출에 브라우저 메타데이터를 기록하지만, 그중 하나는 보기보다 쓸모가 적습니다.

값출처얻는 것
meta.user_agentIkiform이 기록브라우저 POST에서 얻는 브라우저와 운영체제
meta.originIkiform이 기록https://example.com 같은 사이트의 origin
meta.referrerIkiform이 기록대개 origin뿐입니다. 브라우저의 기본 정책인 strict-origin-when-cross-origin은 다른 사이트로 POST할 때 경로를 떼어 냅니다
meta.countryIkiform이 기록두 글자 국가 코드
page폼이 전송전체 경로. 답변이 어느 페이지에 대한 것인지 알 수 있습니다

그래서 위의 모든 예제는 page를 직접 보냅니다. HTML과 SPA 버전은 location을 읽고, 서버 버전은 각 프레임워크가 이미 알고 있는 주소를 읽습니다. 모두 쿼리 문자열을 떼어 냅니다. 쿼리 문자열에는 저장하고 싶지 않은 검색어, 추적 ID, 일회용 토큰이 들어 있을 수 있습니다.

서버 버전은 서버에서 POST하므로 meta.user_agent는 방문자의 브라우저가 아니라 서버의 런타임입니다. 페이지 피드백에서는 거의 문제가 되지 않지만 버그 리포트에서는 중요하므로, 버그 리포트 가이드에서는 브라우저의 user agent를 필드로 전달합니다.

어디서 물어볼지

폼을 어디에 두느냐에 따라 듣는 내용이 달라집니다. 모든 페이지 푸터에 있는 폼에는 강한 의견이 드문드문 들어옵니다. 작업을 끝낸 직후의 질문에는 꾸준하고 구체적인 답변이 들어옵니다.

위치적합한 용도주의할 점
문서 페이지나 글의 끝질문에 답하지 못하는 페이지 찾기페이지당 양이 적습니다. 페이지가 아니라 섹션 단위로 보세요
앱에서 내보내기나 첫 프로젝트 같은 작업을 마친 뒤특정 흐름이 어떻게 느껴지는지, 기억이 생생할 때작업을 마칠 때마다가 아니라 사람당 한 번만 물어보세요
모든 화면에 떠 있는 버튼무엇이든, 언제든. React 위젯을 참고하세요내 버튼, 쿠키 배너, 채팅 버블을 가리면 안 됩니다
이메일 속 링크NPS처럼 시간에 따라 추적할 점수이메일 클라이언트는 내 페이지가 아니므로 폼에 사이트의 랜딩 페이지가 필요합니다

어디에 두든 폼은 작게 유지하세요. 점수를 먼저 묻고 코멘트 상자는 두 번째 단계가 아니라 점수와 함께 보여 주세요. 두 번째 단계에서 대부분이 이탈하며, 이유 없는 점수라도 받아 둘 가치가 있습니다.

낮은 점수를 사람 앞에 가져다 놓기

점수에 따라 답변이 어떻게 처리되는지답변 저장모든 점수, 모든 페이지웹훅submission.created릴레이가 평점확인3, 4, 5점: 추가작업 없음주간 검토CSV로 본 페이지별평균팀 채팅점수, 페이지, 코멘트누군가 답장이메일을 남긴 경우서명됨내보내기1점 또는 2점점수에 따라 답변이 어떻게 처리되는지답변 저장모든 점수, 모든 페이지웹훅submission.created릴레이가 평점 확인3, 4, 5점: 추가 작업없음주간 검토CSV로 본 페이지별 평균팀 채팅점수, 페이지, 코멘트누군가 답장이메일을 남긴 경우서명됨내보내기1점 또는 2점
  1. 점수와 보낸 페이지에 상관없이 모든 답변이 저장됩니다.
  2. Ikiform이 서명된 submission.created 웹훅을 릴레이로 보냅니다.
  3. 릴레이가 평점을 읽습니다. 3~5점은 당장 더 할 일이 없습니다.
  4. 1점이나 2점은 페이지와 코멘트와 함께 팀 채팅으로 갑니다.
  5. 방문자가 이메일을 남겼다면 누군가 당일에 답장합니다.
  6. 일주일에 한 번 내보내기로 페이지별 평균을 봅니다. 추세는 거기서 드러납니다.
나쁜 점수에만 알림을 보내세요. 5점 만점에 5점마다 알림이 울리는 채널은 일주일 안에 음소거됩니다.

알림 이메일은 폼당 최대 10명의 확인된 수신자에게 가며 모든 답변마다 도착합니다. 하루 몇 건이라면 괜찮습니다. 그 이상이면 이 Next.js 라우트 같은 릴레이로 낮은 점수만 채팅에 보내세요. 같은 코드가 Cloudflare Worker에서도 동작합니다.

app/api/feedback-alerts/route.ts
import { verifyWebhook, WebhookVerificationError } from "@ikiform/sdk/webhooks";

export async function POST(request: Request) {
  const payload = await request.text();
  try {
    const event = await verifyWebhook({
      payload,
      headers: request.headers,
      secret: process.env.IKIFORM_WEBHOOK_SECRET!,
    });
    if (event.type !== "submission.created") return new Response(null, { status: 204 });
    const { rating, comment, page, email } = event.data.fields;
    if (Number(rating) > 2) return new Response(null, { status: 204 });

    const lines = [
      `*${rating}/5* on ${page ?? event.data.meta.origin ?? "an unknown page"}`,
      comment ? `> ${String(comment).slice(0, 500)}` : "_No comment._",
      email ? `Reply to ${email}` : "Anonymous",
    ];
    const response = await fetch(process.env.SLACK_WEBHOOK_URL!, {
      method: "POST",
      headers: { "content-type": "application/json" },
      body: JSON.stringify({ text: lines.join("\n") }),
    });
    if (!response.ok) return new Response(`Slack answered ${response.status}`, { status: 502 });
    return new Response(null, { status: 204 });
  } catch (error) {
    if (error instanceof WebhookVerificationError) return new Response(error.reason, { status: 400 });
    throw error;
  }
}
  • verifyWebhook이 서명과 타임스탬프를 확인하므로 다른 사람은 이 URL로 채널에 글을 올릴 수 없습니다.
  • 2점보다 높은 점수는 204로 응답하고 끝납니다. Ikiform은 모든 2xx를 전달 완료로 처리합니다.
  • Slack 호출이 실패하면 502로 응답하고, Ikiform이 같은 webhook-id로 재시도하므로 잠깐의 장애로 알림을 잃지 않습니다.
  • 필드 값은 방문자가 입력한 그대로입니다. 릴레이는 코멘트를 채팅에 보내기 전에 500자로 자릅니다.

Webhooks에서 엔드포인트를 추가하고 whsec_ 시크릿을 IKIFORM_WEBHOOK_SECRET에 복사하세요. 워크스페이스에는 엔드포인트를 3개까지 둘 수 있습니다. 노코드 방식은 Slack, Discord, Google Sheets를 참고하세요. 티켓이 되어야 하는 피드백이라면 Linear와 GitHub Issues에 제출마다 티켓을 하나씩 만드는 릴레이가 있습니다.

원클릭 연동은 없습니다. 모든 도구는 서명된 웹훅으로 직접, 또는 Zapier나 n8n 같은 자동화 도구를 거쳐 연결합니다.

봇 막기

모든 페이지의 피드백 폼은 모든 페이지에 있는 공개 폼입니다. 봇이 찾아내고, 봇이 보내는 내용은 대부분 링크입니다. Ikiform의 기본 설정이 대부분을 처리합니다.

방어막는 것설정
허니팟모든 입력을 채우는 봇예제의 hidden _gotcha 입력
스팸 점수링크 3개 이상(+2), 알려진 스팸 문구(+2), 일회용 이메일(+2), 동일한 반복(+3). 5점이 되면 스팸으로 저장됩니다없음
레이트 리밋반복해서 POST하는 스크립트기본으로 켜짐: Standard, 방문자당 분당 5회, 폼 전체 분당 300회
허용 도메인다른 사이트에서 온 POST폼 설정에 도메인을 추가하세요
사람 확인실제 브라우저를 구동하는 봇Spam check를 Ikiform으로 설정하세요. 그러면 브라우저 fetch POST에 challenge()의 토큰이 필요합니다

스팸은 실제 POST와 같은 성공 응답을 받지만 이메일이나 웹훅을 보내지 않고 사용량에도 포함되지 않습니다. 코멘트에 링크 세 개를 붙여 넣은 실제 방문자가 반복 규칙과 합쳐져 링크 규칙에 걸릴 수 있으니 가끔 Spam 필터를 확인하세요. 답변을 스팸 아님으로 표시하면 그때 웹훅이 전송됩니다. 각 검사는 스팸 문서에서 설명합니다.

답변 읽기

처음 몇 주 동안은 모든 코멘트를 읽으세요. 그 후에는 페이지별 평균 점수를 낮은 순으로, 코멘트와 나란히 보는 것이 유용합니다.

내보내기

Submissions를 열고 피드백 폼을 고른 뒤 날짜 범위를 정하고 Export CSV를 누르세요. 열은 id, created_at, form, status 다음에 필드마다 하나씩이므로, 위 필드라면 rating은 E열, page는 H열입니다. 한 번에 최대 100,000행까지 내보낼 수 있으며, 그 이상은 내보내기 가이드에서 API를 다룹니다.

파일을 Google Sheets로 가져오고 빈 시트에 아래 수식을 넣으세요. 각 페이지의 평균 점수와 답변 수를 나쁜 순서대로 나열합니다.

Google Sheets
=QUERY(A2:H, "select H, avg(E), count(E) where D = 'received' and E is not null group by H order by avg(E) asc label avg(E) 'average', count(E) 'answers'", 0)
  1. 답변이 한두 개뿐인 페이지는 무시하세요. 화난 방문자 한 명은 추세가 아닙니다.
  2. 점수가 가장 낮은 세 페이지의 코멘트를 읽으세요. 해결책은 대개 처음 몇 개에 있습니다.
  3. 페이지를 바꾼 뒤에는 전체 기간 수치가 아니라 변경 전후 몇 주의 평균을 비교하세요.
이메일이 없어도 피드백은 Ikiform에 익명이 아닙니다. 각 답변에는 user agent, origin, referrer, 국가, 그리고 절대 반환되지 않는 IP 해시가 기록됩니다. 수집하는 항목을 개인정보 처리방침에 밝히세요.

상황별 가이드

위 폼은 어느 페이지에서든 빠른 반응을 받습니다. 아래 페이지들은 다른 목적의 피드백을 다룹니다. 재현할 버그, 따져 볼 요청, 추적할 점수, 떠나려는 고객입니다.

작동 확인하기

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

  1. 폼의 Allowed domains에 사이트 도메인을 추가하고, 개발하는 동안에는 localhost도 추가하세요. 비워 두면 어디서든 POST를 받습니다.
  2. 점수를 고르고 코멘트를 써서 제출하세요. 감사 문구가 폼을 대체하거나, 일반 HTML 버전이라면 브라우저가 리디렉션 페이지로 이동합니다.
  3. 대시보드에서 Submissions를 여세요. 답변에 rating은 숫자로, page는 전체 경로로 표시됩니다.
  4. curl이나 브라우저 콘솔로 점수 6을 POST하세요. Ikiform이 rating을 지목하는 422로 응답합니다.
  5. 알림 수신자 각각의 받은편지함을 확인하세요. 각자 필드가 담긴 이메일을 받고, 폼에 email 필드가 있으면 Reply는 제출자에게 갑니다.
  6. 점수 1을 제출하세요. 릴레이가 팀 채팅에 올리고, Webhooks의 전달 기록에 succeeded가 표시됩니다.
  7. 허니팟을 채워서 _gotcha=bot으로 POST하세요. 여전히 성공 응답을 받지만, 제출은 스팸으로 저장되고 이메일이나 웹훅을 보내지 않습니다.
  8. 아무것도 도착하지 않았나요? 대시보드의 상태 필터를 Spam으로 바꾸세요. 스팸도 실제 제출과 같은 성공 응답을 받습니다.

문제 해결

문제해결 방법
403 origin_not_allowed, 또는 모든 POST가 스팸으로 분류됨페이지의 도메인이 폼의 Allowed domains에 없습니다. 도메인을 추가하고, 로컬 테스트용으로 localhost도 추가하세요. 등록된 도메인의 하위 도메인은 허용됩니다.
Rating must be at most 5와 함께 422폼이 필드의 max보다 높은 점수를 보냅니다. 라디오 값을 바꾸거나 정의에서 max를 최대 10까지 올리세요.
Unknown field와 함께 422폼이 정의에 없는 이름을 보냅니다. 새로 추가한 hidden 입력인 경우가 많습니다. 그 ID로 필드를 추가하거나 입력을 제거하세요.
page가 비어 있음값을 채우는 스크립트가 실행되지 않았거나 폼이 생기기 전에 실행되었습니다. 스크립트를 폼 뒤에 두거나, SPA 예제처럼 제출 시점에 page를 설정하세요.
meta.referrer에 도메인만 표시됨정상입니다. 브라우저는 기본적으로 크로스 사이트 POST에 origin만 보냅니다. 대신 page 필드를 쓰세요.
제출은 대시보드에 있는데 이메일이나 웹훅이 오지 않았습니다스팸으로 저장되었습니다. 스팸은 아무것도 보내지 않습니다. Spam 필터에서 열어 이유를 확인하고, 스팸이 아님으로 표시하면 이메일과 웹훅이 발송됩니다.
429 rate_limited한 방문자가 폼의 레이트 리밋보다 많이 보냈습니다. Standard는 방문자당 분당 5회를 허용합니다. Retry-After만큼 기다리거나, 공유 IP 하나에서 POST하는 폼이라면 Relaxed나 Custom을 고르세요.
402 test_limit_reached워크스페이스에 플랜이 없고 이번 달 무료 localhost 테스트 50건을 다 썼습니다. 플랜을 고르거나 대시보드의 Send test를 사용하세요.

질문

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