Facebook leadgen webhook 创建重复的潜在客户

Facebook leadgen webhook creating duplicate leads

我的 Facebook 页面的 Facebook leadgen webhook 正在为我页面上提交的每个表单创建两个潜在客户。

使用 Facebook leadgen tester 时,线索仅创建一次。已尝试使用手动填写表格以及生成测试线索来进行此操作。但是,当一个真实的人在 Facebook 上提交潜在客户时,会在 CRM 上创建两次潜在客户。这让我相信 Facebook 期待某种确认来通知它不需要再次调用 webhook。

关于确认消息的任何建议都将非常有帮助。

编辑:在进一步测试中,当 Heroku dyno 进入休眠状态并生成导联时会发生重复。这会导致 webhook 执行,但应用程序对 Facebook 的响应失败,这会导致潜在客户再次发送并第二次成功。

问题:如何在应用程序从休眠到唤醒时第一时间发送成功消息。

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);

?>

经过合理的调查。问题绝对不在于代码,而是与 Heroku dynos 每 30 分钟进入睡眠状态有关。

临时解决方案:使用Kaffeine App人为保持dynos清醒。这里的问题是每月的测功机小时数是有限的(550 小时)。一个临时的解决方法是添加您的付款详细信息以获得额外的 450 小时。

永久解决方案:改用付费版本的 Heroku,让测功机始终保持清醒状态。

临时解决方案目前对我有效,因为该应用程序没有前端并且每天可能被调用 10-15 次。由于终点不能 identify/eliminate 重复,因此需要解决重复的潜在客户问题。