> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kameleoon.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Piwik Pro Audiences

> Utilisez les segments d'audience Piwik Pro comme conditions de ciblage dans les experiences et personnalisations Kameleoon via un bridge de custom data.

Les segments disponibles dans votre DMP sont mis a disposition par Piwik Pro Audiences via une REST-API.

Dans votre compte Kameleoon, cliquez sur **Admin** > **Projects**.

## Global custom script

Pour inserer le global custom script :

* Cliquez sur **Configuration** > **General**.

L'insert **Global custom script** reliera Kameleoon a Matomo. Tout code JavaScript que vous ajoutez dans cet insert sera execute chaque fois que la page se charge. Cette fonctionnalite est generalement utilisee pour ajouter du code de suivi complexe ou une integration a d'autres solutions.

<Frame>
  ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/integrations/as-a-source/analytics/piwik-pro-audiences/Capture-decran-2022-03-21-a-16.34.44.png)
</Frame>

Copiez et collez le code ci-dessous dans la section **Global script** :

```javascript theme={null}
const getPiwikProSegments = (visitorID) => {
        const clientID = 'Replace this with your client_id from generated credentials';
        const websiteID = 'Replace this with your project_id';
        const xhr = new XMLHttpRequest();
        xhr.onload = function run() {
            if (this.status === 200) {
                Kameleoon.API.Data.setCustomData(
                    'Piwik Pro segments',
                    JSON.parse(xhr.response)
                );
            }
        };
        xhr.open('GET', https://customers.kameleoon.com/kameleoon/piwik/user/${visitorID}?id=${clientID}&website_id=${websiteID}, true);
        xhr.send();
    };

    Kameleoon.API.Core.runWhenConditionTrue(() => typeof _paq !== 'undefined', () => {
        _paq.push([function init() {
            getPiwikProSegments(this.getVisitorId());
        }]);
    });
```

Cliquez sur **Validate** pour appliquer les changements a votre configuration.

## Custom data

Vous devez ensuite creer [une nouvelle custom data](../../../assets/custom-data/create-custom-data).

Vous aurez besoin de :

* votre `client_id` et `client_secret` pour generer le Bearer Token ([obtenir les credentials](https://developers.piwik.pro/en/latest/platform/getting_started.html)).
* votre `website_id`.

Utilisez la methode d'acquisition **Activation API Method**. Ce code doit etre place dans la section **Save the values for the targeting condition associated with the custom data point** de la custom data (n'oubliez pas d'ajouter vos `client_id` et `website_id`).

```javascript theme={null}
  let segmentPW = [];
     const clientID = 'Replace this with your client_id from generated credentials';
     const websiteID = 'Replace this with you website_id';
 

     const xhr = new XMLHttpRequest();
     xhr.onreadystatechange = function check() {
         if (this.readyState === 4) segmentPW = JSON.parse(xhr.response);
     };
     xhr.open('GET', [https://customers.kameleoon.com/kameleoon/piwik/segments/?id=${clientID}&website_id=${websiteID}](https://customers.kameleoon.com/kameleoon/piwik/segments/?id=$%7BclientID%7D&website_id=$%7BwebsiteID%7D), false);
     xhr.send();
     return segmentPW; 
```

<Frame>
  ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/integrations/as-a-source/analytics/piwik-pro-audiences/image-47.png)
</Frame>

Vous remarquerez que dans ce code, nous appelons un Webservice Kameleoon (`https://customers.kameleoon.com/kameleoon/piwik/`), qui utilise l'API Piwik Pro pour obtenir tous les segments. Cet appel est necessaire pour contourner les problemes liees a la politique CORS.

La custom data doit etre definie sur les types **list of** et **strings** ; le scope est **Page**.

## External Segment Sync for Server-side

Si vous souhaitez **utiliser les donnees de segments Matomo avec l'un de nos SDK**, vous devrez suivre les directives fournies dans la documentation de chaque SDK et utiliser la methode [`getRemoteData()`](../../../../developer-docs/sdks/mobile-sdks/ios-sdk#getremotedata).
