পেলোড রেফারেন্স
যেকোনো নন-ইমেল চ্যানেলের (পুশ, SMS, টেলিগ্রাম, Kakao, LINE, ভাইবার, WhatsApp, ফেসবুক মেসেঞ্জার) মাধ্যমে পাঠানোর সময় Notify দ্বারা ব্যবহৃত Payload মেসেজের জন্য রেফারেন্স।
পেলোড
Anchor link topreset(string): এই মেসেজে প্রয়োগ করার জন্য পুশ প্রিসেট কোড (ফরম্যাটXXXXX-XXXXX)।sms_preset(string): একটি সেভ করা SMS প্রিসেট এর কোড (ফরম্যাটXXXXX-XXXXX)। এর প্রতি-লোকেল টেক্সট প্রতিটি লোকেল-এরsms.bodyতে রূপান্তরিত হয়। একটি নির্দিষ্ট লোকেল-এর জন্য একটি ইনলাইনsms.bodyসেই লোকেল-এর জন্য প্রিসেটটিকে ওভাররাইড করে। প্রিসেটটি অবশ্যই মেসেজের মতো একই অ্যাপ্লিকেশনের হতে হবে।content(LocalizedContent): মেসেজের কন্টেন্ট।silentএর সাথে পারস্পরিকভাবে স্বতন্ত্র।silent(bool): সমস্ত প্ল্যাটফর্মে একটি সাইলেন্ট (শুধুমাত্র ডেটা) পুশ পাঠান।contentএর সাথে পারস্পরিকভাবে স্বতন্ত্র। শুধুমাত্র কিছু প্ল্যাটফর্মকে সাইলেন্ট করতে, এর পরিবর্তে iOS বা Android-এর জন্যcontent-এর ভিতরেsilentসেট করুন।custom_data(object): ফ্রি-ফর্ম JSON যা ক্লায়েন্ট SDK-তেuপ্যারামিটার হিসেবে ফরওয়ার্ড করা হয়। খুব বড় পূর্ণসংখ্যা নির্ভুলতা হারাতে পারে, দেখুন কাস্টম ডেটায় বড় পূর্ণসংখ্যা।custom_data_raw(string): একটি JSON অবজেক্ট ধারণকারী স্ট্রিং, যা ক্লায়েন্ট SDK-তেuপ্যারামিটার হিসেবে ফরওয়ার্ড করা হয়। এর সংখ্যাগুলি তাদের সঠিক মান বজায় রাখে। একটি খালি নয় এমনcustom_dataএর সাথে পারস্পরিকভাবে স্বতন্ত্র। একটি অবৈধ মান400রিটার্ন করে।open_action(OpenAction): ব্যবহারকারী নোটিফিকেশন খুললে যে অ্যাকশনটি ট্রিগার হয়।open_actions(map<Platform,OpenAction>):open_action-এর প্রতি-প্ল্যাটফর্ম ওভাররাইড। কী হল একটি সংখ্যাসূচকPlatformenum মান।voip_push(bool): iOS VoIP নোটিফিকেশন।
{ "payload": { "preset": "XXXXX-XXXXX", "content": { "localized_content": { "default": { "ios": { "title": "Hello", "body": "Tap to view" } } } }, "custom_data": { "order_id": "42" }, "open_action": { "link": { "url": "https://example.com/promo" } } }}কাস্টম ডেটায় বড় পূর্ণসংখ্যা
Anchor link to9007199254740992-এর বেশি পূর্ণসংখ্যা custom_data-তে নির্ভুলতা হারায়। সেগুলিকে নির্ভুল রাখতে custom_data_raw ব্যবহার করুন।
custom_data হলো একটি google.protobuf.Struct (একটি সাধারণ JSON-সদৃশ অবজেক্ট)। এটি প্রতিটি সংখ্যাকে double হিসেবে সংরক্ষণ করে, যা একটি ৬৪-বিট ফ্লোটিং-পয়েন্ট সংখ্যা এবং শুধুমাত্র 9007199254740992 পর্যন্ত পূর্ণসংখ্যার জন্য নির্ভুল। বড় পূর্ণসংখ্যাগুলি রাউন্ড করা হয়: 5190090000030465245 ডিভাইসে 5190090000030465000 হিসেবে পৌঁছায়। স্ট্রিং প্রভাবিত হয় না।
এই ধরনের পূর্ণসংখ্যা নির্ভুল রাখতে, custom_data_raw-এ JSON অবজেক্ট ধারণকারী একটি স্ট্রিং পাঠান:
{ "payload": { "silent": true, "custom_data_raw": "{\"pushUID\": 5190090000030465245}" } }custom_data_raw-এর নিয়ম:
- স্ট্রিংটিতে অবশ্যই একটি JSON অবজেক্ট থাকতে হবে। একটি অ্যারে, একটি স্ট্রিং,
null, বা অবৈধ JSONpayload.custom_data_raw-এ একটি ফিল্ড লঙ্ঘন সহ400(INVALID_ARGUMENT) রিটার্ন করে। custom_data-তে কোনো কী থাকলে এবংcustom_data_rawসেট করা থাকলে, রিকোয়েস্টটি400রিটার্ন করে। একটি খালিcustom_dataঅবজেক্ট উপেক্ষা করা হয়।custom_data-এর মতো, এটি পুশpreset-এ সেভ করা কাস্টম ডেটা প্রতিস্থাপন করে।- ডেলিভারির আগে অবজেক্টটিকে আবার JSON টেক্সটে রূপান্তর করা হয়। কী-এর ক্রম সংরক্ষিত হয় না এবং হোয়াইটস্পেস সরিয়ে ফেলা হয়। সংখ্যাগুলি তাদের সঠিক মান বজায় রাখে, তবে মূল টেক্সট বাইট-বাই-বাইট সংরক্ষিত হয় না।
/messaging/v2/notify/batch-এ, একটি অবৈধcustom_data_rawশুধুমাত্র তার নিজস্ব আইটেমকে ব্যর্থ করে। অন্যান্য আইটেম পাঠানো হয়।
আপনি কীভাবে রিকোয়েস্ট পাঠান:
- REST:
/messaging/v2/notifyএবং/messaging/v2/notify/batch-এর জন্য কোনো পরিবর্তনের প্রয়োজন নেই। যদিcustom_data-তে এমন একটি পূর্ণসংখ্যা থাকে যা একটি double সঠিকভাবে উপস্থাপন করতে পারে না, API স্বয়ংক্রিয়ভাবে এটিকে কোনো ক্ষতি ছাড়াই রাখে। আপনি এখনও স্পষ্টভাবেcustom_data_rawসেট করতে পারেন। - gRPC: ক্লায়েন্ট নিজেই
Structতৈরি করে, তাই রিকোয়েস্ট পাঠানোর আগেই নির্ভুলতা হারিয়ে যায়।custom_data-এর পরিবর্তেcustom_data_rawপূরণ করুন।
নোটিফিকেশন কোথায় ডেলিভার করা হয়:
- Android: SDK
PushMessage.getCustomData()-এর মাধ্যমেu-কে স্ট্রিং হিসেবে অ্যাপে পাঠায়, তাই প্রতিটি অঙ্ক সংরক্ষিত থাকে। - Web push: Web SDK
JSON.parseদিয়েuপার্স করে, এবং JavaScript-এর প্রতিটি সংখ্যা একটি double। API নির্বিশেষে বড় পূর্ণসংখ্যাগুলি ব্রাউজারে রাউন্ড করা হয়, তাই সেগুলিকে স্ট্রিং হিসেবে পাঠান। - Windows: toast অন্যান্য প্ল্যাটফর্মের মতো একই
uডেটা পায়, এবংcustom_data_raw-এর মাধ্যমে পাঠানো পূর্ণসংখ্যাগুলি নির্ভুলভাবে পৌঁছায়।
LocalizedContent
Anchor link toলোকেল কোড → প্রতি-প্ল্যাটফর্ম কন্টেন্ট ম্যাপ করে। কীগুলি হল ISO 639-1 দুই-অক্ষরের কোড (উদাহরণস্বরূপ, "en", "es") এবং একটি ক্যাচ-অল অনুবাদের জন্য বিশেষ কী "default"। ISO 639-1 এর ব্যতিক্রম হল ঐতিহ্যবাহী এবং সরলীকৃত চীনা ভাষার জন্য "zh-Hant" এবং "zh-Hans"।
{ "localized_content": { "default": { "ios": { "title": "Hello", "body": "Tap to view" }, "android": { "title": "Hello", "body": "Tap to view" } }, "es": { "ios": { "title": "Hola", "body": "Toca para ver" }, "android": { "title": "Hola", "body": "Toca para ver" } } }}একটি ডিভাইসের জন্য লোকেল নির্বাচন
Anchor link toএকটি ডিভাইসে ডেলিভার করা কন্টেন্ট এই ক্রমে বাছাই করা হয়:
- ডিভাইসের ভাষার সাথে সঠিক মিল।
- কী
"default"। - কী
"en"। - ম্যাপে উপস্থিত অন্য কোনো লোকেল।
অন্তত "default" বা "en" এর মধ্যে একটি প্রদান করুন যাতে প্রতিটি ডিভাইসের একটি ডিটারমিনিস্টিক ফলব্যাক থাকে। যদি আপনি প্রতি-লোকেল ভ্যারিয়েন্ট আশা না করেন, তবে শুধুমাত্র "default" পাঠান।
প্রতিটি লোকেল এন্ট্রি হল একটি Content অবজেক্ট যা ঐচ্ছিক প্রতি-প্ল্যাটফর্ম ব্লক সহ। শুধুমাত্র আপনার টার্গেট করা প্ল্যাটফর্মগুলি পূরণ করুন।
| প্ল্যাটফর্ম ব্লক | চ্যানেল |
|---|---|
ios | iOS push |
android | Android (FCM) push |
huawei_android | Huawei Android push |
mac_os | macOS push |
amazon | Amazon (ADM) push |
safari | Safari web push |
chrome | Chrome web push |
firefox | Firefox web push |
ie | Internet Explorer web push |
windows | Windows push (tile / toast / badge) |
telegram | Telegram message |
kakao | Kakao message |
line | LINE message |
viber | Viber message |
whatsapp | WhatsApp message |
fb_messenger | Facebook Messenger message |
sms | SMS message |
বাটন
Anchor link toপ্রতিটি লোকেল এন্ট্রিতে buttons-ও থাকতে পারে: iOS, Android এবং Huawei-তে পুশের নিচে দেখানো সর্বোচ্চ ৩টি অ্যাকশন বাটন। অন্যান্য প্ল্যাটফর্ম এগুলো উপেক্ষা করে। বাটনের জন্য Notification Service Extension সহ iOS SDK 7.2.10 বা পরবর্তী সংস্করণ এবং Android SDK 6.17.0 বা পরবর্তী সংস্করণ প্রয়োজন।
প্রতিটি PushButton-এ এই ফিল্ডগুলো থাকে:
id(string): ট্যাপ করলে আপনার অ্যাপ যে বাটন আইডি পায়। সর্বোচ্চ 64 অক্ষর, স্পেস ছাড়া, পুশের মধ্যে অনন্য।ACTION_OPENএবংACTION_CUSTOM-এর জন্য আবশ্যক। অন্যান্য অ্যাকশনের জন্য বাদ দিলে Pushwooshbtn_1,btn_2ইত্যাদি সেট করে।label(string): বাটনের টেক্সট, 1 থেকে 64 অক্ষর।action(enum):ACTION_OPENঅ্যাপ খোলে,ACTION_URLurlখোলে,ACTION_DEEPLINKএকটি ডিপ লিংক খোলে,ACTION_CUSTOMআপনার অ্যাপেidপাঠায় এবং আপনার অ্যাপ সেটি পরিচালনা করে।url(string):ACTION_URL-এর জন্য একটি সম্পূর্ণhttpবাhttpsঠিকানা, অথবাACTION_DEEPLINK-এর জন্য স্কিম সহ একটি ডিপ লিংক।platform_urls(map):ACTION_DEEPLINK-এর জন্য প্রতি প্ল্যাটফর্মে একটি ডিপ লিংক, প্ল্যাটফর্ম কোড অনুযায়ী:1iOS,3Android,17Huawei।style(enum):STYLE_DEFAULTবাSTYLE_DESTRUCTIVE। ডেস্ট্রাক্টিভ স্টাইল iOS-এ বাটনটি লাল রঙে দেখায়।
{ "localized_content": { "default": { "ios": { "title": "Your order is on its way", "body": "Arrives tomorrow" }, "android": { "title": "Your order is on its way", "body": "Arrives tomorrow" }, "buttons": [ { "id": "track", "label": "Track order", "action": "ACTION_DEEPLINK", "url": "myapp://orders/42" }, { "id": "cancel", "label": "Cancel order", "action": "ACTION_CUSTOM", "style": "STYLE_DESTRUCTIVE" } ] } }}সাধারণ পুশ ফিল্ড
Anchor link toএই ফিল্ডগুলি ios, android, huawei_android, mac_os, amazon, safari, chrome, এবং firefox ব্লক দ্বারা শেয়ার করা হয় (সাপোর্ট ভিন্ন হতে পারে। অব্যবহৃত ফিল্ডগুলি সংশ্লিষ্ট প্ল্যাটফর্ম দ্বারা উপেক্ষা করা হয়)।
title(string): নোটিফিকেশনের শিরোনাম।body(string): নোটিফিকেশনের বডি।time_to_live(duration, যেমন"3600s"): পুশ সার্ভার একটি অফলাইন ডিভাইসের জন্য কতক্ষণ নোটিফিকেশন ধরে রাখবে।sound(string): সাউন্ড ফাইলের নাম।sound_enabled(bool): সাউন্ড সক্রিয় বা দমন করুন।badges(string): ব্যাজ সংখ্যা (iOS) বা তার সমতুল্য।root_params(object): র’ প্ল্যাটফর্ম-নির্দিষ্ট পেলোড ওভাররাইড।inbox(Inbox): Message Inbox এন্ট্রি।
{ "android": { "title": "Hello", "body": "Tap to view", "time_to_live": "3600s", "sound": "default", "sound_enabled": true, "badges": "+1" }}iOS (ios)
Anchor link tosubtitle(string): iOS নোটিফিকেশনের সাবটাইটেল।is_critical(bool): ক্রিটিক্যাল অ্যালার্ট (এনটাইটেলমেন্ট প্রয়োজন)।attachment(string): একটি মিডিয়া অ্যাটাচমেন্টের URL।thread_id(string): গ্রুপ করা নোটিফিকেশনের জন্য থ্রেড আইডেন্টিফায়ার।trim_content(bool): ফিট করার জন্য কন্টেন্ট ট্রিম করুন।category_id(string): ইন্টারেক্টিভ অ্যাকশনের জন্যUNNotificationCategoryআইডেন্টিফায়ার।interruption_level(string):passive,active,time-sensitive, বাcritical।collapse_id(string): APNs কলাপ্স আইডেন্টিফায়ার। একইcollapse_idসহ নোটিফিকেশনগুলি ডিভাইসে একে অপরকে প্রতিস্থাপন করে।silent(bool): iOS পুশটি সাইলেন্ট (শুধুমাত্র ডেটা) হিসেবে পাঠান, যখন একই মেসেজের অন্যান্য প্ল্যাটফর্মগুলি একটি সাধারণ নোটিফিকেশন পায়। এটিcontent-এর ভিতরে সেট করা হয়, তাই এটি এর সাথে একসাথে কাজ করে। সমস্ত প্ল্যাটফর্মকে সাইলেন্ট করতে, এর পরিবর্তে শীর্ষ-স্তরেরsilentব্যবহার করুন, যাcontent-কে প্রতিস্থাপন করে। এটিকে সমস্ত লোকেল-এ প্রয়োগ করতে যেকোনো একটি লোকেল-এ সেট করুন।
{ "ios": { "title": "Hello", "body": "Tap to view", "subtitle": "New update", "attachment": "https://cdn.example.com/image.png", "interruption_level": "active", "thread_id": "promo" }}Android (android, huawei_android)
Anchor link toicon(string): নোটিফিকেশনের ছোট আইকন।banner(string): বড় ছবির URL।delivery_priority(NORMAL|HIGH): FCM ডেলিভারি প্রায়োরিটি।vibration(bool): রিসিভ করার সময় ভাইব্রেশন।led_color(string, hex): নোটিফিকেশন LED-র রঙ।icon_background_color(string, hex): আইকনের ব্যাকগ্রাউন্ডের রঙ।show_on_lockscreen(bool): লক স্ক্রিনে দেখান।custom_icon(string): একটি কাস্টম আইকনের URL।priority(NotificationPriority): ইন-ট্রে প্রায়োরিটি।group_id(string): নোটিফিকেশন গ্রুপ কী।collapse_key(string): FCM কলাপ্স কী। ডিভাইস অফলাইন থাকাকালীন একইcollapse_keyসহ নোটিফিকেশনগুলি একে অপরকে প্রতিস্থাপন করে।silent(bool): এই প্ল্যাটফর্মে পুশটি সাইলেন্ট (শুধুমাত্র ডেটা) হিসেবে পাঠান, যখন একই মেসেজের অন্যান্য প্ল্যাটফর্মগুলি একটি সাধারণ নোটিফিকেশন পায়। এটিcontent-এর ভিতরে সেট করা হয়, তাই এটি এর সাথে একসাথে কাজ করে। সমস্ত প্ল্যাটফর্মকে সাইলেন্ট করতে, এর পরিবর্তে শীর্ষ-স্তরেরsilentব্যবহার করুন, যাcontent-কে প্রতিস্থাপন করে। এটিকে সমস্ত লোকেল-এ প্রয়োগ করতে যেকোনো একটি লোকেল-এ সেট করুন।baidu_androidব্লকও একই আচরণ সহsilentগ্রহণ করে।
{ "android": { "title": "Hello", "body": "Tap to view", "icon": "ic_notification", "banner": "https://cdn.example.com/banner.png", "led_color": "#FF0000", "priority": "PRIORITY_HIGH", "delivery_priority": "HIGH" }}macOS (mac_os)
Anchor link toসাধারণ পুশ ফিল্ড এবং subtitle ও action (ব্যবহারকারী নোটিফিকেশনে ক্লিক করলে যে URL খোলা হয়) ব্যবহার করে।
{ "mac_os": { "title": "Hello", "body": "Tap to view", "subtitle": "New update", "action": "https://example.com/promo" }}Amazon (amazon)
Anchor link toসাধারণ পুশ ফিল্ড এবং custom_icon ও priority (NotificationPriority) ব্যবহার করে।
{ "amazon": { "title": "Hello", "body": "Tap to view", "custom_icon": "https://cdn.example.com/icon.png", "priority": "PRIORITY_HIGH" }}Safari (safari)
Anchor link toaction(string): ব্যবহারকারী নোটিফিকেশনে ক্লিক করলে যে URL খোলা হয়।url_arguments(array of string): Safari URL আর্গুমেন্ট যা ওয়েব পুশ URL টেমপ্লেটে প্রতিস্থাপিত হয়।
{ "safari": { "title": "Hello", "body": "Tap to view", "action": "https://example.com/promo", "url_arguments": ["promo", "2026"] }}Chrome (chrome)
Anchor link toicon,image(string): ছোট আইকন এবং বড় ছবির URL।duration(duration): অটো-ক্লোজ টাইমার।button_text1/button_url1,button_text2/button_url2: দুটি পর্যন্ত অ্যাকশন বাটন।
{ "chrome": { "title": "Hello", "body": "Tap to view", "icon": "https://cdn.example.com/icon.png", "image": "https://cdn.example.com/banner.png", "duration": "20s", "button_text1": "Open", "button_url1": "https://example.com/promo" }}Firefox (firefox)
Anchor link toশুধুমাত্র title, body, icon, root_params, এবং inbox ব্যবহার করে।
{ "firefox": { "title": "Hello", "body": "Tap to view", "icon": "https://cdn.example.com/icon.png" }}Windows (windows)
Anchor link toWindows একটি ভিন্ন আকার ব্যবহার করে:
{ "windows": { "type": "TOAST", "template": { "title": "Hello", "body": "Tap to view" }, "tag": "promo", "cache": true, "time_to_live": "3600s" }}typeহলTILE,TOAST, বাBADGE।template(স্ট্রাকচার্ড) বাraw({ "content": "<raw xml>" }) — ঠিক একটি।
Telegram (telegram)
Anchor link tobody(string): মেসেজের টেক্সট।content_variables(string): বট-সাইড টেমপ্লেটের জন্য JSON-স্ট্রিংগিফাইড ভেরিয়েবল।
{ "telegram": { "body": "Hello from Pushwoosh", "content_variables": "{\"name\":\"John\"}" }}Kakao (kakao)
Anchor link tocontent(string): মেসেজের কন্টেন্ট।template(string): অনুমোদিত টেমপ্লেট কোড।content_variables(string): JSON-স্ট্রিংগিফাইড টেমপ্লেট ভেরিয়েবল বাইন্ডিং।
{ "kakao": { "content": "Hello from Pushwoosh", "template": "welcome_v1", "content_variables": "{\"name\":\"John\"}" }}LINE (line)
Anchor link tocontent(string): প্লেইন টেক্সট বডি।template(string): Pushwoosh কন্ট্রোল প্যানেলে কনফিগার করা একটি LINE টেমপ্লেটের কোড (ছবি, ক্যারোসেল, বা ফ্লেক্স মেসেজ পাঠানোর জন্য ব্যবহৃত)। রিচ কন্টেন্টের জন্য, কন্ট্রোল প্যানেলে টেমপ্লেটটি আগে থেকে কনফিগার করুন এবং এখানে তার রেফারেন্স দিন।
অন্তত content বা template এর মধ্যে একটি সেট করতে হবে।
{ "line": { "content": "Hello from Pushwoosh", "template": "promo_carousel" }}Viber (viber)
Anchor link toএকটি Viber মেসেজ হয় একটি ফ্রি-টেক্সট বডি, ঐচ্ছিকভাবে একটি ইমেজ ও একটি বাটন বা একটি ক্যারোসেল সহ, অথবা আইডি এবং ভাষা দ্বারা রেফারেন্স করা একটি পূর্ব-অনুমোদিত ট্রানজ্যাকশনাল টেমপ্লেট (Omni Messaging / MStat)।
body(string): প্লেইন টেক্সট মেসেজ।template_idসেট না থাকলে এটি আবশ্যক, যদি নাimageসেট থাকে। বাটন বা ক্যারোসেল থাকলে আবশ্যক।image(string): পাবলিক ইমেজ URL।template_idসেট থাকলে উপেক্ষা করা হয়।button_caption(string): বাটনের টেক্সট, সর্বোচ্চ 30 অক্ষর।button_action-এর সাথে একসাথে সেট করুন।bodyপ্রয়োজন।template_idসেট থাকলে উপেক্ষা করা হয়।button_action(string): বাটন লিঙ্ক: একটিhttp://বাhttps://URL, একটিviber://ডিপ লিঙ্ক, অথবা{lp-100}-এর মতো একটি Omni টোকেন (একটি ট্র্যাকিং-লিঙ্ক প্লেসহোল্ডার যা Omni Messaging পাঠানোর সময় রিজলভ করে)।button_caption-এর সাথে একসাথে সেট করুন।carousel(object):body-এর নিচে দেখানো 2–5টি সোয়াইপযোগ্য কার্ড।image,button_caption,button_action, বাtemplate_id-এর সাথে একত্রে ব্যবহার করা যায় না। ক্যারোসেল দেখুন।template_id(string): একটি পূর্ব-অনুমোদিত ট্রানজ্যাকশনাল টেমপ্লেটের আইডি। সেট করা হলে, এটিbody-র উপর অগ্রাধিকার পায়।template_lang(string): টেমপ্লেট লোকেল।template_idসেট করা হলে এটি আবশ্যক।template_params(map<string, string>): টেমপ্লেটে প্রতিস্থাপিত কী/ভ্যালু বাইন্ডিং, যেমন{ "name": "John", "code": "123456" }।all_devices(bool):false(ডিফল্ট) শুধুমাত্র ব্যবহারকারীর প্রাথমিক ডিভাইসে ডেলিভার করে;trueব্যবহারকারীর সমস্ত ডিভাইসে ডেলিভার করে।
অন্তত body, image, বা template_id-এর মধ্যে একটি সেট করতে হবে। যখন template_id সেট করা হয়, তখন template_lang আবশ্যক।
Viber প্রাপকদের viber:<phone> (E.164) ফর্ম্যাটে hwids হিসাবে অ্যাড্রেস করুন, উদাহরণস্বরূপ viber:+1234567890।
প্লেইন টেক্সট:
{ "viber": { "body": "Hello from Pushwoosh" }}ট্রানজ্যাকশনাল টেমপ্লেট:
{ "viber": { "template_id": "e3dec4a0-c063-4b0f-96d5-cf9d629a7abe", "template_lang": "en", "template_params": { "name": "John", "code": "123456", "expires_in": "5 minutes" }, "all_devices": false }}ক্যারোসেল
Anchor link tocarousel.items-এ 2 থেকে 5টি কার্ড থাকে। এর পরিবর্তে journey-তে ক্যারোসেল সেট আপ করতে, ক্যারোসেল পাঠান দেখুন। প্রতিটি কার্ডে এই ফিল্ডগুলি থাকে:
title(string): কার্ডের শিরোনাম, 2–38 অক্ষর। আবশ্যক।image(string): পাবলিকhttp://বাhttps://ইমেজ URL। আবশ্যক।primary_button(object): প্রধান বাটন। আবশ্যক।secondary_button(object): দ্বিতীয় বাটন। ঐচ্ছিক।
প্রতিটি বাটনে দুটি ফিল্ড থাকে, এবং বাটন থাকলে দুটিই আবশ্যক:
caption(string): বাটনের টেক্সট,primary_button-এর জন্য সর্বোচ্চ 10 অক্ষর এবংsecondary_button-এর জন্য সর্বোচ্চ 12।action(string): বাটন লিঙ্ক: স্কিম সহ একটি URL (http://,https://,viber://) অথবা{lp-100}-এর মতো একটি Omni টোকেন, অর্থাৎbutton_action-এর মতো একই মান।
এই নিয়মগুলির যেকোনো একটি লঙ্ঘন করে এমন রিকোয়েস্ট INVALID_ARGUMENT দিয়ে প্রত্যাখ্যান করা হয়। google.rpc.BadRequest বিবরণে ফিল্ডটির নাম থাকে, উদাহরণস্বরূপ viber.carousel.items[0].title।
উদাহরণ:
{ "viber": { "body": "New arrivals are in. Swipe to see them.", "carousel": { "items": [ { "title": "Running shoes", "image": "https://example.com/img/shoes.jpg", "primary_button": { "caption": "Buy now", "action": "https://example.com/shoes" }, "secondary_button": { "caption": "Details", "action": "{lp-100}" } }, { "title": "Sports backpack", "image": "https://example.com/img/backpack.jpg", "primary_button": { "caption": "Buy now", "action": "https://example.com/backpack" } } ] } }}WhatsApp (whatsapp)
Anchor link toWhatsApp মেসেজগুলি Meta-র মাধ্যমে যায় এবং Meta-র মেসেজিং নিয়ম সাপেক্ষে। মূল বিভাজনটি হল ফ্রি-ফর্ম টেক্সট (শুধুমাত্র ব্যবহারকারীর কাছ থেকে একটি ইনবাউন্ড মেসেজের মাধ্যমে খোলা ২৪-ঘণ্টার গ্রাহক পরিষেবা উইন্ডোর মধ্যে ডেলিভার করা হয়) এবং অনুমোদিত টেমপ্লেট (আউটবাউন্ড ইনিসিয়েশন এবং ২৪-ঘণ্টার উইন্ডোর বাইরের যেকোনো মেসেজের জন্য প্রয়োজনীয়)।
content(string): ফ্রি-ফর্ম মেসেজ টেক্সট। শুধুমাত্র ২৪-ঘণ্টার উইন্ডোর মধ্যে Meta দ্বারা ডেলিভার করা হয়।content_id(string): একটি পূর্ব-অনুমোদিত Meta টেমপ্লেটের নাম (যেমন"hello_world")। আউটবাউন্ড ইনিসিয়েশন বা ২৪-ঘণ্টার উইন্ডোর বাইরের যেকোনো মেসেজের জন্য প্রয়োজনীয়।language(string): টেমপ্লেট লোকেল যা অবশ্যই Meta-তে অনুমোদিত লোকেল-এর সাথে হুবহু মিলতে হবে (যেমন"en_US","en_GB")। শুধুমাত্রcontent_id-এর সাথে অর্থপূর্ণ। এটি বাইরেরLocalizedContentকী থেকে স্বাধীন। বাইরের কী একটি ডিভাইসের জন্য কন্টেন্ট নির্বাচন করে, এবংlanguageসেই কন্টেন্টের জন্য Meta-টেমপ্লেট লোকেল নির্বাচন করে।content_variables(string): বডি প্লেসহোল্ডার ম্যাপ করা JSON অবজেক্ট, যেমন"{\"1\":\"John\"}"।button_url_variables(string): বাটন ইনডেক্স দ্বারা কী করা বাটন-URL প্লেসহোল্ডার ম্যাপ করা JSON অবজেক্ট, যেমন"{\"0\":\"https://...\"}"।header_variables(string): টাইপ দ্বারা কী করা হেডার প্লেসহোল্ডার ম্যাপ করা JSON অবজেক্ট, যেমন"{\"image\":\"https://...\"}"।
অন্তত content বা content_id এর মধ্যে একটি সেট করতে হবে।
{ "whatsapp": { "content_id": "hello_world", "language": "en_US", "content_variables": "{\"1\":\"John\"}" }}Facebook Messenger (fb_messenger)
Anchor link toফেসবুক মেসেঞ্জার মেসেজগুলি Meta-র মাধ্যমে যায় এবং Meta-র মেসেজিং নিয়ম সাপেক্ষে: ফ্রি-ফর্ম কন্টেন্ট শুধুমাত্র ব্যবহারকারীর কাছ থেকে একটি ইনবাউন্ড মেসেজের মাধ্যমে খোলা ২৪-ঘণ্টার গ্রাহক পরিষেবা উইন্ডোর মধ্যে ডেলিভার করা হয়। সেই উইন্ডোর বাইরে, message_tag Meta-র অনুমোদিত ব্যবহারের ক্ষেত্রে একটিতে সেট করুন, অথবা Meta সেন্ডটি প্রত্যাখ্যান করবে।
body(string): প্লেইন টেক্সট মেসেজ।messageসেট না করলে এটি প্রয়োজন।message(string): একটি সম্পূর্ণ Meta Send APImessageঅবজেক্ট JSON স্ট্রিং হিসেবে, যাতে টেক্সট, অ্যাটাচমেন্ট, টেমপ্লেট বা কুইক রিপ্লাই থাকে। এটি সেট করা হলে Pushwooshbody-এর পরিবর্তে এটি পাঠায়।message_tag(string): ২৪-ঘণ্টার উইন্ডোর বাইরে প্রয়োজন।CONFIRMED_EVENT_UPDATE,POST_PURCHASE_UPDATE,ACCOUNT_UPDATE,HUMAN_AGENTএর মধ্যে একটি।
{ "fb_messenger": { "body": "Hello from Pushwoosh", "message_tag": "ACCOUNT_UPDATE" }}এই চ্যানেলের জন্য কোনো পৃথক ডিভাইস আইডেন্টিফায়ার নেই: hwid, push_token, এবং user_id সবই একই মান, প্রাপকের Meta Page-Scoped ID (PSID)-তে সমাধান হয়। NotifyTransactional-এ তাদের যেকোনো একটির সাথে একটি নির্দিষ্ট কথোপকথন টার্গেট করুন।
curl -X POST https://api.pushwoosh.com/messaging/v2/notify \ -H "Authorization: Token YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "transactional": { "application": "XXXXX-XXXXX", "platforms": ["FB_MESSENGER"], "hwids": { "list": ["<recipient-psid>"] }, "payload": { "content": { "localized_content": { "default": { "fb_messenger": { "body": "Hello from Pushwoosh" } } } } }, "schedule": { "at": "2026-05-01T12:00:00Z" } } }'SMS (sms)
Anchor link toSMS-এর প্রতিটি লোকেল-এর Content-এর ভিতরে নিজস্ব প্ল্যাটফর্ম ব্লক রয়েছে, ios, android, এবং অন্যান্য মেসেজিং চ্যানেলগুলির পাশাপাশি।
body(string): লোকেল-এর জন্য SMS টেক্সট।smsব্লক উপস্থিত থাকলে এটি আবশ্যক।
টেক্সট সরবরাহ করার দুটি উপায় আছে:
- ইনলাইন —
localized_content-এ প্রতি লোকেল-এর জন্যsms.bodyসেট করুন। - একটি প্রিসেট থেকে — পেলোড-স্তরের
sms_presetএকটি সেভ করা SMS প্রিসেট-এর কোডে (ফরম্যাটXXXXX-XXXXX) সেট করুন। এর প্রতি-লোকেল কন্টেন্ট প্রিসেট দ্বারা সংজ্ঞায়িত প্রতিটি লোকেল-এর জন্যsms.body-তে রূপান্তরিত হয়। একটি লোকেল-এর জন্য একটি ইনলাইনsms.bodyসেই লোকেল-এর জন্য প্রিসেটটিকে ওভাররাইড করে, তাই আপনি একটি প্রিসেট পুনরায় ব্যবহার করতে পারেন এবং এখনও পৃথক ভাষাগুলি পরিবর্তন করতে পারেন।
{ "payload": { "sms_preset": "XXXXX-XXXXX", "content": { "localized_content": { "default": { "sms": { "body": "Your order has shipped." } }, "es": { "sms": { "body": "Tu pedido ha sido enviado." } } } } }}একটি sms ব্লকে subject এবং file_urls যোগ করলে মেসেজটি একটি MMS-এ পরিণত হয়। শুধুমাত্র AbleMobile-এর একটি MMS এন্ডপয়েন্ট আছে — অন্যান্য SMS প্রদানকারীরা উভয় ফিল্ড উপেক্ষা করে এবং শুধুমাত্র প্লেইন-টেক্সট body ডেলিভার করে।
subject(string): MMS সাবজেক্ট।file_urls-এ অন্তত একটি এন্ট্রি প্রয়োজন — অ্যাটাচমেন্ট ছাড়া একটি সাবজেক্ট প্রত্যাখ্যান করা হয়। ৪০টি পর্যন্ত ASCII অক্ষর, অথবা সাবজেক্টে নন-ASCII অক্ষর থাকলে ১৩টি অক্ষর।file_urls(array of string): ৩টি পর্যন্ত অ্যাটাচমেন্ট URL। প্রতিটি অবশ্যই একটি অ্যাবসোলিউটhttpsURL হতে হবে যা.jpgবা.gif-এ শেষ হয় —.jpegএবং.pngভ্যালিডেশন দ্বারা প্রত্যাখ্যান করা হয়, এমনকি একটি আসল JPEG বা PNG ফাইলের জন্যও, কারণ প্রদানকারী সেগুলি ডিকোড করতে পারে না। প্রতিটি ফাইল অবশ্যই 200 KB বা তার চেয়ে ছোট হতে হবে; কোনো অ্যাটাচমেন্ট ভারী হলে AbleMobile পুরো সেন্ডটি প্রত্যাখ্যান করে।message_at(int):file_urls-এর মধ্যে ইনডেক্স (0-ভিত্তিক) যার পরে SMS বডি টেক্সট দেখানো হয়।
subject এবং file_urls Liquid পার্সোনালাইজেশন সাপোর্ট করে, body-র মতোই।
{ "sms": { "body": "Your order has shipped.", "subject": "Order update", "file_urls": [ "https://cdn.example.com/shipping-label.jpg", "https://cdn.example.com/tracking-map.gif" ], "message_at": 1 }}একটি sms ব্লকে rcs যোগ করলে body-এর পরিবর্তে RCS (Rich Communication Services)-এর মাধ্যমে একটি Twilio কন্টেন্ট টেমপ্লেট পাঠানো হয়। Twilio টেমপ্লেটটিকে একটি RCS মেসেজ হিসেবে ডেলিভার করে এবং ফলব্যাক হিসেবে টেমপ্লেটের twilio/text টাইপ থেকে তৈরি একটি SMS পাঠায়, body থেকে নয়। twilio/text টাইপ ছাড়া একটি টেমপ্লেট শুধুমাত্র RCS-সক্ষম ফোনে পৌঁছায়।
rcs.content_sid(string): Twilio কন্টেন্ট টেমপ্লেটের SID,HXএবং তার পরে ৩২টি হেক্স অক্ষর। এটিListRcsTemplatesবা Twilio Console থেকে নিন।rcs.content_variables(string): টেমপ্লেট ভেরিয়েবলের JSON অবজেক্ট, স্ট্রিং হিসেবে সিরিয়ালাইজ করা, উদাহরণস্বরূপ"{\"1\": \"{FirstName|CapitalizeFirst|there}\"}"। মানগুলি ট্যাগ এবং Liquid পার্সোনালাইজেশন সাপোর্ট করে। আপনি যে ভেরিয়েবল বাদ দেন সেটি টেমপ্লেটের ডিফল্ট মান নেয়।
rcs সহ একটি sms ব্লকে body এখনও আবশ্যক।
অ্যাপ্লিকেশনটি যদি SMS প্ল্যাটফর্ম কনফিগারেশন-এ সেট করা নিজস্ব Account SID, Auth token, এবং Messaging Service SID সহ Twilio-এর মাধ্যমে SMS না পাঠায়, তবে রিকোয়েস্টটি প্রত্যাখ্যান করা হয়। Pushwoosh-এর দেওয়া Twilio ক্রেডেনশিয়াল ব্যবহারকারী একটি অ্যাপ্লিকেশন RCS পাঠাতে পারে না।
একটি SMS প্রিসেট প্রতি লোকেল-এ একটি টেমপ্লেট বহন করতে পারে। পেলোডে sms_preset থাকলে, যে সব লোকেল-এর জন্য রিকোয়েস্ট নিজস্ব rcs.content_sid আনে না, সেখানে প্রিসেটের টেমপ্লেট ব্যবহার করা হয়।
{ "sms": { "body": "Your order has shipped.", "rcs": { "content_sid": "HXb5b62575e6e4ff6129ad7c8efe1f983e", "content_variables": "{\"1\": \"{FirstName|CapitalizeFirst|there}\", \"2\": \"A-1042\"}" } }}RCS টেমপ্লেটের তালিকা
Anchor link toListRcsTemplates অ্যাপ্লিকেশনের সেই Twilio কন্টেন্ট টেমপ্লেটগুলি রিটার্ন করে যা RCS-এর মাধ্যমে পাঠানো যায়, অ্যাপ্লিকেশনের নিজস্ব Twilio ক্রেডেনশিয়াল দিয়ে পড়া হয়।
GET https://rpc-api.svc-nue.pushwoosh.com/api/sms_presets:rcs_templates?application=XXXXX-XXXXXAuthorization: Api YOUR_API_TOKENapplication(string, query): অ্যাপ্লিকেশন কোড, ফরম্যাটXXXXX-XXXXX।
রেসপন্সে একটি templates অ্যারে থাকে। শুধুমাত্র অন্তত একটি RCS কন্টেন্ট টাইপ সহ টেমপ্লেটগুলি তালিকাভুক্ত হয়: twilio/card, twilio/carousel, twilio/quick-reply, twilio/call-to-action, বা twilio/media।
| ফিল্ড | টাইপ | বিবরণ |
|---|---|---|
content_sid | string | টেমপ্লেট SID, rcs.content_sid-এর মান। |
friendly_name | string | Twilio-তে টেমপ্লেটের নাম। |
language | string | টেমপ্লেটের ভাষা কোড। |
types | array of string | টেমপ্লেটটি যে Twilio কন্টেন্ট টাইপগুলি সংজ্ঞায়িত করে, উদাহরণস্বরূপ twilio/card এবং twilio/text। |
variables | object | ডিফল্ট মান সহ টেমপ্লেট ভেরিয়েবল। |
has_sms_fallback | boolean | টেমপ্লেটে twilio/text টাইপ থাকলে true, অর্থাৎ RCS ছাড়া একটি ফোন যে SMS পায়। |
{ "templates": [ { "content_sid": "HXb5b62575e6e4ff6129ad7c8efe1f983e", "friendly_name": "order_shipped_card", "language": "en", "types": ["twilio/card", "twilio/text"], "variables": { "1": "there", "2": "your order" }, "has_sms_fallback": true } ]}ListRcsTemplates এই ত্রুটিগুলি রিটার্ন করে:
| HTTP স্ট্যাটাস | কারণ |
|---|---|
400 Bad Request | অ্যাপ্লিকেশনের নিজস্ব Twilio Account SID এবং Auth token নেই (FailedPrecondition)। |
401 Unauthorized | Twilio অ্যাপ্লিকেশনের ক্রেডেনশিয়াল প্রত্যাখ্যান করেছে (Unauthenticated)। |
503 Service Unavailable | Twilio Content API অন্য একটি ত্রুটি রিটার্ন করেছে (Unavailable)। |
OpenAction
Anchor link toব্যবহারকারী মেসেজটি খুললে যে অ্যাকশনটি সঞ্চালিত হয় তা সংজ্ঞায়িত করে।
ঠিক একটি:
rich_media(RichMedia): একটি রিচ মিডিয়া পেজ খুলুন।deep_link: একটি ডিপ লিঙ্ক খুলুন:{ "code": "flow-code", "params": { "key": "value" } }।link(Link): একটি URL খুলুন।
{ "open_action": { "deep_link": { "code": "flow-code", "params": { "promo": "summer" } } }}ডিপলিঙ্ক URL এবং params মানগুলি Liquid পার্সোনালাইজেশন সিনট্যাক্স সাপোর্ট করে — ডিপ লিঙ্ক খোলার আগে এক্সপ্রেশনগুলি সমাধান করা হয়।
RichMedia
Anchor link to{ "code": "XXXXX-XXXXX" } // রিচ মিডিয়া কোড দ্বারা{ "url": "https://..." } // রিমোট URL দ্বারাLink
Anchor link to{ "url": "https://example.com/promo", "shortener": "BITLY"}shortener হল NONE (ডিফল্ট) বা BITLY।
Inbox
Anchor link toমেসেজ ইনবক্সে মেসেজটি কীভাবে প্রদর্শিত হবে তা কনফিগার করে।
{ "image_url": "https://cdn.example.com/inbox.png", "expiration_date": "2026-05-15T00:00:00Z"}image_url(string): ইনবক্স এন্ট্রিতে দেখানো ছবি।expiration_date(timestamp): যখন এন্ট্রিটি ইনবক্স থেকে সরানো হয়।expires_in(duration, যেমন"604800s"): পাঠানোর তারিখ থেকে গণনা করে এন্ট্রিটি কতক্ষণ ইনবক্সে থাকবে (নির্ধারিতsend_date, অথবা তাৎক্ষণিক পাঠানোর ক্ষেত্রে রিকোয়েস্টের মুহূর্ত)। মানটি অবশ্যই ধনাত্মক হতে হবে।expiration_dateসেট করা থাকলে এটি উপেক্ষা করা হয়।
একটি নির্দিষ্ট তারিখের পরিবর্তে আপেক্ষিক মেয়াদ সেট করতে, শুধু expires_in পাঠান:
{ "image_url": "https://cdn.example.com/inbox.png", "expires_in": "604800s"}আপনার অ্যাকাউন্টে ইনবক্সের সর্বোচ্চ মেয়াদ নির্ধারিত থাকলে, তার বেশি expiration_date বা expires_in প্রত্যাখ্যান করা হয়।
NotificationPriority enum
Anchor link toটার্গেট ডিভাইসে নোটিফিকেশন প্রায়োরিটি নিয়ন্ত্রণ করে, PRIORITY_MIN ( সর্বনিম্ন) থেকে PRIORITY_MAX (সর্বোচ্চ) পর্যন্ত।
PRIORITY_UNSPECIFIEDPRIORITY_MINPRIORITY_LOWPRIORITY_DEFAULTPRIORITY_HIGHPRIORITY_MAX
উদাহরণ: একটি সেগমেন্টে পুশ পাঠান
Anchor link tocurl -X POST https://api.pushwoosh.com/messaging/v2/notify \ -H "Authorization: Token YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "segment": { "application": "XXXXX-XXXXX", "platforms": ["IOS", "ANDROID"], "code": "active_users", "payload": { "content": { "localized_content": { "en": { "ios": { "title": "Hello", "body": "Hello, world!" }, "android": { "title": "Hello", "body": "Hello, world!" } }, "es": { "ios": { "title": "¡Hola!", "body": "¡Hola, mundo!" }, "android": { "title": "¡Hola!", "body": "¡Hola, mundo!" } } } }, "open_action": { "link": { "url": "https://example.com/promo" } } }, "schedule": { "at": "2026-05-01T12:00:00Z" }, "message_type": "MESSAGE_TYPE_MARKETING" } }'উদাহরণ: ব্যবহারকারী আইডি দ্বারা ট্রানজ্যাকশনাল পুশ
Anchor link tocurl -X POST https://api.pushwoosh.com/messaging/v2/notify \ -H "Authorization: Token YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "transactional": { "application": "XXXXX-XXXXX", "platforms": ["IOS", "ANDROID"], "users": { "list": ["customer-42"] }, "payload": { "content": { "localized_content": { "default": { "ios": { "title": "Your order", "body": "Order #42 has shipped." }, "android": { "title": "Your order", "body": "Order #42 has shipped." } } } }, "custom_data": { "order_id": "42" } }, "schedule": { "at": "2026-05-01T12:00:00Z" }, "message_type": "MESSAGE_TYPE_TRANSACTIONAL" } }'