Typeform Connector
Connectorstatus: Planlagt Ikke bygget endnu. Tajo kører ikke denne connector i dag.
Illustration · eksempeldata
Eksempel på synkronisering
Kilde
Typeform
Connectorstatus: Planlagt
Destination
Dit andet værktøj
Connectorstatus: Eget værktøj
Feltmapping
| Kildefelt | Destinationsfelt | Eksempelværdi |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- Udkast
- Gennemse én post
- Godkend denne version
Status gælder den enkelte connector og garanterer ikke, at denne synkronisering er klar. Felterne er illustrative. Tjek det faktiske skema og tilladelser før en synkronisering.
Forbind Typeform til Brevo via Tajo for automatisk at synkronisere formularsvar, fange leads fra konversationsformularer og udløse marketingautomatiseringer baseret på undersøgelsesindsendelser og quiz-resultater.
Oversigt
| Egenskab | Værdi |
|---|---|
| Platform | Typeform |
| Kategori | Formularer og undersøgelser (brugerdefineret) |
| Opsætningskompleksitet | Let |
| Officiel integration | Nej |
| Synkroniserede data | Svar, kontakter, hændelser, formularer |
| Autentifikationsmetode | OAuth 2.0 / Personal Access Token |
Funktioner
- Realtidssynkronisering af svar - Opfang automatisk formularindsendelser via webhooks
- Oprettelse af kontakter - Opret eller opdatér Brevo-kontakter fra formularsvar
- Leadscoring - Brug quiz-scores og formulardata til leadkvalificering
- Hidden Fields - Send kundedata via Hidden Fields til personaliserede formularer
- Betinget mapping - Map forskellige formularfelter baseret på svarlogik
- Flerformular-understøttelse - Forbind flere typeforms til forskellige Brevo-lister
Forudsætninger
Før du begynder, skal du sikre dig, at du har:
- En Typeform-konto (Basic-plan eller højere for webhooks)
- Et Personal Access Token fra Typeform Account Settings
- En Brevo-konto med API-adgang
- En Tajo-konto med konnektorrettigheder
Autentifikation
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
Grundlæggende opsætning
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}"Feltmapping
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 | Metode | Beskrivelse |
|---|---|---|
https://api.typeform.com/forms | GET | Vis alle formularer |
https://api.typeform.com/forms/{form_id} | GET | Hent en formular |
https://api.typeform.com/forms | POST | Opret en formular |
https://api.typeform.com/forms/{form_id} | PUT | Opdatér en formular |
https://api.typeform.com/forms/{form_id}/responses | GET | Hent svar |
https://api.typeform.com/forms/{form_id}/responses | DELETE | Slet svar |
https://api.typeform.com/forms/{form_id}/webhooks/{tag} | PUT | Opret/opdatér webhook |
https://api.typeform.com/forms/{form_id}/webhooks/{tag} | GET | Hent webhook |
https://api.typeform.com/forms/{form_id}/webhooks | GET | Vis webhooks |
Kodeeksempler
Initialisér konnektor
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']});Hent formularsvar
// 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] }); }}Opsæt 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 ovenfor er en pladsholder, indtil Tajo-endpointet er tilgængeligt.
Håndtér 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');});Ratebegrænsninger
| Endpoint | Ratebegrænsning | Noter |
|---|---|---|
| Create API | 2 forespørgsler/sek | Oprettelse og opdatering af formularer |
| Responses API | 2 forespørgsler/sek | Hentning af svar |
| Webhooks API | 2 forespørgsler/sek | Webhook-administration |
| Alle endpoints | 120 forespørgsler/min | Global ratebegrænsning |
Paginering af svar
Responses API returnerer maksimalt 1.000 svar per forespørgsel. Brug before- eller after-cursor-parametrene til paginering ved hentning af store svardatasæt.
Fejlfinding
| Problem | Årsag | Løsning |
|---|---|---|
| Webhook ikke modtaget | Webhook deaktiveret | Aktivér webhook i Typeform-dashboard |
| Manglende svar | Filter anvendt | Tjek since/until og completed-params |
| Auth-fejl 401 | Token udløbet | Generér nyt Personal Access Token |
| Ratebegrænsning 429 | For mange forespørgsler | Implementér request throttling |
| Tomme svar | Valgfri felter | Håndtér null-/undefined-svarsværdier |
Fejlfindingstilstand
connectors: typeform: debug: true log_level: verbose log_webhooks: true log_responses: trueBest practices
- Brug webhooks - Foretræk webhooks frem for polling til realtidsopfangning af svar
- Validér signaturer - Verificér altid webhook-signaturer af sikkerhedshensyn
- Brug Hidden Fields - Præudfyld kendte kundedata i formularer
- Map feltreferencer - Brug stabile felt-
ref-værdier i stedet for felt-id’er - Håndtér delvise svar - Tag højde for valgfrie og sprungne spørgsmål
- Opsæt retry-logik - Implementér idempotent webhook-behandling
Sikkerhed
- OAuth 2.0 - Scoped tokenbaseret autentifikation
- Webhook-signaturer - SHA-256 HMAC-signaturvalidering
- Kun HTTPS - Alle API-endpoints kræver TLS
- Tokenscoping - Anmod om minimumskrævede OAuth-scopes
- Hemmelighedshåndtering - Opbevar tokens i miljøvariabler eller secret managers
- GDPR-overholdelse - Brug Delete Responses API til anmodninger om dataslettelse