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(' | ||
| + | } | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | </ | ||