LoginSignup
10
10

Google App Scriptを使ってGoogleフォームへの回答をSalesforceにリード登録する

Last updated at Posted at 2020-11-20

Googleフォームへ送信された回答をSalesforceにリードとして登録する方法について解説します。

概要

Salesforceには「Web-to-リード」というWebフォームにサブミットされた内容をリードとして登録する機能があります。ですが、Googleフォームだと送信先等のカスタマイズができないため、この機能はそのままでは使用できません。しかし、Webフォームへのサブミット、要するにSalesforceの所定のURLに対してPOSTメソッドでリクエストボディを application/x-www-form-urlencoded でHTTP通信ができればよいので、Google App Script (GAS)を「フォーム送信時」をトリガーにして動かし、フォームの内容を送信しようというのが本記事の趣旨です。

1. Web-to-リードフォームの作成

Salesforceの設定からWeb-to-リードフォームを作成します。このフォームはGoogleフォームには直接組み込みませんが、 oid や項目名などを調べるのに使用します。

  1. Salesforceの 設定 - Web-to-リード に移動します
  2. 編集Web-to-リードの有効化 にチェックを入れ、 reCAPTCHA 確認が必要 のチェックを外して 保存 をクリックします
  3. Web-to-リードフォームの作成 ボタンをクリックして、Web-to-リード設定ページを開きます
  4. 選択済みの項目 にGoogleフォームで使用する項目を入れ、 HTML に reCAPTCHA を含める のチェックを外して 作成 をクリックします。 戻り URL は使用しないのでデフォルトのままで構いません
  5. サンプルHTMLが表示されるので、メモ帳等で保存しておきます

_2020-10-12_11.27.14.png

2. Googleフォームの作成

実際にお客様から情報を入力してもらうためのGoogleフォームを作成します。Googleフォームの作成方法については、一般的な手順と変わらないので割愛します。

一つアドバイスとしては、例えば氏名の入力欄を「姓」と「名」で分けるなど、Salesforceのリード項目と一対一対応するようにしておくと、後の作業がスムーズに進みます。

3. GoogleフォームとGoogleスプレッドシートの連携

  1. 作成したGoogleフォームの回答タブにある スプレッドシートの作成 ボタン(Googleスプレッドシートのアイコン)をクリックします
  2. 回答先の選択ダイアログが表示されるので、 新しいスプレッドシートを作成 にチェックして 作成 をクリックします。これでフォームへの回答がGoogleスプレッドシートに転記されるようになります

_2020-10-12_15.05.36.png

4. Googleスプレッドシートにスクリプトを設定する

連携したGoogleスプレッドシートを開き、 ツール - スクリプト エディタ をクリック。GASのエディターを開きます。

以下のコードをペーストします。その後、Googleフォームの内容に合わせてカスタマイズしていくことになります。


const url = "https://webto.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8";
const oid = "xxxxxxxxxxxx";

function registerToLead(event) {
  UrlFetchApp.fetch(url, {
    method: "post",
    payload: {
      oid: oid,
      email: event.values[1],
      last_name: event.values[2],
      first_name: event.values[3], 
      company: event.values[4],
      title: event.values[5],
      description: event.values[6],
    }
  });
}

以下のポイントをWeb-to-リードのサンプルHTMLと見比べながら修正します。


const url = "https://webto.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8";
const oid = "xxxxxxxxxxxx";

url<form action="https://~~~" method="POST"> のaction属性の値を使用します。おそらく全てのSalesforce組織で共通ですが、念のため確認してください。

oid<input type=hidden name="oid" value="xxxxxxxxxxxx"> のvalue属性の値を使用します。

    payload: {
      oid,
      email: event.values[1],
      last_name: event.values[2],
      first_name: event.values[3], 
      company: event.values[4],
      title: event.values[5],
      description: event.values[6],
    }

payload にはSalesforceに送信する項目を設定します。 event.value はこの関数の引数ですが、「フォーム送信時」をトリガーに設定するとフォームの記述内容が配列で入ってきます。これと、Salesforceの項目名をマッピングしてあげます。

スクリプトができたら保存しておきます。

5. トリガーの設定

作成したスクリプトが自動実行されるようにトリガーを設定します。

  1. スクリプトエディターの 編集 - 現在のプロジェクトのトリガー をクリックします
  2. トリガーを追加 ボタンをクリックして、「(プロジェクト名)のトリガーを追加」ダイアログを表示します
  3. 上から registerToLead, Head, スプレッドシートから, フォーム送信時 に設定します。エラー通知の設定はお好みで。 保存 を押して完成です

以上で、フォームで回答が送信されると、それがスプレッドシートに記載され、GASが動いてSalesforceへ登録される、という一連の流れを実装することが出来ました。実際にGoogleフォームに回答してみて動作を確認してみてください。うまく動かない場合には、構文エラーなどでGASで失敗しているケースと、項目名が間違っているなどでSalesforce側でエラーになっているケースの2パターンが考えられます。GASの画面やSalesforceからのエラー通知メールなどを確認しましょう。

こんな使い方して大丈夫なの?

Web-to-リードの機能は便利ですが、組織ID( oid )を外部に晒す形になってしまうことから、この機能を利用したスパムが送られてくるというリスクがありました(現在はreCAPTCHAがあるので以前ほどのリスクではありません)。それに対して、Webフォームの内容を一旦別のサーバーで受けてセキュアにSalesforceと通信する方法が紹介されていましたので、Salesforce側も意図した使い方と思います。

=> Salesforceの営業さんにも確認しましたが、大丈夫みたいです。

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10