اصلي منځپانګې ته لاړ شئ

د Bulk Template Message API اسناد — v2

دا API تاسو ته اجازه درکوي چې د WhatsApp چینل له لارې یو وخت څو ترلاسه کوونکو ته د ټیمپلېټ پیغامونه ولیږئ.

د پیغام رسول غیر همغږي کیږي؛ د API غوښتنه سمدلاسه bulkOperationId بیرته ورکوي، پداسې حال کې چې پیغامونه په کتار کې ځي او شاته پروسس کیږي.

POST https://app.monochat.ai/api/:slug/custom-functions/bulk-message-api-app/api/v2/bulk-operation/send.js
د ځواب بڼه

په دې سند کې هر اینډپوینټ یو دودیز فنکشن (custom function) دی. د HTTP ځواب بدن د فنکشن خپلې ساحې (_id، title، pathString…) لري او د اینډپوینټ اصلي ځواب د result لاندې دی. په دې سند کې د ځواب بیلګې د result منځپانګه ښيي:

{
"_id": "function_id",
"title": "Show",
"pathString": "/bulk-message-api-app/api/v2/bulk-operation/show.js",
"result": {
"bulkOperation": { "_id": "abc123xyz789", "status": "running" }
}
}

له v1 څخه لېږد​

v2 د v1 تر څنګ چلیږي، نو تاسو کولی شئ د خپل مهالویش سره سم لېږد وکړئ. د v1 اینډپوینټونه (/api/bulk-message/…، /api/bulk-message-records/…) به بند شي؛ نوي ادغامونه باید v2 وکاروي.

  1. د اینډپوینټ لارې v2 ته واړوئ: …/api/bulk-message/… په …/api/v2/bulk-operation/… بدلیږي، او …/api/bulk-message-records/… په …/api/v2/bulk-operation-items/… بدلیږي. د send غوښتنې بدن نه بدلیږي؛ یوه غوښتنه اوس د 5,000 پر ځای تر 100,000 پورې ترلاسه کوونکي مني.
  2. په غوښتنو کې د bulkMessageId پر ځای bulkOperationId ولیږئ.
  3. د stats.js پر ځای show.js وکاروئ.
  4. ځوابونه د لاندې جدول د نویو ساحو نومونو سره ولولئ.

د v2 اینډپوینټونه یوازې هغه ډله‌ییز عملیات پېژني چې د v2 send سره جوړ شوي وي. د هغه ډله‌ییز پیغام د تعقیب لپاره چې تاسو د بدلون مخکې د v1 سره جوړ کړی، د هغه لپاره د v1 اینډپوینټونه کاروئ.

اینډپوینټونه​

v1v2په ځواب کې څه بدلیږي
bulk-message/send.jsv2/bulk-operation/send.js{ bulkMessageId } په { bulkOperationId } بدلیږي
bulk-message/stats.jsv2/bulk-operation/show.js{ bulkMessage, stats } په { bulkOperation } بدلیږي
bulk-message/message-stats.jsv2/bulk-operation/message-stats.jsشمېرونکي د messageStats لاندې پر ځای په ریښه کې دي
bulk-message/stop.jsv2/bulk-operation/stop.jsهېڅ
bulk-message-records/list.jsv2/bulk-operation-items/list.jsbulkMessageRecords په bulkOperationItems بدلیږي
bulk-message-records/list-with-messages.jsv2/bulk-operation-items/list-with-messages.jsد list په څېر، او هر توکی session هم لري

د ساحو نومونه​

v1v2
stats.successbulkOperation.progress.succeeded
stats.pending، stats.failed، stats.cancelled، stats.totalbulkOperation.progress.pending، .failed، .cancelled، .total
—bulkOperation.progress.unknown، bulkOperation.status، bulkOperation.result.outcome
bulkMessage (ډله‌ییز پیغام)bulkOperation (ډله‌ییز عملیات)
bulkMessageRecord (ریکارډ)bulkOperationItem (توکی)
bulkMessageId په غوښتنو، د send په ځواب او په ریکارډونو کېbulkOperationId
د ریکارډ username / userId / sessionId لکه څنګه چې لیږل شويpayload.username / payload.userId / payload.sessionId
د ریکارډ referenceIdpayload.referenceId
د ریکارډ payload (د ترلاسه کوونکي د ټیمپلېټ payload)payload.payload
له لیږلو وروسته د ریکارډ userId، sessionId، messageIdresult.userId، result.sessionId، result.messageId
د ریکارډ حالت successsucceeded
په ناکامو ریکارډونو کې د ریکارډ errorMessageerror.message، د error.code او error.retryable تر څنګ
—position (په recipients کې د ترلاسه کوونکي شمېره)
فلټر {"status": "success"}{"status": "succeeded"}
فلټر {"referenceId": "…"}{"payload.referenceId": "…"}
د send تېروتنې schema-error، invalidRequestzod-schema-error، په پیغام کې د ناسمې ساحې د لارې سره

مهمې ځانګړتیاوې​

  • په یوې غوښتنې کې 1–100,000 ترلاسه کوونکو ته د ډله‌ییز ټیمپلېټ پیغامونه ولیږئ
  • د هر ترلاسه کوونکي لپاره شخصي شوي متغیرونه (HEADER، BODY، BUTTONS، CAROUSEL)
  • د ټولو ترلاسه کوونکو لپاره ګډ defaultPayload د ترلاسه کوونکي ځانګړي payload له یوځای کولو (isMerge) سره
  • مهالویش شوی رسول (scheduleAt)
  • ترلاسه کوونکي د username (د تلیفون شمېره)، userId یا sessionId په کارولو وټاکئ
  • په یوه ډله‌ییزه غوښتنه کې ورته کارن ته څو پیغامونه ولیږئ
  • د بهرنیو سیستمونو سره د ریکارډونو تعقیب لپاره اختیاري referenceId
  • له لیږلو وروسته خبرې اترې په اتومات ډول یو کارن یا کاري ډلې ته وسپارئ (action)
خبرداری

دا API یوازې هغه ټیمپلېټونه لیږلی شي چې د Meta لخوا تصویب شوي وي.

د ټیمپلېټ نوم او د ژبې کوډ باید په Meta Business Manager کې د ثبت شوي ټیمپلېټ سره دقیقاً سمون ولري.

د غوښتنې پارامېټرونه​

پورتنۍ کچې پارامېټرونه​

پارامېټرډولاړینتوضیح
channelUsernamestringهود WhatsApp چینل شمېره چې پیغام پرې لیږل کیږي (د بیلګې په توګه "908506669933")
connectorBrandstringهود چینل کنکټر برانډ. اوسنی ملاتړ شوی ارزښت: "whatsapp"
titlestringنهد کمپاین سرلیک. په ډشبورډ کې د ښودلو لپاره کارول کیږي. ډیفالټ: "-"
scheduleAtstring (ISO 8601)نهد مهالویش شوي رسولو نیټه او وخت (د بیلګې په توګه "2026-06-10T10:00:00.000Z"). که ونه لیکل شي، پیغامونه سمدلاسه لیږل کیږي.
defaultPayloadobjectمشروط*د ټیمپلېټ ډیفالټ payload چې پر ټولو ترلاسه کوونکو پلي کیږي. اړین دی که یو ترلاسه کوونکی خپل payload ونه ورکوي.
recipientsarrayهود ترلاسه کوونکو لیست. لږترلږه 1، تر ټولو ډیر 100,000 ترلاسه کوونکي.
actionobjectنههغه عمل چې له لیږلو وروسته پر خبرو اترو پلي کیږي. assign-to-user یا assign-to-workgroup.

*که هر ترلاسه کوونکی خپل payload ورکړي، defaultPayload اختیاري دی.

د ترلاسه کوونکي جوړښت​

د هر ترلاسه کوونکي لپاره باید د username، userId یا sessionId دقیقاً یو ورکړل شي. څو پیژندونکي یوځای نشي کارول کیدی، او که ټول پرېښودل شي تېروتنه رامنځته کیږي.

په یوه ډله‌ییزه غوښتنه کې ورته کارن ته د څو پیغامونو لیږلو لپاره، ورته پیژندونکی څو ځله د ترلاسه کوونکو لیست ته اضافه کړئ.

ساحهډولتوضیح
usernamestringد ترلاسه کوونکي د تلیفون شمېره (د بیلګې په توګه "905554443322"). که کارن په سیستم کې نه وي، په اتومات ډول جوړیږي.
userIdstringپه سیستم کې د یو شته کارن ID.
sessionIdstringپه سیستم کې د یوې شته خبرو اترو د ناستې ID.
referenceIdstringاختیاري حواله ID (تر 256 حروفو) د بهرني سیستم ریکارډونو (CRM، فرمایش، ټیکټ او نور) سره د سمون لپاره. که ورکړل شي، باید په ډله‌ییز عملیاتو کې ځانګړی وي.
payloadobjectد ترلاسه کوونکي ځانګړی د ټیمپلېټ payload (اختیاري). که isMerge: true وي، له defaultPayload سره یوځای کیږي.
isMergebooleanد دې ترلاسه کوونکي لپاره د یوځای کولو چلند بدلوي (اختیاري). که ونه لیکل شي، defaultPayload.isMerge کارول کیږي.

د عمل جوړښت​

ساحهډولتوضیح
action.keystring"assign-to-user" خبرې اترې یو ټاکلي اجنټ ته سپاري؛ "assign-to-workgroup" یې یوې کاري ډلې ته سپاري.
action.valuestringد هدف کارن یا کاري ډلې ID.

د ټیمپلېټ payload جوړښت​

defaultPayload او د ترلاسه کوونکي ځانګړی payload ورته جوړښت لري. د ټیمپلېټ پیغامونو لپاره باید type: "template" وټاکل شي.

{
"type": "template",
"template": {
"templateName": "order_confirmation",
"languageCode": "tr-TR",
"variables": []
},
"isMerge": true
}
ساحهډولاړینتوضیح
typestringهود payload ډول. د ټیمپلېټ پیغامونو لپاره: "template"
template.templateNamestringهو*په Meta کې ثبت شوی د ټیمپلېټ نوم. د ترلاسه کوونکي په payload کې اختیاري دی کله چې isMerge: true وکارول شي (له ډیفالټ څخه میراث کیږي).
template.languageCodestringنهد ټیمپلېټ د ژبې کوډ (د بیلګې په توګه "tr"، "en"، "tr-TR"، "en-US"). باید په Meta کې د ثبت شوې ژبې سره دقیقاً سمون ولري.
template.variablesarrayنهد متغیرونو لیست چې پر ټیمپلېټ برخو پلي کیږي. لاندې په تفصیل سره.
isMergebooleanنهtrue: د ترلاسه کوونکي payload له defaultPayload سره ژور یوځای کیږي. false یا نه لیکل شوی: د ترلاسه کوونکي payload defaultPayload په بشپړه توګه بدلوي.
د isMerge چلند
  • که defaultPayload.isMerge: true وي او ترلاسه کوونکی خپل payload ورکړي، ژور یوځای کول پلي کیږي.
  • په ژور یوځای کولو کې، ترلاسه کوونکی کولی شي یوازې variables ورکړي؛ templateName او languageCode له ډیفالټ payload څخه میراث کیږي.
  • د ترلاسه کوونکي isMerge ساحه defaultPayload.isMerge بدلوي.
  • که ترلاسه کوونکی payload ونه ورکوي، defaultPayload تل کارول کیږي.

د متغیرونو جوړښت​

د variables لړۍ هر توکی د ټیمپلېټ له یوې برخې سره مطابقت لري. د برخې ډول (type) په لړۍ کې یوازې یو ځل ښکاره کیدی شي.

typeتوضیحparameterscards
"HEADER"د ټیمپلېټ د سرلیک برخه. د متن متغیر یا د رسنۍ URL (انځور، ویډیو، سند)هو—
"BODY"د ټیمپلېټ د متن متغیرونههو—
"BUTTONS"د تڼیو لپاره د متحرک URL د پای متغیرونههو—
"CAROUSEL"د کاروسل ټیمپلېټونو لپاره د کارت برخې—هو

د پارامېټرونو بڼې​

د parameters ساحه په درې بیلو بڼو کې ورکول کیدی شي:

// بڼه 1: لړۍ (د شمېرې پر بنسټ) — د {{1}}، {{2}}، {{3}} په څېر ځای‌ساتونکو لپاره
"parameters": ["value1", "value2", "value3"]

// بڼه 2: اوبجیکټ (عددي کیلي) — د {{1}}، {{2}} لپاره بدیله بڼه
"parameters": { "1": "value1", "2": "value2" }

// بڼه 3: اوبجیکټ (نومول شوې کیلي) — د {{name}}، {{amount}} په څېر ځای‌ساتونکو لپاره
"parameters": { "name": "John", "amount": "150 USD" }
کومه بڼه وکاروم؟
  • که ستاسو د Meta ټیمپلېټ د {{1}}، {{2}} په څېر ځای‌ساتونکي کاروي، د لړۍ بڼه یا د عددي کیلي اجسام بڼه وکاروئ.
  • که ستاسو ټیمپلېټ نومول شوي ځای‌ساتونکي لکه {{firstName}} یا {{orderTotal}} کاروي، د نومول شوي کیلي اجسام بڼه وکاروئ.
  • کله چې لړۍ کاروئ، ترتیب مهم دی: لومړی عنصر له {{1}} سره، دویم له {{2}} سره، او داسې نور سمون لري.

د HEADER برخه​

کله چې د ټیمپلېټ سرلیک رسنۍ (انځور، ویډیو، سند) یا متحرک متن لري، د HEADER برخه وکاروئ.

// د رسنۍ سرلیک (د انځور URL)
{
"type": "HEADER",
"parameters": ["https://example.com/product-image.jpg"]
}

// د متن سرلیک متغیر
{
"type": "HEADER",
"parameters": ["Special Campaign"]
}

د BODY برخه​

د ټیمپلېټ په متن کې د متحرکو متن متغیرونو لپاره کارول کیږي.

// د لړۍ بڼه — کله چې ټیمپلېټ {{1}}، {{2}}، {{3}} کاروي
{
"type": "BODY",
"parameters": ["John", "ORD-12345", "150.00 USD"]
}

// نومول شوې بڼه — کله چې ټیمپلېټ {{name}}، {{orderAmount}} کاروي
{
"type": "BODY",
"parameters": {
"name": "John",
"orderAmount": "150.00 USD"
}
}

د BUTTONS برخه​

د هغو تڼیو لپاره کارول کیږي چې متحرک URL پای لري. که ټیمپلېټ څو URL تڼۍ ولري، یوازې هغه تڼۍ چې متغیر لري په ترتیب سره شمېرل کیږي (بې متغیره تڼۍ یا FLOW تڼۍ له پامه غورځول کیږي).

// د یوې URL تڼۍ د پای متغیر
{
"type": "BUTTONS",
"parameters": ["tracking/ORD-12345"]
}

// د څو URL تڼیو د پای متغیرونه (لومړۍ URL تڼۍ، دویمه URL تڼۍ)
{
"type": "BUTTONS",
"parameters": ["tracking/ORD-12345", "cancel/ORD-12345"]
}

د کاروسل ټیمپلېټونو لپاره، د برخې متغیرونه د هر کارت لپاره جلا ټاکل کیږي.

{
"type": "CAROUSEL",
"cards": [
{
"components": [
{
"type": "HEADER",
"parameters": ["https://example.com/card1.jpg"]
},
{
"type": "BODY",
"parameters": ["Product A", "99.00 USD"]
}
]
},
{
"components": [
{
"type": "HEADER",
"parameters": ["https://example.com/card2.jpg"]
},
{
"type": "BODY",
"parameters": ["Product B", "149.00 USD"]
}
]
}
]
}
خبرداری

د cards لړۍ اوږدوالی باید په ټیمپلېټ کې د ټاکل شویو کارتونو شمېر سره دقیقاً سمون ولري.

بیلګې​

1. ساده ټیمپلېټ — پرته له متغیرونو، د ټولو ترلاسه کوونکو لپاره ورته منځپانګه​

دا تر ټولو ساده لار ده چې څو ترلاسه کوونکو ته پرته له متغیرونو ثابت ټیمپلېټ ولیږئ.

{
"channelUsername": "908506669933",
"connectorBrand": "whatsapp",
"title": "General Announcement",
"defaultPayload": {
"type": "template",
"template": {
"templateName": "hello_world",
"languageCode": "tr-TR"
}
},
"recipients": [{ "username": "905554443301" }, { "username": "905554443302" }, { "username": "905554443303" }]
}
curl --location 'https://app.monochat.ai/api/:slug/custom-functions/bulk-message-api-app/api/v2/bulk-operation/send.js' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_JWT_TOKEN' \
--data '{
"channelUsername": "908506669933",
"connectorBrand": "whatsapp",
"title": "General Announcement",
"defaultPayload": {
"type": "template",
"template": {
"templateName": "hello_world",
"languageCode": "tr-TR"
}
},
"recipients": [
{ "username": "905554443301" },
{ "username": "905554443302" },
{ "username": "905554443303" }
]
}'
لارښوونه
  • هغه ترلاسه کوونکي چې د username له لارې ټاکل شوي، که په سیستم کې نه وي، په اتومات ډول جوړیږي
  • ټول ترلاسه کوونکي ورته defaultPayload کاروي؛ د ترلاسه کوونکي ځانګړي معلوماتو ته اړتیا نشته
  • کله چې isMerge ونه ټاکل شي، هر ترلاسه کوونکی مستقیم defaultPayload کاروي

2. ټیمپلېټ د ګډو متن متغیرونو سره​

ورته ټیمپلېټ ټولو ترلاسه کوونکو ته د ورته متغیر ارزښتونو سره لیږل کیږي. ټیمپلېټ د {{1}} او {{2}} په څېر ځای‌ساتونکي لري.

{
"channelUsername": "908506669933",
"connectorBrand": "whatsapp",
"title": "Summer Campaign",
"defaultPayload": {
"type": "template",
"template": {
"templateName": "promo_notification",
"languageCode": "tr-TR",
"variables": [
{
"type": "BODY",
"parameters": ["30%", "July 31, 2026"]
}
]
}
},
"recipients": [{ "username": "905554443301" }, { "username": "905554443302" }]
}
لارښوونه
  • په دې بیلګه کې، د ټیمپلېټ متن ښايي دا ډول منځپانګه ولري: "زموږ په کمپاین کې د {{1}} تخفیف څخه ګټه واخلئ! وړاندیز تر {{2}} پورې معتبر دی."
  • parameters[0] د {{1}} ځای نیسي، پداسې حال کې چې parameters[1] د {{2}} ځای نیسي

3. شخصي شوی ټیمپلېټ — د هر ترلاسه کوونکي متغیرونه د isMerge سره​

د هر ترلاسه کوونکي لپاره بېل متغیر ارزښتونه کارول کیږي. په defaultPayload کې د isMerge: true په ټاکلو سره، ترلاسه کوونکي یوازې variables ورکوي؛ templateName او languageCode له ډیفالټ payload څخه میراث کیږي.

په دې بیلګه کې، ټیمپلېټ دواړه د رسنۍ سرلیک او شخصي شوي متن متغیرونه لري.

{
"channelUsername": "908506669933",
"connectorBrand": "whatsapp",
"title": "Personal Order Notification",
"defaultPayload": {
"type": "template",
"template": {
"templateName": "order_confirmation",
"languageCode": "tr-TR"
},
"isMerge": true
},
"recipients": [
{
"username": "905554443301",
"payload": {
"template": {
"variables": [
{
"type": "HEADER",
"parameters": ["https://s3.example.com/product-a.jpg"]
},
{
"type": "BODY",
"parameters": ["Ahmet", "ORD-001", "150.00 TRY"]
}
]
}
}
},
{
"username": "905554443302",
"payload": {
"template": {
"variables": [
{
"type": "HEADER",
"parameters": ["https://s3.example.com/product-b.jpg"]
},
{
"type": "BODY",
"parameters": ["Fatma", "ORD-002", "289.00 TRY"]
}
]
}
}
}
]
}
لارښوونه
  • د isMerge: true په مننه، templateName اړتیا نلري چې د هر ترلاسه کوونکي په payload کې تکرار شي
  • د هر ترلاسه کوونکي variables لړۍ بشپړه خپلواکه ده
  • د سرلیک د رسنۍ URL باید عامه رسېدونکی وي
  • که د ترلاسه کوونکي په payload کې type ونه لیکل شي، defaultPayload.type میراث کیږي

4. د URL تڼۍ متغیر​

کله چې ټیمپلېټ یوه تڼۍ د متحرک URL پای سره ولري، د BUTTONS برخه وکاروئ. د بیلګې په توګه، د تعقیب شمېره چې د بنسټیز URL https://example.com/track/ پای ته ورزیاتیږي.

{
"channelUsername": "908506669933",
"connectorBrand": "whatsapp",
"title": "Shipment Tracking Notification",
"defaultPayload": {
"type": "template",
"template": {
"templateName": "shipment_tracking",
"languageCode": "tr-TR"
},
"isMerge": true
},
"recipients": [
{
"username": "905554443301",
"payload": {
"template": {
"variables": [
{
"type": "BODY",
"parameters": ["Ahmet", "TK-98765"]
},
{
"type": "BUTTONS",
"parameters": ["TK-98765"]
}
]
}
}
},
{
"username": "905554443302",
"payload": {
"template": {
"variables": [
{
"type": "BODY",
"parameters": ["Recep", "TK-12345"]
},
{
"type": "BUTTONS",
"parameters": ["TK-12345"]
}
]
}
}
}
]
}
لارښوونه
  • د BUTTONS پارامېټرونه د هغو تڼیو د ترتیب سره سم برابریږي چې متغیرونه لري
  • FLOW تڼۍ او بې متغیره تڼۍ له پامه غورځول کیږي؛ شمېرنه یوازې پر متحرکو URL تڼیو پلي کیږي
  • که د ټیمپلېټ د تڼۍ URL https://example.com/track/{{1}} وي، نو parameters[0] د {{1}} ځای نیسي

5. مهالویش شوی رسول​

یو پیغام د راتلونکې نیټې او وخت لپاره مهالویش کړئ. scheduleAt باید د ISO 8601 UTC وخت په توګه ورکړل شي.

{
"channelUsername": "908506669933",
"connectorBrand": "whatsapp",
"title": "Morning Campaign Message",
"scheduleAt": "2026-06-10T07:00:00.000Z",
"defaultPayload": {
"type": "template",
"template": {
"templateName": "morning_campaign",
"languageCode": "en-US"
},
"isMerge": true
},
"action": {
"key": "assign-to-workgroup",
"value": "WORKGROUP_ID"
},
"recipients": [
{
"username": "905554443301",
"payload": {
"template": {
"variables": [
{
"type": "BODY",
"parameters": { "name": "Ahmet", "discountRate": "25" }
}
]
}
}
},
{
"username": "905554443302",
"payload": {
"template": {
"variables": [
{
"type": "BODY",
"parameters": { "name": "Zeynep", "discountRate": "40" }
}
]
}
}
}
]
}
لارښوونه
  • scheduleAt باید د UTC وخت سیمه کې ورکړل شي (د بیلګې په توګه، د ترکیې د سهار 10:00 لپاره 07:00:00.000Z وکاروئ)
  • دا بیلګه د نومول شوي پارامېټر بڼه کاروي؛ ټیمپلېټ باید د {{name}} او {{discountRate}} په څېر ځای‌ساتونکي ولري
  • د action سره، هغه خبرې اترې چې د پیغام رسولو له امله جوړیږي په اتومات ډول ټاکل شوې کاري ډلې ته سپارل کیږي

ځواب​

بریالۍ غوښتنه یو bulkOperationId بیرته ورکوي، چې د رسولو د پروسې د تعقیب لپاره کارول کیدی شي:

{
"bulkOperationId": "abc123xyz789"
}

د تېروتنې ځوابونه​

حالتتوضیح
recipients field is requiredد recipients ساحه نه ده لیږل شوې
Channel not foundد channelUsername او connectorBrand سره سمون لرونکی تایید شوی چینل ونه موندل شو
Channel is not verifiedسمون لرونکی چینل شته خو لا تایید شوی نه دی
zod-schema-errorد غوښتنې په بدن کې یوې ساحې د سکیما اعتبار ناکام کړ (اړینه ساحه نشته، ناسم ډول، ناملاتړ شوی ارزښت، پر یو ترلاسه کوونکي له یو څخه ډیر پیژندونکي، یا payload نشته). پیغام د ساحې نوم ښيي، د بیلګې په توګه recipients.0.referenceId: referenceId must be unique

بیرته ورکړل شوی bulkOperationId د لاندې اینډپوینټونو سره د رسولو د احصایو د پلټنې او د رسولو د پروسې د درولو لپاره کارول کیدی شي.


Show — د ډله‌ییز عملیاتو حالت او احصایې​

ډله‌ییز عملیات د هغه د اوسني حالت او د هغه د توکو د رسولو شمېرونکو سره، د bulkOperation کیلي لاندې ترلاسه کوي.

POST https://app.monochat.ai/api/:slug/custom-functions/bulk-message-api-app/api/v2/bulk-operation/show.js

د غوښتنې پارامېټرونه​

پارامېټرډولاړینتوضیح
bulkOperationIdstringهود ډله‌ییز عملیاتو ID چې تعقیبول یې غواړئ (له send څخه بیرته ورکړل شوی)
{
"bulkOperationId": "abc123xyz789"
}
curl --location 'https://app.monochat.ai/api/:slug/custom-functions/bulk-message-api-app/api/v2/bulk-operation/show.js' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_JWT_TOKEN' \
--data '{
"bulkOperationId": "abc123xyz789"
}'

ځواب​

{
"bulkOperation": {
"_id": "abc123xyz789",
"type": "send-bulk-message",
"slug": "my-workspace",
"userId": "agent_user_id",
"payload": {
"title": "Campaign Title",
"channelUsername": "908506669933",
"connectorBrand": "whatsapp",
"connectorSlug": "om2WabVegaCloud",
"defaultLanguageCode": "tr-TR",
"sentUser": { "firstname": "John", "lastname": "Doe" },
"defaultPayload": {
"type": "template",
"template": { "templateName": "order_confirmation", "languageCode": "tr-TR" },
"isMerge": true
},
"source": { "type": "recipients", "bulkOperationInputGroupId": "group_id" }
},
"status": "running",
"result": { "outcome": "unknown", "hasErrors": false },
"progress": {
"total": 100,
"pending": 45,
"succeeded": 42,
"failed": 3,
"cancelled": 10,
"unknown": 0
},
"scheduleAt": "2026-06-10T07:00:00.000Z",
"createdAt": "2026-06-08T10:00:00.000Z",
"updatedAt": "2026-06-10T07:00:30.000Z",
"startedAt": "2026-06-10T07:00:05.000Z"
}
}

د Show ساحې​

ساحې د bulkOperation لاندې دي.

ساحهډولتوضیح
statusstringد ډله‌ییز عملیاتو حالت: preparing، scheduled، pending، running، stopping، stopped، completed، failed
progress.totalnumberد توکو ټوله شمېر
progress.pendingnumberهغه توکي چې لا هم په کتار کې انتظار باسي
progress.succeedednumberهغه توکي چې په بریالیتوب سره د رسولو لپاره پروسس شوي
progress.failednumberهغه توکي چې د رسولو تېروتنه یې درلودله
progress.cancellednumberهغه توکي چې د stop لخوا لغوه شوي
progress.unknownnumberهغه توکي چې پایله یې ونه ټاکل شوه
result.outcomestringوروستۍ پایله کله چې ډله‌ییز عملیات پای ته ورسیږي: success، partial، all-failed، cancelled، unknown
result.hasErrorsbooleantrue که لږترلږه یو توکی ناکام شوی وي
scheduleAtstringد رسولو مهالویش شوی وخت (یوازې د مهالویش شویو ډله‌ییزو عملیاتو لپاره)
startedAt، completedAtstringرسول کله پیل او کله پای ته ورسید
یادښت

progress.succeeded ښيي چې پیغام د سیستم لخوا په بریالیتوب سره سپارل شوی. دا تضمین نه کوي چې Meta پیغام ترلاسه کوونکي ته رسولی دی. د Meta لخوا رامنځته شوي وروستني حالت تازه معلومات (لکه delivered، read یا failed) پر دې شمېرونکي اغېز نه کوي او دلته نه ښکاري.

Show پر وړاندې Message Stats
  • show اینډپوینټ: د توکو د رسولو حالت ښيي (pending، succeeded، failed، cancelled، unknown)
  • message-stats اینډپوینټ: د پیغام ریښتینی حالت ښيي (pending، sending، sent، delivered، read، error او نور)
  • یو توکی کیدای شي succeeded وي، خو پیغام لا نه وي رسیدلی/لوستل شوی

حواله ID​

referenceId یوه اختیاري ساحه ده چې د تعقیب لپاره د رسولو توکي ستاسو د خپل سیستم له ID سره د برابرولو لپاره کارولی شئ (د بیلګې په توګه، د فرمایش شمېره، د ټیکټ ID). دا په هر توکي کې د payload.referenceId په توګه بیرته ورکول کیږي.

که ورکړل شي، باید په ډله‌ییز عملیاتو کې ځانګړی وي (تر 256 حروفو).

مهم
  • د کارولو لپاره اړین نه دی
  • په ورته ډله‌ییز عملیاتو کې نشي تکرار کیدی
  • په بیلابیلو ډله‌ییزو عملیاتو کې بیا کارول کیدی شي

Message Stats — د WhatsApp پیغام حالت​

د یو ډله‌ییز عملیاتو د پیغام حالت احصایې ترلاسه کوي. د show اینډپوینټ برعکس، دا د توکي د حالت پر ځای د لیږل شویو پیغامونو ریښتینی message.status ښيي.

د پیغام ممکنه حالتونه: pending، sending، sent، delivered، read، deleted، warning، error، unknown، not-sended

POST https://app.monochat.ai/api/:slug/custom-functions/bulk-message-api-app/api/v2/bulk-operation/message-stats.js

د غوښتنې پارامېټرونه​

پارامېټرډولاړینتوضیح
bulkOperationIdstringهود ډله‌ییز عملیاتو ID چې پلټل یې غواړئ
{
"bulkOperationId": "abc123xyz789"
}
curl --location 'https://app.monochat.ai/api/:slug/custom-functions/bulk-message-api-app/api/v2/bulk-operation/message-stats.js' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_JWT_TOKEN' \
--data '{
"bulkOperationId": "abc123xyz789"
}'

ځواب​

{
"pending": 5,
"sending": 2,
"sent": 10,
"delivered": 45,
"read": 30,
"deleted": 2,
"warning": 1,
"error": 3,
"unknown": 0,
"not-sended": 2,
"no-message": 20,
"total": 120
}

د Message Stats ساحې​

ساحهډولتوضیح
pendingnumberپیغامونه چې لا نه دي لیږل شوي
sendingnumberپیغامونه چې همدا اوس لیږل کیږي
sentnumberپیغامونه چې WhatsApp ته سپارل شوي، خو لا نه دي رسیدلي
deliverednumberپیغامونه چې د ترلاسه کوونکي تلیفون ته رسیدلي
readnumberپیغامونه چې ترلاسه کوونکي لوستلي
deletednumberړنګ شوي پیغامونه
warningnumberپیغامونه د خبرتیا سره
errornumberپیغامونه د تېروتنې سره
unknownnumberپیغامونه د نامعلوم حالت سره
not-sendednumberپیغامونه چې نه شو لیږل کیدی
no-messagenumberهغه توکي چې پیغام نلري (لا هم په کتار کې، ناکام یا لغوه شوي)
totalnumberد توکو ټوله شمېر
د کارولو مشورې
  • کله چې ډله‌ییز عملیات running وي، د no-message لوړ شمېر ښيي چې رسول لا روان دی
  • د delivered شمېر د پیغام بریالی رسول ښيي
  • د read شمېر د کمپاین د ګډون د اندازه کولو لپاره کارول کیدی شي
  • تاسو کولی شئ دا اینډپوینټ په منظمو وختونو پوښتل څو په ریښتینې وخت کې تعقیب شي

د Options جوړښت — پاڼه‌بندي، فلټر کول او ترتیب​

د options پارامېټر چې د list او list-with-messages اینډپوینټونو کې کارول کیږي، د پاڼه‌بندۍ، فلټر کولو او ترتیب لپاره یو معیاري جوړښت وړاندې کوي.

د Options ساحې​

ساحهډولاړینتوضیح
paginationobjectنهد پاڼه‌بندۍ تنظیمات
filteringobjectنهد فلټر کولو معیارونه
sortingobjectنهد ترتیب تنظیمات (د بیلګې په توګه {"position": 1})

د پاڼه‌بندۍ جوړښت​

که pagination ونه لیږل شي، لومړۍ پاڼه تر 50 توکو پورې بیرته ورکول کیږي. که ولیږل شي، currentPage اړین دی.

ساحهډولډیفالټتوضیح
currentPagenumber—د پاڼې شمېره چې ترلاسه کیږي (کله چې pagination لیږل کیږي اړین دی)
pageItemsnumber50په هره پاڼه کې د توکو شمېر (تر ټولو ډیر: 50)

د فلټر کولو جوړښت​

فلټر کول د توکي پر ساحو د MongoDB د پوښتنې بڼې په کارولو سره کیږي، او د ساحو نومونه دقیقاً هغسې کارول کیږي لکه په ځواب کې چې ښکاري (د بیلګې په توګه status، payload.referenceId، result.messageId). په list-with-messages اینډپوینټ کې، تاسو کولی شئ د پیغام ساحو (د بیلګې په توګه message.status) له مخې هم فلټر کړئ.

// د توکي د حالت له مخې فلټر
{
"options": {
"filtering": {
"status": "succeeded"
}
}
}

// د referenceId له مخې فلټر
{
"options": {
"filtering": {
"payload.referenceId": "ORDER-12345"
}
}
}

// د پیغام د حالت له مخې فلټر (یوازې list-with-messages)
{
"options": {
"filtering": {
"message.status": "delivered"
}
}
}

// د $in (MongoDB عملګر) په کارولو د څو حالتونو له مخې فلټر
{
"options": {
"filtering": {
"message.status": {
"$in": ["delivered", "read"]
}
}
}
}

// د $nin (MongoDB عملګر) په کارولو ځانګړي حالتونه لرې کړئ
{
"options": {
"filtering": {
"message.status": {
"$nin": ["error", "not-sended"]
}
}
}
}

// هغه توکي لیست کړئ چې پیغام نلري (یوازې list-with-messages)
{
"options": {
"filtering": {
"message": {
"$exists": false
}
}
}
}

د ترتیب جوړښت​

ترتیب د MongoDB د ترتیب بڼې په کارولو سره کیږي. 1 یعنې پورته‌تلونکی، -1 یعنې ښکته‌تلونکی. position د غوښتنې د recipients په لړۍ کې د ترلاسه کوونکي ترتیب دی (له 0 څخه پیلیږي).

// په هغه ترتیب چې ترلاسه کوونکي په غوښتنه کې لیږل شوي
{
"options": {
"sorting": {
"position": 1
}
}
}

// د څو ساحو له مخې ترتیب
{
"options": {
"sorting": {
"status": 1,
"position": 1
}
}
}

د ګډ کارونې بیلګه​

{
"bulkOperationId": "abc123xyz789",
"options": {
"pagination": {
"currentPage": 2,
"pageItems": 50
},
"filtering": {
"message.status": "delivered"
},
"sorting": {
"position": 1
}
}
}

دا بیلګه د رسیدلو پیغامونو دویمه پاڼه د ترلاسه کوونکو په ترتیب لیست کوي.

عملي مشورې
  • د هدفمندو پوښتنو لپاره filtering او pagination سره یوځای کړئ
  • ځواب د ګرځېدو لپاره options.pagination.totalCount او options.pagination.totalPages لري
  • د message.status فلټر یوازې د list-with-messages اینډپوینټ کې کار کوي

Items — د توکو توضیحات او لیست​

د یو ډله‌ییز عملیاتو ټول د رسولو توکي لیست کوي. هر توکی د recipients لړۍ یوه ننوتنه ښيي.

List — د توکو لیست​

POST https://app.monochat.ai/api/:slug/custom-functions/bulk-message-api-app/api/v2/bulk-operation-items/list.js

د غوښتنې پارامېټرونه​

پارامېټرډولاړینتوضیح
bulkOperationIdstringهود ډله‌ییز عملیاتو ID چې لیست کول یې غواړئ
optionsobjectنهد پاڼه‌بندۍ، فلټر کولو او ترتیب اختیارونه. د جزئیاتو لپاره د Options جوړښت وګورئ.

غوښتنه — بنسټیزه کارونه​

{
"bulkOperationId": "abc123xyz789",
"options": {
"pagination": {
"currentPage": 1,
"pageItems": 50
}
}
}

غوښتنه — د ځانګړي حالت له مخې فلټر​

{
"bulkOperationId": "abc123xyz789",
"options": {
"pagination": {
"currentPage": 1,
"pageItems": 50
},
"filtering": {
"status": "failed"
}
}
}

یوازې ناکام د رسولو توکي لیست کوي، او لامل یې په error کې دی.

ځواب​

{
"bulkOperationItems": [
{
"_id": "item_1",
"bulkOperationId": "abc123xyz789",
"bulkOperationBatchId": "batch_1",
"slug": "my-workspace",
"position": 0,
"payload": {
"username": "905554443301",
"referenceId": "ORDER-12345",
"payload": {
"template": {
"variables": [{ "type": "BODY", "parameters": ["Ahmet", "ORD-001"] }]
}
}
},
"status": "succeeded",
"attempt": 1,
"result": {
"userId": "user_123",
"sessionId": "session_456",
"messageId": "msg_789"
},
"createdAt": "2026-06-10T10:00:00.000Z",
"updatedAt": "2026-06-10T10:00:01.000Z",
"completedAt": "2026-06-10T10:00:01.000Z"
},
{
"_id": "item_2",
"bulkOperationId": "abc123xyz789",
"bulkOperationBatchId": "batch_1",
"slug": "my-workspace",
"position": 1,
"payload": { "username": "905554443302", "referenceId": "ORDER-12346" },
"status": "failed",
"attempt": 1,
"error": { "code": "error", "message": "Variable missing", "retryable": false },
"result": { "userId": "user_124", "sessionId": "session_457" },
"createdAt": "2026-06-10T10:00:00.000Z",
"updatedAt": "2026-06-10T10:00:01.000Z",
"completedAt": "2026-06-10T10:00:01.000Z"
}
],
"options": {
"pagination": {
"currentPage": 1,
"pageItems": 50,
"totalCount": 150,
"totalPages": 3
},
"sorting": {},
"filtering": {},
"searching": {}
}
}

List With Messages — د پیغام توضیحاتو سره لیست​

د list اینډپوینټ ورته ځانګړتیاوې لري (پاڼه‌بندي، فلټر کول، ترتیب). توپیر: هر توکی، که شته وي، اړوند message او session اوبجیکټونه هم لري. دا تاسو ته اجازه درکوي چې د پیغام حالت (delivered، read، error او نور) او payload په یوې پوښتنې کې وګورئ.

POST https://app.monochat.ai/api/:slug/custom-functions/bulk-message-api-app/api/v2/bulk-operation-items/list-with-messages.js

غوښتنه — بنسټیزه کارونه​

{
"bulkOperationId": "abc123xyz789",
"options": {
"pagination": {
"currentPage": 1,
"pageItems": 50
}
}
}

غوښتنه — د پیغام د حالت له مخې فلټر​

{
"bulkOperationId": "abc123xyz789",
"options": {
"pagination": {
"currentPage": 1,
"pageItems": 50
},
"filtering": {
"message.status": "delivered"
}
}
}

دا بیلګه یوازې هغه پیغامونه راوړي چې "delivered" حالت لري.

غوښتنه — ناکام پیغامونه لیست کړئ​

{
"bulkOperationId": "abc123xyz789",
"options": {
"pagination": {
"currentPage": 1,
"pageItems": 50
},
"filtering": {
"message.status": "error"
}
}
}

د هغو پیغامونو د بیاکتنې لپاره کارول کیږي چې د رسولو تېروتنه یې درلودله.

ځواب​

{
"bulkOperationItems": [
{
"_id": "item_1",
"bulkOperationId": "abc123xyz789",
"position": 0,
"payload": { "username": "905554443301", "referenceId": "ORDER-12345" },
"status": "succeeded",
"result": {
"userId": "user_123",
"sessionId": "session_456",
"messageId": "msg_789"
},
"message": {
"_id": "msg_789",
"type": "template",
"status": "delivered",
"payload": {
"template": {
"name": "order_notification"
}
},
"createdAt": "2026-06-10T10:01:00.000Z"
},
"session": {
"_id": "session_456",
"status": "opened"
}
}
],
"options": {
"pagination": {
"currentPage": 1,
"pageItems": 50,
"totalCount": 150,
"totalPages": 3
},
"sorting": {},
"filtering": {},
"searching": {}
}
}

د توکي ساحې​

ساحهډولتوضیح
_idstringد توکي ID
bulkOperationIdstringد هغه ډله‌ییز عملیاتو ID چې دا توکی ورپورې اړه لري
positionnumberد غوښتنې د recipients په لړۍ کې د ترلاسه کوونکي ترتیب، له 0 څخه پیلیږي
payloadobjectترلاسه کوونکی دقیقاً لکه څنګه چې په غوښتنه کې لیږل شوی (username / userId / sessionId، referenceId، payload، isMerge)
statusstringد توکي حالت: pending، succeeded، failed، cancelled، unknown
errorobjectیوازې په failed توکو کې: code، message او retryable
result.userIdstringد ترلاسه کوونکي کارن ID
result.sessionIdstringد خبرو اترو د ناستې ID
result.messageIdstringد لیږل شوي پیغام ID (که هېڅ پیغام نه وي لیږل شوی، نشته)
completedAtstringتوکی کله پروسس شو
messageobjectد پیغام توضیحات (یوازې په list-with-messages کې)
sessionobjectد خبرو اترو توضیحات (یوازې په list-with-messages کې)

د List او List-With-Messages پرتله​

ځانګړتیاlistlist-with-messages
پاڼه‌بنديهوهو
فلټر کولهو (یوازې د توکي ساحې)هو (د توکي + پیغام ساحې)
Message / Sessionنههو (که شته وي)
فعالیتچټکمنځنی (JOIN ترسره کوي)
د message.status فلټرشته نه دیشته دی
د کارونې سناریوګانې
  • list: ټول توکي په چټکۍ لیست کړئ، د referenceId له مخې فلټر کړئ، د توکو حالتونه وګورئ
  • list-with-messages: د WhatsApp د پیغام حالتونه (delivered، read) وګورئ، د پیغام payload وڅېړئ
  • د فلټر کولو بیلګې:
    • {"status": "failed"} — ناکام د رسولو توکي
    • {"payload.referenceId": "ORDER-123"} — ځانګړې حواله ID
    • {"message.status": "delivered"} — رسیدلي پیغامونه (یوازې list-with-messages)
    • {"message.status": "read"} — لوستل شوي پیغامونه (یوازې list-with-messages)
    • {"message.status": "error"} — د تېروتنې سره پیغامونه (یوازې list-with-messages)
    • {"message.status": {"$in": ["delivered", "read"]}} — هغه پیغامونه چې رسیدلي یا لوستل شوي دي (یوازې list-with-messages)
    • {"message.status": {"$nin": ["error", "not-sended"]}} — پیغامونه پرته له تېروتنو او نه لیږل شویو (یوازې list-with-messages)
    • {"message": {"$exists": false}} — هغه توکي چې پیغام نلري (یوازې list-with-messages)
    • {"status": {"$in": ["succeeded", "pending"]}} — توکي چې بریالي یا په انتظار کې دي
د فعالیت او کارونې یادښتونه
  • د list اینډپوینټ چټک دی؛ د عمومي حالت کتنو لپاره یې غوره کړئ
  • کله چې د پیغام توضیحاتو ته اړتیا وي list-with-messages وکاروئ
  • په هره پاڼه کې تر ټولو ډیر توکي (pageItems) 50 دي؛ که ونه ټاکل شي، ډیفالټ 50 دی
  • د message.status فلټر یوازې په list-with-messages کې کار کوي
  • هغه توکي چې result.messageId نلري، message اوبجیکټ هم نلري

Stop — رسول لغوه کړئ​

د روان ډله‌ییز عملیاتو رسول درولی. ټول pending توکي cancelled حالت ته لیږدول کیږي او ډله‌ییز عملیات stopped کیږي. هغه توکي چې مخکې د succeeded یا failed په توګه پروسس شوي اغېزمن نه کیږي. مهالویش شوي ډله‌ییز عملیات هم د خپل scheduleAt وخت مخکې درول کیدی شي.

POST https://app.monochat.ai/api/:slug/custom-functions/bulk-message-api-app/api/v2/bulk-operation/stop.js
خبرداری

دا عمل بیرته نشي کیدی. درول شوی رسول بیا نشي پیلیدی.

د غوښتنې پارامېټرونه​

پارامېټرډولاړینتوضیح
bulkOperationIdstringهود ډله‌ییز عملیاتو ID چې درول یې غواړئ
{
"bulkOperationId": "abc123xyz789"
}
curl --location 'https://app.monochat.ai/api/:slug/custom-functions/bulk-message-api-app/api/v2/bulk-operation/stop.js' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_JWT_TOKEN' \
--data '{
"bulkOperationId": "abc123xyz789"
}'

ځواب​

د بریالۍ غوښتنې لپاره، د ځواب بدن خالي دی. د HTTP 200 حالت ښيي چې عملیات په بریالیتوب سره بشپړ شول.

{}
لارښوونه
  • یوازې هغه ډله‌ییز عملیات درول کیدی شي چې د همدې API له لارې جوړ شوي وي
  • له رسولو د درولو وروسته، تاسو کولی شئ د show اینډپوینټ د لغوه شویو توکو د شمېر (bulkOperation.progress.cancelled) د تایید لپاره وکاروئ
  • که ډله‌ییز عملیات ونه موندل شي، API دا تېروتنه بیرته ورکوي: Bulk operation not found.