1

私の Facebook ページの Facebook Leadgen Webhook は、私のページで送信されたフォームごとに 2 つのリードを作成しています。

Facebook Leadgen Testerを使用すると、リードは 1 回だけ作成されます。フォームに手動で入力することと、テスト リードを生成することの両方を使用して、これを試しました。ただし、実際の人が Facebook でリードを送信すると、CRM でリードが 2 回作成されます。これにより、Facebook は Webhook を再度呼び出す必要がないことを通知する何らかの確認を期待していると思われます。

確認メッセージの返信に関する提案は本当に役に立ちます。

編集: さらにテストすると、Heroku dyno がスリープ状態になり、リードが生成されたときに重複が発生します。これにより Webhook が実行されますが、アプリから Facebook への応答は失敗です。これにより、リードが再度送信され、2 回目の成功になります。

質問: アプリがスリープから起動に設定されたときに、最初のインスタンスで成功メッセージを送信する方法。

Webhook で使用するコードは次のとおりです。

<?php
require_once('./autoload.php');
$input = json_decode(file_get_contents('php://input'),true);
$leadgen_id = $input["entry"][0]["changes"][0]["value"]["leadgen_id"];
$user_access_token = MYTOKEN;

function getLead($leadgen_id,$user_access_token) {
    //fetch lead info from FB API
    $graph_url = 'https://graph.facebook.com/v2.9/' . $leadgen_id. "?access_token=" . $user_access_token;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $graph_url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $output = curl_exec($ch); 
    curl_close($ch);

    //work with the lead data and pass to an array
    $leaddata = json_decode($output);
    $lead = array();
    for( $i=0; $i<count( $leaddata->field_data ); $i++ ) {
        $lead[$leaddata->field_data[$i]->name]=$leaddata->field_data[$i]->values[0];
        //error_log(print_r($lead, true));
    }
    return $lead;
}

$lead = getLead($leadgen_id,$user_access_token);


//Pass array to CRM specific array
 $queryData = http_build_query(array(
 'fields' => array(
 "TITLE" => $lead['full_name'],
 "STATUS_ID" => "NEW",
 "OPENED" => "Y",
 "ASSIGNED_BY_ID" => 1,
 "PHONE" => array(array("VALUE" => $lead['phone_number'], "VALUE_TYPE" => "WORK" )),
 "EMAIL" => array(array("VALUE" => $lead['email'], "VALUE_TYPE" => "WORK" )),
 "Custom_field_1" => $input["entry"][0]["changes"][0]["value"]["created_time"],
 "Custom_field_2" => $input["entry"][0]["changes"][0]["value"]["page_id"],
 "Custom_field_3" => $input["entry"][0]["changes"][0]["value"]["form_id"],
 "Custom_field_4" => $input["entry"][0]["changes"][0]["value"]["leadgen_id"],
 "Custom_field_5" => "Facebook"
 ),
 'params' => array("REGISTER_SONET_EVENT" => "Y")
 ));


 //Call the CRM JSON
 $queryUrl = 'MYCRM/crm.lead.add.json';


 $curl = curl_init();
 curl_setopt_array($curl, array(
 CURLOPT_SSL_VERIFYPEER => 0,
 CURLOPT_POST => 1,
 CURLOPT_HEADER => 0,
 CURLOPT_RETURNTRANSFER => 1,
 CURLOPT_URL => $queryUrl,
 CURLOPT_POSTFIELDS => $queryData,
 ));

 $result = curl_exec($curl);
 curl_close($curl);
 $result = json_decode($result, 1);

?>
4

1 に答える 1