次の方法で共有


Customer Insights - Journeys でフォームをキャプチャする

フォーム キャプチャは、Customer Insights - Journeys フォーム エディターを使用して作成されていない既存のフォームから送信を取得するために使用されます。 既存のフォームが Dynamics 365 以外のシステムにも送信される場合、または既存のフォームに複雑なロジックが含まれ、Customer Insights - Journeys フォーム エディターで簡単に再作成できない場合は、フォーム キャプチャをお勧めします。 既存のフォームを Customer Insights - Journeys フォーム エディターを使用して再作成できる場合は、フォーム キャプチャ機能を使用しないことをお勧めします。

フォーム キャプチャでは、標準フォームと同じ API を使用して送信を処理します。 フォーム キャプチャにも同じ セキュリティ通知 が適用されます。

重要

フォーム キャプチャには開発者の支援が必要です。 Customer Insights - Journeys フォーム エディターを使用してフォームを作成し、既存のページにフォームを埋め込む方が簡単な場合が多いです。

重要

フォームのキャプチャには、DynamicsMKT_Forms ソリューションのバージョン 1.1.35355 以降が必要です 。 試用版インスタンスをプロビジョニングする場合、常に最新バージョンが自動的に提供されるわけではありません。 フォームのキャプチャを試行する前に、Customer Insights - Journeys が更新されていることを確認してください。

フォーム キャプチャを有効にする

フォームキャプチャ機能は既定で無効になっています。 フォーム キャプチャ の切り替えは、設定>機能スイッチ>フォームで有効にできます。

機能スイッチでフォーム キャプチャを有効にします。

フォーム キャプチャの仕組み

フォーム キャプチャは標準的な Customer Insights - Journeys フォームの送信を模倣します。 既存のフォームの送信を Customer Insights - Journeys にリンクするには、Customer Insights - Journeys フォーム エディターを使用してフォームを作成する必要があります。 そのフォームを公開すると、フォーム キャプチャ スクリプトを取得できます。このスクリプトは、既存のフォームを含む Web ページに埋め込む必要があります。 スクリプトには、リードまたは取引先担当者エンティティの属性にマッピングする既存のフォーム フィールドの定義が含まれています。 Customer Insights - Journeys ではすべての送信と分析を確認できます。 送信されたマーケティング フォーム トリガーを使って、ジャーニー オーケストレーションでこのフォームを使用することもできます。 このフォーム送信では、連絡先の同意および関連する目的またはトピックを作成または更新することもできます。

ステップバイステップでフォームをキャプチャする

Customer Insights - Journeys フォーム エディターでフォーム キャプチャを作成する

  1. 新しいキャプチャ フォーム スクリプトを作成するには、Customer Insights - Journeys>チャネル>フォームに移動し、コマンド バーの新規を選択します。

  2. フォームに名前を付け、適切な対象者を選択します。 ターゲット対象者の選択は重要です。 フォーム キャプチャ スクリプト フィールド ->属性マッピングは、選択したターゲット対象者 (エンティティ) の属性に対してのみ利用可能です。

  3. 既存のフォーム フィールドにマップするすべてのフィールドを追加します。 この手順は必須ではありません、フィールド > 属性 マッピングはフォーム キャプチャ コードで定義されます。 適切なフィールドをフォームに追加すると、フォーム キャプチャ スクリプトに属性マッピングのプレースホルダーが生成され、マッピング定義が容易になります。

  4. 目的やトピックなどの同意要素を追加し、構成します。 Customer Insights - Journeys で電子メールとテキスト メッセージの同意を管理する方法について説明します。

    重要

    同意の定義はフォーム エディターで行う必要があります。 フォーム キャプチャ コードスニペットで行われた同意設定への変更は無視されます。

  5. 送信ボタンを追加します。 公開前にフォームを正常に検証するには、送信ボタンが必要です。

  6. 右上隅の画面上部で公開ボタンを使用してフォームを公開します。 フォーム キャプチャ コード スニペットをコピーし、既存のフォームを含む Web ページにコード スニペットを埋め込むか、コード スニペットを開発者に渡します。 コード スニペットには、開発者にガイダンスを提供するドキュメントへのリンクがすでに含まれています。

    同意要素をフォームに追加します。

    重要

    既存のフォームがホストされているドメイン名は、外部フォーム ホスティングに対して有効にする必要があります。それ以外の場合は、フォーム送信はキャプチャされません。 ドメイン認証の詳細について説明します。

キャプチャ スクリプトをページとマッピング定義に埋め込む

前述の手順でコピーしたコード スニペットはテンプレートとして機能するため、特定の使用例に合わせて調整する必要があります。 生成されたテンプレート内で ***Please fill*** とマークされているすべての要素を置き換え、シナリオに合わせてロジックを調整する必要があります。

既存のフォーム送信は、FormCapture.bundle.js ファイルで定義され、スニペットに含まれる JavaScript API を使用して Customer Insights - Journeys に送信されます。

フォーム キャプチャ設定は次の手順で行います:

  1. ページ上のフォーム要素への参照を取得します。
  2. Customer Insights - Journeys のフィールド (エンティティ属性) 上でフォーム フィールドのマッピングを定義します。
  3. Customer Insights - Journeys の同意モデルの同意フィールドのマッピングを定義します。
  4. フォーム送信を Customer Insights - Journeys に送信します。

1. フォーム要素への参照を取得する

フォーム要素への参照を取得するには、waitForElement ヘルパー関数を使用できます。 また、動的にレンダリングされる要素でも機能し、指定されたセレクターを持つ要素がページ上で見つかった時点で解決される Promise を返します。 CSS セレクターのリファレンスについては、このドキュメントを参照してください。

例:

<form id="form1">
...
</form>

<script>
d365mktformcapture.waitForElement("#form1").then(form => {
  ...
});
</script>

2. フォーム フィールドのマッピングを定義する

フォーム内のフィールドは、Customer Insights - Journeys のそれぞれのフィールド (エンティティ属性) にマップする必要があります。 マッピングは関数 d365mktformcapture.serializeForm(form, mappings) で定義されます。

例:

<form id="form1">
  <p>FirstName: <input type="text" name="firstName"/></p>
</form>

<script>
d365mktformcapture.waitForElement("#form1").then(form => {
  const mappings = [
    {
      FormFieldName: "firstName",
      DataverseFieldName: "firstname",
    },
  ];

  ...
  
  const serializedForm = d365mktformcapture.serializeForm(form, mappings);
  // console.log(JSON.stringify(serializedForm)); // NOTE: enable for debugging
  const payload = serializedForm.SerializedForm.build();
});
</script>

パラメータ form は、前のセクションで説明した waitForElement 関数によって取得されます。 パラメータ mappings は、次の構造の要素を含む配列です:

export interface IFormFieldMapping {
    FormFieldName?: string; // name of form field
    DataverseFieldName: string; // name of field on Dynamics 365 side
    DataverseFieldValue?: string | IFormValueMapping[]; // optional - either a fixed value or a value mapping
}

export interface IFormValueMapping {
    FormValue: string; // form field value
    DataverseValue: string; // mapped value for that form field value that will be sent to Dynamics 365
}

この関数は同期的であり、次の契約でシリアル化の結果を返します:

export interface IFormSerializationResult {
    FormFieldMappingResults: IFormFieldMappingResult[]; // Status for each of the defined mappings
    SerializedForm: IFormSerializationBuilder; // The serialized form
}

export interface IFormFieldMappingResult {
    Mapping: IFormFieldMapping; // The defined mapping
    FormFieldMappingStatus: FormFieldMappingStatus; // Status of the mapping (see below for status values)
    Message: string; // Optional - an error/warning message for the mapping
}

export enum FormFieldMappingStatus {
    Success = 0,
    NotFound = 1,
    Error = 2
}

FormFieldMappingResults によって返されたすべてのエラーを必ず処理してください。 serializedForm.SerializedForm.build() を呼び出すことで、Customer Insights - Journeys へのペイロードを作成できます。

2.1 OptionSet フィールドのマッピング

OptionSet フィールドの場合、Customer Insights - Journeys に格納するそれぞれの値へのマッピングを定義する必要があります。 既存のフォーム OptionSet フィールド値を DataverseFieldValue プロパティでマッピングできます。

例:

<form id="form1">
  <p>Radio: <input type="radio" name="radioInput" value="option1"/><input type="radio" name="radioInput" value="option2"/></p>
</form>

<script>
  ...
  const mappings = [
    {
        FormFieldName: "radioInput",
        DataverseFieldName: "dvradioInput",
        DataverseFieldValue: [ 
            { FormValue: "option1", DataverseValue: "1" }, 
            { FormValue: "option2", DataverseValue: "2" },
        ]
    },
  ];
  ...
</script>
2.2 検索フィールドのマッピング
検索フィールドの既定値を設定する

ルックアップ フィールドのマッピング ロジックでは、静的 (既定) 値を使用できます。 Customer Insights - Journeys に格納するフィールド名と値を定義する必要があります。

例:

<form id="form1">
  ...
</form>

<script>
  ...
  const mappings = [
    {
        DataverseFieldName: "currency",
        DataverseFieldValue: "{\"Id\":\"ffffd6c1-b32d-ee11-bdf3-6045bded6105\",\"LogicalName\":\"transactioncurrency\"}"
    },
  ];
  ...
</script>
ルックアップ フィールドの値をフォーム内のフィールドにマッピングする

ルックアップ フィールドの値を既存のフォーム フィールドのそれぞれの値にマップすることもできます。

例:

<form id="form1">
  <p>Radio: <input type="radio" name="currency" value="usd"/><input type="radio" name="currency" value="eur"/></p>
</form>

<script>
  ...
  const mappings = [
    {
        FormFieldName: "currency",
        DataverseFieldName: "transactioncurrencyid",
        DataverseFieldValue: [ 
              { FormValue: "usd", DataverseValue: "{\"Id\":\"cd2cff48-08a3-ea11-a813-000d3a0a82b4\",\"LogicalName\":\"transactioncurrency\"}", }, 
              { FormValue: "eur", DataverseValue: "{\"Id\":\"91f1a052-259c-4719-a3ae-3a1d2987a3ed\",\"LogicalName\":\"transactioncurrency\"}", }, 
        ]
    },
  ];
  ...
</script>
2.3 複数選択フィールド値のマッピング

multi-select フィールドの場合、Customer Insights - Journeys に格納するそれぞれの値へのマッピングを定義する必要があります。 既存のフォームの複数選択フィールドの値を DataverseFieldValue プロパティにマップできます。

例:

  <form id="form1">
    <p>Fieldset: <fieldset name="multiOptionInput">
      <input type="checkbox" name="multiOptionInput" value="100000000">0</input>
      <input type="checkbox" name="multiOptionInput" value="100000001">1</input>
      <input type="checkbox" name="multiOptionInput" value="100000002">2</input>
    </fieldset></p>
  </form>
 
<script>
...
const mappings = [
  {
    FormFieldName: "multiOptionInput",
    DataverseFieldName: "dvmultiOptionInput",
    DataverseFieldValue: [
      { FormValue: "100000000", DataverseValue: "0" },
      { FormValue: "100000001", DataverseValue: "1" },
      { FormValue: "100000002", DataverseValue: "2" },
    ]
  },
];
...
</script>

同意フィールドは、Customer Insights - Journeys のフォーム エディターで設定する必要があります。 DataverseFieldNameDataverseFieldValue のマッピングは必要に応じて自動生成されます。

例:

<form id="form1">
  <p>Consent: <input type="checkbox" name="consentField"/></p>
</form>

<script>
  ...
  const mappings = [
    {
        FormFieldName: "consentField",
        DataverseFieldName: "msdynmkt_purposeid;channels;optinwhenchecked",
        DataverseFieldValue: "10000000-0000-0000-0000-000000000004;Email;true",
    },
  ];
  ...
</script>

4. フォーム送信を Customer Insights - Journeys に送信する

フォームへの参照を取得し、マッピングを定義し、フォームをシリアル化したら、イベント リスナーを submit イベントに追加し、d365mktformcapture.submitForm(captureConfig, payload) 関数を使用して送信できます。 この呼び出しは Promise を返し、エラーは catch ロジックで処理できます。

重要

カスタム検証またはキャプチャ チェックを実施している場合は、検証が成功した場合にのみフォームを Customer Insights - Journeys に送信します (たとえば、submit イベントで isDefaultPrevented をチェックするか、または検証に合格後にのみ submitForm を明示的に呼び出します)

例:

<form id="form1">
  <p>FirstName: <input type="text" name="firstName"/></p>
</form>

<script>
d365mktformcapture.waitForElement("#form1").then(form => {
  const mappings = [
    {
      FormFieldName: "firstName",
      DataverseFieldName: "firstname",
    },
  ];

  form.addEventListener("submit", (e) => {
    const serializedForm = d365mktformcapture.serializeForm(form, mappings);
    // console.log(JSON.stringify(serializedForm)); // NOTE: enable for debugging
    const payload = serializedForm.SerializedForm.build();

    const captureConfig = {
      FormId: "...", // the form id on Dynamics 365 side
      FormApiUrl: "..." // the API url of the Dynamics 365 backend service where the form will be submitted to
    }
    d365mktformcapture.submitForm(captureConfig, payload)
    .catch(e => {
      // error handling
    });
  }, true);
});
</script>

トラブルシューティング

送信エンドポイントへの呼び出しが CORS エラーで失敗する

クロス オリジン リソース共有 (CORS) により、フォーム送信のキャプチャが失敗する場合があります。 外部フォーム ホストのドメインを有効にします。 ドメイン認証の詳細について説明します。

フォーム エディターでそれぞれの同意フィールドを設定し ( Customer Insights - Journeys フォーム エディターでフォーム キャプチャを作成するのセクションを参照)、公開プロセスで生成される正しいマッピングを使用していることを確認してください。