কম্পিউটার

Go এবং AWS এর সাথে আপনার নিজের সার্ভারহীন গ্রাহক তালিকা কীভাবে তৈরি করবেন

এই নিবন্ধে, আমি শেয়ার করব কিভাবে আমি প্রেমের সাথে ইমেল নিশ্চিতকরণের সাথে একটি সাবস্ক্রিপশন সাইন আপ ফ্লো তৈরি করেছি যা শোষণ করে না। আপনি এটা করতে পারেন, খুব.

আপনি যদি এটিকে কার্যকরভাবে দেখতে চান তবে আপনি এখন victoria.dev-এ আমার ইমেল তালিকায় সদস্যতা নিতে পারেন।

এখন, আমি আপনাকে দেখাব কিভাবে আমি এটি তৈরি করেছি।

সহজ সাবস্ক্রাইব চালু করা হচ্ছে

আপনি যদি নিজের মেইলিং তালিকা বা নিউজলেটার পরিচালনা করতে আগ্রহী হন, আপনি ইমেল ঠিকানা সংগ্রহ করতে আপনার নিজস্ব AWS সংস্থানগুলিতে সহজ সাবস্ক্রাইব সেট আপ করতে পারেন।

এই ওপেন সোর্স API Go-তে লেখা এবং AWS Lambda-তে চলে। আপনার সাইটের দর্শকরা আপনার তালিকায় সাইন আপ করতে পারেন, যা একটি DynamoDB টেবিলে সংরক্ষিত থাকে, আপনার অবসর সময়ে জিজ্ঞাসা বা রপ্তানি করার জন্য প্রস্তুত৷

কেউ সাইন আপ করলে, তারা তাদের সদস্যতা নিশ্চিত করতে বলে একটি ইমেল পাবে। এটিকে কখনও কখনও "ডাবল অপ্ট-ইন" বলা হয়, যদিও আমি "যাচাই করা" শব্দটি পছন্দ করি।

সাধারণ সাবস্ক্রাইব সার্ভারহীন পরিকাঠামোতে কাজ করে এবং সাবস্ক্রিপশন, নিশ্চিতকরণ এবং আনসাবস্ক্রাইব অনুরোধগুলি পরিচালনা করতে AWS Lambda ব্যবহার করে।

আপনি GitHub-এ সম্পূর্ণ ওপেন সোর্স কোড সহ সিম্পল সাবস্ক্রাইব প্রোজেক্টটি খুঁজে পেতে পারেন। আমি আপনাকে কোড টানতে এবং অনুসরণ করতে উত্সাহিত করি!

এই পোস্টে আমি প্রতিটি বিল্ড স্টেপ, API-এর একক-দায়িত্ব ফাংশনের পিছনে চিন্তা প্রক্রিয়া এবং এইরকম একটি AWS প্রকল্পের জন্য নিরাপত্তা বিবেচনা শেয়ার করব।

কীভাবে একটি যাচাইকৃত সদস্যতা প্রবাহ তৈরি করবেন

একটি অ-যাচাই করা ইমেল সাইন আপ প্রক্রিয়া সহজবোধ্য। কেউ আপনার ওয়েবসাইটের একটি বাক্সে তাদের ইমেল রাখে, তারপর সেই ইমেলটি আপনার ডাটাবেসে যায়।

যাইহোক, যদি আমি আপনাকে ব্যবহারকারীর ইনপুটকে বিশ্বাস না করার বিষয়ে কিছু শিখিয়ে থাকি, তবে একটি অ-যাচাইকৃত সাইন আপ প্রক্রিয়ার ধারণাটি আপনার হ্যাকলকে বাড়াতে হবে। একটি স্যান্ডউইচে ভাজা হলে স্প্যাম দুর্দান্ত হতে পারে, কিন্তু যখন আপনার AWS বিল চলছে তখন এটি কোন মজার নয়৷

আপনি একটি মানবিক যাচাইকরণের জন্য একটি ক্যাপচা বা ধাঁধার মত একটি কৌশল ব্যবহার করতে পারেন, এটি আপনার সম্ভাব্য গ্রাহকদের দূরে সরিয়ে দেওয়ার জন্য যথেষ্ট ঘর্ষণ তৈরি করতে পারে।

পরিবর্তে, একটি নিশ্চিতকরণ ইমেল ঠিকানার সঠিকতা এবং ব্যবহারকারীর অনুভূতি উভয়ই নিশ্চিত করতে সহায়তা করতে পারে।

ইমেল নিশ্চিতকরণ সহ একটি সাবস্ক্রিপশন প্রবাহ তৈরি করতে, একক-দায়িত্ব ফাংশন তৈরি করুন যা প্রতিটি যৌক্তিক পদক্ষেপকে সন্তুষ্ট করে। সেগুলো হল:

  1. একটি ইমেল ঠিকানা গ্রহণ করুন এবং এটি রেকর্ড করুন।
  2. সেই ইমেল ঠিকানার সাথে যুক্ত একটি টোকেন তৈরি করুন এবং এটি রেকর্ড করুন।
  3. টোকেন সহ সেই ইমেল ঠিকানায় একটি নিশ্চিতকরণ ইমেল পাঠান।
  4. একটি যাচাইকরণের অনুরোধ গ্রহণ করুন যাতে ইমেল ঠিকানা এবং টোকেন উভয়ই রয়েছে।

এই প্রতিটি লক্ষ্য অর্জনের জন্য, সিম্পল সাবস্ক্রাইব DynamoDB এবং SES এর সাথে ইন্টারঅ্যাক্ট করতে Go এর জন্য অফিসিয়াল AWS SDK ব্যবহার করে।

প্রতিটি পর্যায়ে, ডেটা দেখতে কেমন এবং আপনি কীভাবে এটি সংরক্ষণ করবেন তা বিবেচনা করুন। "কেউ যদি দুবার সাবস্ক্রাইব করার চেষ্টা করে তাহলে কি হবে?" বা এমনকি হুমকি-মডেলিং যেমন, "কেউ যদি এমন ইমেল দিয়ে সদস্যতা নেয় যা তার নিজের নয়?"

প্রস্তুত? আসুন প্রতিটি ধাপ ভেঙে দেখি কিভাবে জাদুটি ঘটে।

সাবস্ক্রাইব করা

সাবস্ক্রিপশন প্রক্রিয়া একটি নম্র ওয়েব ফর্ম দিয়ে শুরু হয়, যেমন আমার সাইটের মূল পৃষ্ঠায়। type="email" required বৈশিষ্ট্য সহ একটি ফর্ম ইনপুট বৈধতার সাথে সাহায্য করে, ব্রাউজারকে ধন্যবাদ। জমা দেওয়া হলে, ফর্মটি সিম্পল সাবস্ক্রাইব সাবস্ক্রিপশন এন্ডপয়েন্টে একটি GET অনুরোধ পাঠায়।

সিম্পল সাবস্ক্রাইব এই এন্ডপয়েন্টে একটি জিইটি রিকোয়েস্ট পায় যার মধ্যে একটি ক্যোয়ারী স্ট্রিং রয়েছে যার মধ্যে গ্রাহকের ইমেল রয়েছে। এটি তারপর একটি id তৈরি করে মান এবং email উভয়ই যোগ করে এবং id আপনার DynamoDB টেবিলে।

টেবিল আইটেমটি এখন এর মত দেখাচ্ছে:

ইমেল নিশ্চিত করুন id টাইমস্ট্যাম্প
subscriber@example.com মিথ্যা uuid-xxxxx 2020-11-01 00:27:39

confirm কলাম, যা একটি বুলিয়ান ধারণ করে, নির্দেশ করে যে আইটেমটি একটি সাবস্ক্রিপশন অনুরোধ যা এখনও নিশ্চিত করা হয়নি। ডাটাবেসে একটি ইমেল ঠিকানা যাচাই করতে, আপনাকে সঠিক আইটেমটি খুঁজে বের করতে হবে এবং confirm পরিবর্তন করতে হবে true এ .

আপনি যখন আপনার ডেটা নিয়ে কাজ করেন, প্রতিটি ম্যানিপুলেশনের লক্ষ্য বিবেচনা করুন এবং কীভাবে আপনি বিদ্যমান ডেটার সাথে একটি ইনকামিং অনুরোধের তুলনা করতে পারেন।

উদাহরণস্বরূপ, যদি কেউ একই ইমেল ঠিকানার জন্য পরবর্তী সাবস্ক্রিপশন অনুরোধ করে, তাহলে আপনি কীভাবে এটি পরিচালনা করবেন?

আপনি বলতে পারেন, “একটি নতুন id দিয়ে একটি নতুন লাইন আইটেম তৈরি করুন " যাইহোক, যখন আপনার সার্ভারহীন অ্যাপ্লিকেশন ডাটাবেসের জন্য অনুরোধের পরিমাণের জন্য অর্থ প্রদান করা হয় তখন এটি সেরা কৌশল নাও হতে পারে৷

যেহেতু DynamoDB মূল্য নির্ভর করে আপনি আপনার টেবিলে কতটা ডেটা পড়ছেন এবং লিখছেন তার উপর, তাই অতিরিক্ত ডেটা জমা এড়াতে সুবিধা হয়৷

এটি মাথায় রেখে, একটি নতুন লাইন যোগ করার পরিবর্তে একটি আপডেট সম্পাদন করে একই ইমেলের জন্য সাবস্ক্রিপশন অনুরোধগুলি পরিচালনা করা বুদ্ধিমানের কাজ হবে৷

সিম্পল সাবস্ক্রাইব আসলে একই ফাংশন ব্যবহার করে ডাটাবেস আইটেম যোগ বা আপডেট করতে। এটিকে সাধারণত "আপডেট বা সন্নিবেশ" হিসাবে উল্লেখ করা হয়৷

SQLite এর মত একটি ডাটাবেসে এটি UPSERT সিনট্যাক্স দিয়ে সম্পন্ন করা হয়। DynamoDB এর ক্ষেত্রে, আপনি একটি আপডেট অপারেশন ব্যবহার করেন। Go SDK-এর জন্য, এর সিনট্যাক্স হল UpdateItem .

যখন একটি ডুপ্লিকেট সাবস্ক্রিপশন অনুরোধ গৃহীত হয়, ডাটাবেস আইটেমটি email-এ মিলিত হয় কেবল. যদি একটি বিদ্যমান লাইন আইটেম পাওয়া যায়, তার id এবং timestamp ওভাররাইড করা হয়েছে, যা বিদ্যমান ডাটাবেস রেকর্ড আপডেট করে এবং ডুপ্লিকেট অনুরোধের সাথে আপনার টেবিলের বন্যা এড়ায়।

কীভাবে ইমেল ঠিকানা যাচাই করবেন

ফর্ম জমা দেওয়ার পরে, উদ্দেশ্যযুক্ত গ্রাহক তারপরে একটি লিঙ্ক সহ SES থেকে একটি ইমেল পান। এই লিঙ্কটি email ব্যবহার করে তৈরি করা হয়েছে এবং id টেবিল থেকে, এবং ফর্ম্যাট নেয়:

<BASE_URL><VERIFY_PATH>/?email=subscriber@example.com&id=uuid-xxxxx

এই সেট আপে, id একটি UUID যা একটি গোপন টোকেন হিসাবে কাজ করে। এটি একটি শনাক্তকারী প্রদান করে যা আপনি মেলাতে পারেন যা যথেষ্ট জটিল এবং অনুমান করা কঠিন। এই পদ্ধতিটি লোকেদের ইমেল ঠিকানাগুলির সাথে সাবস্ক্রাইব করা থেকে বিরত করে যা তারা নিয়ন্ত্রণ করে না৷

লিঙ্কটি পরিদর্শন করা email সহ আপনার যাচাইকরণের শেষ পয়েন্টে একটি অনুরোধ পাঠায় এবং id ক্যোয়ারী স্ট্রিং এ

এই সময়, আগত email উভয়ের তুলনা করা গুরুত্বপূর্ণ এবং id ডাটাবেস রেকর্ডের মান। এটি নিশ্চিত করে যে নিশ্চিতকরণ ইমেলের প্রাপক অনুরোধটি শুরু করছেন৷

যাচাইকরণের এন্ডপয়েন্ট নিশ্চিত করে যে এই মানগুলি আপনার ডাটাবেসের একটি আইটেমের সাথে মেলে, তারপর confirm সেট করতে অন্য আপডেট অপারেশন করে true এ , এবং টাইমস্ট্যাম্প আপডেট করুন। আইটেমটি এখন এর মত দেখাচ্ছে:

ইমেল নিশ্চিত করুন id টাইমস্ট্যাম্প
subscriber@example.com সত্য uuid-xxxxx 2020-11-01 00:37:39

ইমেলের জন্য কিভাবে প্রশ্ন করতে হয়

আপনি এখন আপনার ইমেল তালিকা তৈরি করতে আপনার টেবিল জিজ্ঞাসা করতে পারেন. আপনার ইমেল পাঠানোর সমাধানের উপর নির্ভর করে, আপনি এটি ম্যানুয়ালি করতে পারেন, অন্য ল্যাম্বডা দিয়ে, এমনকি কমান্ড লাইন থেকেও।

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

একটি ইমেল ঠিকানা যাচাই করার অনুরূপ, সাধারণ সদস্যতা email ব্যবহার করে এবং id ফাংশনের আর্গুমেন্ট হিসাবে যা একটি ইমেল ঠিকানা আনসাবস্ক্রাইব করার জন্য আপনার DynamoDB টেবিল থেকে একটি আইটেম মুছে দেয়।

লোকেদের আপনার তালিকা থেকে নিজেকে সরিয়ে দেওয়ার জন্য, আপনার পাঠানো প্রতিটি ইমেলে আপনাকে একটি URL প্রদান করতে হবে যাতে তাদের email অন্তর্ভুক্ত থাকে এবং id আনসাবস্ক্রাইব এন্ডপয়েন্টে একটি ক্যোয়ারী স্ট্রিং হিসাবে। এটি এমন কিছু দেখাবে:

<BASE_URL><UNSUBSCRIBE_PATH>/?email=subscriber@example.com&id=uuid-xxxxx

যখন লিঙ্কটি ক্লিক করা হয়, কোয়েরি স্ট্রিংটি আনসাবস্ক্রাইব এন্ডপয়েন্টে পাস করা হয়। যদি email দেওয়া হয় এবং id একটি ডাটাবেস আইটেম মেলে, সেই আইটেমটি মুছে ফেলা হবে৷

কোনো মানবিক হস্তক্ষেপের প্রয়োজন ছাড়াই আপনার গ্রাহকদের স্বয়ংক্রিয়ভাবে আপনার তালিকা থেকে নিজেকে সরিয়ে নেওয়ার জন্য একটি পদ্ধতি প্রমাণ করা, আপনার উপর অর্পিত ডেটা পরিচালনা করার জন্য একটি নৈতিক এবং শ্রদ্ধাশীল দর্শনের অংশ।

কিভাবে আপনার ডেটার যত্ন নেবেন

একবার আপনি অন্য লোকের ডেটা গ্রহণ করার সিদ্ধান্ত নিলে, এটি যত্ন নেওয়া আপনার দায়িত্ব হয়ে যায়। এটি আপনার তৈরি করা সমস্ত কিছুর জন্য প্রযোজ্য। সাধারণ সদস্যতার জন্য, এর অর্থ হল আপনার ডাটাবেসের নিরাপত্তা বজায় রাখা এবং পর্যায়ক্রমে আপনার টেবিল ছাঁটাই করা।

যেখানে confirm ইমেল ঠিকানাগুলি ধরে রাখা এড়াতে হল false একটি নির্দিষ্ট সময়সীমা অতিক্রম করে, একটি নিয়মিত সময়সূচীতে চলে এমন একটি পরিষ্কার ফাংশন সেট আপ করা একটি ভাল ধারণা। এটি একটি AWS Lambda ফাংশন বা কমান্ড লাইন ব্যবহার করে ম্যানুয়ালি অর্জন করা যেতে পারে।

পরিষ্কার করতে, ডাটাবেস আইটেম খুঁজুন যেখানে confirm হল false এবং timestamp সময় একটি নির্দিষ্ট বিন্দু থেকে পুরানো. আপনার ব্যবহারের ক্ষেত্রে এবং অনুরোধের ভলিউমের উপর নির্ভর করে, আপনি যে ফ্রিকোয়েন্সিতে পরিষ্কার করতে চান তা পরিবর্তিত হবে।

এছাড়াও আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে, আপনি আপনার ডেটার ব্যাকআপ রাখতে চাইতে পারেন। আপনি যদি ডেটা অখণ্ডতা সম্পর্কে বিশেষভাবে উদ্বিগ্ন হন, তাহলে আপনি DynamoDB-এর জন্য অন-ডিমান্ড ব্যাকআপ বা পয়েন্ট-ইন-টাইম রিকভারি অন্বেষণ করতে পারেন।

আপনার স্বাধীন গ্রাহক ভিত্তি তৈরি করুন

আপনার নিজস্ব গ্রাহক তালিকা তৈরি করা একটি ক্ষমতায়ন প্রয়াস হতে পারে! আপনি একটি নিউজলেটার শুরু করতে চান, নতুন বিষয়বস্তুর জন্য বিজ্ঞপ্তি পাঠাতে চান, বা আপনার কাজের আশেপাশে একটি সম্প্রদায় তৈরি করতে চান, আপনার কাছে আমার কাছ থেকে একটি ইমেলের চেয়ে ব্যক্তিগত বা সরাসরি কিছুই নেই৷

আমি আপনাকে আজই সহজ সাবস্ক্রাইব করে আপনার গ্রাহক বেস তৈরি করতে উত্সাহিত করি। আমার বেশিরভাগ কাজের মতো, এটি ওপেন সোর্স এবং আপনার ব্যক্তিগত ব্যবহারের জন্য বিনামূল্যে। GitHub রিপোজিটরিতে কোডে প্রবেশ করুন বা SimpleSubscribe.org এ আরও জানুন।

আপনি যদি এই পোস্টটি উপভোগ করেন, আমি জানতে চাই। victoria.dev-এ আমার সাথে শেখার হাজার হাজার লোকের সাথে যোগ দিন। এই ধরনের আরও প্রকল্পের জন্য RSS-এর মাধ্যমে যান বা সদস্যতা নিন।


  1. ক্লাউডফ্লেয়ার ওয়ার্কার এবং সার্ভারলেস রেডিস দিয়ে আপনার ওয়েব সাইটের জন্য আপনার নিজস্ব ওয়েটিং রুম তৈরি করুন

  2. কিভাবে SendGrid এবং Next.js দিয়ে একটি যোগাযোগ ফর্ম তৈরি করবেন

  3. কিভাবে আপনার Vue.js অ্যাপ্লিকেশন থেকে EmailJS এর ​​মাধ্যমে ইমেল পাঠাবেন

  4. GitHub মার্কেটপ্লেস দিয়ে শুরু করা:কিভাবে আপনার অ্যাপ এবং টুল তালিকা করা যায়