Typeform Konektor
Povežite Typeform s Brevom putem Taja kako biste automatski sinkronizirali odgovore na obrasce, hvatali potencijalne klijente iz konverzacijskih obrazaca i pokretali marketinške automatizacije temeljene na slanju anketa i rezultatima kvizova.
Pregled
| Svojstvo | Vrijednost |
|---|---|
| Platforma | Typeform |
| Kategorija | Obrasci i ankete (Prilagođeno) |
| Složenost postavljanja | Jednostavno |
| Službena integracija | Ne |
| Sinkronizirani podaci | Odgovori, Kontakti, Događaji, Obrasci |
| Metoda autentifikacije | OAuth 2.0 / Personal Access Token |
Značajke
- Sinkronizacija odgovora u stvarnom vremenu - Automatski hvatajte slanja obrazaca putem webhookova
- Kreiranje kontakata - Kreirajte ili ažurirajte Brevo kontakte iz odgovora na obrasce
- Ocjenjivanje potencijalnih klijenata - Koristite rezultate kvizova i podatke obrazaca za kvalifikaciju potencijalnih klijenata
- Skrivena polja - Proslijedite korisničke podatke putem skrivenih polja za personalizirane obrasce
- Uvjetno mapiranje - Mapirajte različita polja obrazaca na temelju logike odgovora
- Podrška za više obrazaca - Povežite više typeformi s različitim Brevo popisima
Preduvjeti
Prije nego što počnete, osigurajte da imate:
- Typeform račun (Basic plan ili viši za webhookove)
- Personal Access Token iz Typeform Postavki računa
- Brevo račun s API pristupom
- Tajo račun s dozvolama konektora
Autentifikacija
Personal Access Token
# Generirajte token na https://admin.typeform.com/account#/section/tokensexport TYPEFORM_ACCESS_TOKEN=tfp_your_personal_access_tokenexport TAJO_API_KEY=your_tajo_api_keyexport BREVO_API_KEY=your_brevo_api_keyOAuth 2.0
// OAuth 2.0 tijek autorizacijeconst 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() });
// Zamijenite autorizacijski kod za pristupni tokenconst 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
Osnovna konfiguracija
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: # Mapirajte reference polja Typeforma na Brevo atribute email: email name: FIRSTNAME company: COMPANY phone: SMS score: LEAD_SCORE quiz_result: QUIZ_SCORE nps_rating: NPS_SCORE feedback: LAST_FEEDBACKAPI krajnje točke
| Krajnja točka | Metoda | Opis |
|---|---|---|
https://api.typeform.com/forms | GET | Popis svih obrazaca |
https://api.typeform.com/forms/{form_id} | GET | Dohvatite obrazac |
https://api.typeform.com/forms | POST | Kreirajte obrazac |
https://api.typeform.com/forms/{form_id} | PUT | Ažurirajte obrazac |
https://api.typeform.com/forms/{form_id}/responses | GET | Dohvatite odgovore |
https://api.typeform.com/forms/{form_id}/responses | DELETE | Izbrišite odgovore |
https://api.typeform.com/forms/{form_id}/webhooks/{tag} | PUT | Kreirajte/ažurirajte webhook |
https://api.typeform.com/forms/{form_id}/webhooks/{tag} | GET | Dohvatite webhook |
https://api.typeform.com/forms/{form_id}/webhooks | GET | Popis webhookova |
Primjeri 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']});Dohvaćanje odgovora na obrasce
// Dohvatite odgovore koristeći Responses APIconst 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();
// Sinkronizacija svakog odgovora u Brevofor (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] }); }}Postavljanje webhookova
// Registrirajte webhook za obavijesti o odgovorima u stvarnom vremenuawait 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 }) });Rukovanje webhook događajima
app.post('/webhooks/typeform', async (req, res) => { // Verificirajte potpis webhookova 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
| Krajnja točka | Ograničenje brzine | Napomene |
|---|---|---|
| Create API | 2 zahtjeva/s | Kreiranje i ažuriranje obrazaca |
| Responses API | 2 zahtjeva/s | Dohvaćanje odgovora |
| Webhooks API | 2 zahtjeva/s | Upravljanje webhookovima |
| Sve krajnje točke | 120 zahtjeva/min | Globalno ograničenje brzine |
Paginacija odgovora
Responses API vraća najviše 1.000 odgovora po zahtjevu. Koristite parametre pokazivača before ili after za paginaciju pri dohvaćanju velikih skupova odgovora.
Rješavanje problema
| Problem | Uzrok | Rješenje |
|---|---|---|
| Webhook nije primljen | Webhook onemogućen | Omogućite webhook u Typeform nadzornoj ploči |
| Nedostaju odgovori | Primijenjen filter | Provjerite parametre since/until i completed |
| Greška autentifikacije 401 | Token istekao | Generirajte novi Personal Access Token |
| Ograničenje brzine 429 | Previše zahtjeva | Implementirajte ograničavanje zahtjeva |
| Prazni odgovori | Opcionalna polja | Upravljajte null/undefined vrijednostima odgovora |
Način otklanjanja grešaka
connectors: typeform: debug: true log_level: verbose log_webhooks: true log_responses: truePreporučene prakse
- Koristite webhookove - Preferirajte webhookove umjesto anketiranja za hvatanje odgovora u stvarnom vremenu
- Validirajte potpise - Uvijek verificirajte potpise webhookova za sigurnost
- Koristite skrivena polja - Unaprijed popunite poznate korisničke podatke u obrascima
- Mapirajte reference polja - Koristite stabilne
refvrijednosti polja umjesto ID-ova polja - Upravljajte djelomičnim odgovorima - Uzmite u obzir opcionalna i preskočena pitanja
- Postavite logiku ponovnog pokušaja - Implementirajte idempotentnu obradu webhookova
Sigurnost
- OAuth 2.0 - Autentifikacija temeljena na opseženim tokenima
- Potpisi webhookova - SHA-256 HMAC validacija potpisa
- Samo HTTPS - Sve API krajnje točke zahtijevaju TLS
- Opsežavanje tokena - Zatražite minimalno potrebne OAuth opsege
- Upravljanje tajnama - Pohranite tokene u varijablama okoline ili upraviteljima tajni
- GDPR usklađenost - Koristite Delete Responses API za zahtjeve brisanja podataka