我的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);
?>
答案 0 :(得分:0)
经过合理的调查。问题肯定不在于代码,而是与Heroku dynos每隔30分钟进入睡眠状态。
临时解决方案:使用Kaffeine App人工保持dynos清醒。这里的问题是每月的dyno小时数是有限的(550小时)。临时解决方法是添加您的付款详细信息以获得额外的450小时。
永久解决方案:转移到付费版的Heroku,让dynos一直保持清醒。
临时解决方案适用于我,因为应用程序没有前端,可能每天被调用10-15次。重复导致问题需要解决,因为终点无法识别/消除重复。