ドキュメント本文へスキップ
PHP

フォーム

`forms->list`、`listAll`、`iterate`、`get`、`create`、`design`、`redesign`、`update`、`delete`、`publish`、`pause`、`resume`、`duplicate`、`analytics`、`listStarters`、`getStarter`、`listSubmissions`、`getSubmission`、`deleteSubmission`、`deleteSubmissions`、`approveSubmission`、`resendConfirmation`、`subscribe`。

すべてのメソッド

forms.php
use OpenEmail\Constants\FormStarterSlugs;use OpenEmail\Constants\FormSubmissionStatuses; $form = $client->forms->create([    'name' => 'Newsletter sign-up',    'starter' => FormStarterSlugs::NEWSLETTER,    'settings' => ['audienceIds' => ['aud_4c1b8e2a7d9f05c36b4e8a71']],    'publish' => true,]); echo $form['url'], ' ', $form['subscribeUrl'], PHP_EOL; $saved = $client->forms->update($form['id'], [    'settings' => ['doubleOptIn' => true, 'senderAddress' => '[email protected]'],    'expectedUpdatedAt' => $form['updatedAt'],]); $signup = $client->forms->subscribe($form['id'], [    'email' => '[email protected]',    'first_name' => 'Ann',    'consent' => true,]); foreach ($client->forms->iterateSubmissions($form['id'], status: FormSubmissionStatuses::PENDING) as $submission) {    if ($submission['expired']) {        $client->forms->resendConfirmation($form['id'], $submission['id']);    }} $stats = $client->forms->analytics($form['id'], days: 30);$starters = $client->forms->listStarters(); $client->forms->pause($form['id']);$client->forms->resume($form['id']);$copy = $client->forms->duplicate($form['id']);$client->forms->delete($copy['id']); echo $saved['senderIssue'] ?? 'ready to send', ' ', $signup['outcome'], ' ', $stats['totals']['conversion'] ?? 'no views yet', ' ', count($starters), PHP_EOL;

フォームは、下書きの document と、訪問者に見える publishedDocument を保持します。update は下書きと設定を変更し、publish は下書きを公開します。設定は公開の有無にかかわらずすぐに有効になり、expectedUpdatedAt は、他の人の保存を上書きしてしまう保存を 409 version_conflict で拒否し、ConflictException としてスローされます。

フォームのフィールドは、API の camelCase の名前(expectedUpdatedAt、doubleOptIn)をキーとする 1 つの配列です。一方、フィルターとオプションは名前付き引数です(listSubmissions の status:、analytics の offsetMinutes:)。フォームは camelCase のキーを持つ配列として返るため、$form['subscribeUrl'] で登録を受け付けるアドレスを読めます。

design は、フォームのページの「AI で作成」と同じように、文章で書いた概要から新しい下書きのフォームを作ります。redesign は、フォームビルダーの「AI に依頼」と同じように、文章で書いた指示をフォームの下書きに適用します。どちらも AI アクションを 1 回消費し、下書きだけを書き込むため、publish するまで訪問者には何も新しいものは見えません。

読み取りには forms:read、変更には forms:write が必要です。approveSubmission は連絡先を追加するため、contacts:write も必要です。resendConfirmation には emails:send も必要で、フォームにメールを送信させる呼び出しにも同じく必要です。doubleOptIn をオンにすること、senderAddress や確認メールを設定すること、ダブルオプトインのフォームを公開または再開することがこれにあたります。delete は OAuth アクセストークンには確認コードを求めますが、API キーには求めません。トークンが確認コードを得るまで、delete は isStepUpRequired() が true の PermissionException をスローします。

subscribe は、フォームのページと同じように人を登録し、資格情報を持つクライアントからであっても資格情報を送らないため、apiKey: は無視されます。回答は第 2 引数で、フォームのフィールドキーをキーとする 1 つの配列です。1 つのネットワークからの登録はすべて 10 分ごとに 40 回という上限を共有するため、多くの人の登録を中継するサーバーはすぐに上限に達します。すでに知っている人は、代わりに audiences->importContacts で追加してください。上限を超えると、呼び出しは RateLimitException をスローします。フォームが置かれていたページを oe_source として渡し、oe_started は省き、oe_website は空で送るか省いてください。

subscribe からの 422 は invalid_form_submission で、ValidationException としてスローされます。例外の fields には、欠けているか有効でない回答がそれぞれ key と error を持つ配列として、required、email、option などの理由とともに並びます。OpenEmail\Constants\FormFieldErrors がすべての理由を定義しています。パッケージはサーバーで動きます。ブラウザーは、フォームの subscribeUrl に回答を自分で送信します。JSON のボディとして送るか Accept: application/json ヘッダーを付ければ、どのオリジンからでも JSON が返ります。どちらもない場合は、ホストされたページへの 303 リダイレクトが返ります。

レスポンス:フォーム

list は document と settings を除いたフォームの OpenEmail\Result\Page を新しい順で 1 つ返します。listAll はすべてのフォームを 1 つの配列で返し、iterate はすべてのページをフォーム 1 つずつたどる Generator を返します。get、create、update、publish、pause、resume、duplicate は、document、publishedDocument、settings、audiences、senderIssue、senderProblem を加えたフォーム全体を配列として返します。

idstring
永続的なハンドル。`frm_` に続く 24 文字の 16 進数です。
statusstring
最初の公開までは `draft`、その後は登録を受け付けている間は `live`、受け付けていない間は `paused` です。フォームが `draft` に戻ることはありません。`OpenEmail\Constants\FormStatuses` がこの 3 つを定義しています。
urlstring
公開済みのフォームのホストされたページで、リンクとして共有できます。
subscribeUrlstring
プレーンな HTML フォームやブラウザー内のスクリプトが回答を送信する先です。
documentarray
下書き。順に並んだ `fields`、その周りの `copy`、そして `style` です。
publishedDocumentarray or null
訪問者に今見えている内容です。最初の公開までは null です。
settingsarray
登録の追加先と、登録後に起きること。`audienceIds`、`doubleOptIn`、`senderAddress`、確認メール、`successAction`、`redirectUrl`、`notifyAddresses` です。
hasUnpublishedChangesbool
下書きが訪問者に見える内容と異なる場合に true です。最初の公開までは常に false です。
senderIssuestring or null
ダブルオプトインのフォームが今は確認メールを送れない理由で、`missing`、`not_sendable`、`not_allowed` のいずれかです。送れる場合は null です。`OpenEmail\Constants\FormSenderIssues` がこの 3 つを定義しています。
statsarray
`views`、`submissions`、`added`、`pending`、`lastSubmittedAt`。読み取った時点で数えられます。

回答

listSubmissions は、メールアドレスを検索する q: と、pending か added を指定する status: を使って新しい順にページを返し、listAllSubmissions と iterateSubmissions はすべてのページをたどります。OpenEmail\Constants\FormSubmissionStatuses が 2 つのステータスを定義しています。各回答は、送信されたとおりの内容をラベルも含めて保持する配列なので、フォームを変更したあとも正しく読めます。

resendConfirmation は confirmationSent 付きの回答を返します。何も送られなかった場合は false です:1 つのアドレスに送られる確認メールは、フォームごとに 10 分に 1 通、ワークスペース全体で 1 日 5 通までで、追加済みの回答には送られません。expired は、最新のリンクの有効期限が切れた確認待ちの登録を示します。