Salesforce の Web-to-リードを使用すると、問い合わせフォームから見込み顧客の情報を直接Salesforceに取り込むことができます。
しかし、Salesforceで生成されたHTMLをそのまま使用すると、入力内容のバリデーションを行うことができません。
そこで、WordpressのContact form 7を使用して、レコードをWeb-to-リードに送信できるようにしてみました。
Contact form 7でフォームを作成する
Salesforceで自動作成されたHTMLをもとに、フォームを作成していきます。
1点注意する必要があるのは、name属性が0からはじまる場合、Contact form 7では、自動的に先頭の0を削除してしまいます。
このため、name属性にさらに sf-
を追加して、先頭の0が削除されないようにしておきます。この sf-
は、後の処理で削除します。
また、oid
はhiddenタグで追加しておきましょう。
functions.phpにコードを追加する
Contact form 7のアクションフックを使用して、SalesforceにWeb-to-リードを送信します。
参考 : Contact Form 7 & Salesforce
functions.php
function sf_web_to_lead($cf7)
{
// 送信されるデータを取得します。
$submission = WPCF7_Submission::get_instance();
// POSTするクエリを用意します。
$query_data = array();
foreach ($posted_data as $name => $value) {
// Contact form 7用のパラメータはスキップします。
if (0 === strpos($name, '_wpcf7')) {
continue;
}
// sf-からはじまるパラメータは、先頭のPrefixを削除します。
if (0 === strpos($name, 'sf-')) {
$name = substr($name, 3);
}
// 複数選択可能なフィールド(select[multiple]やcheckboxなど)の場合は、
// hoge=value1&hoge=value2のように送信します。(Salesforceの仕様)
if (is_array($value)) {
foreach ($value as $option_value) {
$query_data[] = sprintf('%s=%s', $name, $option_value);
}
} else {
$query_data[] = sprintf('%s=%s', $name, $value);
}
}
$query = implode('&', $query_data);
// Init cURL session
$ch = curl_init();
if ('' !== curl_error($ch)) {
// Error handling
} else {
$sf_url = 'https://webto.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8';
curl_setopt($ch, CURLOPT_URL, $sf_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
curl_exec($ch);
curl_close($ch);
}
return $cf7;
}
add_action('wpcf7_before_send_mail', 'sf_web_to_lead');