【问题标题】:Facebook leadgen webhook creating duplicate leadsFacebook leadgen webhook 创建重复的潜在客户
【发布时间】:2017-10-25 03:21:03
【问题描述】:

我的 Facebook 页面的 Facebook 潜在客户 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);

?>

【问题讨论】:

  • 您的端点只需要返回一个 200 OK 状态码 - 但它需要快速这样做。在 Facebook 认为这是失败之前,你最多有几秒钟的时间做出回应。您的选择是切换到不会一直“午睡”的底层架构,或者只是忽略这些重复项(然后您将找出为此目的存储的唯一标识符,以便您可以将下一个传入的潜在客户与已经存在的潜在客户进行比较。)

标签: php facebook-graph-api heroku facebook-webhooks


【解决方案1】:

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

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

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

到目前为止,临时解决方案对我有效,因为该应用程序没有前端并且每天可能会被调用 10-15 次。重复线索问题需要解决,因为端点无法识别/消除重复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 2019-01-30
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多