API Call Tracking
REST · JSON v1.0 17 October 2019

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.

URL de base https://www.optico.fr

Transport & conventions

MéthodeTous les endpoints utilisent POST
Content-Typeapplication/x-www-form-urlencoded
Format de réponseapplication/json
Noms des paramètressnake_case dans les requêtes, camelCase dans les réponses
Timeout5 secondes recommandées

Démarrage #

  1. 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.
  2. Intégrez l'API pour obtenir les numéros de tracking associés à vos téléphones. Appelez /ospView sur chaque page et utilisez les numéros de tracking renvoyés.
Exemple d'intégration PHP, code prêt à l'emploi pour votre version de PHP :
Notes importantes :
  • Les paramètres communs (api_key, visit_id, ip, url, etc.) sont obligatoires sur chaque requête.
  • Appelez /ospView sur 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_agent afin 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.

Exemple
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.

Si la clé API est manquante ou invalide, tous les endpoints renvoient AUTHENTICATION_ERROR. Voir Erreurs.

Erreurs #

Toutes les réponses d'erreur partagent la même structure, quel que soit l'endpoint :

json
{ "status": "AUTHENTICATION_ERROR", "errorMessage": "Invalid API key" }
StatutSignification
MISSING_PARAMETERUn paramètre obligatoire n'a pas été inclus dans la requête.
INVALID_PARAMETERUn paramètre a été envoyé avec une valeur invalide ou un type incorrect.
AUTHENTICATION_ERRORL'api_key est incorrecte, ou aucun domaine ne correspond à la clé.
SYSTEM_ERRORUne erreur serveur interne est survenue côté Optico.
WARNINGLa 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 #

EndpointMéthodeObjet
/ospViewPOSTTracker 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.
/ospClickPOSTObtenir un numéro de tracking à la demande lorsqu'un visiteur clique sur un lien téléphone (affichage Click).
/ospExpirationPOSTMettre à jour l'expiration d'un numéro de tracking déjà attribué.

Concepts #

ConceptDescription
VisiteUne session utilisateur unique. Un visiteur = une visite.
VueUn chargement de page unique au sein d'une visite. Une visite → plusieurs vues.
Numéro de trackingUn 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 cookieoptico_visit_id
ValeurEntier visitId issu de la réponse ospView
Expiration30 minutes
Lors de la première vue de page, envoyez 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.

Affichage Direct (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.
Affichage Click (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.
Référence complète ospView et ospClick : paramètres complets, flux et exemples de code pour les modes Direct et Click.

POST /ospView #

POSThttps://www.optico.fr/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.

À utiliser quand : les numéros de téléphone sont connus au moment du rendu et doivent être visibles immédiatement.

Flux

Votre serveur envoie POST /ospView avec direct_display=true, phones=... à l'API Optico
L'API Optico renvoie visitId, viewId, surtaxPhones { original → tracking }
Votre serveur génère le HTML avec les numéros de tracking directement visibles par le visiteur.

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.

Passez view_id à /ospClick pour rattacher le clic à la vue de page et obtenir l'attribution complète. Sans cela, seul le clic est enregistré.
À utiliser quand : la page est dynamique, ou que vous souhaitez économiser l'inventaire de numéros de tracking en n'attribuant des numéros qu'aux visiteurs montrant une intention d'appel.

Flux

Chargement de page
Votre serveur envoie POST /ospView avec direct_display=false à l'API Optico
L'API Optico renvoie visitId, viewId
Au clic (AJAX)
Votre serveur envoie POST /ospClick avec view_id, phone à l'API Optico
L'API Optico renvoie surtaxPhone
Le navigateur affiche le numéro de tracking au visiteur.

Paramètres obligatoires

ParamètreTypeDescription
api_keystringVotre clé API.
visit_idinteger0 à la première vue de page. Le visitId de la réponse précédente sur les vues suivantes.
ipstringAdresse IPv4 du visiteur. Exemple : 84.72.113.98
urlstringURL complète de la page courante.
page_titlestringTitre de la page courante.
is_mobilebooleantrue si mobile, false sinon.
referer_urlstringURL de référence. Envoyez une chaîne vide si aucune.
nr_phonesintegerNombre total de numéros de téléphone valides sur la page. Envoyez 0 si aucun.
direct_displaybooleantrue pour l'affichage Direct, false pour l'affichage Click.

Affichage Direct : paramètres supplémentaires

ParamètreTypeDescription
phones obligatoire string Numéros d'origine à remplacer, séparés par des virgules.
Simple : 0490260716,0450982756
Pools 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ètreTypePar défautDescription
typeinteger-ID du type de numéro de tracking. Uniquement lorsque le domaine utilise plusieurs pools. Voir le tableau des préfixes par type.
expirationinteger-1-1 = valeur par défaut du domaine. 0 = expirer immédiatement. Positif = secondes.
user_agentstring-User-Agent HTTP du visiteur. Utilisé pour le filtrage des bots. Fortement recommandé.
unique_visitor_idstring-Identifiant unique du visiteur pour la déduplication inter-sessions.
unique_view_idstring-Identifiant unique de vue pour la déduplication.

Réponse en cas de succès

ChampTypeDescription
statusstringOK
visitIdintegerÀ stocker dans le cookie optico_visit_id (30 min). À envoyer dans visit_id à la vue suivante.
viewIdintegerÀ transmettre dans view_id aux appels ospClick de cette page.
surtaxPhonesobjectAffichage Direct uniquement. Correspondance originalPhone → { surtaxPhoneNumber, surtaxPhoneCode }.
clientDatamixedRenvoi du client_data envoyé dans la requête.

Exemples

Affichage Direct

bash
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" } } }
Lorsque 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

bash
# É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.

POSThttps://www.optico.fr/ospClick

Paramètres obligatoires

ParamètreTypeDescription
api_keystringVotre clé API.
phonestringLe numéro de téléphone d'origine pour lequel obtenir un numéro de tracking.

Paramètres optionnels

ParamètreTypePar défautDescription
view_idinteger-Le viewId issu d'ospView. Rattache le clic à la vue de page pour l'analyse.
typeinteger-ID du type de numéro de tracking. Voir le tableau des préfixes par type.
expirationinteger-1-1 = valeur par défaut du domaine. 0 = expirer immédiatement. Positif = secondes.
user_agentstring-Pour la détection des bots.
client_dataarray-Données à associer au téléphone. Maximum 500 caractères par entrée.

Réponse en cas de succès

ChampTypeDescription
statusstringOK
visitIdintegerID de visite Optico.
viewIdintegerID de vue de page Optico.
surtaxPhoneobject{ surtaxPhoneNumber, surtaxPhoneCode } : le numéro de tracking attribué.
clientDatamixedRenvoi de client_data.

POST /ospExpiration #

Utilisez ospExpiration pour prolonger ou libérer immédiatement un numéro de tracking actuellement attribué.

Prolonger : envoyez un nombre de secondes positif pour conserver l'attribution plus longtemps.
Libérer : envoyez expiration=0 pour remettre immédiatement le numéro dans le pool.
POSThttps://www.optico.fr/ospExpiration

Paramètres obligatoires

ParamètreTypeDescription
api_keystringVotre clé API.
surtax_phonestringLe 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ètreTypePar défautDescription
expirationinteger-1-1 = valeur par défaut du domaine. 0 = expirer maintenant. Positif = secondes.
user_agentstring-Pour la détection des bots.

Réponse en cas de succès

ChampTypeDescription
statusstringOK
surtaxPhonestringMême numéro de tracking que celui envoyé dans la requête.
expiresAtstringNouvelle date/heure d'expiration. Format : YYYY-MM-DD HH:MM:SS (UTC).
Un statut 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

bash
# 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.

Contactez le support Optico pour confirmer quels IDs de type sont actifs sur votre compte.
ID de typePréfixeID de typePréfixe
10800220825
2081023004420
309240049
4082025004990
50899260034900
60127004491
7022800349
803290044800
904300032
1005310891
110892320890
120897330895
170826340806
180805350809
2008113606
210821