Typeform कनेक्टर
स्वचालित रूप से फ़ॉर्म सबमिशन सिंक करने, कन्वर्सेशनल फ़ॉर्म्स से लीड्स कैप्चर करने, और सर्वे सबमिशन और क्विज़ परिणामों के आधार पर मार्केटिंग ऑटोमेशन ट्रिगर करने के लिए Tajo के माध्यम से Typeform को Brevo से कनेक्ट करें।
अवलोकन
| गुण | मान |
|---|---|
| प्लेटफ़ॉर्म | Typeform |
| श्रेणी | Forms & Surveys (Custom) |
| सेटअप जटिलता | आसान |
| आधिकारिक इंटीग्रेशन | नहीं |
| सिंक किया गया डेटा | प्रतिक्रियाएं, कॉन्टैक्ट्स, इवेंट्स, फ़ॉर्म्स |
| Auth Method | OAuth 2.0 / Personal Access Token |
विशेषताएं
- रीयल-टाइम प्रतिक्रिया सिंक - वेबहुक्स के माध्यम से स्वचालित रूप से फ़ॉर्म सबमिशन कैप्चर करें
- कॉन्टैक्ट निर्माण - फ़ॉर्म प्रतिक्रियाओं से Brevo कॉन्टैक्ट्स बनाएं या अपडेट करें
- लीड स्कोरिंग - लीड योग्यता के लिए क्विज़ स्कोर और फ़ॉर्म डेटा का उपयोग करें
- Hidden Fields - व्यक्तिगत फ़ॉर्म्स के लिए Hidden Fields के माध्यम से ग्राहक डेटा पास करें
- सशर्त मैपिंग - प्रतिक्रिया लॉजिक के आधार पर विभिन्न फ़ॉर्म फ़ील्ड्स मैप करें
- मल्टी-फ़ॉर्म समर्थन - कई typeforms को विभिन्न Brevo लिस्ट्स से कनेक्ट करें
पूर्वावश्यकताएं
शुरू करने से पहले, सुनिश्चित करें कि आपके पास है:
- एक Typeform खाता (वेबहुक्स के लिए Basic प्लान या ऊपर)
- Typeform Account Settings से एक Personal Access Token
- API एक्सेस वाला एक Brevo खाता
- कनेक्टर अनुमतियों के साथ एक 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_FEEDBACKAPI एंडपॉइंट्स
| एंडपॉइंट | मेथड | विवरण |
|---|---|---|
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 | वेबहुक बनाएं/अपडेट करें |
https://api.typeform.com/forms/{form_id}/webhooks/{tag} | GET | वेबहुक प्राप्त करें |
https://api.typeform.com/forms/{form_id}/webhooks | GET | वेबहुक्स सूचीबद्ध करें |
कोड उदाहरण
कनेक्टर प्रारंभ करें
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] }); }}वेबहुक्स सेट करें
// 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 }) });वेबहुक इवेंट्स हैंडल करें
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');});दर सीमाएं
| एंडपॉइंट | दर सीमा | नोट्स |
|---|---|---|
| Create API | 2 अनुरोध/sec | फ़ॉर्म निर्माण और अपडेट |
| Responses API | 2 अनुरोध/sec | प्रतिक्रिया पुनर्प्राप्ति |
| Webhooks API | 2 अनुरोध/sec | वेबहुक प्रबंधन |
| सभी एंडपॉइंट्स | 120 अनुरोध/min | वैश्विक दर सीमा |
प्रतिक्रिया पेजिनेशन
Responses API प्रति अनुरोध अधिकतम 1,000 प्रतिक्रियाएं लौटाता है। बड़े प्रतिक्रिया सेट प्राप्त करते समय पेजिनेशन के लिए before या after कर्सर पैरामीटर का उपयोग करें।
समस्या निवारण
| समस्या | कारण | समाधान |
|---|---|---|
| Webhook प्राप्त नहीं हुआ | Webhook अक्षम | Typeform डैशबोर्ड में webhook सक्षम करें |
| गायब प्रतिक्रियाएं | फ़िल्टर लागू | since/until और completed पैरामीटर जांचें |
| Auth error 401 | टोकन समाप्त | नया Personal Access Token जनरेट करें |
| दर सीमा 429 | बहुत अधिक अनुरोध | अनुरोध थ्रॉटलिंग लागू करें |
| खाली उत्तर | वैकल्पिक फ़ील्ड्स | null/undefined उत्तर मान हैंडल करें |
डीबग मोड
connectors: typeform: debug: true log_level: verbose log_webhooks: true log_responses: trueसर्वोत्तम प्रथाएं
- वेबहुक्स का उपयोग करें - रीयल-टाइम प्रतिक्रिया कैप्चर के लिए पोलिंग पर वेबहुक्स को प्राथमिकता दें
- सिग्नेचर सत्यापित करें - सुरक्षा के लिए हमेशा वेबहुक सिग्नेचर सत्यापित करें
- Hidden Fields का उपयोग करें - फ़ॉर्म्स में ज्ञात ग्राहक डेटा को पूर्व-पॉपुलेट करें
- फ़ील्ड संदर्भ मैप करें - फ़ील्ड IDs के बजाय स्थिर फ़ील्ड
refमानों का उपयोग करें - आंशिक प्रतिक्रियाएं हैंडल करें - वैकल्पिक और छोड़े गए प्रश्नों का ध्यान रखें
- रीट्राई लॉजिक सेट करें - idempotent वेबहुक प्रोसेसिंग लागू करें
सुरक्षा
- OAuth 2.0 - Scoped टोकन-आधारित प्रमाणीकरण
- Webhook सिग्नेचर - SHA-256 HMAC सिग्नेचर सत्यापन
- HTTPS only - सभी API एंडपॉइंट्स को TLS की आवश्यकता है
- Token scoping - न्यूनतम आवश्यक OAuth scopes का अनुरोध करें
- Secret प्रबंधन - environment variables या secret managers में टोकन संग्रहीत करें
- GDPR अनुपालन - डेटा मिटाने के अनुरोधों के लिए Delete Responses API का उपयोग करें