こんにちは、山本です。

お陰様でセールスノートのユーザーも増えてきまして、機能のお問合せやカスタムプランのお問合せも頂くようになりました。お問合せについては、基本的に弊社お問合せ用メールアドレスに、問合せ内容が送信されるようになっています。

お問合せが増えてきている事もありますが、せっかくお問合せいただいたのに、メールの受信BOXに残るだけで、その後のフォローアップを上手くできていない問題がありました。

そこで、弊社内で利用しつつ、カスタムプランの例として「お問合せフォームから、直接顧客テーブルにデータを追加する」apiモジュールを作ることにしました。取り敢えずの簡易版で賄おうということで、求められる要件は以下のとおりにしました。

  • セキュリティを重視するため、フォームから直接カスタムモジュールに送信するのではなく、一度pita-ri.jpで受け取ってから、salesnote.jpサーバに送信する。salesnote.jpサーバは、pita-ri.jpのIPアドレスからのみ受け付ける。
  • すでに登録されている(と思われる)お客様は登録しない。
  • リードソース(流入経路)を指定する。

という感じでいきます。

contact-api1

 


セールスノート上の準備

 

まずは、リードソースを新規に作成して、リードソースIDを取得します。

contact-api2

新規に登録されたIDは、「5」となっていることを確認。

contact-api3

※画像は次期バージョンのものです。


pita-ri.jp側の実装

 

ピタリ株式会社のWEBサイトは、Wordpress上で構築され、さらにお問合せモジュール「Contact-form-7」を利用しています(コスト削減!)。

お問合せフォームを受け取った後、お問合せフォームからの送信だった場合、Contact-form-7内の値チェックが終わったタイミングで、salesnote.jpサーバに中継し、結果を受け取った後、再びContact-form-7の処理に戻ります。

 

//wpcf7_before_send_mailは、contact_form_7が送られてきたデータを
//メールで送信する前に実行するアクションフック。
//contact_form_7上の簡易的なバリデーションは通過しています。

add_action('wpcf7_before_send_mail', 'sendCotactFormData');

function sendCotactFormData($contact_form){
    //contact_form_7から送られてきたデータを取得
    $submission = WPCF7_Submission::get_instance();
    $posted_data = $submission ? $submission->get_posted_data( $tagname ) : null;

    //リードソースを指定(ここは悩みどころですが、スタティックに指定してしまいました)
    $posted_data['readsourse_id'] = 5;
    
    //お問合せフォームかどうかを判別
    if($posted_data['sn-is-contact-form'] && $posted_data['sn-is-contact-form'] != '_'){
        //取り敢えずcurlで大丈夫でしょう。
        $url = 'https://xxx.salesnote.jp/xxx/api/contact-recieve';
        $curl = curl_init();
        $curl_op = array(
            CURLOPT_URL            => $url,
            CURLOPT_HEADER         => FALSE,
            CURLOPT_RETURNTRANSFER => TRUE,
            CURLOPT_POST           => TRUE,
            CURLOPT_CONNECTTIMEOUT => 5,
            CURLOPT_POSTFIELDS     => $post,
            CURLOPT_SSL_VERIFYPEER => TRUE
        );
        curl_setopt_array($curl,$curl_op);
        $body = curl_exec($curl);
        $header_info = curl_getinfo($curl);
        curl_close($curl);
        
        //失敗しても処理は止めない
        if(strpos($header_info['http_code'],'200') === false){
            @wp_mail( 'alert@xxx.xx', 'apiとの接続に失敗しているよ', '原因はログを見てください。');
        }
    }
}

apiサーバー側の処理は詳しくは書きませんが、送信元のIPアドレスのチェック、そして、直接お客様に触れるインターフェースはありませんので、少し厳格な値チェックをしています。性質上、制限無しにPOSTを受け入れていないので、トークンなどの処理は省いています。

 

重複チェックの難しさ

 

顧客管理ソフトにおいて、重複のチェックは難しい部類の1つです。半角・全角などの「文字のゆらぎ」や、スペースの有無などが問題になってきます。今回は、

1:「顧客の姓名」、会社名が一致しているデータがある場合は重複

2:「メールアドレス」が一致しているデータがある場合は重複

というルールを適用しました。

重複の場合は、単に200番ステータスと、JSONメッセージでokを返すようにしています(受け取り側ではメッセージを利用していませんが)。

 


結果

まずはWEBサイト上のお問合せを入力

contact-api4

送信してセールスノート上の顧客メニューを見ると、、、

contact-api5

無事追加されているようです。詳細画面を見ると、

contact-api6

大丈夫のようです。

※画面は次期バージョンのものです

 


さらなる拡張について

もう少し作りこむとすると、例えば

◯既存顧客と新規顧客の違いによって完了時の表示メッセージを変更する

◯セールスノート側でお問合せ履歴を残すようにする。

などの拡張が考えられますので、追って実装してみたいと思います。

 

カスタムプランにご興味がございましたら、下記よりお問合せください。