সাবস্ক্রাইবার ডেটা এবং সেগমেন্টের জন্য টেলিকম স্টার্টার
এই গাইডটি Pushwoosh-এ একটি টেলিকম সাবস্ক্রাইবার প্রোফাইল সেট আপ করে এবং এটিকে কার্যকরী সেগমেন্টে পরিণত করে: বান্ডেল এক্সপায়ারি রিমাইন্ডার, লো ব্যালেন্স অ্যালার্ট, টপ-আপ কনফার্মেশন, এবং রোমিং ওয়েলকাম মেসেজ। প্রতিটি বিভাগ সম্পূর্ণ করুন এবং আপনার তৈরি করা প্রথম সেগমেন্টটি একটি নন-জিরো অডিয়েন্স দেখাবে, তাই আপনাকে সাপোর্টের সাথে যোগাযোগ করতে হবে না।
সবচেয়ে সাধারণ ভুল হলো ট্যাগ টাইপ। একটি Integer ট্যাগে সংরক্ষিত তারিখ ট্যাগ তালিকায় ঠিক দেখায় এবং নীরবে প্রতিটি ডেট সেগমেন্টকে শূন্য ব্যবহারকারী দেখাতে বাধ্য করে। প্রথমে টাইপগুলো বেছে নিন, তারপর ডেটা লোড করুন।
পূর্বশর্ত
Anchor link to- আপনার Pushwoosh অ্যাকাউন্টে একটি অ্যাপ্লিকেশন, যেখানে SDK ইন্টিগ্রেটেড আছে অথবা API-এর মাধ্যমে ডিভাইস রেজিস্টার করা আছে।
- ট্যাগ সেট করার অনুমতি সহ একটি API access token।
- সার্ভার-টু-সার্ভার আপডেট কাজের জন্য ডেভেলপারের সহায়তা।
- একটি সাবস্ক্রাইবার আইডেন্টিফায়ার যা আপনি Pushwoosh-এ ম্যাপ করতে পারেন: হয় একটি User ID (সাধারণত MSISDN, আন্তর্জাতিক ফর্ম্যাটে সাবস্ক্রাইবারের ফোন নম্বর, বা একটি অভ্যন্তরীণ সাবস্ক্রাইবার আইডি) অথবা ডিভাইস HWID।
একটি টেলিকম সাবস্ক্রাইবার প্রোফাইল কেমন দেখতে হয়
Anchor link toনীচের সারণীতে সেই ট্যাগগুলো তালিকাভুক্ত করা হয়েছে যা স্ট্যান্ডার্ড টেলিকম পরিস্থিতিগুলো কভার করে। প্রথম ডেটা লোড করার আগে, ঠিক এই টাইপগুলো ব্যবহার করে এগুলো তৈরি করুন।
| ট্যাগ | টাইপ | উদাহরণ মান | এটি কী চালনা করে |
|---|---|---|---|
msisdn | String | 923001234567 | পরিচয় এবং SMS টার্গেটিং |
tariff_plan | String | Gold Postpaid | প্ল্যান-নির্দিষ্ট অফার |
prepaid_postpaid | String | prepaid | বিলিং মডেল অনুযায়ী বেস বিভক্ত করা |
balance | Integer | 50 | কম ব্যালেন্সের সতর্কতা |
bundle_id | String | DATA_5GB_30D | রিমাইন্ডারটি কোন বান্ডেল সম্পর্কে |
bundle_expiry_date | Date | 2026-09-20 21:00:00 | বান্ডেল এক্সপায়ারি রিমাইন্ডার |
roaming_status | Boolean | true | রোমিং ওয়েলকাম মেসেজ এবং রোমিং চার্জ সম্পর্কে সতর্কতা |
এই সারণীর দুটি সারি নির্ধারণ করে যে পরিস্থিতিগুলো আদৌ কাজ করবে কিনা।
bundle_expiry_dateএকটি Date ট্যাগ হতে হবে। শুধুমাত্র Date ট্যাগগুলো রিলেটিভ অপারেটর পায়, যেমনN থেকে M দিন পরে, যা “বান্ডেলটি তিন দিনের মধ্যে এক্সপায়ার হবে” এই বিষয়টি প্রকাশ করে, প্রতি রাতে সেগমেন্টটি পুনরায় গণনা না করেই।bundle_idএক্সপায়ারি তারিখ থেকে আলাদা থাকে। একটি ট্যাগ তারিখ ধারণ করে, অন্যটি এটি কোন বান্ডেলের অন্তর্গত তা ধারণ করে। উভয়কে একটি ট্যাগে সংরক্ষণ করলে সেগমেন্টের ভিতরে একটি স্ট্রিং পার্স করার প্রয়োজন হবে, যা সেগমেন্ট বিল্ডার করতে পারে না।
প্রথম আপলোডের আগে কেন ট্যাগের টাইপ নির্ধারণ করা হয়
Anchor link toপ্রথমবার কোনো মান এলে ট্যাগগুলো স্বয়ংক্রিয়ভাবে তৈরি হয়, এবং সেই প্রথম মান থেকে টাইপটি অনুমান করা হয়। একটি পূর্ণ সংখ্যা Integer হয়ে যায়, দশমিক বিন্দু সহ একটি সংখ্যা Price হয়ে যায়, একটি স্ট্রিং String হয়ে যায় (অথবা Date, যদি এটি 2024-10-02 22:11-এর মতো স্বীকৃত ডেট-টাইম ফর্ম্যাটের সাথে মিলে যায়), একটি অ্যারে List হয়ে যায়, এবং true/false Boolean হয়ে যায়।
টেলিকম ডেটার ক্ষেত্রে এই অনুমান ব্যর্থ হয়, কারণ এক্সপায়ারি তারিখগুলো সাধারণত Unix টাইমস্ট্যাম্প হিসাবে পাঠানো হয়:
- আপনি
bundle_expiry_dateসংখ্যা1758393600হিসাবে পাঠান। এটি একটি পূর্ণ সংখ্যা, তাই ট্যাগটি একটি Integer ট্যাগ হিসাবে তৈরি হয়। মানগুলো সঠিকভাবে লোড হয়, ট্যাগটি সুস্থ দেখায়, এবং এর জন্য কোনো ডেট অপারেটর অফার করা হয় না। - ট্যাগটি ইতিমধ্যে Integer হিসাবে বিদ্যমান এবং আপনি পরে
"2026-09-20"পাঠানো শুরু করেন। মানটি আর সংখ্যা হিসাবে পার্স করা যায় না, তাই এটি কোনো ত্রুটি ছাড়াই বাদ দেওয়া হয়। API এখনও সফলতার সাথে উত্তর দেয়, এবং ডিভাইসটি তার পুরানো মান বা কোনো মানই রাখে না।
উভয় ক্ষেত্রেই এমন একটি সেগমেন্ট তৈরি হয় যা শূন্য ব্যবহারকারী দেখায় এবং এটি ব্যাখ্যা করার জন্য কোথাও কোনো ত্রুটি থাকে না।
তৈরি করার পর একটি ট্যাগের টাইপ পরিবর্তন করা যায় না। একটি ভুল টাইপ ঠিক করার অর্থ হলো সঠিক টাইপ সহ একটি নতুন ট্যাগ তৈরি করা এবং মানগুলো এতে পুনরায় লোড করা। পুরানো ট্যাগটি আপনি ডিলিট না করা পর্যন্ত তালিকায় থেকে যায়।
উভয় পরিস্থিতি প্রতিরোধ করতে, টাইপগুলো নিজে সেট করুন:
- আপনার কন্ট্রোল প্যানেলের Tags পৃষ্ঠাটি খুলুন।
- ট্যাগ তৈরি করুন-এ ক্লিক করুন।
- ট্যাগের নাম লিখুন এবং তালিকা থেকে এর টাইপ বেছে নিন। প্রথম আপলোডের আগে, উপরের সারণীর প্রতিটি ট্যাগের জন্য এটি পুনরাবৃত্তি করুন।
bulkSetTags-এ,create_missing_tags: falseপাঠান। তাহলে একটি অনুপস্থিত ট্যাগ একটি অনুমান করা টাইপ দিয়ে তৈরি হওয়ার পরিবর্তে একটি ত্রুটি দেখাবে।
সার্ভার-টু-সার্ভার প্রোফাইল কীভাবে আপডেট করবেন
Anchor link toটেলিকম প্রোফাইল ডেটা প্রতিদিন পরিবর্তিত হয়, তাই এটি মোবাইল SDK থেকে না করে একটি ব্যাচ জব হিসাবে লোড করা হয়।
- আপনার দিকে দৈনিক ডেল্টা তৈরি করুন: সেই সব সাবস্ক্রাইবার যাদের ব্যালেন্স, বান্ডেল, বা রোমিং স্ট্যাটাস শেষ রানের পর থেকে পরিবর্তিত হয়েছে। প্রতি রাতে একটি সম্পূর্ণ বেস রিলোড খুব কমই প্রয়োজন হয় এবং এটি আপনার রিকোয়েস্ট ভলিউম খরচ করে।
- ব্যাচটি
bulkSetTags-এ পাঠান, ডিভাইসগুলোকেuser_idদ্বারা অ্যাড্রেস করুন যখন MSISDN আপনার User ID হয়, অথবা অন্যথায়hwidদ্বারা। একটি রিকোয়েস্টে অনেক ডিভাইস থাকে, এবং মেথডটি কমপক্ষে ৫০টি ডিভাইস আশা করে। একটি একক সাবস্ক্রাইবারের জন্য, এর পরিবর্তেsetTagsব্যবহার করুন। - প্রত্যাবর্তিত
request_id-কেbulkSetTagsstatus দিয়ে পোল করুন যতক্ষণ না কাজটি শেষ হয়। এটিকে?detailed=trueদিয়ে রিকোয়েস্ট করুন এবং ফলাফলটি লগ করুন, কারণ একটি সমাপ্ত কাজ আর প্রতিটি মান গৃহীত হওয়া এক জিনিস নয়। - ব্যর্থ ব্যাচগুলো একই পেলোড দিয়ে পুনরায় চেষ্টা করুন। একটি ট্যাগ সেট করা আইডমপোটেন্ট: একই মান দুবার পাঠালে একই প্রোফাইল থাকে।
{ "application": "XXXXX-XXXXX", "auth": "your API access token", "create_missing_tags": false, "devices": [{ "user_id": "923001234567", "tags": { "bundle_id": "DATA_5GB_30D", "bundle_expiry_date": "2026-09-20 21:00:00", "balance": 50, "roaming_status": false } }]}একটি Date ট্যাগ কোন তারিখের ফর্ম্যাটগুলো গ্রহণ করে
Anchor link toএকটি Date ট্যাগ সেকেন্ডে একটি Unix epoch টাইমস্ট্যাম্প সংরক্ষণ করে। এগুলোর মধ্যে একটি পাঠান:
- সেকেন্ডে একটি epoch মান, একটি সংখ্যা হিসাবে:
1758393600। - বিভাজক সহ একটি তারিখ-সময় স্ট্রিং:
2026-09-20 21:00:00,2026-09-20 21:00, বা2026-09-20। সময় ছাড়া একটি তারিখ মানে মধ্যরাত। - একটি অফসেট সহ একটি ISO 8601 স্ট্রিং:
2026-09-20T21:00:00+05:00।
দুটি ফর্ম্যাট এমনভাবে আচরণ করে যা বেশিরভাগ ইন্টিগ্রেশনকে অবাক করে:
- সময় অঞ্চল ছাড়া একটি স্ট্রিং UTC হিসাবে পড়া হয়। এটি আপনার স্থানীয় সময়ে পড়া হয় না। করাচিতে রাত ৯টায় এক্সপায়ার হওয়া একটি বান্ডেল হলো
2026-09-20T21:00:00+05:00, অথবা এর সাথে মিলে যাওয়া epoch মান।2026-09-20 21:00:00বাস্তব সময়ে তিন ঘন্টা আগে, যা সাবস্ক্রাইবারদের দৈনিক রিমাইন্ডার ওয়েভের মধ্যে স্থানান্তরিত করে। - অঙ্কের একটি স্ট্রিং একটি epoch মান, তারিখ নয়।
"20260920"সেপ্টেম্বর ২০, ২০২৬ নয়, এটি ১৯৭০ সালের একটি epoch টাইমস্ট্যাম্প। হয় একটি আসল epoch মান পাঠান অথবা বিভাজক সহ একটি স্ট্রিং পাঠান।
গৃহীত ফর্ম্যাটগুলোর কোনোটির সাথে না মেলা একটি মান রিকোয়েস্ট ব্যর্থ না করেই বাতিল করা হয়। এই কারণেই উপরের ৩ নং ধাপে শুধুমাত্র HTTP স্ট্যাটাসের পরিবর্তে কাজের ফলাফল পরীক্ষা করা হয়।
সেগমেন্ট রেসিপি
Anchor link toনীচের প্রতিটি রেসিপি একটি সেগমেন্ট। Segments বিভাগটি খুলুন, বিল্ডার খুলতে সেগমেন্ট তৈরি করুন-এ ক্লিক করুন, তারপর তালিকাভুক্ত ফিল্টারগুলো যোগ করুন। সম্পূর্ণ বিল্ডার ওয়াকথ্রুর জন্য, দেখুন Create segments by tags।
বান্ডেল তিন দিনের মধ্যে এক্সপায়ার হবে
Anchor link toযাদের বর্তমান বান্ডেল তিন দিনের মধ্যে শেষ হয়ে যাবে সেই সব সাবস্ক্রাইবারদের টার্গেট করে, যাতে রিমাইন্ডারটি এমন সময় পৌঁছায় যখন রিনিউ করাটা অর্থবহ হয়।
- ট্যাগ:
bundle_expiry_date - অপারেটর: অপারেটর তালিকা খুলুন, আপেক্ষিক তারিখসমূহ বিভাগে যান, এবং
N থেকে M দিন পরেবেছে নিন - মান:
3এবং3
শেষ দিনের রিমাইন্ডারের জন্য উভয় মান 1 এবং 1-এ পরিবর্তন করুন। যখন মেসেজটি নির্দিষ্ট বান্ডেলের নাম উল্লেখ করে তখন bundle_id-এর উপর একটি দ্বিতীয় ফিল্টার যোগ করুন।
কম ব্যালেন্স
Anchor link toপ্রিপেইড সাবস্ক্রাইবারদের টার্গেট করে যারা পরবর্তী রিনিউয়ালের জন্য আর অর্থ প্রদান করতে পারবেন না।
- ট্যাগ:
balance, অপারেটরকম বা সমান, মান50 - ট্যাগ:
prepaid_postpaid, অপারেটরসমান, মানprepaid
উভয় শর্তই একই গ্রুপে যায়, এবং দিয়ে মিলিত হয়ে।
রোমিং এন্ট্রি
Anchor link toবর্তমানে বিদেশে থাকা সাবস্ক্রাইবারদের স্থানীয় রেট সহ একটি ওয়েলকাম মেসেজের জন্য টার্গেট করে।
- ট্যাগ:
roaming_status, অপারেটরহ্যাঁ
একটি ট্যাগ-ভিত্তিক সেগমেন্ট কম্পাইল করার সময়ের অবস্থা প্রতিফলিত করে। যখন আপনার প্রয়োজন হয় যে রোমিং শুরু হওয়ার মুহূর্তে মেসেজটি চলে যাক, তখন এই সেগমেন্টে পাঠানোর পরিবর্তে একটি রোমিং ইভেন্ট থেকে একটি কাস্টমার জার্নি ট্রিগার করুন।
টপ-আপ কনফার্মেশন এবং অন্যান্য প্রতিক্রিয়া
Anchor link toএকটি টপ-আপ কনফার্ম করা একজন একক সাবস্ক্রাইবারের কার্যকলাপের প্রতিক্রিয়া, কম্পাইল করার জন্য কোনো অডিয়েন্স নয়। আপনার বিলিং সিস্টেম থেকে postEvent দিয়ে একটি কাস্টম ইভেন্ট পাঠান এবং এটি থেকে একটি কাস্টমার জার্নি শুরু করুন। একই নিয়ম বান্ডেল ক্রয় এবং প্ল্যান পরিবর্তনের ক্ষেত্রেও প্রযোজ্য।
সেগমেন্টটি শূন্য ব্যবহারকারী দেখাচ্ছে
Anchor link toএগুলো ক্রমানুসারে পরীক্ষা করুন। প্রথম তিনটি সাপোর্টে রিপোর্ট করা বেশিরভাগ কেস কভার করে।
- Tags পৃষ্ঠায় ট্যাগের টাইপ পরীক্ষা করুন। যদি
bundle_expiry_dateInteger হয়, তাহলে কোনো ডেট অপারেটর প্রয়োগ করা হয়নি এবং সেগমেন্টটি সংখ্যা তুলনা করেছে। একটি Date ট্যাগ তৈরি করুন এবং মানগুলো পুনরায় লোড করুন। - মানগুলো আসলে এসেছে কিনা তা পরীক্ষা করুন। User Explorer খুলুন, এমন একজন সাবস্ক্রাইবার খুঁজুন যাকে আপনি জানেন যে ব্যাচে ছিল, এবং তাদের ট্যাগগুলো দেখুন। একটি সফল কাজের পর একটি খালি ট্যাগ মানে মানগুলো ফর্ম্যাটের কারণে প্রত্যাখ্যান করা হয়েছে, প্রায়শই শুধুমাত্র-অঙ্কের স্ট্রিং বা এমন একটি তারিখ যা কোনো লেআউটের সাথে মেলেনি।
- অপারেটর বিভাগটি পরীক্ষা করুন। বার্ষিকী-এর অধীনে
N দিন পরেবছরটিকে উপেক্ষা করে। আপেক্ষিক তারিখসমূহ-এর অধীনেN থেকে M দিন পরেতা করে না। - সময় অঞ্চল পরীক্ষা করুন। অফসেট ছাড়া পাঠানো এক্সপায়ারি টাইমস্ট্যাম্পগুলো UTC হিসাবে পড়া হয়, যা একজন সাবস্ক্রাইবারকে আপনার রিমাইন্ডার সময়সূচীর আগের বা পরের দিনে স্থানান্তরিত করতে পারে।
- সংখ্যাটি পড়ার আগে সেগমেন্টটি পুনরায় গণনা করুন, যাতে আপনি একটি ক্যাশ করা আকার না দেখেন। দেখুন Calculating segment size।
যে সীমাবদ্ধতাগুলো বিবেচনা করতে হবে
Anchor link to- একটি ট্যাগের টাইপ স্থায়ী। প্রথম আপলোডের আগে প্রোফাইল পরিকল্পনা করুন, কারণ পরে একটি টাইপ ঠিক করার অর্থ একটি নতুন ট্যাগ এবং একটি সম্পূর্ণ রিলোড।
- রিলেটিভ ডেট অপারেটরগুলো হাই-স্পিড ডেলিভারি সেগমেন্টে अनुपलब्ध। হাই-স্পিড ডেলিভারি-এর জন্য কনফিগার করা অ্যাপ্লিকেশনগুলো তাদের সেগমেন্টগুলো প্রিকম্পাইল করে, এবং সেখানে রিলেটিভ ডেট অপারেটরগুলো অফার করা হয় না। বান্ডেল এক্সপায়ারি রিমাইন্ডারগুলো সাধারণ সেগমেন্ট হিসাবে চলতে হবে।
- একটি ব্যাচ জব রিয়েল-টাইম নয়। সেগমেন্টগুলো শেষ সফল লোডের সময়কার প্রোফাইল দেখে। যে পরিস্থিতিগুলো ব্যালেন্স পরিবর্তনের কয়েক সেকেন্ডের মধ্যে ফায়ার করতে হবে, সেগুলো একটি ইভেন্ট-ট্রিগারড জার্নির অন্তর্গত, রাতের ব্যাচের নয়।