API Call Tracking
Remplacez les numéros de téléphone de votre site par des numéros de tracking pour générer des revenus supplémentaires et mesurer l'attribution. Enregistrez l'attribution complète sur la source, la campagne et les mots-clés afin de mesurer votre ROI sur chaque appel.
Introduction #
L'API Optico Call Tracking vous permet de remplacer les numéros de téléphone de votre site par des numéros de tracking pour générer des revenus supplémentaires et mesurer l'attribution. Vous appelez l'API avec les informations de visite et les numéros de téléphone, et l'API répond avec les numéros de tracking à afficher. Tout au long de cette documentation, l'API est désignée par OSP.
Fonctionnement
Votre système transmet les informations de visite à OSP à chaque chargement de page : URL de la page, URL de référence, adresse IP. OSP les utilise pour regrouper les appels en vues de page et en visites, et pour suivre les sources de trafic, les mots-clés et le trafic mobile. Une visite représente une session utilisateur et peut contenir une ou plusieurs vues de page. Chaque vue de page peut générer un ou plusieurs appels.
OSP suit la conversion des vues en appels et expose les statistiques dans l'interface client. Pour les visiteurs venant d'un moteur de recherche ou d'une campagne Google Ads, le mot-clé d'origine est enregistré sur l'appel, ce qui vous permet de voir lesquels mènent aux conversations les plus rentables.
https://www.optico.fr
Transport & conventions
| Méthode | Tous les endpoints utilisent POST |
| Content-Type | application/x-www-form-urlencoded |
| Format de réponse | application/json |
| Noms des paramètres | snake_case dans les requêtes, camelCase dans les réponses |
| Timeout | 5 secondes recommandées |
Démarrage #
- Créez un compte sur www.optico.fr : vous recevrez un nom d'utilisateur, un mot de passe, une clé API, et l'accès à la plateforme back-end pour la gestion.
- Intégrez l'API pour obtenir les numéros de tracking associés à vos téléphones. Appelez
/ospViewsur chaque page et utilisez les numéros de tracking renvoyés.
- Les paramètres communs (
api_key,visit_id,ip,url, etc.) sont obligatoires sur chaque requête. - Appelez
/ospViewsur chaque page (y compris celles sans numéro de téléphone) pour capturer le parcours visiteur complet et les sources de mots-clés. - Envoyez toujours
user_agentafin qu'OSP puisse filtrer le trafic des bots. Ne faites pas la requête lorsque le visiteur est manifestement un robot.
Authentification #
Chaque requête doit inclure votre api_key en tant que champ POST.
api_key=osp_3a8f1c5d7b2e4906a8c1f5d3b9e7042c
La clé API est délivrée lors de votre inscription sur www.optico.fr. Chaque domaine enregistré possède sa propre clé unique.
AUTHENTICATION_ERROR. Voir Erreurs.Erreurs #
Toutes les réponses d'erreur partagent la même structure, quel que soit l'endpoint :
{ "status": "AUTHENTICATION_ERROR", "errorMessage": "Invalid API key" }
| Statut | Signification |
|---|---|
MISSING_PARAMETER | Un paramètre obligatoire n'a pas été inclus dans la requête. |
INVALID_PARAMETER | Un paramètre a été envoyé avec une valeur invalide ou un type incorrect. |
AUTHENTICATION_ERROR | L'api_key est incorrecte, ou aucun domaine ne correspond à la clé. |
SYSTEM_ERROR | Une erreur serveur interne est survenue côté Optico. |
WARNING | La requête est valide mais aucun numéro de tracking n'a pu être attribué (par ex. pool épuisé). Renvoie HTTP 200 : vérifiez toujours le champ status. |
Endpoints #
| Endpoint | Méthode | Objet |
|---|---|---|
/ospView | POST | Tracker une vue de page. Renvoie le ou les numéros de téléphone de tracking pour l'affichage Direct, ou un viewId pour l'affichage Click. |
/ospClick | POST | Obtenir un numéro de tracking à la demande lorsqu'un visiteur clique sur un lien téléphone (affichage Click). |
/ospExpiration | POST | Mettre à jour l'expiration d'un numéro de tracking déjà attribué. |
Concepts #
| Concept | Description |
|---|---|
| Visite | Une session utilisateur unique. Un visiteur = une visite. |
| Vue | Un chargement de page unique au sein d'une visite. Une visite → plusieurs vues. |
| Numéro de tracking | Un numéro de téléphone temporaire attribué à un visiteur. Les appels sont redirigés vers le numéro réel. |
Le cookie visitId
Stockez le visitId renvoyé par ospView dans un cookie et envoyez-le sur chaque requête suivante de la même session.
| Nom du cookie | optico_visit_id |
| Valeur | Entier visitId issu de la réponse ospView |
| Expiration | 30 minutes |
visit_id=0. Sur les vues suivantes, lisez le cookie et envoyez sa valeur dans visit_id.Modes d'affichage #
Il existe deux stratégies pour afficher les numéros de tracking aux visiteurs. Les deux peuvent coexister sur le même site, mais il faut conserver le même mode pour une page donnée. Le mode est contrôlé par le paramètre direct_display de /ospView.
direct_display=true) : les numéros de tracking remplacent tous les numéros de téléphone de la page au chargement ; aucun clic nécessaire.direct_display=false) : un numéro de tracking est attribué à la demande lorsqu'un visiteur clique pour le révéler, économisant ainsi l'inventaire de numéros.POST /ospView #
Affichage Direct
Tous les numéros de téléphone de la page sont remplacés par des numéros de tracking au chargement de la page. Définissez direct_display=true et passez les numéros d'origine via le paramètre phones. OSP répond avec une correspondance des numéros d'origine vers les numéros de tracking dans surtaxPhones. Cela suppose que vous disposiez d'un nombre suffisant de numéros de tracking pour en attribuer un unique par visiteur et par numéro de téléphone.
Flux
Affichage Click
Avec l'affichage Click (direct_display=false), aucun numéro de téléphone n'est affiché par défaut sur la page : un texte tel que « Cliquer pour afficher le numéro » apparaît à la place de chaque numéro. Lorsqu'un visiteur clique sur ce lien, un appel AJAX est effectué vers votre serveur, qui demande un numéro de tracking à /ospClick et le renvoie au navigateur pour affichage.
Vous pouvez utiliser l'affichage Click avec ou sans tracking des informations de visite. Si vous souhaitez uniquement un numéro de tracking pour un téléphone, sans statistiques de visite, appelez directement /ospClick (en omettant view_id). Si vous souhaitez le tracking complet de la visite, appelez d'abord /ospView pour enregistrer la vue de page et obtenir un viewId, puis transmettez ce viewId à /ospClick.
view_id à /ospClick pour rattacher le clic à la vue de page et obtenir l'attribution complète. Sans cela, seul le clic est enregistré.Flux
Paramètres obligatoires
| Paramètre | Type | Description |
|---|---|---|
api_key | string | Votre clé API. |
visit_id | integer | 0 à la première vue de page. Le visitId de la réponse précédente sur les vues suivantes. |
ip | string | Adresse IPv4 du visiteur. Exemple : 84.72.113.98 |
url | string | URL complète de la page courante. |
page_title | string | Titre de la page courante. |
is_mobile | boolean | true si mobile, false sinon. |
referer_url | string | URL de référence. Envoyez une chaîne vide si aucune. |
nr_phones | integer | Nombre total de numéros de téléphone valides sur la page. Envoyez 0 si aucun. |
direct_display | boolean | true pour l'affichage Direct, false pour l'affichage Click. |
Affichage Direct : paramètres supplémentaires
| Paramètre | Type | Description |
|---|---|---|
phones obligatoire |
string | Numéros d'origine à remplacer, séparés par des virgules. Simple : 0490260716,0450982756Pools privés multiples : ajoutez :typeId par numéro : 0490260716:5,0450982756:6 |
client_data optionnel |
array | Données arbitraires indexées par numéro de téléphone. Maximum 500 caractères par entrée. |
Paramètres optionnels
| Paramètre | Type | Par défaut | Description |
|---|---|---|---|
type | integer | - | ID du type de numéro de tracking. Uniquement lorsque le domaine utilise plusieurs pools. Voir le tableau des préfixes par type. |
expiration | integer | -1 | -1 = valeur par défaut du domaine. 0 = expirer immédiatement. Positif = secondes. |
user_agent | string | - | User-Agent HTTP du visiteur. Utilisé pour le filtrage des bots. Fortement recommandé. |
unique_visitor_id | string | - | Identifiant unique du visiteur pour la déduplication inter-sessions. |
unique_view_id | string | - | Identifiant unique de vue pour la déduplication. |
Réponse en cas de succès
| Champ | Type | Description |
|---|---|---|
status | string | OK |
visitId | integer | À stocker dans le cookie optico_visit_id (30 min). À envoyer dans visit_id à la vue suivante. |
viewId | integer | À transmettre dans view_id aux appels ospClick de cette page. |
surtaxPhones | object | Affichage Direct uniquement. Correspondance originalPhone → { surtaxPhoneNumber, surtaxPhoneCode }. |
clientData | mixed | Renvoi du client_data envoyé dans la requête. |
Exemples
Affichage Direct
curl -X POST https://www.optico.fr/ospView -d "api_key=osp_3a8f1c5d7b2e4906a8c1f5d3b9e7042c" -d "visit_id=0" -d "ip=84.72.113.98" -d "url=http://www.mysite.com/contact" -d "page_title=Contact Us" -d "is_mobile=false" -d "referer_url=http://www.google.com/" -d "nr_phones=2" -d "direct_display=true" -d "phones=0490260716,0450982756" -d "user_agent=Mozilla/5.0 ..." # → { "status": "OK", "visitId": 42, "surtaxPhones": { "0490260716": { "surtaxPhoneNumber": "01.02.03.04.05" } } }
surtaxPhoneCode n'est pas null, affichez-le à côté du numéro de tracking : l'appelant devra saisir ce code une fois l'appel connecté.Affichage Click
# Étape 1 : chargement de page curl -X POST https://www.optico.fr/ospView \ -d "api_key=osp_..." \ -d "direct_display=false" \ -d "visit_id=0" \ -d "ip=84.72.113.98" \ -d "url=http://www.mysite.com/contact" \ -d "page_title=Contact Us" \ -d "is_mobile=false" \ -d "referer_url=http://www.google.com/" \ -d "nr_phones=1" \ -d "user_agent=Mozilla/5.0 ..." # → { "status": "OK", "visitId": 42, "viewId": 101 } # Étape 2 : au clic curl -X POST https://www.optico.fr/ospClick \ -d "api_key=osp_..." \ -d "view_id=101" \ -d "phone=0490260716" # → { "status": "OK", "surtaxPhone": { "surtaxPhoneNumber": "01.02.03.04.05" } }
POST /ospClick #
Appelé côté serveur lorsqu'un visiteur clique pour révéler un numéro de tracking. Renvoie un numéro de tracking attribué à la demande pour le téléphone fourni. Pour le pattern d'intégration complet en deux étapes, voir Affichage Click.
Paramètres obligatoires
| Paramètre | Type | Description |
|---|---|---|
api_key | string | Votre clé API. |
phone | string | Le numéro de téléphone d'origine pour lequel obtenir un numéro de tracking. |
Paramètres optionnels
| Paramètre | Type | Par défaut | Description |
|---|---|---|---|
view_id | integer | - | Le viewId issu d'ospView. Rattache le clic à la vue de page pour l'analyse. |
type | integer | - | ID du type de numéro de tracking. Voir le tableau des préfixes par type. |
expiration | integer | -1 | -1 = valeur par défaut du domaine. 0 = expirer immédiatement. Positif = secondes. |
user_agent | string | - | Pour la détection des bots. |
client_data | array | - | Données à associer au téléphone. Maximum 500 caractères par entrée. |
Réponse en cas de succès
| Champ | Type | Description |
|---|---|---|
status | string | OK |
visitId | integer | ID de visite Optico. |
viewId | integer | ID de vue de page Optico. |
surtaxPhone | object | { surtaxPhoneNumber, surtaxPhoneCode } : le numéro de tracking attribué. |
clientData | mixed | Renvoi de client_data. |
POST /ospExpiration #
Utilisez ospExpiration pour prolonger ou libérer immédiatement un numéro de tracking actuellement attribué.
expiration=0 pour remettre immédiatement le numéro dans le pool.Paramètres obligatoires
| Paramètre | Type | Description |
|---|---|---|
api_key | string | Votre clé API. |
surtax_phone | string | Le numéro de téléphone de tracking dont l'expiration doit être mise à jour. Exemple : 08.90.12.34.56 |
Paramètres optionnels
| Paramètre | Type | Par défaut | Description |
|---|---|---|---|
expiration | integer | -1 | -1 = valeur par défaut du domaine. 0 = expirer maintenant. Positif = secondes. |
user_agent | string | - | Pour la détection des bots. |
Réponse en cas de succès
| Champ | Type | Description |
|---|---|---|
status | string | OK |
surtaxPhone | string | Même numéro de tracking que celui envoyé dans la requête. |
expiresAt | string | Nouvelle date/heure d'expiration. Format : YYYY-MM-DD HH:MM:SS (UTC). |
WARNING sur cet endpoint signifie que le numéro de tracking était déjà expiré et que la mise à jour n'a pas pu être appliquée.Exemple
# Prolonger de 10 minutes curl -X POST https://www.optico.fr/ospExpiration \ -d "api_key=osp_..." \ -d "surtax_phone=08.90.12.34.56" \ -d "expiration=600" # → { "status": "OK", "surtaxPhone": "08.90.12.34.56", "expiresAt": "2026-03-13 14:30:00" } # Libérer immédiatement curl -X POST https://www.optico.fr/ospExpiration \ -d "api_key=osp_..." \ -d "surtax_phone=08.90.12.34.56" \ -d "expiration=0" # → { "status": "OK", "surtaxPhone": "08.90.12.34.56", "expiresAt": "2026-03-13 13:47:02" }
Annexe : tableau des préfixes par type de tracking #
Le paramètre type sélectionne le pool de numéros de téléphone à utiliser. Nécessaire uniquement lorsque votre domaine est configuré avec plusieurs pools.
| ID de type | Préfixe | ID de type | Préfixe |
|---|---|---|---|
| 1 | 0800 | 22 | 0825 |
| 2 | 0810 | 23 | 004420 |
| 3 | 09 | 24 | 0049 |
| 4 | 0820 | 25 | 004990 |
| 5 | 0899 | 26 | 0034900 |
| 6 | 01 | 27 | 004491 |
| 7 | 02 | 28 | 00349 |
| 8 | 03 | 29 | 0044800 |
| 9 | 04 | 30 | 0032 |
| 10 | 05 | 31 | 0891 |
| 11 | 0892 | 32 | 0890 |
| 12 | 0897 | 33 | 0895 |
| 17 | 0826 | 34 | 0806 |
| 18 | 0805 | 35 | 0809 |
| 20 | 0811 | 36 | 06 |
| 21 | 0821 |