使用webhook获取Facebook主要广告的表单名称

时间:2016-11-30 11:29:11

标签: php facebook facebook-graph-api facebook-php-sdk facebook-marketing-api

我有两个不同的Facebook主导广告系列(A和B)连接到同一个FB页面,我已经使用Facebook广告PHP sdk将其连接到此guide之后的webhook,并将潜在客户传递给我CRM,一切正常,问题是我不知道主导是来自A或B

我试图从这个名字中拉出来:

$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();
    }

但是由于某种原因,表单总是返回空({})。 有谁知道如何拉取表格名称?甚至更好 - 是否可以在表单中传递自定义隐藏字段?

谢谢大家的回答:)

2 个答案:

答案 0 :(得分:1)

O.K所以我弄清楚如何获取表单名称,我需要做的就是使用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; } 函数,我的代码现在看起来像这样:

Console.ReadLine

希望它能在将来帮助某人:)

答案 1 :(得分:0)

更新:2020年

跳过这个问题,因为它是最高的结果,我也遇到了类似的问题。我通过Webhook可以获取表单数据,但是没有包括实际的表单名称。

解决方案

假设您已经具有权限,并且已经在接收表单数据,但是当前未接收到表单名称。

只需将GET请求发送给

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

确保使用正确的API版本。对我来说,这是当前的v8.0

我目前在Laravel上使用Guzzle,所以我的解决方法是这个。

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;
    }
}

希望这对其他用户有所帮助。