2017-10-25 14 views
0

내 Facebook 페이지의 Facebook leadgen webhook이 내 페이지에 제출 된 모든 양식에 대해 두 개의 리드를 작성하고 있습니다.Facebook leadgen webhook 중복 리드 만들기

Facebook leadgen tester을 사용할 때 앞자리는 한 번만 생성됩니다. 수동으로 작성하고 테스트 리드를 생성하는 방법을 사용하여이 방법을 시도해보십시오. 그러나 실제 사람이 Facebook에 리드를 제출하면 리드가 CRM에 두 번 생성됩니다. 이것은 페이스 북이 webhook을 다시 호출 할 필요가 없다는 것을 알리는 일종의 확인을 기대하고 있다고 믿게한다.

확인 메시지에 대한 제안 사항은 도움이 될 것입니다.

편집 : 추가 테스팅에서 Heroku dyno가 절전 상태가되어 리드가 생성되면 복제가 발생합니다. 이로 인해 웹 훅이 실행되지만 앱에서 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); 

?> 
+1

끝점은 200 OK 상태 코드를 반환하면되지만 _quickly_가 필요합니다. Facebook은 실패로 간주하기 전에 최대 2 초 내에 응답 할 수 있습니다. 귀하의 옵션은 항상 "siestas"를 사용하지 않는 기본 아키텍처로 전환하거나 최종적으로 해당 중복을 무시하기위한 것입니다 (그런 다음 그 목적을 위해 저장할 고유 식별자를 알아낼 수 있습니다. 다음 들어오는 리드와 이미 존재하는 리드를 비교하십시오.) – CBroe

답변

0

합리적인 조사가 이루어진 후. 이 문제는 분명히 코드와 관련이 없습니다. Heroku 다이노 스가 30 분마다 잠자기 상태로 들어가는 것과 관련이 있습니다.

일시적인 해결책 : 다이노 스를 인위적으로 유지하기 위해 Kaffeine App을 사용하십시오. 여기서 문제는 월간 dyno 시간이 제한된다는 것입니다 (550 시간). 임시 해결 방법은 추가 450 시간을 지불 세부 정보를 추가하는 것입니다.

영구 솔루션 : 다이노스가 항상 깨어있게 할 수있는 유료 버전의 Heroku로 이동하십시오.

앱이 프론트 엔드가 아니 어서 하루에 10 ~ 15 회 정도 호출되기 때문에 일시적인 해결 방법은 현재 나를 위해 작동합니다. 엔드 포인트가 중복을 식별/제거 할 수 없으므로 중복 리드 문제 해결이 필요합니다.