Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
it:marketing:facebook-meta [2023/10/23 20:25] – Petr Nosek | it:marketing:facebook-meta [2023/10/25 22:23] (aktuální) – Petr Nosek | ||
---|---|---|---|
Řádek 60: | Řádek 60: | ||
<code javascript> | <code javascript> | ||
< | < | ||
- | fbq(' | + | fbq(' |
</ | </ | ||
</ | </ | ||
- | {{: | + | {{: |
- | Tím si vytvořím vlastní | + | Tím si vytvořím vlastní |
- | {{: | + | {{: |
- | <adm warning> | + | <adm warning> |
- | Když se pak podívám do menu **Zdroje dat**, tak je vidět, že už tam mám i vlastí událost **Mikrokonverze**. | + | Když se pak podívám do menu **Zdroje dat**, tak je vidět, že už tam mám i vlastí událost **InterestLevel1**. |
- | {{: | + | {{: |
+ | ==== Vlastní události - nestandardizované s hodnotou ==== | ||
+ | Při posílání události s hodnotou jsem vycházel z [[https:// | ||
+ | ==== Conversion API - CAPI ==== | ||
+ | |||
+ | Při implementaci CAPI jsem se inspiroval a čerpal z článku [[https:// | ||
+ | |||
+ | V článku je také kód jak pro serverovou část, tak pro tagmanagera. Kód pro Tagmanagera zajišťuje také deduplikaci. | ||
+ | |||
+ | |||
+ | Na server (webové stránky) je potřeba nahrát PHP script. Daniel uvádí, že skript uvádí jako příklad cestu: **https:// | ||
+ | |||
+ | <code php> | ||
+ | <?php | ||
+ | header(" | ||
+ | header(' | ||
+ | header(" | ||
+ | |||
+ | // Check POST data | ||
+ | $post_json = file_get_contents(' | ||
+ | if (!$post_json) die(); // The post data required | ||
+ | |||
+ | // Setup | ||
+ | $fb_access_token = ' | ||
+ | $fb_pixel_id = ' | ||
+ | $fb_test_event_code = ''; | ||
+ | |||
+ | $timestamp = time(); | ||
+ | $post_array = array(); | ||
+ | $data = array(); | ||
+ | $error_send = FALSE; | ||
+ | |||
+ | $post_array = json_decode($post_json, | ||
+ | if (!$post_array[' | ||
+ | |||
+ | // IP address | ||
+ | if (!empty($_SERVER[' | ||
+ | $ip = $_SERVER[' | ||
+ | } elseif (!empty($_SERVER[' | ||
+ | $ip = $_SERVER[' | ||
+ | } else { | ||
+ | $ip = $_SERVER[' | ||
+ | } | ||
+ | |||
+ | $ch = curl_init(); | ||
+ | |||
+ | $data[' | ||
+ | $data[' | ||
+ | if ($post_array[' | ||
+ | $data[' | ||
+ | } | ||
+ | $data[' | ||
+ | $data[' | ||
+ | if ($post_array[' | ||
+ | $data[' | ||
+ | } | ||
+ | $data[' | ||
+ | $data[' | ||
+ | $data[' | ||
+ | $data[' | ||
+ | if ($post_array[' | ||
+ | $data[' | ||
+ | } | ||
+ | |||
+ | $fields = " | ||
+ | if ($fb_test_event_code) $fields .= ",' | ||
+ | $fields .= " | ||
+ | |||
+ | curl_setopt_array($ch, | ||
+ | CURLOPT_URL => ' | ||
+ | CURLOPT_RETURNTRANSFER => true, | ||
+ | CURLOPT_ENCODING => '', | ||
+ | CURLOPT_MAXREDIRS => 10, | ||
+ | CURLOPT_TIMEOUT => 0, | ||
+ | CURLOPT_FOLLOWLOCATION => true, | ||
+ | CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, | ||
+ | CURLOPT_CUSTOMREQUEST => ' | ||
+ | CURLOPT_POSTFIELDS => $fields, | ||
+ | CURLOPT_HTTPHEADER => array( | ||
+ | ' | ||
+ | ), | ||
+ | )); | ||
+ | |||
+ | $result = curl_exec($ch); | ||
+ | curl_close ($ch); | ||
+ | ?> | ||
+ | </ | ||
+ | |||
+ | <adm warning> | ||
+ | |||
+ | V rámci JavaScriptu napoví [[https:// | ||
+ | |||
+ | Takto by vypadal kód řešící deduplikaci v rámci mojí custom události. | ||
+ | <code javascript> | ||
+ | < | ||
+ | |||
+ | var randomNumber = Math.floor(Math.random() * 100000); | ||
+ | var customEventID = ' | ||
+ | | ||
+ | function CAPI(event, eventData) { | ||
+ | |||
+ | var fbp = document.cookie.split(';' | ||
+ | return c.includes(' | ||
+ | }).map(function (c) { | ||
+ | return c.split(' | ||
+ | }); | ||
+ | |||
+ | var fbc = document.cookie.split(';' | ||
+ | return c.includes(' | ||
+ | }).map(function (c) { | ||
+ | return c.split(' | ||
+ | }); | ||
+ | fbp = fbp.length && fbp[0] || null; | ||
+ | fbc = fbc.length && fbc[0] || null; | ||
+ | var headers = new Headers(); | ||
+ | headers.append(" | ||
+ | var body = { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }; | ||
+ | var options = { | ||
+ | method: " | ||
+ | headers: headers, | ||
+ | mode: " | ||
+ | body: JSON.stringify(body) | ||
+ | }; | ||
+ | fetch(" | ||
+ | } | ||
+ | |||
+ | var custom_data = { | ||
+ | content_name: | ||
+ | value: parseFloat(' | ||
+ | } | ||
+ | |||
+ | |||
+ | CAPI (' | ||
+ | | ||
+ | |||
+ | if (typeof fbq == ' | ||
+ | fbq(' | ||
+ | } | ||
+ | | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <adm warning> | ||
+ | |||
+ | |||
+ | === Otestování PHP skriptu a posílání událostí z tagmanagera === | ||
+ | |||
+ | Pro otestování toho, zda se posílají události správně do Meta jsem na serveru vytvořil stránku test.html. Do ní jsem nahrál skript z tagmanagera a spustil v prohlížeči. | ||
+ | |||
+ | PHP skript jsem ke konci upravil tak, aby se kominikace logovala: | ||
+ | |||
+ | <code php> | ||
+ | |||
+ | file_put_contents(" | ||
+ | |||
+ | $result = curl_exec($ch); | ||
+ | if ($result === FALSE) { | ||
+ | file_put_contents(" | ||
+ | } else { | ||
+ | file_put_contents(" | ||
+ | } | ||
+ | |||
+ | curl_close ($ch); | ||
+ | </ | ||
+ | |||
+ | Když jsem viděl, že všechno probíhá v pořádku, vrátil jsem kód do původního stavu bez logování. | ||
+ | |||
+ | Ve zdrojích dat na Meta bylo po čase vidět, že jsou události v pořádku přijímány už i ze serveru. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | === Poslání standardní události lead bez hodnoty === | ||
+ | |||
+ | Pokud jsem dříve vložil událost poslání leadu, nyní musím skript editovat. S posláním události musí jít zároveň volání CAPI. Tady je ukázka skriptu, který vložím do Tagmanagera. | ||
+ | |||
+ | <code javascript> | ||
+ | < | ||
+ | | ||
+ | var randomNumber = Math.floor(Math.random() * 100000); | ||
+ | var customEventID = ' | ||
+ | function CAPI(event, eventData) { | ||
+ | |||
+ | var fbp = document.cookie.split(';' | ||
+ | return c.includes(' | ||
+ | }).map(function (c) { | ||
+ | return c.split(' | ||
+ | }); | ||
+ | |||
+ | var fbc = document.cookie.split(';' | ||
+ | return c.includes(' | ||
+ | }).map(function (c) { | ||
+ | return c.split(' | ||
+ | }); | ||
+ | fbp = fbp.length && fbp[0] || null; | ||
+ | fbc = fbc.length && fbc[0] || null; | ||
+ | var headers = new Headers(); | ||
+ | headers.append(" | ||
+ | var body = { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }; | ||
+ | var options = { | ||
+ | method: " | ||
+ | headers: headers, | ||
+ | mode: " | ||
+ | body: JSON.stringify(body) | ||
+ | }; | ||
+ | fetch(" | ||
+ | } | ||
+ | | ||
+ | | ||
+ | var custom_data = {} | ||
+ | | ||
+ | |||
+ | CAPI (' | ||
+ | | ||
+ | if (typeof fbq == ' | ||
+ | fbq(' | ||
+ | } | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | === Posílání PageView přes CAPI === | ||
+ | |||
+ | Jednou z událostí, kterou mohu posílat přes CAPI je i **pageView**. Pozor ovšem na jedn uvěc. Událost **pageView** se často posílá automaticky pod instalací kódu Pixelu. Proto se musí pixel zkontrolovat a pokud je tam zadané posílání pageView, tak se musí odstranit. Jinak by nedošlo ke správnému odstranění duplicity záznamů. | ||
+ | |||
+ | Tady je pak příklad posílání pageView v Tagmanageru přes CAPI a přes pixel: | ||
+ | |||
+ | <code javascript> | ||
+ | < | ||
+ | | ||
+ | var randomNumber = Math.floor(Math.random() * 100000); | ||
+ | var customEventID = ' | ||
+ | |||
+ | function CAPI(event, eventData) { | ||
+ | |||
+ | var fbp = document.cookie.split(';' | ||
+ | return c.includes(' | ||
+ | }).map(function (c) { | ||
+ | return c.split(' | ||
+ | }); | ||
+ | |||
+ | var fbc = document.cookie.split(';' | ||
+ | return c.includes(' | ||
+ | }).map(function (c) { | ||
+ | return c.split(' | ||
+ | }); | ||
+ | fbp = fbp.length && fbp[0] || null; | ||
+ | fbc = fbc.length && fbc[0] || null; | ||
+ | var headers = new Headers(); | ||
+ | headers.append(" | ||
+ | var body = { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }; | ||
+ | var options = { | ||
+ | method: " | ||
+ | headers: headers, | ||
+ | mode: " | ||
+ | body: JSON.stringify(body) | ||
+ | }; | ||
+ | fetch(" | ||
+ | } | ||
+ | | ||
+ | | ||
+ | |||
+ | var custom_data = {} | ||
+ | | ||
+ | |||
+ | CAPI (' | ||
+ | | ||
+ | if (typeof fbq == ' | ||
+ | fbq(' | ||
+ | } | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | </ |