Conector Typeform

Conectați Typeform la Brevo prin Tajo pentru a sincroniza automat răspunsurile la formulare, a captura lead-uri din formulare conversaționale și a declanșa automatizări de marketing bazate pe trimiteri de sondaje și rezultate de quiz-uri.

Prezentare generală

ProprietateValoare
PlatformăTypeform
CategorieFormulare și sondaje (Personalizat)
Complexitate configurareUșoară
Integrare oficialăNu
Date sincronizateRăspunsuri, Contacte, Evenimente, Formulare
Metodă de autentificareOAuth 2.0 / Token de acces personal

Funcționalități

  • Sincronizare răspunsuri în timp real - Capturați automat trimiterile de formulare prin webhook-uri
  • Creare contacte - Creați sau actualizați contactele Brevo din răspunsurile la formulare
  • Scorare lead-uri - Utilizați scorurile de quiz și datele din formulare pentru calificarea lead-urilor
  • Câmpuri ascunse - Transmiteți datele clienților prin Câmpuri ascunse pentru formulare personalizate
  • Mapare condiționată - Mapați câmpuri diferite de formular în funcție de logica de răspuns
  • Suport multi-formular - Conectați mai multe typeform-uri la liste Brevo diferite

Cerințe preliminare

Înainte de a începe, asigurați-vă că aveți:

  1. Un cont Typeform (plan Basic sau superior pentru webhook-uri)
  2. Un Token de acces personal din Setări cont Typeform
  3. Un cont Brevo cu acces API
  4. Un cont Tajo cu permisiuni de conector

Autentificare

Token de acces personal

Terminal window
# Generate a token at https://admin.typeform.com/account#/section/tokens
export TYPEFORM_ACCESS_TOKEN=tfp_your_personal_access_token
export TAJO_API_KEY=your_tajo_api_key
export BREVO_API_KEY=your_brevo_api_key

OAuth 2.0

// OAuth 2.0 Authorization Flow
const authUrl = 'https://api.typeform.com/oauth/authorize?' +
new URLSearchParams({
client_id: process.env.TYPEFORM_CLIENT_ID,
redirect_uri: 'https://your-app.com/callback',
scope: 'forms:read responses:read webhooks:write accounts:read',
state: generateState()
});
// Exchange authorization code for access token
const tokenResponse = await fetch('https://api.typeform.com/oauth/token', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
grant_type: 'authorization_code',
code: authorizationCode,
client_id: process.env.TYPEFORM_CLIENT_ID,
client_secret: process.env.TYPEFORM_CLIENT_SECRET,
redirect_uri: 'https://your-app.com/callback'
})
});

Configurare

Configurare de bază

connectors:
typeform:
enabled: true
access_token: "${TYPEFORM_ACCESS_TOKEN}"
forms:
- form_id: "abc123"
list_id: 5
mapping:
email_field: "email"
name_field: "full_name"
- form_id: "xyz789"
list_id: 6
mapping:
email_field: "work_email"
sync:
responses: true
contacts: true
events: true
webhook:
enabled: true
secret: "${TYPEFORM_WEBHOOK_SECRET}"

Mapare câmpuri

field_mapping:
# Map Typeform field references to Brevo attributes
email: email
name: FIRSTNAME
company: COMPANY
phone: SMS
score: LEAD_SCORE
quiz_result: QUIZ_SCORE
nps_rating: NPS_SCORE
feedback: LAST_FEEDBACK

Puncte finale API

Punct finalMetodăDescriere
https://api.typeform.com/formsGETListează toate formularele
https://api.typeform.com/forms/{form_id}GETRecuperează un formular
https://api.typeform.com/formsPOSTCreează un formular
https://api.typeform.com/forms/{form_id}PUTActualizează un formular
https://api.typeform.com/forms/{form_id}/responsesGETRecuperează răspunsuri
https://api.typeform.com/forms/{form_id}/responsesDELETEȘterge răspunsuri
https://api.typeform.com/forms/{form_id}/webhooks/{tag}PUTCreează/actualizează webhook
https://api.typeform.com/forms/{form_id}/webhooks/{tag}GETObține webhook
https://api.typeform.com/forms/{form_id}/webhooksGETListează webhook-urile

Exemple de cod

Inițializare conector

import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({
apiKey: process.env.TAJO_API_KEY,
brevoApiKey: process.env.BREVO_API_KEY
});
await tajo.connectors.connect('typeform', {
accessToken: process.env.TYPEFORM_ACCESS_TOKEN,
forms: ['abc123', 'xyz789']
});

Recuperare răspunsuri formular

// Fetch responses using the Responses API
const response = await fetch(
'https://api.typeform.com/forms/abc123/responses?' +
new URLSearchParams({
page_size: 25,
since: '2024-01-01T00:00:00Z',
completed: 'true'
}),
{
headers: {
'Authorization': `Bearer ${process.env.TYPEFORM_ACCESS_TOKEN}`
}
}
);
const data = await response.json();
// Sync each response to Brevo
for (const item of data.items) {
const answers = item.answers;
const email = answers.find(a => a.field.ref === 'email')?.email;
if (email) {
await tajo.contacts.sync({
email,
attributes: {
FIRSTNAME: answers.find(a => a.field.ref === 'name')?.text,
LEAD_SCORE: item.calculated?.score || 0
},
listIds: [5]
});
}
}

Configurare webhook-uri

// Register a webhook for real-time response notifications
await fetch(
'https://api.typeform.com/forms/abc123/webhooks/tajo-sync',
{
method: 'PUT',
headers: {
'Authorization': `Bearer ${process.env.TYPEFORM_ACCESS_TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
url: 'https://api.tajo.io/webhooks/typeform',
enabled: true,
secret: process.env.TYPEFORM_WEBHOOK_SECRET
})
}
);

Gestionare evenimente webhook

app.post('/webhooks/typeform', async (req, res) => {
// Verify webhook signature
const signature = req.headers['typeform-signature'];
const isValid = verifyTypeformSignature(
req.rawBody, signature, process.env.TYPEFORM_WEBHOOK_SECRET
);
if (!isValid) return res.status(401).send('Unauthorized');
const { form_response } = req.body;
await tajo.connectors.handleWebhook('typeform', {
topic: 'form_response',
payload: form_response
});
res.status(200).send('OK');
});

Limite de rată

Punct finalLimită de ratăNote
Create API2 cereri/secCreare și actualizare formulare
Responses API2 cereri/secRecuperare răspunsuri
Webhooks API2 cereri/secGestionare webhook-uri
Toate punctele finale120 cereri/minLimită de rată globală

Paginare răspunsuri

Responses API returnează maximum 1.000 de răspunsuri per cerere. Utilizați parametrii cursor before sau after pentru paginare la recuperarea seturilor mari de răspunsuri.

Depanare

ProblemăCauzăSoluție
Webhook nereceționatWebhook dezactivatActivați webhook-ul în tabloul de bord Typeform
Răspunsuri lipsăFiltru aplicatVerificați parametrii since/until și completed
Eroare de autentificare 401Token expiratGenerați un nou Token de acces personal
Limită de rată 429Prea multe cereriImplementați limitarea cererilor
Răspunsuri goaleCâmpuri opționaleGestionați valorile null/undefined ale răspunsurilor

Modul de depanare

connectors:
typeform:
debug: true
log_level: verbose
log_webhooks: true
log_responses: true

Bune practici

  1. Utilizați webhook-uri - Preferați webhook-urile față de polling pentru capturarea răspunsurilor în timp real
  2. Validați semnăturile - Verificați întotdeauna semnăturile webhook pentru securitate
  3. Utilizați Câmpuri ascunse - Pre-completați datele cunoscute ale clienților în formulare
  4. Mapați referințele câmpurilor - Utilizați valorile stabile ref ale câmpurilor în locul ID-urilor câmpurilor
  5. Gestionați răspunsurile parțiale - Contabilizați întrebările opționale și omise
  6. Configurați logică de reîncercare - Implementați procesarea webhook-urilor idempotentă

Securitate

  • OAuth 2.0 - Autentificare bazată pe token cu scope
  • Semnături webhook - Validare semnătură HMAC SHA-256
  • Numai HTTPS - Toate punctele finale API necesită TLS
  • Scope token - Solicitați scope-urile OAuth minime necesare
  • Gestionare secrete - Stocați token-urile în variabile de mediu sau managere de secrete
  • Conformitate GDPR - Utilizați Delete Responses API pentru cererile de ștergere a datelor

Resurse conexe

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
Asistent AI

Bună! Întreabă-mă orice despre documentație.