Typeform konektor

Poveži Typeform sa Brevo putem Tajo da automatski sinhronizuješ odgovore na formulare, hvataj potencijalne kupce iz konverzacionih formulara i pokreći marketing automatizacije na osnovu slanja anketa i rezultata kvizova.

Pregled

SvojstvoVrednost
PlatformaTypeform
KategorijaFormulari i ankete (Prilagođeno)
Složenost podešavanjaLako
Zvanična integracijaNe
Sinhronizovani podaciOdgovori, Kontakti, Događaji, Formulari
Metod autentifikacijeOAuth 2.0 / Personal Access Token

Karakteristike

  • Sinhronizacija odgovora u realnom vremenu - Automatsko hvatanje slanja formulara putem webhook-ova
  • Kreiranje kontakata - Kreiranje ili ažuriranje Brevo kontakata iz odgovora na formulare
  • Ocenjivanje potencijalnih kupaca - Korišćenje rezultata kvizova i podataka formulara za kvalifikaciju potencijalnih kupaca
  • Skrivena polja - Prosleđivanje podataka kupaca putem skrivenih polja za personalizovane formulare
  • Uslovno mapiranje - Mapiranje različitih polja formulara prema logici odgovora
  • Podrška za više formulara - Povezivanje više typeforma na različite Brevo liste

Preduslovi

Pre nego što započneš, proveri da imaš:

  1. Typeform nalog (Basic plan ili viši za webhook-ove)
  2. Personal Access Token iz Typeform Account Settings
  3. Brevo nalog sa API pristupom
  4. Tajo nalog sa dozvolama konektora

Autentifikacija

Personal Access Token

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'
})
});

Konfiguracija

Osnovno podešavanje

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

Mapiranje polja

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

API endpointi

EndpointMetodaOpis
https://api.typeform.com/formsGETListanje svih formulara
https://api.typeform.com/forms/{form_id}GETDohvatanje formulara
https://api.typeform.com/formsPOSTKreiranje formulara
https://api.typeform.com/forms/{form_id}PUTAžuriranje formulara
https://api.typeform.com/forms/{form_id}/responsesGETDohvatanje odgovora
https://api.typeform.com/forms/{form_id}/responsesDELETEBrisanje odgovora
https://api.typeform.com/forms/{form_id}/webhooks/{tag}PUTKreiranje/ažuriranje webhook-a
https://api.typeform.com/forms/{form_id}/webhooks/{tag}GETDohvatanje webhook-a
https://api.typeform.com/forms/{form_id}/webhooksGETListanje webhook-ova

Primeri koda

Inicijalizacija konektora

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']
});

Dohvatanje odgovora na formulare

// 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]
});
}
}

Podešavanje webhook-ova

// 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
})
}
);

Obrada webhook događaja

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');
});

Ograničenja brzine

EndpointOgraničenje brzineNapomene
Create API2 zahteva/sekKreiranje i ažuriranje formulara
Responses API2 zahteva/sekDohvatanje odgovora
Webhooks API2 zahteva/sekUpravljanje webhook-ovima
Svi endpointi120 zahteva/minGlobalno ograničenje brzine

Paginacija odgovora

Responses API vraća maksimalno 1.000 odgovora po zahtevu. Koristi parametre kursora before ili after za paginaciju pri dohvatanju velikih skupova odgovora.

Rešavanje problema

ProblemUzrokRešenje
Webhook nije primljenWebhook onemogućenOmogući webhook u Typeform dashboard-u
Nedostaju odgovoriPrimenjen filterProveri parametre since/until i completed
Greška autentifikacije 401Token istekaoGeneriši novi Personal Access Token
Ograničenje brzine 429Previše zahtevaImplementiraj prigušivanje zahteva
Prazni odgovoriOpcijska poljaObradi null/undefined vrednosti odgovora

Debug režim

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

Najbolje prakse

  1. Koristi webhook-ove - Preferiraj webhook-ove umesto ispitivanja za hvatanje odgovora u realnom vremenu
  2. Validiraj potpise - Uvek verifikuj potpise webhook-ova radi bezbednosti
  3. Koristi skrivena polja - Unapred popuni poznate podatke o korisniku u formularima
  4. Mapiraj reference polja - Koristi stabilne vrednosti ref polja umesto ID-ova polja
  5. Obradi delimične odgovore - Uzmi u obzir opcijska i preskočena pitanja
  6. Postavi logiku ponovnog pokušaja - Implementiraj idempotentnu obradu webhook-ova

Bezbednost

  • OAuth 2.0 - Autentifikacija zasnovana na tokenima sa skopovima
  • Potpisi webhook-ova - SHA-256 HMAC validacija potpisa
  • Samo HTTPS - Svi API endpointi zahtevaju TLS
  • Skopovanje tokena - Zahtevaj minimalne potrebne OAuth skopove
  • Upravljanje tajnama - Čuvaj tokene u env varijablama ili menadžerima tajni
  • GDPR usklađenost - Koristi Delete Responses API za zahteve za brisanje podataka

Povezani resursi

Subscribe to updates

developer-docs

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

auto-detect
AI асистент

Здраво! Питајте ме о документацији.