Typeform-koppling
Kopplingens status: Planerad Inte byggd än. Tajo kör inte den här kopplingen i dag.
Illustration · exempeldata
Exempel på synkronisering
Källa
Typeform
Kopplingens status: Planerad
Mål
Ditt andra verktyg
Kopplingens status: Eget verktyg
Fältmappning
| Källfält | Målfält | Exempelvärde |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- Utkast
- Granska en post
- Godkänn den här versionen
Status gäller varje enskild koppling och garanterar inte att den här synkroniseringen är klar. Fälten är illustrativa. Kontrollera det faktiska schemat och behörigheterna innan synkronisering körs.
Anslut Typeform till Brevo via Tajo för att automatiskt synka formulärsvar, fånga leads från konversationsformulär och utlösa marknadsautomationer baserat på enkätinlämningar och quizresultat.
Översikt
| Egenskap | Värde |
|---|---|
| Plattform | Typeform |
| Kategori | Formulär & enkäter (Anpassad) |
| Installationskomplexitet | Enkel |
| Officiell integration | Nej |
| Data som synkas | Svar, kontakter, händelser, formulär |
| Autentiseringsmetod | OAuth 2.0 / Personal Access Token |
Funktioner
- Realtidssynkronisering av svar - Fånga formulärinlämningar automatiskt via webhooks
- Kontaktskapande - Skapa eller uppdatera Brevo-kontakter från formulärsvar
- Lead scoring - Använd quizpoäng och formulärdata för leadkvalificering
- Hidden Fields - Skicka kunddata via Hidden Fields för personliga formulär
- Villkorlig mappning - Mappa olika formulärfält baserat på svarslogik
- Stöd för flera formulär - Anslut flera typeforms till olika Brevo-listor
Förutsättningar
Innan du börjar, se till att du har:
- Ett Typeform-konto (Basic-plan eller högre för webhooks)
- En Personal Access Token från Typeform Account Settings
- Ett Brevo-konto med API-åtkomst
- Ett Tajo-konto med kopplingsbehörigheter
Autentisering
Personal Access Token
# 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' })});Konfiguration
Grundinställning
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}"Fältmappning
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_FEEDBACKAPI-endpoints
| Endpoint | Metod | Beskrivning |
|---|---|---|
https://api.typeform.com/forms | GET | Lista alla formulär |
https://api.typeform.com/forms/{form_id} | GET | Hämta ett formulär |
https://api.typeform.com/forms | POST | Skapa ett formulär |
https://api.typeform.com/forms/{form_id} | PUT | Uppdatera ett formulär |
https://api.typeform.com/forms/{form_id}/responses | GET | Hämta svar |
https://api.typeform.com/forms/{form_id}/responses | DELETE | Radera svar |
https://api.typeform.com/forms/{form_id}/webhooks/{tag} | PUT | Skapa/uppdatera webhook |
https://api.typeform.com/forms/{form_id}/webhooks/{tag} | GET | Hämta webhook |
https://api.typeform.com/forms/{form_id}/webhooks | GET | Lista webhooks |
Kodexempel
Initiera kopplingen
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']});Hämta formulärsvar
// 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] }); }}Sätt upp webhooks
// 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
Adressen example.com ovan är en platshållare tills Tajo-endpointen är tillgänglig.
Hantera webhook-händelser
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');});Hastighetsbegränsningar
| Endpoint | Hastighetsbegränsning | Anteckningar |
|---|---|---|
| Create API | 2 förfrågningar/sek | Skapande och uppdateringar av formulär |
| Responses API | 2 förfrågningar/sek | Hämtning av svar |
| Webhooks API | 2 förfrågningar/sek | Webhook-hantering |
| Alla endpoints | 120 förfrågningar/min | Global hastighetsbegränsning |
Sidindelning av svar
Responses API returnerar maximalt 1 000 svar per förfrågan. Använd before- eller after-markörparametrar för sidindelning vid hämtning av stora svarsuppsättningar.
Felsökning
| Problem | Orsak | Lösning |
|---|---|---|
| Webhook ej mottagen | Webhook inaktiverad | Aktivera webhook i Typeform-instrumentpanelen |
| Saknade svar | Filter tillämpat | Kontrollera since/until och completed-parametrar |
| Auth-fel 401 | Token utgången | Generera ny Personal Access Token |
| Hastighetsbegränsning 429 | För många förfrågningar | Implementera förfrågningsstrypning |
| Tomma svar | Valfria fält | Hantera null/undefined-svarsvärden |
Felsökningsläge
connectors: typeform: debug: true log_level: verbose log_webhooks: true log_responses: trueBästa praxis
- Använd webhooks - Föredra webhooks framför polling för realtidsfångst av svar
- Validera signaturer - Verifiera alltid webhook-signaturer för säkerhet
- Använd Hidden Fields - Förfyll känd kunddata i formulär
- Mappa fältreferenser - Använd stabila
ref-värden för fält istället för fält-ID:n - Hantera partiella svar - Räkna med valfria och hoppade frågor
- Sätt upp återförsökslogik - Implementera idempotent webhook-bearbetning
Säkerhet
- OAuth 2.0 - Scoped tokenbaserad autentisering
- Webhook-signaturer - SHA-256 HMAC-signaturvalidering
- Endast HTTPS - Alla API-endpoints kräver TLS
- Token-scoping - Begär minsta nödvändiga OAuth-scopes
- Hemlighetshantering - Lagra tokens i miljövariabler eller hemlighetshanterare
- GDPR-efterlevnad - Använd Delete Responses API för dataraderingsrequester