Connecteur HubSpot
Connecteur HubSpot
Connectez votre CRM HubSpot à Brevo via Tajo pour bénéficier d’une synchronisation bidirectionnelle des contacts, d’un suivi des transactions, des données d’engagement et d’une automatisation marketing unifiée sur les deux plateformes.
Vue d’ensemble
| Propriété | Valeur |
|---|---|
| Plateforme | HubSpot |
| Catégorie | CRM |
| Complexité d’installation | Moyenne |
| Intégration officielle | Oui |
| Données synchronisées | Contacts, entreprises, transactions, tickets, événements |
| URL de base de l’API | https://api.hubapi.com |
Fonctionnalités
- Synchronisation bidirectionnelle des contacts, Gardez les contacts synchronisés entre HubSpot et Brevo en temps réel
- Suivi du pipeline de transactions, Synchronisez les étapes et les montants des transactions pour une segmentation basée sur le chiffre d’affaires
- Synchronisation des données d’entreprise, Associez les contacts à des fiches entreprise et à des données firmographiques
- Intégration des tickets, Suivez les tickets de support pour évaluer la santé client
- Suivi de l’engagement, Synchronisez ouvertures d’e-mails, clics, réunions, appels et notes
- Prise en charge des objets personnalisés, Mappez les objets personnalisés HubSpot vers des attributs Brevo
- Déclencheurs de workflow, Utilisez les changements d’étape de cycle de vie HubSpot pour déclencher des automatisations Brevo
- Événements webhook, Notifications en temps réel lors des changements de données CRM
Prérequis
Avant de commencer, assurez-vous de disposer de :
- Un compte HubSpot (Free, Starter, Professional ou Enterprise)
- Une application privée HubSpot ou une application OAuth avec les scopes requis
- Un compte Brevo avec accès API
- Un compte Tajo
Authentification
Jeton d’accès d’application privée (recommandé)
Créez une application privée dans HubSpot pour un accès API direct avec un contrôle granulaire des scopes.
- Accédez à HubSpot Settings > Integrations > Private Apps
- Créez une nouvelle application privée
- Configurez les scopes requis
- Copiez le jeton d’accès
curl -X GET "https://api.hubapi.com/crm/v3/objects/contacts" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json"OAuth 2.0
Utilisez OAuth 2.0 pour les intégrations multi-comptes nécessitant une autorisation utilisateur.
# Authorization URLhttps://app.hubspot.com/oauth/authorize?client_id={client_id}&scope=crm.objects.contacts.read&redirect_uri={redirect_uri}Scopes requis
crm.objects.contacts.readcrm.objects.contacts.writecrm.objects.companies.readcrm.objects.deals.readcrm.objects.deals.writecrm.objects.custom.readcrm.schemas.custom.readConfiguration
Configuration de base
connectors: hubspot: enabled: true access_token: "${HUBSPOT_ACCESS_TOKEN}"
# Data sync options sync: contacts: true companies: true deals: true tickets: true engagements: true
# Sync direction direction: bidirectional # or 'hubspot_to_brevo' | 'brevo_to_hubspot'
# List assignment in Brevo lists: all_contacts: 10 qualified_leads: 11 customers: 12Mappage des champs
Mappez les propriétés HubSpot vers les attributs de contact Brevo :
Mappages par défaut
| Parameter | Type | Description |
|---|---|---|
email required | string | E-mail du contact (identifiant principal) |
firstname optional | string | Mappé vers l'attribut FIRSTNAME dans Brevo |
lastname optional | string | Mappé vers l'attribut LASTNAME dans Brevo |
phone optional | string | Mappé vers l'attribut SMS pour WhatsApp/SMS |
company optional | string | Nom de l'entreprise associée |
lifecyclestage optional | string | Étape du cycle de vie HubSpot (subscriber, lead, MQL, SQL, customer) |
hs_lead_status optional | string | Statut de qualification du prospect |
hubspot_owner_id optional | string | ID du commercial assigné |
Mappage des propriétés personnalisées
field_mapping: # Standard fields email: email firstname: FIRSTNAME lastname: LASTNAME phone: SMS
# CRM fields lifecyclestage: LIFECYCLE_STAGE hs_lead_status: LEAD_STATUS company: COMPANY_NAME
# Deal metrics hs_total_deal_value: DEAL_VALUE num_associated_deals: DEAL_COUNT
# Custom properties preferred_channel: PREFERRED_CHANNEL customer_segment: SEGMENTEndpoints API
Objets CRM
| Méthode | Endpoint | Description |
|---|---|---|
GET | /crm/v3/objects/contacts | Lister les contacts |
POST | /crm/v3/objects/contacts | Créer un contact |
PATCH | /crm/v3/objects/contacts/{id} | Mettre à jour un contact |
GET | /crm/v3/objects/companies | Lister les entreprises |
GET | /crm/v3/objects/deals | Lister les transactions |
POST | /crm/v3/objects/deals | Créer une transaction |
GET | /crm/v3/objects/tickets | Lister les tickets |
Associations
| Méthode | Endpoint | Description |
|---|---|---|
GET | /crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType} | Obtenir les associations |
PUT | /crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId} | Créer une association |
Engagements
| Méthode | Endpoint | Description |
|---|---|---|
GET | /crm/v3/objects/calls | Lister les engagements d’appel |
GET | /crm/v3/objects/emails | Lister les engagements e-mail |
GET | /crm/v3/objects/meetings | Lister les réunions |
GET | /crm/v3/objects/notes | Lister les notes |
GET | /crm/v3/objects/tasks | Lister les tâches |
Événements
Événements de contact
| Événement | Déclencheur | Cas d’usage |
|---|---|---|
contact.creation | Nouveau contact créé | Déclencheur de workflow de bienvenue |
contact.propertyChange | Propriété de contact mise à jour | Synchronisation des attributs |
contact.merge | Contacts fusionnés | Gestion des doublons |
contact.deletion | Contact supprimé | Nettoyage dans Brevo |
Événements de transaction
| Événement | Déclencheur | Cas d’usage |
|---|---|---|
deal.creation | Nouvelle transaction créée | Notification commerciale |
deal.propertyChange | Étape de transaction modifiée | Automatisation du pipeline |
deal.deletion | Transaction supprimée | Reporting des revenus |
Événements d’entreprise
| Événement | Déclencheur | Cas d’usage |
|---|---|---|
company.creation | Nouvelle entreprise ajoutée | Marketing basé sur les comptes |
company.propertyChange | Données d’entreprise mises à jour | Synchronisation firmographique |
Exemples de code
Initialiser le connecteur
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// Connect HubSpotawait tajo.connectors.connect('hubspot', { accessToken: process.env.HUBSPOT_ACCESS_TOKEN});Lancer une synchronisation des contacts
// Full bidirectional syncawait tajo.connectors.sync('hubspot', { type: 'full', resources: ['contacts', 'companies', 'deals'], direction: 'bidirectional', since: '2023-01-01'});
// Check sync statusconst status = await tajo.connectors.status('hubspot');console.log(status);// {// connected: true,// lastSync: '2024-01-15T10:30:00Z',// contactsSynced: 34200,// companiesSynced: 5100,// dealsSynced: 2340// }Gérer les événements webhook
// Handle HubSpot webhook notificationsapp.post('/webhooks/hubspot', async (req, res) => { const signature = req.get('X-HubSpot-Signature-v3');
// Verify webhook signature if (!verifyHubSpotSignature(req.body, signature)) { return res.status(401).send('Unauthorized'); }
for (const event of req.body) { await tajo.connectors.handleWebhook('hubspot', { eventType: event.subscriptionType, objectId: event.objectId, propertyName: event.propertyName, propertyValue: event.propertyValue }); }
res.status(200).send('OK');});Limites de débit
HubSpot applique des limites de débit par application privée ou par application OAuth :
| Plan | Limite de débit | Limite en rafale |
|---|---|---|
| Free/Starter | 100 requêtes/10 secondes | 150 requêtes/10 secondes |
| Professional | 150 requêtes/10 secondes | 200 requêtes/10 secondes |
| Enterprise | 200 requêtes/10 secondes | 250 requêtes/10 secondes |
| Add-on API | 200 requêtes/10 secondes | 250 requêtes/10 secondes |
Limites supplémentaires :
- API de recherche : 5 requêtes/seconde par application
- Opérations par lot : 100 enregistrements par requête batch
- Limite quotidienne : 500 000 requêtes/jour (applications OAuth)
Gestion des limites de débit
HubSpot renvoie une réponse 429 Too Many Requests lorsque les limites sont dépassées. Utilisez un backoff exponentiel et surveillez les en-têtes X-HubSpot-RateLimit-*.
Dépannage
Problèmes courants
| Problème | Cause | Solution |
|---|---|---|
| 401 Unauthorized | Jeton expiré ou invalide | Régénérez le jeton d’application privée ou rafraîchissez le jeton OAuth |
| Contact non synchronisé | Propriété e-mail manquante | Les contacts HubSpot nécessitent un e-mail pour la synchronisation Brevo |
| Contacts dupliqués | Aucune règle de déduplication | Configurez les règles de fusion dans HubSpot |
| Webhook non reçu | Abonnement inactif | Réenregistrez les abonnements webhook |
| Propriété non mappée | Propriété personnalisée non créée | Créez d’abord la propriété dans HubSpot |
Mode débogage
Activez la journalisation détaillée :
connectors: hubspot: debug: true log_level: verbose log_webhooks: trueTester la connexion
tajo connectors test hubspot# ✓ API connection successful# ✓ Contacts readable# ✓ Companies readable# ✓ Deals readable# ✓ Webhooks registeredBonnes pratiques
- Privilégiez les applications privées aux clés API, Les clés API sont dépréciées ; utilisez des applications privées pour une meilleure sécurité
- Implémentez la synchronisation bidirectionnelle avec précaution, Évitez les boucles infinies en traçant la source de synchronisation
- Mappez les étapes du cycle de vie, Utilisez les étapes de cycle de vie HubSpot pour segmenter les contacts dans Brevo
- Regroupez les requêtes API, Utilisez les endpoints batch pour les opérations en masse et rester dans les limites de débit
- Surveillez la livraison des webhooks, Mettez en place une logique de nouvelle tentative et un traitement des messages morts
- Utilisez la synchronisation incrémentale, Synchronisez uniquement les enregistrements modifiés en utilisant la propriété
lastmodifieddate
Sécurité
- Jetons d’application privée, Jetons d’accès avec scopes et permissions granulaires
- OAuth 2.0, Autorisation conforme aux standards de l’industrie avec rotation des refresh tokens
- Signatures de webhook, Vérification de signature basée sur HMAC (v3)
- Chiffrement TLS, Toutes les communications API sont chiffrées en transit
- Permissions délimitées, Accès minimum requis par intégration