Получите название формы лид-рекламы Facebook с помощью веб-хука

У меня есть две разные рекламные кампании для лидов в Facebook (A и B), связанные с одной и той же страницей F.B, я подключил ее к веб-хуку, следуя этому guide с помощью Facebook ads PHP sdk и передать лиды в мою CRM, все работает нормально, проблема в том, что Я не могу сказать, пришел ли лид из формы А или Б.

Я попытался вытащить имя from следующим образом:

$input = json_decode(file_get_contents('php://input'), true);
if($input)
{
    $form_id = $input['entry'][0]['changes'][0]['value']['form_id'];
    $form = AdsWebhookHandler::getFormName($form_id);
}

От AdsWebhookHandlerкласса:

public static function getFormName($form_id)
    {
        $form = new LeadgenForm($form_id);

        if(!$form) return $form_id;

        return $form->read();
    }

Но почему-то форма всегда возвращает пустую ({}). Кто-нибудь знает, как я могу вытащить имя формы? или еще лучше - можно ли передать в форму пользовательские скрытые поля?

Всем спасибо за ответ :)


person benjah    schedule 30.11.2016    source источник


Ответы (2)


Итак, я выяснил, как получить имя формы, все, что мне нужно было сделать, это использовать функцию getData(), включенную в Facebook PHP SDK, мой код теперь выглядит так:

public function getFormName($form_id)
{
    $form = new LeadgenForm($form_id,null,$this->fb_instance);

    if(!$form) return $form_id;

    $data = $form->read()->getData();
    return isset($data['name']) ? $data['name'] : $form_id;
}

Надеюсь, это поможет кому-то в будущем :)

person benjah    schedule 04.12.2016

Обновление: 2020

Запрыгивая на этот вопрос, так как это лучший результат, и я столкнулся с аналогичной проблемой. Я получал данные формы через веб-хук, но фактическое имя формы не было включено.

РЕШЕНИЕ

Предполагая, что у вас уже есть разрешения, и вы уже получаете данные формы, но в настоящее время не получаете имя формы.

Просто отправьте запрос GET на

https://graph.facebook.com/v8.0/<form_id>?access_token=<access_token>

Убедитесь, что вы используете правильную версию API. Для меня это текущий v8.0

В настоящее время я использую Guzzle с Laravel, поэтому мое решение таково.

private function getLeadFormName(string $formId, string $accessToken)
{
    $client = new Client();
    $url = "https://graph.facebook.com/v8.0/{$formId}?access_token={$accessToken}";

    try {
        $response = $client->get($url);
    } catch (RequestException $e) {
        // handle however you wish
    }

    if (!empty($response)) {
        $body = json_decode($response->getBody()->getContents());
        return $body->name;
    }
}

Надеюсь, это поможет другим пользователям.

person dlawson90    schedule 09.10.2020