# Carrd

> Pro Plus에서는 Send to URL로 Carrd 커스텀 폼을 Ikiform에 연결하고, Pro Standard에서는 Embed 요소에 HTML 폼을 붙여 넣으세요.

Carrd의 문의 및 가입 폼은 제출을 Carrd 자체 목적지로 보냅니다. Pro Plus의 커스텀 폼은 어떤 URL로든 보낼 수 있으며 Ikiform에는 그것으로 충분합니다. Pro Standard에서는 직접 만든 HTML을 임베드할 수 있습니다.

| Carrd 플랜 | Ikiform 연결 방법 |
| --- | --- |
| Pro Plus 이상 | **Custom** > **Send to URL** 타입의 **Form** 요소. 코드가 필요 없습니다. |
| Pro Standard | 직접 만든 HTML 폼을 넣은 **Embed** 요소 |
| Pro Lite 및 무료 | 둘 다 불가. 이 플랜에는 임베드나 커스텀 폼이 없습니다. |

## Send to URL을 쓰는 커스텀 폼

### 1단계: 폼 만들기

**Add Element** > **Form**을 클릭하고 **Type**을 **Custom**으로, 그다음 **Send to URL**로 설정하세요.

### 2단계: URL, 메서드, 형식 설정하기

`URL`:

```text
https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx
```

| 설정 | 값 | 원인 |
| --- | --- | --- |
| **Method** | AJAX | 방문자를 페이지에 머물게 합니다. Carrd는 모든 `2xx`를 성공으로 보며, Ikiform은 제출을 저장하면 `201`로 응답합니다. |
| **Format** | 기본값 | 표준 폼 POST를 보냅니다. JSON도 작동합니다. |
| **Headers** | 없음 | Ikiform은 브라우저에 헤더를 요구하지 않습니다. |

AJAX 대신 **POST**를 쓰면 브라우저가 Carrd 사이트를 떠나 Ikiform의 감사 페이지나 **Redirect after submit** URL로 이동하며, Carrd의 On Success 설정은 적용되지 않습니다. **XML**은 고르지 마세요. Ikiform이 `415 unsupported_media_type`으로 거부합니다.

### 3단계: 필드 ID 설정하기

각 필드의 **Submitted ID**, 비어 있으면 **ID**가 Ikiform의 필드 이름이 됩니다. Carrd는 레이블로 ID를 만들므로 `email`, `name`, `message`처럼 직접 설정하세요. **Format**이 JSON이면 `fields.firstname` 같은 Submitted ID는 중첩 객체로 전송되며, Ikiform은 그대로 저장합니다.

- **File** 필드는 추가하지 마세요. Ikiform은 아직 파일을 받지 않으며 `422 files_not_supported`로 POST를 거부합니다.
- **Collect UTM parameters**는 `utm_source`, `utm_medium`, `utm_campaign`, `utm_term`, `utm_content`를 추가합니다. Ikiform에 [필드](https://ikiform.com/ko/docs/fields.md)를 정의했다면 이것들도 추가하세요. 그렇지 않으면 Unknown field 오류로 POST가 실패합니다.
- **Hidden** 필드는 항상 미리 설정한 값을 가지므로 허니팟으로 쓸 수 없습니다. 스팸 점수 산정은 모든 POST에서 계속 실행됩니다.

### 4단계: On Success와 On Failure 고르기

요청 후 Carrd가 보여 줄 내용을 고르세요. On Failure는 `422 validation_failed`나 `429 rate_limited` 같은 모든 Ikiform 오류에 해당합니다. Carrd는 Ikiform의 메시지를 표시하지 않으므로 실패 문구는 일반적으로 작성하세요.

> 폼의 스팸 검사는 끈 상태로 두세요. AJAX POST는 Ikiform의 확인 페이지를 보여 줄 수 없으므로, 확인이 켜진 폼은 `403 challenge_required`로 응답하고 Carrd는 매번 On Failure를 보여 줍니다.

## Pro Standard의 Embed 요소

**Add Element** > **Embed**를 클릭하고 **Type**을 **Code**로, **Style**을 **Inline**으로 설정한 뒤 폼을 붙여 넣으세요. 임베드는 빌더에서 렌더링되지 않으므로 게시해서 확인하세요.

`Embed`:

```html
<form action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post" target="_top">
  <input name="email" type="email" placeholder="Email" autocomplete="email" required>
  <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden>
  <button type="submit">Join the waitlist</button>
</form>
```

일반 폼으로 POST하므로 [사람 확인](https://ikiform.com/ko/docs/spam.md#human-check)을 켜면 작동합니다. `<style>` 블록으로 스타일을 입히거나, 더 완전한 [사이트 빌더 임베드](https://ikiform.com/ko/docs/guides/site-builders.md#embed)에서 시작하세요.

## 허용 도메인

어느 방법이든 브라우저가 Carrd 페이지에서 POST를 보내므로 허용 도메인은 평소처럼 작동합니다.

| 폼이 실행되는 곳 | Allowed domains에 추가할 값 |
| --- | --- |
| 무료 또는 기본 URL | `your-site.carrd.co` |
| Pro 브랜딩 없는 URL | `your-site.crd.co` |
| 커스텀 도메인 | `example.com`, `www.example.com`도 포함 |

- `carrd.co`나 `crd.co`만 단독으로 추가하지 마세요. 다른 사람의 사이트를 포함해 그 호스트의 모든 사이트가 일치하게 됩니다.

## 테스트 체크리스트

1. 사이트를 게시하세요. 폼과 임베드는 게시된 사이트에서만 작동합니다.
2. 폼을 제출하고 Carrd가 On Success 메시지를 보여 주는지, 또는 임베드가 감사 페이지로 이동하는지 확인하세요.
3. Ikiform에서 제출을 열고 필드 이름이 자동 생성된 것이 아니라 설정한 ID인지 확인하세요.
4. 폼에 필드가 정의된 상태에서 잘못된 이메일로 제출하고 Carrd가 On Failure를 보여 주는지 확인하세요.

## 문제 해결

| 증상 | 원인 | 해결 |
| --- | --- | --- |
| 제출할 때마다 Carrd가 On Failure를 보여 줌 | Ikiform이 POST를 거부함: XML이면 `415`, Unknown field나 파일이면 `422`, 확인이 켜져 있으면 `403 challenge_required`, **Reject**이면 `403 origin_not_allowed` | Default 형식을 쓰고, 필드 ID를 맞추고, File 필드를 제거하고, 확인을 끄고, 도메인을 추가하세요. |
| Ikiform의 필드 이름이 설정한 ID가 아니라 레이블처럼 보임 | **Submitted ID**와 **ID**를 비워 둠 | ID를 설정하고 다시 게시하세요. |
| 제출이 `origin_mismatch`와 함께 스팸 필터에 들어감 | POST한 페이지가 폼의 허용 도메인에 없음 | 위 표의 호스트를 추가하세요. **Reject**를 골랐다면 같은 POST가 대신 `403 origin_not_allowed`를 받습니다. |
| 빌더에서 임베드가 비어 있음 | Carrd는 빌더에서 임베드 코드를 실행하지 않음 | 게시하고 실제 사이트를 확인하세요. |

## 관련 문서

- [사이트 빌더](https://ikiform.com/ko/docs/guides/site-builders.md): 어떤 빌더에서든 작동하는 임베드.
- [HTML 폼](https://ikiform.com/ko/docs/html.md): 리디렉션, 예약 필드, 허니팟.
- [오류](https://ikiform.com/ko/docs/errors.md): 모든 오류 코드와 원인, 해결 방법.
- [허용 도메인](https://ikiform.com/ko/docs/spam.md#allowed-domains): 출처를 비교하는 방식과 불일치 시 동작.
