পাঠানোর আগেই প্রিফ্লাইট দিয়ে খারাপ সাবমিশন ধরে ফেলুন
ব্যক্তি যখন এখনও পৃষ্ঠায় আছে, তখনই ফর্মের নিজের রায় চান। প্রিফ্লাইট অনুরোধের গঠন, Origin ও স্ট্রিক্ট স্কিমা যাচাই করে, কোনো সারি সংরক্ষণ করে না, এবং আসল সাবমিশন গৃহীত হবে বলে কখনও প্রতিশ্রুতি দেয় না।
এই পোস্টটি যন্ত্রের মাধ্যমে অনুবাদ করা হয়েছে। ইংরেজিতে মূল পোস্টটি পড়ুন

প্রত্যাখ্যাত সাবমিশনের দাম দিতে হয় সেই একমাত্র জিনিসটি দিয়ে যা এই পণ্য কখনও ফিরিয়ে আনতে পারে না: একজন মানুষ যে পৃষ্ঠায় ছিল, তারপর আর নেই। 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ফিল্ড নয়; সেগুলো ফর্মের উপরে দেখান।ফর্মের পাবলিক টোকেন আছে এমন যে কেউ এটিকে ডাকতে পারে। এটি এই প্রমাণ দেয় না যে কে ডাকছে, আর এটি কোনো গোপন বিষয় নয়।