सामग्री पर जाएं
FormFlow

भेजने से पहले प्रीफ़्लाइट से खराब सबमिशन पकड़ें

जब व्यक्ति अभी पेज पर हो तभी फ़ॉर्म से उसका अपना निर्णय माँगें। प्रीफ़्लाइट अनुरोध की बनावट, Origin और सख्त स्कीमा जाँचता है, कोई पंक्ति संग्रहीत नहीं करता, और असली सबमिशन के स्वीकार होने का वादा कभी नहीं करता।

यह पोस्ट मशीन द्वारा अनुवादित है। अंग्रेज़ी में मूल पोस्ट पढ़ें

A dark FormFlow plate titled 'Ask before Send.' with a checklist reading Shape, Origin and Strict schema ready, and 'No side effects' kept.

अस्वीकृत सबमिशन उस एक चीज़ की कीमत लेता है जो यह उत्पाद कभी वापस नहीं पा सकता: एक व्यक्ति जो पेज पर था और फिर नहीं रहा। FormFlow हर अस्वीकृति को ऐसे रिकॉर्ड के रूप में रखता है जिस पर आप कार्रवाई कर सकते हैं, और फ़ॉर्म के स्वास्थ्य संकेत उन्हें गिनते हैं। प्रीफ़्लाइट इस निर्णय का अकेला हिस्सा है जो भेजें से पहले चलता है। यह v1.0.0 के साथ आया।

प्रीफ़्लाइट किसका उत्तर देता है

अपने फ़ॉर्म जो उत्तर भेजता, वही उत्तर JSON में लेकर /api/v1/f/{token}/preflight पर POST भेजें, और पथ में फ़ॉर्म का सार्वजनिक टोकन रखें। यह एंडपॉइंट वही निर्णय लौटाता है जो प्रवेश एंडपॉइंट उन उत्तरों पर देता, बिना वह निर्णय दिए। पेज का अपना Origin हेडर भेजें और वह ठीक वैसे ही जाँचा जाता है जैसे सबमिशन एंडपॉइंट जाँचता है। अनुबंध API संदर्भ में लिखा है।

उत्तर में चार कुंजियाँ हैं: ok, errors, checked और policy. errors एक ऑब्जेक्ट है जिसकी कुंजियाँ फ़ील्ड के नाम और मान वाक्यों की सूचियाँ हैं, और खाली होने पर भी ऑब्जेक्ट ही रहता है ताकि कोई जनरेट किया गया कॉलर उसे इंडेक्स कर सके। checked बताता है कि वास्तव में क्या पूछा गया — बनावट, origin और स्कीमा — होस्ट किए गए पेज पर origin अनुपस्थित रहता है, क्योंकि FormFlow जो पेज परोसता है वह आपकी अनुमत स्रोत सूची के अधीन नहीं है।

जब व्यक्ति अभी पेज पर हो तब इसे बुलाएँ

एक fetch काफ़ी है। यह कॉल का आकार है; इसे उसी घटना से जोड़ें जिस पर आपका पेज पहले से भरोसा करता है, जैसे किसी फ़ील्ड से बाहर निकलना।

const endpoint = 'https://formflow.digital/api/v1/f/YOUR_FORM_TOKEN/preflight'

async function preflight(answers) {
  const response = await fetch(endpoint, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
    body: JSON.stringify(answers),
  })

  // A 429 or an outage is not a verdict. Say nothing rather than something wrong.
  if (!response.ok) return null

  const { ok, errors, checked, policy } = await response.json()
  return ok ? [] : Object.entries(errors)
}

जो वाक्य लौटते हैं उन्हें उसी फ़ील्ड के पास दिखाएँ जिसका वे नाम लेते हैं। अपने कोड में नियम दोबारा न लिखें: एंडपॉइंट का उद्देश्य यही है कि व्यक्ति जो वाक्य पढ़े वही वाक्य एंडपॉइंट इस्तेमाल करता, फ़ॉर्म की भाषा में, आपके JavaScript की भाषा में नहीं।

उत्तर पढ़ें

कुंजी

इसमें क्या है

ok

true केवल तब जब किसी ने उत्तरों को अस्वीकार न किया हो

errors

हर फ़ील्ड नाम के लिए एक प्रविष्टि, हर एक वाक्यों की सूची

checked

क्या पूछा गया: बनावट, origin, स्कीमा

policy.revision

निर्णय में इस्तेमाल नीति का संस्करण

policy.fingerprint

उसी सटीक नीति की पहचान करने वाला फ़िंगरप्रिंट

errors में दो कुंजियाँ फ़ील्ड नहीं हैं। origin अनुमत स्रोत सूची की अस्वीकृति रखता है, और submission वह अस्वीकृति रखता है जो किसी एक उत्तर की नहीं बल्कि पूरे फ़ॉर्म की होती है, जैसे बंद फ़ॉर्म। policy ब्लॉक लॉग करें: संस्करण और फ़िंगरप्रिंट मिलकर उसी सटीक नीति की पहचान करते हैं जो निर्णय में लगी, और यही आपको उस दिन चाहिए जब यहाँ पास होने के बाद वहाँ अस्वीकृति आए।

यह क्या नहीं पूछता

यह निर्णय का केवल वह आधा पूछता है जो फ़ॉर्म के कॉन्फ़िगरेशन का शुद्ध फ़ंक्शन है। यह स्पैम स्कोरिंग नहीं चलाता, Turnstile चुनौती नहीं माँगता, और फ़ाइल फ़ील्ड की ओर बिल्कुल नहीं देखता — प्रीफ़्लाइट कोई बाइट नहीं ढोता, इसलिए घोषित तस्वीर न जाँची जाती है न उसका वादा किया जाता है। यह कोई पंक्ति संग्रहीत नहीं करता, कोटा नहीं खर्च करता और कुछ भी वितरित नहीं करता।

पर यह दर सीमक के भीतर है। प्रीफ़्लाइट सबमिशन एंडपॉइंट के साथ token|IP बकेट और पूरी टीम का अनुरोध बकेट साझा करता है, इसलिए एक झोंका 429 और Retry-After लौटा सकता है। 429 निर्णय का अभाव है, अस्वीकृति नहीं, और पेज को चुप रहना चाहिए, गलती गढ़नी नहीं चाहिए।

यह कहाँ बैठता है

अस्वीकृत सबमिशन के लिए FormFlow के पास जो भी दूसरा तंत्र है वह किसी के अस्वीकार होने के बाद चलता है: अस्वीकृति बही, स्वास्थ्य संकेत, अस्वीकृति सतह और पुनर्प्राप्ति इनबॉक्स। यह अकेला है जो उससे पहले चलता है। इसे दो निर्णयों में से पहला मानें, कभी अकेला नहीं।

  • पास होना वादा नहीं है। POST तय करता है, और वह प्रीफ़्लाइट के न पूछे हुए सब कुछ के साथ दोबारा तय करता है।

  • दोनों कॉलों के बीच फ़ॉर्म बदलें तो उत्तर भी बदल सकता है। उत्तर में दिया नीति संस्करण वही है जिसने आप पर निर्णय दिया।

  • फ़ाइल फ़ील्ड की जाँच नहीं होती, इसलिए किसी सबमिटर से कभी न कहें कि उसकी तस्वीर प्रीफ़्लाइट के आधार पर स्वीकार हुई।

  • errors की कुंजियाँ फ़ील्ड नाम हैं, पर origin और submission फ़ील्ड नहीं हैं; उन्हें फ़ॉर्म के ऊपर दिखाएँ।

  • फ़ॉर्म का सार्वजनिक टोकन रखने वाला कोई भी इसे बुला सकता है। यह इस बात का प्रमाण नहीं कि कौन बुला रहा है, और यह कोई रहस्य नहीं है।

अपने पहले फ़ॉर्म को FormFlow पर निर्देशित करें।

कोई बैकएंड बनाने की आवश्यकता नहीं, कोई फ्रंटएंड होस्ट करने की आवश्यकता नहीं।

मुफ़्त में आरंभ करें