Σύνδεσμος Typeform
Συνδέστε το Typeform με το Brevo μέσω Tajo για αυτόματο συγχρονισμό απαντήσεων φόρμας, καταγραφή leads από συνομιλητικές φόρμες και ενεργοποίηση αυτοματισμών marketing βάσει υποβολών έρευνας και αποτελεσμάτων quiz.
Επισκόπηση
| Ιδιότητα | Τιμή |
|---|---|
| Πλατφόρμα | Typeform |
| Κατηγορία | Φόρμες & Έρευνες (Προσαρμοσμένο) |
| Πολυπλοκότητα Ρύθμισης | Εύκολη |
| Επίσημη Ενσωμάτωση | Όχι |
| Δεδομένα που Συγχρονίζονται | Απαντήσεις, Επαφές, Εκδηλώσεις, Φόρμες |
| Μέθοδος Πιστοποίησης | OAuth 2.0 / Personal Access Token |
Χαρακτηριστικά
- Συγχρονισμός απαντήσεων σε πραγματικό χρόνο - Αυτόματη καταγραφή υποβολών φόρμας μέσω webhooks
- Δημιουργία επαφής - Δημιουργία ή ενημέρωση επαφών Brevo από απαντήσεις φόρμας
- Βαθμολόγηση lead - Χρήση βαθμολογιών quiz και δεδομένων φόρμας για προεπιλογή leads
- Hidden Fields - Μεταβίβαση δεδομένων πελάτη μέσω Hidden Fields για εξατομικευμένες φόρμες
- Υπό συνθήκη αντιστοίχηση - Αντιστοίχηση διαφορετικών πεδίων φόρμας βάσει λογικής απόκρισης
- Υποστήριξη πολλαπλών φορμών - Σύνδεση πολλαπλών typeforms σε διαφορετικές λίστες Brevo
Προαπαιτούμενα
Πριν ξεκινήσετε, βεβαιωθείτε ότι διαθέτετε:
- Λογαριασμό Typeform (Basic πλάνο ή παραπάνω για webhooks)
- Personal Access Token από τις Ρυθμίσεις Λογαριασμού Typeform
- Λογαριασμό Brevo με πρόσβαση API
- Λογαριασμό Tajo με δικαιώματα συνδέσμου
Πιστοποίηση
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' })});Διαμόρφωση
Βασική Ρύθμιση
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}"Αντιστοίχιση Πεδίων
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_FEEDBACKEndpoints API
| Endpoint | Μέθοδος | Περιγραφή |
|---|---|---|
https://api.typeform.com/forms | GET | Λίστα όλων των φορμών |
https://api.typeform.com/forms/{form_id} | GET | Ανάκτηση φόρμας |
https://api.typeform.com/forms | POST | Δημιουργία φόρμας |
https://api.typeform.com/forms/{form_id} | PUT | Ενημέρωση φόρμας |
https://api.typeform.com/forms/{form_id}/responses | GET | Ανάκτηση απαντήσεων |
https://api.typeform.com/forms/{form_id}/responses | DELETE | Διαγραφή απαντήσεων |
https://api.typeform.com/forms/{form_id}/webhooks/{tag} | PUT | Δημιουργία/ενημέρωση webhook |
https://api.typeform.com/forms/{form_id}/webhooks/{tag} | GET | Λήψη webhook |
https://api.typeform.com/forms/{form_id}/webhooks | GET | Λίστα webhooks |
Παραδείγματα Κώδικα
Αρχικοποίηση Συνδέσμου
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']});Ανάκτηση Απαντήσεων Φόρμας
// 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] }); }}Ρύθμιση 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.tajo.io/webhooks/typeform', enabled: true, secret: process.env.TYPEFORM_WEBHOOK_SECRET }) });Χειρισμός Εκδηλώσεων 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');});Όρια Ρυθμού
| Endpoint | Όριο Ρυθμού | Σημειώσεις |
|---|---|---|
| Create API | 2 αιτήματα/δευτ. | Δημιουργία και ενημερώσεις φόρμας |
| Responses API | 2 αιτήματα/δευτ. | Ανάκτηση απαντήσεων |
| Webhooks API | 2 αιτήματα/δευτ. | Διαχείριση webhook |
| Όλα τα endpoints | 120 αιτήματα/λεπτό | Γενικό όριο ρυθμού |
Σελιδοποίηση Απαντήσεων
Το Responses API επιστρέφει μέγιστο 1.000 απαντήσεις ανά αίτημα. Χρησιμοποιήστε τις παραμέτρους cursor before ή after για σελιδοποίηση κατά την ανάκτηση μεγάλων συνόλων απαντήσεων.
Αντιμετώπιση Προβλημάτων
| Πρόβλημα | Αιτία | Λύση |
|---|---|---|
| Δεν λαμβάνεται webhook | Το webhook είναι απενεργοποιημένο | Ενεργοποιήστε το webhook στο dashboard Typeform |
| Λείπουν απαντήσεις | Εφαρμοσμένο φίλτρο | Ελέγξτε παραμέτρους since/until και completed |
| Σφάλμα πιστοποίησης 401 | Ληγμένο token | Δημιουργήστε νέο Personal Access Token |
| Όριο ρυθμού 429 | Υπερβολικά πολλά αιτήματα | Εφαρμόστε περιορισμό αιτημάτων |
| Κενές απαντήσεις | Προαιρετικά πεδία | Χειριστείτε null/undefined τιμές απαντήσεων |
Λειτουργία Εντοπισμού Σφαλμάτων
connectors: typeform: debug: true log_level: verbose log_webhooks: true log_responses: trueΒέλτιστες Πρακτικές
- Χρησιμοποιήστε webhooks - Προτιμήστε webhooks έναντι polling για καταγραφή απαντήσεων σε πραγματικό χρόνο
- Επικυρώστε υπογραφές - Να επαληθεύετε πάντα υπογραφές webhook για ασφάλεια
- Χρησιμοποιήστε Hidden Fields - Προσυμπληρώστε γνωστά δεδομένα πελάτη σε φόρμες
- Αντιστοιχίστε αναφορές πεδίων - Χρησιμοποιήστε σταθερές τιμές
refπεδίου αντί για IDs πεδίου - Χειριστείτε μερικές απαντήσεις - Λαμβάνετε υπόψη προαιρετικές και παραλειφθείσες ερωτήσεις
- Ρυθμίστε λογική επανάληψης - Εφαρμόστε idempotent επεξεργασία webhook
Ασφάλεια
- OAuth 2.0 - Πιστοποίηση βάσει token με εύρος
- Υπογραφές webhook - Επικύρωση υπογραφής SHA-256 HMAC
- Μόνο HTTPS - Όλα τα endpoints API απαιτούν TLS
- Εύρος token - Αίτηση ελάχιστων απαιτούμενων OAuth scopes
- Διαχείριση μυστικών - Αποθηκεύστε tokens σε μεταβλητές περιβάλλοντος ή διαχειριστές μυστικών
- Συμμόρφωση GDPR - Χρησιμοποιήστε το Delete Responses API για αιτήματα διαγραφής δεδομένων