د 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 وکاروي.
- د اینډپوینټ لارې v2 ته واړوئ:
…/api/bulk-message/…په…/api/v2/bulk-operation/…بدلیږي، او…/api/bulk-message-records/…په…/api/v2/bulk-operation-items/…بدلیږي. دsendغوښتنې بدن نه بدلیږي؛ یوه غوښتنه اوس د 5,000 پر ځای تر 100,000 پورې ترلاسه کوونکي مني. - په غوښتنو کې د
bulkMessageIdپر ځایbulkOperationIdولیږئ. - د
stats.jsپر ځایshow.jsوکاروئ. - ځوابونه د لاندې جدول د نویو ساحو نومونو سره ولولئ.
د v2 اینډپوینټونه یوازې هغه ډلهییز عملیات پېژني چې د v2 send سره جوړ شوي وي. د هغه ډلهییز پیغام د تعقیب لپاره چې تاسو د بدلون مخکې د v1 سره جوړ کړی، د هغه لپاره د v1 اینډپوینټونه کاروئ.
اینډپوینټونه
| v1 | v2 | په ځواب کې څه بدلیږي |
|---|---|---|
bulk-message/send.js | v2/bulk-operation/send.js | { bulkMessageId } په { bulkOperationId } بدلیږي |
bulk-message/stats.js | v2/bulk-operation/show.js | { bulkMessage, stats } په { bulkOperation } بدلیږي |
bulk-message/message-stats.js | v2/bulk-operation/message-stats.js | شمېرونکي د messageStats لاندې پر ځای په ریښه کې دي |
bulk-message/stop.js | v2/bulk-operation/stop.js | هېڅ |
bulk-message-records/list.js | v2/bulk-operation-items/list.js | bulkMessageRecords په bulkOperationItems بدلیږي |
bulk-message-records/list-with-messages.js | v2/bulk-operation-items/list-with-messages.js | د list په څېر، او هر توکی session هم لري |
د ساحو نومونه
| v1 | v2 |
|---|---|
stats.success | bulkOperation.progress.succeeded |
stats.pending، stats.failed، stats.cancelled، stats.total | bulkOperation.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 |
د ریکارډ referenceId | payload.referenceId |
د ریکارډ payload (د ترلاسه کوونکي د ټیمپلېټ payload) | payload.payload |
له لیږلو وروسته د ریکارډ userId، sessionId، messageId | result.userId، result.sessionId، result.messageId |
د ریکارډ حالت success | succeeded |
په ناکامو ریکارډونو کې د ریکارډ errorMessage | error.message، د error.code او error.retryable تر څنګ |
| — | position (په recipients کې د ترلاسه کوونکي شمېره) |
فلټر {"status": "success"} | {"status": "succeeded"} |
فلټر {"referenceId": "…"} | {"payload.referenceId": "…"} |
د send تېروتنې schema-error، invalidRequest | zod-schema-error، په پیغام کې د ناسمې ساحې د لارې سره |
مهمې ځانګړتیاوې
- په یوې غوښتنې کې 1–100,000 ترلاسه کوونکو ته د ډلهییز ټیمپلېټ پیغامونه ولیږئ
- د هر ترلاسه کوونکي لپاره شخصي شوي متغیرونه (HEADER، BODY، BUTTONS، CAROUSEL)
- د ټولو ترلاسه کوونکو لپاره ګډ
defaultPayloadد ترلاسه کوونکي ځانګړيpayloadله یوځای کولو (isMerge) سره - مهالویش شوی رسول (
scheduleAt) - ترلاسه کوونکي د
username(د تلیفون شمېره)،userIdیاsessionIdپه کارولو وټاکئ - په یوه ډلهییزه غوښتنه کې ورته کارن ته څو پیغامونه ولیږئ
- د بهرنیو سیستمونو سره د ریکارډونو تعقیب لپاره اختیاري
referenceId - له لیږلو وروسته خبرې اترې په اتومات ډول یو کارن یا کاري ډلې ته وسپارئ (
action)
دا API یوازې هغه ټیمپلېټونه لیږلی شي چې د Meta لخوا تصویب شوي وي.
د ټیمپلېټ نوم او د ژبې کوډ باید په Meta Business Manager کې د ثبت شوي ټیمپلېټ سره دقیقاً سمون ولري.
د غوښتنې پارامېټرونه
پورتنۍ کچې پارامېټرونه
| پارامېټر | ډول | اړین | توضیح |
|---|---|---|---|
channelUsername | string | هو | د WhatsApp چینل شمېره چې پیغام پرې لیږل کیږي (د بیلګې په توګه "908506669933") |
connectorBrand | string | هو | د چینل کنکټر برانډ. اوسنی ملاتړ شوی ارزښت: "whatsapp" |
title | string | نه | د کمپاین سرلیک. په ډشبورډ کې د ښودلو لپاره کارول کیږي. ډیفالټ: "-" |
scheduleAt | string (ISO 8601) | نه | د مهالویش شوي رسولو نیټه او وخت (د بیلګې په توګه "2026-06-10T10:00:00.000Z"). که ونه لیکل شي، پیغامونه سمدلاسه لیږل کیږي. |
defaultPayload | object | مشروط* | د ټیمپلېټ ډیفالټ payload چې پر ټولو ترلاسه کوونکو پلي کیږي. اړین دی که یو ترلاسه کوونکی خپل payload ونه ورکوي. |
recipients | array | هو | د ترلاسه کوونکو لیست. لږترلږه 1، تر ټولو ډیر 100,000 ترلاسه کوونکي. |
action | object | نه | هغه عمل چې له لیږلو وروسته پر خبرو اترو پلي کیږي. assign-to-user یا assign-to-workgroup. |
*که هر ترلاسه کوونکی خپل payload ورکړي، defaultPayload اختیاري دی.
د ترلاسه کوونکي جوړښت
د هر ترلاسه کوونکي لپاره باید د username، userId یا sessionId دقیقاً یو ورکړل شي. څو پیژندونکي یوځای نشي کارول کیدی، او که ټول پرېښودل شي تېروتنه رامنځته کیږي.
په یوه ډلهییزه غوښتنه کې ورته کارن ته د څو پیغامونو لیږلو لپاره، ورته پیژندونکی څو ځله د ترلاسه کوونکو لیست ته اضافه کړئ.
| ساحه | ډول | توضیح |
|---|---|---|
username | string | د ترلاسه کوونکي د تلیفون شمېره (د بیلګې په توګه "905554443322"). که کارن په سیستم کې نه وي، په اتومات ډول جوړیږي. |
userId | string | په سیستم کې د یو شته کارن ID. |
sessionId | string | په سیستم کې د یوې شته خبرو اترو د ناستې ID. |
referenceId | string | اختیاري حواله ID (تر 256 حروفو) د بهرني سیستم ریکارډونو (CRM، فرمایش، ټیکټ او نور) سره د سمون لپاره. که ورکړل شي، باید په ډلهییز عملیاتو کې ځانګړی وي. |
payload | object | د ترلاسه کوونکي ځانګړی د ټیمپلېټ payload (اختیاري). که isMerge: true وي، له defaultPayload سره یوځای کیږي. |
isMerge | boolean | د دې ترلاسه کوونکي لپاره د یوځای کولو چلند بدلوي (اختیاري). که ونه لیکل شي، defaultPayload.isMerge کارول کیږي. |
د عمل جوړښت
| ساحه | ډول | توضیح |
|---|---|---|
action.key | string | "assign-to-user" خبرې اترې یو ټاکلي اجنټ ته سپاري؛ "assign-to-workgroup" یې یوې کاري ډلې ته سپاري. |
action.value | string | د هدف کارن یا کاري ډلې ID. |
د ټیمپلېټ payload جوړښت
defaultPayload او د ترلاسه کوونکي ځانګړی payload ورته جوړښت لري. د ټیمپلېټ پیغامونو لپاره باید type: "template" وټاکل شي.
{
"type": "template",
"template": {
"templateName": "order_confirmation",
"languageCode": "tr-TR",
"variables": []
},
"isMerge": true
}
| ساحه | ډول | اړین | توضیح |
|---|---|---|---|
type | string | هو | د payload ډول. د ټیمپلېټ پیغامونو لپاره: "template" |
template.templateName | string | هو* | په Meta کې ثبت شوی د ټیمپلېټ نوم. د ترلاسه کوونکي په payload کې اختیاري دی کله چې isMerge: true وکارول شي (له ډیفالټ څخه میراث کیږي). |
template.languageCode | string | نه | د ټیمپلېټ د ژبې کوډ (د بیلګې په توګه "tr"، "en"، "tr-TR"، "en-US"). باید په Meta کې د ثبت شوې ژبې سره دقیقاً سمون ولري. |
template.variables | array | نه | د متغیرونو لیست چې پر ټیمپلېټ برخو پلي کیږي. لاندې په تفصیل سره. |
isMerge | boolean | نه | true: د ترلاسه کوونکي payload له defaultPayload سره ژور یوځای کیږي. false یا نه لیکل شوی: د ترلاسه کوونکي payload defaultPayload په بشپړه توګه بدلوي. |
- که
defaultPayload.isMerge: trueوي او ترلاسه کوونکی خپلpayloadورکړي، ژور یوځای کول پلي کیږي. - په ژور یوځای کولو کې، ترلاسه کوونکی کولی شي یوازې
variablesورکړي؛templateNameاوlanguageCodeله ډیفالټ payload څخه میراث کیږي. - د ترلاسه کوونکي
isMergeساحهdefaultPayload.isMergeبدلوي. - که ترلاسه کوونکی
payloadونه ورکوي،defaultPayloadتل کارول کیږي.
د متغیرونو جوړښت
د variables لړۍ هر توکی د ټیمپلېټ له یوې برخې سره مطابقت لري. د برخې ډول (type) په لړۍ کې یوازې یو ځل ښکاره کیدی شي.
| type | توضیح | parameters | cards |
|---|---|---|---|
"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"]
}
د CAROUSEL برخه
د کاروسل ټیمپلېټونو لپاره، د برخې متغیرونه د هر کارت لپاره جلا ټاکل کیږي.
{
"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
د غوښتنې پارامېټرونه
| پارامېټر | ډول | اړین | توضیح |
|---|---|---|---|
bulkOperationId | string | هو | د ډلهییز عملیاتو 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 لاندې دي.
| ساحه | ډول | توضیح |
|---|---|---|
status | string | د ډلهییز عملیاتو حالت: preparing، scheduled، pending، running، stopping، stopped، completed، failed |
progress.total | number | د توکو ټوله شمېر |
progress.pending | number | هغه توکي چې لا هم په کتار کې انتظار باسي |
progress.succeeded | number | هغه توکي چې په بریالیتوب سره د رسولو لپاره پروسس شوي |
progress.failed | number | هغه توکي چې د رسولو تېروتنه یې درلودله |
progress.cancelled | number | هغه توکي چې د stop لخوا لغوه شوي |
progress.unknown | number | هغه توکي چې پایله یې ونه ټاکل شوه |
result.outcome | string | وروستۍ پایله کله چې ډلهییز عملیات پای ته ورسیږي: success، partial، all-failed، cancelled، unknown |
result.hasErrors | boolean | true که لږترلږه یو توکی ناکام شوی وي |
scheduleAt | string | د رسولو مهالویش شوی وخت (یوازې د مهالویش شویو ډلهییزو عملیاتو لپاره) |
startedAt، completedAt | string | رسول کله پیل او کله پای ته ورسید |
progress.succeeded ښيي چې پیغام د سیستم لخوا په بریالیتوب سره سپارل شوی. دا تضمین نه کوي چې Meta پیغام ترلاسه کوونکي ته رسولی دی. د Meta لخوا رامنځته شوي وروستني حالت تازه معلومات (لکه delivered، read یا failed) پر دې شمېرونکي اغېز نه کوي او دلته نه ښکاري.
- 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
د غوښتنې پارامېټرونه
| پارامېټر | ډول | اړین | توضیح |
|---|---|---|---|
bulkOperationId | string | هو | د ډلهییز عملیاتو 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 ساحې
| ساحه | ډول | توضیح |
|---|---|---|
pending | number | پیغامونه چې لا نه دي لیږل شوي |
sending | number | پیغامونه چې همدا اوس لیږل کیږي |
sent | number | پیغامونه چې WhatsApp ته سپارل شوي، خو لا نه دي رسیدلي |
delivered | number | پیغامونه چې د ترلاسه کوونکي تلیفون ته رسیدلي |
read | number | پیغامونه چې ترلاسه کوونکي لوستلي |
deleted | number | ړنګ شوي پیغامونه |
warning | number | پیغامونه د خبرتیا سره |
error | number | پیغامونه د تېروتنې سره |
unknown | number | پیغامونه د نامعلوم حالت سره |
not-sended | number | پیغامونه چې نه شو لیږل کیدی |
no-message | number | هغه توکي چې پیغام نلري (لا هم په کتار کې، ناکام یا لغوه شوي) |
total | number | د توکو ټوله شمېر |
- کله چې ډلهییز عملیات
runningوي، دno-messageلوړ شمېر ښيي چې رسول لا روان دی - د
deliveredشمېر د پیغام بریالی رسول ښيي - د
readشمېر د کمپاین د ګډون د اندازه کولو لپاره کارول کیدی شي - تاسو کولی شئ دا اینډپوینټ په منظمو وختونو پوښتل څو په ریښتینې وخت کې تعقیب شي
د Options جوړښت — پاڼهبندي، فلټر کول او ترتیب
د options پارامېټر چې د list او list-with-messages اینډپوینټونو کې کارول کیږي، د پاڼهبندۍ، فلټر کولو او ترتیب لپاره یو معیاري جوړښت وړاندې کوي.
د Options ساحې
| ساحه | ډول | اړین | توضیح |
|---|---|---|---|
pagination | object | نه | د پاڼهبندۍ تنظیمات |
filtering | object | نه | د فلټر کولو معیارونه |
sorting | object | نه | د ترتیب تنظیمات (د بیلګې په توګه {"position": 1}) |
د پاڼهبندۍ جوړښت
که pagination ونه لیږل شي، لومړۍ پاڼه تر 50 توکو پورې بیرته ورکول کیږي. که ولیږل شي، currentPage اړین دی.
| ساحه | ډول | ډیفالټ | توضیح |
|---|---|---|---|
currentPage | number | — | د پاڼې شمېره چې ترلاسه کیږي (کله چې pagination لیږل کیږي اړین دی) |
pageItems | number | 50 | په هره پاڼه کې د توکو شمېر (تر ټولو ډیر: 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
د غوښتنې پارامېټرونه
| پارامېټر | ډول | اړین | توضیح |
|---|---|---|---|
bulkOperationId | string | هو | د ډلهییز عملیاتو ID چې لیست کول یې غواړئ |
options | object | نه | د پاڼهبندۍ، فلټر کولو او ترتیب اختیارونه. د جزئیاتو لپاره د 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": {}
}
}
د توکي ساحې
| ساحه | ډول | توضیح |
|---|---|---|
_id | string | د توکي ID |
bulkOperationId | string | د هغه ډلهییز عملیاتو ID چې دا توکی ورپورې اړه لري |
position | number | د غوښتنې د recipients په لړۍ کې د ترلاسه کوونکي ترتیب، له 0 څخه پیلیږي |
payload | object | ترلاسه کوونکی دقیقاً لکه څنګه چې په غوښتنه کې لیږل شوی (username / userId / sessionId، referenceId، payload، isMerge) |
status | string | د توکي حالت: pending، succeeded، failed، cancelled، unknown |
error | object | یوازې په failed توکو کې: code، message او retryable |
result.userId | string | د ترلاسه کوونکي کارن ID |
result.sessionId | string | د خبرو اترو د ناستې ID |
result.messageId | string | د لیږل شوي پیغام ID (که هېڅ پیغام نه وي لیږل شوی، نشته) |
completedAt | string | توکی کله پروسس شو |
message | object | د پیغام توضیحات (یوازې په list-with-messages کې) |
session | object | د خبرو اترو توضیحات (یوازې په list-with-messages کې) |
د List او List-With-Messages پرتله
| ځانګړتیا | list | list-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
دا عمل بیرته نشي کیدی. درول شوی رسول بیا نشي پیلیدی.
د غوښتنې پارامېټرونه
| پارامېټر | ډول | اړین | توضیح |
|---|---|---|---|
bulkOperationId | string | هو | د ډلهییز عملیاتو 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.