বিষয়বস্তুতে যান

পেলোড রেফারেন্স

যেকোনো নন-ইমেল চ্যানেলের (পুশ, SMS, টেলিগ্রাম, Kakao, LINE, ভাইবার, WhatsApp, ফেসবুক মেসেঞ্জার) মাধ্যমে পাঠানোর সময় Notify দ্বারা ব্যবহৃত Payload মেসেজের জন্য রেফারেন্স।

পেলোড

Anchor link to
  • preset (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-এর প্রতি-প্ল্যাটফর্ম ওভাররাইড। কী হল একটি সংখ্যাসূচক Platform enum মান।
  • 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 to

9007199254740992-এর বেশি পূর্ণসংখ্যা 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, বা অবৈধ JSON payload.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

একটি ডিভাইসে ডেলিভার করা কন্টেন্ট এই ক্রমে বাছাই করা হয়:

  1. ডিভাইসের ভাষার সাথে সঠিক মিল।
  2. কী "default"।
  3. কী "en"।
  4. ম্যাপে উপস্থিত অন্য কোনো লোকেল।

অন্তত "default" বা "en" এর মধ্যে একটি প্রদান করুন যাতে প্রতিটি ডিভাইসের একটি ডিটারমিনিস্টিক ফলব্যাক থাকে। যদি আপনি প্রতি-লোকেল ভ্যারিয়েন্ট আশা না করেন, তবে শুধুমাত্র "default" পাঠান।

প্রতিটি লোকেল এন্ট্রি হল একটি Content অবজেক্ট যা ঐচ্ছিক প্রতি-প্ল্যাটফর্ম ব্লক সহ। শুধুমাত্র আপনার টার্গেট করা প্ল্যাটফর্মগুলি পূরণ করুন।

প্ল্যাটফর্ম ব্লকচ্যানেল
iosiOS push
androidAndroid (FCM) push
huawei_androidHuawei Android push
mac_osmacOS push
amazonAmazon (ADM) push
safariSafari web push
chromeChrome web push
firefoxFirefox web push
ieInternet Explorer web push
windowsWindows push (tile / toast / badge)
telegramTelegram message
kakaoKakao message
lineLINE message
viberViber message
whatsappWhatsApp message
fb_messengerFacebook Messenger message
smsSMS 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-এর জন্য আবশ্যক। অন্যান্য অ্যাকশনের জন্য বাদ দিলে Pushwoosh btn_1, btn_2 ইত্যাদি সেট করে।
  • label (string): বাটনের টেক্সট, 1 থেকে 64 অক্ষর।
  • action (enum): ACTION_OPEN অ্যাপ খোলে, ACTION_URL url খোলে, ACTION_DEEPLINK একটি ডিপ লিংক খোলে, ACTION_CUSTOM আপনার অ্যাপে id পাঠায় এবং আপনার অ্যাপ সেটি পরিচালনা করে।
  • url (string): ACTION_URL-এর জন্য একটি সম্পূর্ণ http বা https ঠিকানা, অথবা ACTION_DEEPLINK-এর জন্য স্কিম সহ একটি ডিপ লিংক।
  • platform_urls (map): ACTION_DEEPLINK-এর জন্য প্রতি প্ল্যাটফর্মে একটি ডিপ লিংক, প্ল্যাটফর্ম কোড অনুযায়ী: 1 iOS, 3 Android, 17 Huawei।
  • 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"
}
}
  • subtitle (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 to
  • icon (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 to
  • action (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 to
  • icon, 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 to

Windows একটি ভিন্ন আকার ব্যবহার করে:

{
"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 to
  • body (string): মেসেজের টেক্সট।
  • content_variables (string): বট-সাইড টেমপ্লেটের জন্য JSON-স্ট্রিংগিফাইড ভেরিয়েবল।
{
"telegram": {
"body": "Hello from Pushwoosh",
"content_variables": "{\"name\":\"John\"}"
}
}

Kakao (kakao)

Anchor link to
  • content (string): মেসেজের কন্টেন্ট।
  • template (string): অনুমোদিত টেমপ্লেট কোড।
  • content_variables (string): JSON-স্ট্রিংগিফাইড টেমপ্লেট ভেরিয়েবল বাইন্ডিং।
{
"kakao": {
"content": "Hello from Pushwoosh",
"template": "welcome_v1",
"content_variables": "{\"name\":\"John\"}"
}
}

LINE (line)

Anchor link to
  • content (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 to

carousel.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 to

WhatsApp মেসেজগুলি 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 API message অবজেক্ট JSON স্ট্রিং হিসেবে, যাতে টেক্সট, অ্যাটাচমেন্ট, টেমপ্লেট বা কুইক রিপ্লাই থাকে। এটি সেট করা হলে Pushwoosh body-এর পরিবর্তে এটি পাঠায়।
  • 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-এ তাদের যেকোনো একটির সাথে একটি নির্দিষ্ট কথোপকথন টার্গেট করুন।

Terminal window
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-এর প্রতিটি লোকেল-এর 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। প্রতিটি অবশ্যই একটি অ্যাবসোলিউট https URL হতে হবে যা .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 to

ListRcsTemplates অ্যাপ্লিকেশনের সেই Twilio কন্টেন্ট টেমপ্লেটগুলি রিটার্ন করে যা RCS-এর মাধ্যমে পাঠানো যায়, অ্যাপ্লিকেশনের নিজস্ব Twilio ক্রেডেনশিয়াল দিয়ে পড়া হয়।

GET https://rpc-api.svc-nue.pushwoosh.com/api/sms_presets:rcs_templates?application=XXXXX-XXXXX
Authorization: Api YOUR_API_TOKEN
  • application (string, query): অ্যাপ্লিকেশন কোড, ফরম্যাট XXXXX-XXXXX।

রেসপন্সে একটি templates অ্যারে থাকে। শুধুমাত্র অন্তত একটি RCS কন্টেন্ট টাইপ সহ টেমপ্লেটগুলি তালিকাভুক্ত হয়: twilio/card, twilio/carousel, twilio/quick-reply, twilio/call-to-action, বা twilio/media।

ফিল্ডটাইপবিবরণ
content_sidstringটেমপ্লেট SID, rcs.content_sid-এর মান।
friendly_namestringTwilio-তে টেমপ্লেটের নাম।
languagestringটেমপ্লেটের ভাষা কোড।
typesarray of stringটেমপ্লেটটি যে Twilio কন্টেন্ট টাইপগুলি সংজ্ঞায়িত করে, উদাহরণস্বরূপ twilio/card এবং twilio/text।
variablesobjectডিফল্ট মান সহ টেমপ্লেট ভেরিয়েবল।
has_sms_fallbackbooleanটেমপ্লেটে 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 UnauthorizedTwilio অ্যাপ্লিকেশনের ক্রেডেনশিয়াল প্রত্যাখ্যান করেছে (Unauthenticated)।
503 Service UnavailableTwilio 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 পার্সোনালাইজেশন সিনট্যাক্স সাপোর্ট করে — ডিপ লিঙ্ক খোলার আগে এক্সপ্রেশনগুলি সমাধান করা হয়।

{ "code": "XXXXX-XXXXX" } // রিচ মিডিয়া কোড দ্বারা
{ "url": "https://..." } // রিমোট URL দ্বারা
{
"url": "https://example.com/promo",
"shortener": "BITLY"
}

shortener হল NONE (ডিফল্ট) বা BITLY।

মেসেজ ইনবক্সে মেসেজটি কীভাবে প্রদর্শিত হবে তা কনফিগার করে।

{
"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_UNSPECIFIED
  • PRIORITY_MIN
  • PRIORITY_LOW
  • PRIORITY_DEFAULT
  • PRIORITY_HIGH
  • PRIORITY_MAX

উদাহরণ: একটি সেগমেন্টে পুশ পাঠান

Anchor link to
Terminal window
curl -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 to
Terminal window
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": ["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"
}
}'