Conector Typeform
Starea conectorului: Planificat Încă neconstruit. Tajo nu rulează astăzi acest conector.
Ilustrație · date de exemplu
Exemplu de sincronizare
Sursă
Typeform
Starea conectorului: Planificat
Destinație
Celălalt instrument al tău
Starea conectorului: Instrument personalizat
Maparea câmpurilor
| Câmp sursă | Câmp destinație | Valoare exemplu |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- Ciornă
- Verifică o înregistrare
- Aprobă această versiune
Stările se referă la fiecare conector și nu garantează că această sincronizare este pregătită. Câmpurile sunt ilustrative. Verifică schema și permisiunile reale înainte de sincronizare.
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ă
| Proprietate | Valoare |
|---|---|
| Platformă | Typeform |
| Categorie | Formulare și sondaje (Personalizat) |
| Complexitate configurare | Ușoară |
| Integrare oficială | Nu |
| Date sincronizate | Răspunsuri, Contacte, Evenimente, Formulare |
| Metodă de autentificare | OAuth 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:
- Un cont Typeform (plan Basic sau superior pentru webhook-uri)
- Un Token de acces personal din Setări cont Typeform
- Un cont Brevo cu acces API
- Un cont Tajo cu permisiuni de conector
Autentificare
Token de acces personal
# Generate a token at 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 Authorization Flowconst 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 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' })});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_FEEDBACKPuncte finale API
| Punct final | Metodă | Descriere |
|---|---|---|
https://api.typeform.com/forms | GET | Listează toate formularele |
https://api.typeform.com/forms/{form_id} | GET | Recuperează un formular |
https://api.typeform.com/forms | POST | Creează un formular |
https://api.typeform.com/forms/{form_id} | PUT | Actualizează un formular |
https://api.typeform.com/forms/{form_id}/responses | GET | Recuperează răspunsuri |
https://api.typeform.com/forms/{form_id}/responses | DELETE | Șterge răspunsuri |
https://api.typeform.com/forms/{form_id}/webhooks/{tag} | PUT | Creează/actualizează webhook |
https://api.typeform.com/forms/{form_id}/webhooks/{tag} | GET | Obține webhook |
https://api.typeform.com/forms/{form_id}/webhooks | GET | Listează 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 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();
// Sync each response to 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] }); }}Configurare webhook-uri
// Register a webhook for real-time response notificationsawait 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.example.com/webhooks/typeform', enabled: true, secret: process.env.TYPEFORM_WEBHOOK_SECRET }) });Caution
Adresa example.com de mai sus este un exemplu provizoriu până când endpointul Tajo devine disponibil.
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 final | Limită de rată | Note |
|---|---|---|
| Create API | 2 cereri/sec | Creare și actualizare formulare |
| Responses API | 2 cereri/sec | Recuperare răspunsuri |
| Webhooks API | 2 cereri/sec | Gestionare webhook-uri |
| Toate punctele finale | 120 cereri/min | Limită 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ționat | Webhook dezactivat | Activați webhook-ul în tabloul de bord Typeform |
| Răspunsuri lipsă | Filtru aplicat | Verificați parametrii since/until și completed |
| Eroare de autentificare 401 | Token expirat | Generați un nou Token de acces personal |
| Limită de rată 429 | Prea multe cereri | Implementați limitarea cererilor |
| Răspunsuri goale | Câmpuri opționale | Gestionați valorile null/undefined ale răspunsurilor |
Modul de depanare
connectors: typeform: debug: true log_level: verbose log_webhooks: true log_responses: trueBune practici
- Utilizați webhook-uri - Preferați webhook-urile față de polling pentru capturarea răspunsurilor în timp real
- Validați semnăturile - Verificați întotdeauna semnăturile webhook pentru securitate
- Utilizați Câmpuri ascunse - Pre-completați datele cunoscute ale clienților în formulare
- Mapați referințele câmpurilor - Utilizați valorile stabile
refale câmpurilor în locul ID-urilor câmpurilor - Gestionați răspunsurile parțiale - Contabilizați întrebările opționale și omise
- 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