Фейсбук в Facebook для моей страницы в Facebook создает две ссылки для каждой формы, представленной на моей странице.
При использовании Тестер свинца в Facebook лидерство создается только один раз. Испытайте это, используя как заполнение формы вручную, так и создание тестового вывода. Однако, когда фактический человек представляет лидерство в Facebook, лидерство создается дважды в CRM. Это заставляет меня поверить, что Facebook ожидает какого-то подтверждения, чтобы уведомить его о том, что веб-крюку больше не нужно звонить.
Любые предложения в ответном сообщении будут очень полезны.
Изменить: При дальнейшем тестировании дублирование происходит, когда динамо Heroku переходит в состояние сна и генерируется лидерство. Это приводит к тому, что веб-крючок запускается, но ответ приложения на 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 переходят в состояние сна каждые 30 минут.
Временное решение: использовать Кафеин приложение держать динамовцев без сна искусственно. Проблема здесь в том, что количество часов в месяц ограничено (550 часов). Временное решение — добавить данные платежа, чтобы получить дополнительные 450 часов.
Постоянное решение: перейдите на платную версию Heroku, которая позволяет динамостам постоянно бодрствовать.
Временное решение работает для меня на данный момент, так как приложение не имеет внешнего интерфейса и вызывается, возможно, 10-15 раз в день. Необходимо решить проблему с дублирующими отведениями, поскольку конечная точка не может идентифицировать / устранить дубликаты.
Других решений пока нет …