मेटा र इन्स्टाग्राम एपीआई एकीकरण
SMSBAT ChatHub प्लेटफर्म मा एक Instagram एप निर्माणको लागि सन्दर्भ: प्रमाणीकरण, इन्स्टाग्राम प्रत्यक्ष कुराकानी, पोष्टहरूमा टिप्पणीहरू र रिलहरू, कथा जवाफहरू, वेबहुकहरू र मतदान।
स्रोतहरू
यो पृष्ठले प्रत्यक्ष OpenAPI सँग आन्तरिक मेटा टिप्पणी API विनिर्देशहरू मर्ज गर्दछ
https://chatapi.smsbat.com/swagger/v1/swagger.json मा परिभाषाहरू र
https://restapi.smsbat.com/swagger/v1/swagger.json। जहाँ दुई जना असहमत छन्, त्यहाँ
भिन्नतालाई इनलाइन भनिन्छ र खुला प्रश्नहरू अन्तर्गत सूचीबद्ध गरिन्छ।
१. आधार URL हरू
| उद्देश्य | URL |
|---|---|
| च्याट API + मेटा API | https://chatapi.smsbat.com |
| Swagger UI / OpenAPI | https://chatapi.smsbat.com/index.html · …/swagger/v1/swagger.json |
| REST API (संगठनहरू, कलब्याक URL हरू) | https://restapi.smsbat.com |
| REST API Swagger | https://restapi.smsbat.com/swagger/v1/swagger.json |
| अपरेटर वेब प्यानल | https://chat.smsbat.com |
२. प्रमाणीकरण
प्रमाणीकरण योजना अन्तबिन्दु समूहमा निर्भर हुन्छ। तिनीहरूलाई मिलाउनु 401 को सबैभन्दा सामान्य कारण हो।
| समूह | हेडर |
|---|---|
chatapi.smsbat.com/api/meta/* (पोस्टहरू, टिप्पणीहरू) | X-Authorization-Key: <organization token> |
chatapi.smsbat.com/api/chat/*, /api/company/*, /api/operator/* | Authorization: Bearer <JWT> |
restapi.smsbat.com/* | X-Authorization-Key · Authorization: Bearer · आधारभूत प्रमाणीकरण |
X-Authorization-Key को लागि संगठन टोकन प्रोफाइल अन्तर्गत प्यानलमा जारी गरिएको छ।
कम्पनी र अपरेटर JWTs /api/company/get-token र /api/operator/get-token बाट आउँछन्।
विसंगति
chatapi OpenAPI कागजातले एकल सुरक्षा योजना — Bearer — घोषणा गर्छ र यसलाई लागू गर्छ।
विश्वव्यापी रूपमा। X-Authorization-Key त्यहाँ कुनै पनि घोषणा गरिएको छैन, यद्यपि आन्तरिक मेटा
टिप्पणी API विशिष्टताले यसलाई /api/meta/* को लागि नाम दिन्छ। यो सम्भवतः द्वारा ह्यान्डल गरिएको छ
मिडलवेयर जुन स्वागरमा प्रतिबिम्बित हुँदैन। तपाईंले जहाज पठाउनु अघि प्रायोगिक रूपमा पुष्टि गर्नुहोस्।
२.१ कम्पनी टोकन
POST https://chatapi.smsbat.com/api/company/get-token
Content-Type: application/json
{ "login": "company_login", "password": "company_password" }
200 OK एउटा खाली टोकन स्ट्रिङ फर्काउँछ।
२.२ संगठनहरू
GET https://chatapi.smsbat.com/api/company/organization
Authorization: Bearer <company_token>
[ { "id": 24, "name": "My Instagram Store" } ]
२.३ संगठनमा अपरेटरहरू
GET https://chatapi.smsbat.com/api/operator?organizationId=24
Authorization: Bearer <company_token>
[
{
"id": 21,
"name": "Jane Doe",
"status": 0,
"organization": { "id": 24, "name": "My Instagram Store" }
}
]
अपरेटर स्थितिहरू: 0 सक्रिय, 1 निष्क्रिय, 2 मेटाइयो।
२.४ अपरेटरहरू थप्नुहोस् / सिङ्क्रोनाइज गर्नुहोस्
POST https://chatapi.smsbat.com/api/operator/synchronize
Authorization: Bearer <company_token>
Content-Type: application/json
[ { "organizationId": 24, "name": "John Operator" } ]
200 OK → [ { "id": 21, "status": 0, "name": "John Operator" } ]
२.५ अपरेटर JWT
POST https://chatapi.smsbat.com/api/operator/get-token
Authorization: Bearer <company_token>
Content-Type: application/json
{ "id": 21, "expiresAt": "2026-12-31T23:59:59.000Z" }
200 OK ले JWT लाई स्ट्रिङको रूपमा फर्काउँछ।
२.६ अपरेटर टोकन प्रमाणित गर्नुहोस्
POST https://chatapi.smsbat.com/api/operator/validate-token
Authorization: Bearer <company_token>
Content-Type: application/json
"eyJhbGciOi..."
{
"isValid": true,
"operatorId": 21,
"clientId": 0,
"expiresAt": "2026-12-31T23:59:59.000Z",
"error": null
}
अवैध हुँदा: { "isValid": false, "error": "Invalid token" }।
२.७ अपरेटर च्याट प्यानल इम्बेड गर्नुहोस्
<script type="module" id="operator-chat-panel-script"
src="https://widget.smsbat.com/operator-chat-panel/widget-script.js"
token="YOUR_OPERATOR_JWT_TOKEN"></script>
३. च्याट प्यानलमा दीपलिङ्कहरू
एक बाह्य प्रणाली (CRM, ERP, वेबसाइट) मा एक विशिष्ट कुराकानी खोल्न सक्छ
https://chat.smsbat.com/। अपरेटरलाई क्वेरी प्यारामिटरको रूपमा पास गरिएको JWT द्वारा अधिकृत गरिएको छ।
https://chat.smsbat.com/?chat_raw_id=<chat_id>&token=<jwt>
https://chat.smsbat.com/?phone=<phone>&token=<jwt>
https://chat.smsbat.com/?from=<bm_id>&phone=<phone>&token=<jwt>
https://chat.smsbat.com/?source=7&from=<bm_id>&phone=<phone>&token=<jwt>
| प्यारामिटर | विवरण |
|---|---|
chat_raw_id | च्याट आईडी |
phone | अन्तर्राष्ट्रिय ढाँचामा फोन नम्बर |
from | ब्रान्ड / व्यापार खाता पहिचानकर्ता (bm_id) |
source | च्याट स्रोत — इन्स्टाग्रामको लागि 7, हेर्नुहोस् §8.1 |
token | वैध, म्याद समाप्त भएको अपरेटर JWT च्याटहरूमा पहुँचको साथ |
अवैध JWT ले अपरेटर प्यानलको लगइन स्क्रिनमा आगन्तुकलाई अवतरण गर्छ।
४. इन्स्टाग्राम प्रत्यक्ष कुराकानी
४.१ सूची च्याटहरू
GET https://chatapi.smsbat.com/api/chat/chats?source=7&page=1&per_page=20
Authorization: Bearer <token>
Note
यहाँ पृष्ठांकन per_page (snake_case) छ। /api/meta/* अन्तर्गत र मतदान
अन्तिम बिन्दु यो perPage (camelCase) हो। यो टाइपो होइन — API ले दुबै प्रयोग गर्दछ।
क्वेरी प्यारामिटरहरू, सबै वैकल्पिक:
| प्यारामिटर | प्रकार | विवरण |
|---|---|---|
source | ChatSource | 7 परिणामहरू इन्स्टाग्राममा सीमित गर्दछ |
entityId | int | व्यापार खाता आईडी। source |
instagram_user_id | int | ChatHub मा इन्स्टाग्राम प्रयोगकर्ता आईडी |
facebook_user_id | int | ChatHub मा फेसबुक प्रयोगकर्ता आईडी |
page / per_page | int | पृष्ठांकन, पूर्वनिर्धारित 1 / 20 |
status | ChatStatus[] | च्याट स्थिति, दोहोर्याउन मिल्ने |
search | string | नि: शुल्क-पाठ खोज (नाम, फोन, …) |
organizationId | int | संगठन ID |
operatorId | int[] | तोकिएको अपरेटरहरू द्वारा फिल्टर |
date | string[] | दुई सीमाहरू: ?date=…&date=… |
isChain | bool | च्याटहरू चेनको रूपमा फर्काउनुहोस्, अघिल्लो च्याटहरूबाट सन्देशहरू बोक्दै |
isUnread, starMark, isOperator, isAIAgent | bool | अतिरिक्त फिल्टरहरू |
phone, email, contactId, clientId, tagIds, rate, sortedBy | - | अन्य फिल्टरहरू |
200 OK फिर्ता GetChatsResponse:
{
"total": 1,
"newMessagesCount": 2,
"items": [
{
"id": 1867,
"theme": null,
"messSource": 7,
"chatStatus": 1,
"countUnread": 2,
"metaUserId": "1585775752382460",
"instaAccount": { "id": 12, "name": "my_instagram_shop", "photo": "https://..." },
"instagramUser": { "id": 123, "name": "marianna_cat", "photo": "https://..." },
"operator": { "id": 21, "name": "Jane", "photo": "https://..." },
"client": { "id": 55, "name": "Marianna", "photo": null },
"textLastMess": "Hello! Is this product available?",
"timeLastMess": "2026-08-13T10:15:00Z",
"authorLastMessage": 1,
"messageStatus": 6,
"isMedia": false,
"phone": null,
"organizationId": 1,
"createdAt": "2026-08-13T10:14:00Z",
"isStarred": false,
"isBlocked": false,
"tags": []
}
]
}
इन्स्टाग्राम एपको लागि महत्त्वपूर्ण क्षेत्रहरू:
| क्षेत्र | अर्थ |
|---|---|
instaAccount | इन्स्टाग्राम व्यापार खाता (पसल)। id entityId फिल्टर मान हो; name Meta |
instagramUser | ग्राहक। name इन्स्टाग्राम ह्यान्डल हो, id instagram_user_id फिल्टर मान हो |
metaUserId | मेटाको छेउमा रहेको ग्राहकको स्कोप गरिएको ID (स्ट्रिङ) |
messSource | इन्स्टाग्रामको लागि 7 |
phone | सामान्यतया null Instagram को लागि - यसलाई कुञ्जीको रूपमा प्रयोग नगर्नुहोस् |
ChatDTO ले olxUser, promUser, waba, rozetkaUser, facebookAccount,
facebookUser, viberAccount, tgBot, tgUser, viberBot, viberBotUser, widget,
media, isConnectedAI, isPromo, rate, rateComment, closedBy, draft, lang,
starMark, contactId, contactName, block, isInStopList, stopList,
isSmsFallbackEnabled र taggedMessages।
४.२ च्याट सन्देशहरू
GET https://chatapi.smsbat.com/api/chat/chats/1867/messages?isChain=false
Authorization: Bearer <token>
200 OK ले ChatMessageDTO को एरे फर्काउँछ:
[
{
"id": 9928,
"chatId": 1867,
"message": "Hi! Do you have size M in stock?",
"messageTranslation": null,
"phone": null,
"author": 1,
"source": 7,
"media": null,
"replyTo": null,
"status": 6,
"date": "2026-08-13T10:14:00Z",
"operator": null,
"client": { "id": 123, "name": "marianna_cat", "photo": "https://..." },
"messageType": 0,
"isInternal": false,
"isBroadcast": false,
"starMark": false,
"referralGuid": null,
"postId": null,
"isConnectedAI": false,
"organizationId": 1,
"countUnreadMessages": 0
}
]
सन्देश इन्स्टाग्राम पोस्ट वा कथासँग सम्बन्धित हुँदा postId भरिएको हुन्छ — यसलाई पास गर्नुहोस्
सीधा id / postId को रूपमा Meta API मा फर्कनुहोस्। media एक ChatMediaDTO हो:
{ name, format, type, uri, raw, length, isUploaded }।
4.3 सन्देश पठाउनुहोस् (JSON)
POST https://chatapi.smsbat.com/api/chat/1867/message
Authorization: Bearer <token>
Content-Type: application/json
शरीर — SendChatMessageDTO:
{
"textMessage": "Hello! Yes, size M is available.",
"author": 0,
"isInternal": false,
"replyToMessageId": 9928,
"appGuid": "550e8400-e29b-41d4-a716-446655440000",
"media": {
"name": "item.jpg",
"format": "image/jpeg",
"dataBase64": "/9j/4AAQSkZJRg...",
"type": 1
}
}
| क्षेत्र | प्रकार | विवरण |
|---|---|---|
textMessage | string? | सन्देश पाठ। media उपस्थित हुँदा खाली हुन सक्छ |
author | AuthorMessage? | 0 अपरेटर, 1 ग्राहक |
isInternal | bool? | true ले ग्राहकलाई नपुगेको आन्तरिक नोट चिन्ह लगाउँछ |
replyToMessageId | int? | जवाफ दिईएको सन्देशको ID |
appGuid | uuid? | रेफरल GUID |
media | MediaDTO? | { name, format, dataBase64, thumbnail, duration, type } |
200 OK → { "id": 9930, "messageStatus": 0 }
एउटा रेफरल GUID पनि मार्गमा पारित हुन सक्छ:
POST /api/chat/{chatId}/{referralGuid}/message (त्यस्तै …/message/v1, …/message/v2)।
4.4 फाइल वा भिडियो पठाउनुहोस् (मल्टीपार्ट, v2)
POST https://chatapi.smsbat.com/api/chat/1867/message/v2
Authorization: Bearer <token>
Content-Type: multipart/form-data
फारम क्षेत्रका नामहरू डट नोटेशनको साथ PascalCase हुन्
textMessage र media.file चुपचाप बेवास्ता गरिन्छ। तलको सही नामहरू प्रयोग गर्नुहोस्।
| फारम क्षेत्र | प्रकार | विवरण |
|---|---|---|
TextMessage | string | सन्देश पाठ |
Author | int | 0 अपरेटर, 1 ग्राहक |
IsInternal | bool | आन्तरिक नोट |
ReplyToMessageId | int | सन्देशको जवाफ दिँदै |
AppGuid | uuid | रेफरल GUID |
Media.File | binary | फाइल नै |
Media.Name | string | फाइल नाम |
Media.Format | string | MIME प्रकार (video/mp4, image/png, application/pdf) |
Media.Type | MediaType | हेर्नुहोस् §8.5 |
Media.DataBase64 | string | Media.File को वैकल्पिक |
Media.Thumbnail | string | Base64 भिडियो पूर्वावलोकन फ्रेम |
Media.Duration | double | सेकेन्डमा भिडियो अवधि |
curl -X POST "https://chatapi.smsbat.com/api/chat/1867/message/v2" \
-H "Authorization: Bearer <token>" \
-F "TextMessage=Here is the price list" \
-F "Author=0" \
-F "Media.Type=2" \
-F "Media.File=@./price.pdf"
200 OK → { "id": 9931, "messageStatus": 0 }
४.५ च्याट स्थिति परिवर्तन गर्नुहोस्
PUT https://chatapi.smsbat.com/api/chat/status
Authorization: Bearer <token>
Content-Type: application/json
{ "id": 1867, "status": 4 }
200 OK अद्यावधिक गरिएको वस्तु प्रतिध्वनि गर्दछ।
४.६ सन्देश स्थिति अपडेट गर्नुहोस्
PUT https://chatapi.smsbat.com/api/chat/messages/status
Authorization: Bearer <token>
Content-Type: application/json
{ "status": 3, "messageIds": [9928, 9929] }
४.७ च्याट मेटाउनुहोस्
DELETE https://chatapi.smsbat.com/api/chat/chats/1867
Authorization: Bearer <token>
5. पोष्टहरू, रिलहरू र कथाहरू
आधार मार्ग: https://chatapi.smsbat.com/api/meta
प्रमाण: X-Authorization-Key: <organization token>
5.1 पोष्टहरू, रिलहरू र कथाहरू सूचीबद्ध गर्नुहोस्
GET https://chatapi.smsbat.com/api/meta/posts?platform=instagram&mediaType=story&page=1&perPage=20
X-Authorization-Key: <token>
| प्यारामिटर | प्रकार | आवश्यक | विवरण |
|---|---|---|---|
page | int | छैन | पृष्ठ, पूर्वनिर्धारित 1 |
perPage | int | छैन | प्रति पृष्ठ वस्तुहरू, पूर्वनिर्धारित 20 |
id | int | छैन | आन्तरिक पोस्ट आईडी द्वारा फिल्टर |
platform | string | छैन | instagram वा facebook |
mediaType | string | छैन | post, reel वा story। सबै प्रकार जब छोडियो |
# Every post
curl -H "X-Authorization-Key: <token>" \
"https://chatapi.smsbat.com/api/meta/posts?page=1&perPage=10"
# Instagram only
curl -H "X-Authorization-Key: <token>" \
"https://chatapi.smsbat.com/api/meta/posts?platform=instagram"
# A single post by ID
curl -H "X-Authorization-Key: <token>" \
"https://chatapi.smsbat.com/api/meta/posts?id=42"
# Instagram Stories only
curl -H "X-Authorization-Key: <token>" \
"https://chatapi.smsbat.com/api/meta/posts?platform=instagram&mediaType=story"
200 OK:
{
"total": 42,
"items": [
{
"id": 42,
"metaId": "18113450675314072",
"text": "Check out our new collection!",
"imageUrl": "https://dashboard.smsbat.com/api/meta/post/media/7d124c36-1711-4aa8-b21d-f6dbf8f347ef",
"platform": "instagram",
"mediaType": "story",
"createdAt": "2026-07-22T09:35:30Z",
"story": {
"id": 42,
"metaId": "18113450675314072",
"url": "https://dashboard.smsbat.com/api/meta/post/media/7d124c36-1711-4aa8-b21d-f6dbf8f347ef"
}
}
]
}
विसंगति — काउन्टर फिल्ड नाम
Swagger योजना MetaCommentPostListItemDtoPaginationDTO ले total परिभाषित गर्दछ। द
आन्तरिक विशिष्टता कागजातहरू totalCount। स्वागर कोडबाट उत्पन्न हुन्छ, त्यसैले
total बढी सम्भावित सत्य हो। यो सेटल नभएसम्म total ?? totalCount पार्स गर्नुहोस्।
| क्षेत्र | विवरण |
|---|---|
id | आन्तरिक पोस्ट आईडी |
metaId | मेटा मा बाह्य पोस्ट / रील / कथा ID |
text | पोस्ट क्याप्सन |
imageUrl | प्रोक्सी मिडिया URL गैर-क्रमिक MetaPost.Guid, वा null द्वारा कुञ्जी। |
platform | facebook वा instagram |
mediaType | post, reel वा story |
createdAt | सिर्जना मिति (प्लेटफर्म मिति, वा डाटाबेस मिति) |
story | mediaType: "story" |
story.id | आन्तरिक कथा आईडी; post.id बराबर |
story.metaId | मेटामा बाह्य कथा ID |
story.url | भण्डारण गरिएको स्टोरी मिडियाको स्थिर प्रोक्सी URL; null यदि मिडियालाई बचाउन सकिएन भने |
पोस्ट मिडिया दुई मार्गहरूद्वारा सेवा गरिन्छ: GET /api/meta/post/media/{id:int} पछाडिका लागि
अनुकूलता र GET /api/meta/post/media/{guid:guid}। नयाँ API प्रतिक्रियाहरू र कलब्याकहरू
सधैं GUID फारम उत्पन्न गर्नुहोस्।
5.2 टिप्पणीहरू सूचीबद्ध गर्नुहोस्
GET https://chatapi.smsbat.com/api/meta/comments?platform=instagram&postId=42&page=1&perPage=20
X-Authorization-Key: <token>
| प्यारामिटर | प्रकार | आवश्यक | विवरण |
|---|---|---|---|
page | int | छैन | पृष्ठ, पूर्वनिर्धारित 1 |
perPage | int | छैन | प्रति पृष्ठ वस्तुहरू, पूर्वनिर्धारित 20 |
postId | int | छैन | पोस्ट आईडी द्वारा फिल्टर |
parentCommentId | int | छैन | दिइएको टिप्पणीको बाल टिप्पणीहरू (उत्तरहरू) |
platform | string | छैन | facebook वा instagram |
200 OK:
{
"total": 100,
"items": [
{
"id": 5,
"metaId": "179000000000005",
"text": "What is the price?",
"createdAt": "2026-04-15T10:30:00Z",
"platform": "instagram",
"replyStatus": null,
"author": {
"type": "meta_user",
"name": "John Doe",
"metaUserId": "1585775752382460"
},
"post": {
"id": 1,
"metaId": "18113450675314072",
"text": null,
"imageUrl": "https://dashboard.smsbat.com/api/meta/post/media/7d124c36-…",
"createdAt": "2026-07-22T09:35:30Z",
"mediaType": "story",
"story": {
"id": 1,
"metaId": "18113450675314072",
"url": "https://dashboard.smsbat.com/api/meta/post/media/7d124c36-…"
}
},
"mediaUrl": "https://chatapi.smsbat.com/api/meta/comment/media/5",
"replyTo": {
"id": 3,
"metaId": "179000000000003",
"text": "Parent comment..."
}
}
]
}
| क्षेत्र | विवरण |
|---|---|
id | आन्तरिक टिप्पणी आईडी |
metaId | मेटामा बाह्य ID। null हाम्रो विचाराधीन जवाफको लागि यो नपठाइएसम्म |
text | टिप्पणी पाठ |
createdAt | सिर्जना मिति |
platform | facebook वा instagram |
replyStatus | इनबाउन्ड प्रयोगकर्ता टिप्पणीको लागि null; हाम्रो जवाफको लागि "pending" / "sent" / "failure" |
author.type | "meta_user" बाह्य प्रयोगकर्ता, "owner" पृष्ठ मालिक |
author.name | लेखकको नाम |
author.metaUserId | मेटामा स्कोप गरिएको प्रयोगकर्ता आईडी; null "owner" को लागि |
post | पोस्ट, रिल वा कथा टिप्पणी |
post.mediaType | post, reel वा story |
post.story | कथा सन्दर्भ { id, metaId, url }, कथाहरू मात्र |
mediaUrl | टिप्पणीमा संलग्न मिडिया, वा null |
replyTo | अभिभावक टिप्पणी { id, metaId, text }; null शीर्ष स्तरमा |
विसंगति — `author.type` को प्रकार
आन्तरिक स्पेसिफिकेशनले स्ट्रिङहरू "meta_user" / "owner" कागजात गर्दछ। स्वेगर प्रकारहरू
MetaCommentAuthorType enum [0, 1] संग पूर्णांक को रूपमा। A JsonStringEnumConverter
अन्तर व्याख्या गर्नेछ, तर त्यो वास्तविक प्रतिक्रिया विरुद्ध पुष्टि भएको छैन। ए लेख्नुहोस्
दुबै स्वीकार गर्ने पार्सर।
5.3 टिप्पणीको जवाफ दिनुहोस्
डेलिभरीको लागि जवाफ पङ्क्तिबद्ध।
curl -X POST \
-H "X-Authorization-Key: <token>" \
-H "Content-Type: application/json" \
-d '{"text": "Thanks for the feedback!"}' \
"https://chatapi.smsbat.com/api/meta/comments/5/reply"
अनुरोधको मुख्य भाग: { "text": "Reply text" }
202 Accepted टिप्पणी वस्तु फर्काउँछ — GET /api/meta/comments जस्तै आकार — सँग
replyStatus: "pending" र metaId: null। वितरण परिणाम पछि a को रूपमा आउँछ
source: 13 कलब्याक (§6.4)।
विसंगति — प्रतिक्रिया कोड
स्वगरले शरीर बिना 200 घोषणा गर्दछ; आन्तरिक विनिर्देश 202 Accepted घोषणा गर्दछ
शरीरको रूपमा टिप्पणीको साथ। नियन्त्रकमा सम्भवतः ProducesResponseType अभाव छ
विशेषता, स्वागरलाई यसको पूर्वनिर्धारितमा छोड्नुहोस्। कुनै पनि 2xx स्वीकार गर्नुहोस् र शरीरमा निर्भर नगर्नुहोस्।
६. वेबहुकहरू
SMSBAT ले तपाईंको URL मा application/json सँग POST अनुरोधहरू पठाउँछ र HTTP 200 फिर्ताको अपेक्षा गर्दछ।
शून्य क्षेत्रहरू पूर्ण रूपमा हटाइएका छन्
एउटा फिल्ड जसको मान null हो कलब्याक मुख्य भागमा क्रमबद्ध गरिएको छैन। को लागी ए
फेसबुक वा इन्स्टाग्रामबाट नआएको सन्देश त्यहाँ MetaUserId कुञ्जी मात्र छैन।
“अनुपस्थित” र null लाई एउटै कुराको रूपमा व्यवहार गर्नुहोस्।
६.१ कलब्याक URL दर्ता गर्नुहोस्
curl -X POST 'https://restapi.smsbat.com/organizations/callback_urls' \
-H 'X-Authorization-Key: <token>' \
-H 'Content-Type: application/json' \
-d '{
"url": "https://your-server.com/webhook",
"source": 12,
"headerName": "X-Webhook-Secret",
"headerValue": "your-secret",
"channelType": 7,
"channelEntityId": 12
}'
| क्षेत्र | प्रकार | विवरण |
|---|---|---|
url | string | तपाईंको अन्तिम बिन्दु |
source | SendingSourceCallback | घटना प्रकार, हेर्नुहोस् §8.2 |
headerName / headerValue | string | आर्बिट्ररी प्रमाणीकरण हेडर हामीले अनुरोधमा संलग्न गर्छौं (वैकल्पिक) |
channelType | ChatSource | च्यानल। 7 Instagram को लागी। ऐच्छिक |
channelEntityId | int | एक विशिष्ट व्यापार खाता। channelType आवश्यक छ |
channelType बिना URL ले हरेक च्यानलबाट घटनाहरू प्राप्त गर्दछ।
Tip
पूर्ण टिप्पणी कभरेजको लागि दुई दर्ता आवश्यक छ: source: 12 नयाँ टिप्पणीहरू र
जवाफ स्थितिहरूको लागि source: 13। प्रत्यक्ष र कथा जवाफहरूको लागि source: 3 थप्नुहोस्
(र 11 यदि तपाइँ हरेक च्याट सन्देश चाहनुहुन्छ भने)।
बाँकी कार्यहरू:
GET https://restapi.smsbat.com/organizations/callback_urls?source=12
GET https://restapi.smsbat.com/organizations/callback_urls/{id}
PUT https://restapi.smsbat.com/organizations/callback_urls/{id}
DELETE https://restapi.smsbat.com/organizations/callback_urls/{id}
GET फिर्ता:
[
{
"id": 101,
"url": "https://your-server.com/webhook",
"source": 12,
"headerName": "X-Webhook-Secret",
"headerValue": "your-secret",
"createdAt": "2026-08-13T09:00:00Z",
"channelType": 7,
"channelEntityId": 12
}
]
६.२ नयाँ सन्देश र इन्स्टाग्राम स्टोरीको जवाफ (source: 3, 11)
इन्स्टाग्राम स्टोरीमा प्रयोगकर्ताको जवाफ यी कलब्याकहरूमा सामान्य सन्देशको रूपमा आउँछ,
अतिरिक्त शीर्ष-स्तर Story ब्लकको साथ:
{
"ChatId": 123,
"MessageId": 456,
"MessageText": "😍",
"Username": "Jane Smith",
"UserId": 789,
"MetaUserId": "1585775752382460",
"ShopId": 12,
"ShopName": "instagram shop name",
"Author": 0,
"type_messenger": 7,
"Story": {
"Id": 42,
"MetaId": "18113450675314072",
"Url": "https://dashboard.smsbat.com/api/meta/post/media/7d124c36-1711-4aa8-b21d-f6dbf8f347ef"
}
}
| क्षेत्र | विवरण |
|---|---|
ChatId / MessageId | च्याट र सन्देश पहिचानकर्ता |
Author | 0 प्रयोगकर्ता, 1 अपरेटर |
Username | इन्स्टाग्राम / फेसबुक प्रदर्शन नाम वा ह्यान्डल |
UserId | SMSBAT मा आन्तरिक संख्यात्मक प्रयोगकर्ता ID |
MetaUserId | मेटामा कुराकानी साझेदारको स्कोप गरिएको ID। आउटगोइङ अपरेटर सन्देशमा यसले अझै पनि च्याटको मेटा प्रयोगकर्तालाई पहिचान गर्छ, अपरेटरलाई होइन |
ShopId | इन्स्टाग्राम / फेसबुक व्यापार खाताको आन्तरिक आईडी |
ShopName | जडान समयमा मेटा बाट प्राप्त व्यापार खाता नाम |
MessageText | सन्देश पाठ |
MessageMedia | मिडिया URL जब सन्देश मिडिया हो |
type_messenger | स्रोत, इन्स्टाग्रामको लागि 7 |
operator_name | अपरेटरको नाम जब Author = 1 |
Story | इनबाउन्ड स्टोरी जवाफमा मात्र प्रस्तुत गर्नुहोस् |
Story.Id | आन्तरिक कथा (MetaPost) ID — मेटा API मा id / postId को रूपमा सीधा प्रयोग गर्न मिल्ने |
Story.MetaId | मेटामा बाह्य कथा ID |
Story.Url | भण्डारण गरिएको स्टोरी मिडियाको स्थिर प्रोक्सी URL। मिडिया बचत गर्न नसक्दा अनुपस्थित — Story ब्लक र सन्देश अझै डेलिभर गरिँदैछ |
`Author` Chat API को सापेक्ष उल्टो छ
ChatMessageDTO.author मा, 0 भनेको अपरेटर र 1 भनेको ग्राहक हो। यो कलब्याक मा छ
अर्को तरिका: 0 प्रयोगकर्ता हो, 1 अपरेटर हो। नक्सा साझेदारी नगर्नुहोस्।
६.३ नयाँ टिप्पणी (source: 12)
आगो लाग्दछ जब मेटा प्रयोगकर्ताले फेसबुक पोस्ट वा इन्स्टाग्राम पोस्ट / रीलमा टिप्पणी गर्दछ।
Note
इन्स्टाग्राम कथा जवाफहरू source: 12 मार्फत डेलिभर हुँदैनन्। तिनीहरू सामान्य रूपमा आइपुग्छन्
source: 3 र/वा 11 मा Story ब्लक भएको इनबाउन्ड सन्देशहरू — §6.2 हेर्नुहोस्।
{
"type": "new_comment",
"platform": "instagram",
"comment": {
"id": 10,
"metaId": "179000000000010",
"parentCommentId": 5,
"parentMetaId": "179000000000005",
"parentCommentText": "The user's previous comment",
"text": "Great product!",
"createdAt": "2026-04-16T12:00:00Z",
"author": {
"type": "meta_user",
"name": "Jane Smith",
"metaUserId": "1585775752382460"
}
},
"post": {
"id": 1,
"metaId": "123456789012345",
"text": "Post description...",
"imageUrl": "https://dashboard.smsbat.com/api/meta/post/media/7d124c36-…",
"createdAt": "2026-04-10T12:00:00Z",
"mediaType": "post"
}
}
6.4 टिप्पणी जवाफ स्थिति (source: 13)
हामीले जवाफ दिन प्रयास गरेपछि आगो लाग्दछ, चाहे त्यो सफल हुन्छ वा असफल हुन्छ।
{
"type": "comment_status",
"platform": "instagram",
"comment": {
"id": 15,
"metaId": "179000000000015",
"parentCommentId": 10,
"parentMetaId": "179000000000010",
"parentCommentText": "Great product!",
"text": "Thanks for the feedback!",
"createdAt": "2026-04-16T12:05:00Z",
"updatedAt": "2026-04-16T12:05:03Z",
"replyStatus": "sent",
"author": {
"type": "owner",
"name": "Support Agent"
}
},
"post": {
"id": 1,
"metaId": "179999999999999",
"text": "Reel description...",
"imageUrl": "https://dashboard.smsbat.com/api/meta/post/media/7d124c36-…",
"createdAt": "2026-07-22T09:35:30Z",
"mediaType": "reel"
}
}
6.5 साझा टिप्पणी कलब्याक क्षेत्रहरू
दुबै टिप्पणी कलब्याकहरू एउटा शरीरको आकार साझेदारी गर्छन् र type मात्र फरक हुन्छन्।
| क्षेत्र | विवरण |
|---|---|
type | "new_comment" वा "comment_status" |
platform | "facebook" वा "instagram" |
comment.id | आन्तरिक टिप्पणी आईडी |
comment.metaId | मेटा मा बाह्य आईडी; null पठाउनु अघि विचाराधीन जवाफको लागि |
comment.parentCommentId | अभिभावक टिप्पणी आईडी। अनुपस्थित शीर्ष-स्तर टिप्पणीको लागि |
comment.parentMetaId | बाह्य अभिभावक टिप्पणी ID। शीर्ष तहमा अनुपस्थित |
comment.parentCommentText | अभिभावक टिप्पणी पाठ। शीर्ष तहमा अनुपस्थित |
comment.text | टिप्पणी पाठ |
comment.createdAt | सिर्जना मिति |
comment.updatedAt | पछिल्लो अपडेट। अनुपस्थित यदि टिप्पणी कहिल्यै सम्पादन गरिएको छैन |
comment.replyStatus | "pending" / "sent" / "failure"। अनुपस्थित एक इनबाउन्ड प्रयोगकर्ता टिप्पणीको लागि |
comment.author.type | "meta_user" वा "owner" |
comment.author.name | लेखकको नाम |
comment.author.metaUserId | मेटामा स्कोप गरिएको लेखक ID। "owner" को लागि अनुपस्थित |
comment.mediaUrl | मिडियामा टिप्पणी गर्नुहोस्। कुनै पनि नभएको बेला अनुपस्थित |
post.id | आन्तरिक पोस्ट आईडी |
post.metaId | मेटा मा बाह्य पोस्ट / रील / कथा ID |
post.text | पोस्ट पाठ |
post.imageUrl | छवि URL पोस्ट गर्नुहोस्, वा null |
post.createdAt | पोस्ट सिर्जना मिति |
post.mediaType | कमेन्ट कलब्याकमा, केवल post वा reel |
६.६ नयाँ च्याट (source: 7)
{ "ChatId": 12345, "Phone": "+380501234567", "chat.Source": 7 }
६.७ सन्देश र च्याट स्थिति परिवर्तनहरू (source: 6 / 5)
{ "name": "changed_message_status", "id": 9928, "status": 6 }
{ "name": "changed_chat_status", "id": 1867, "status": 4 }
६.८ सन्देश सम्पादन वा मेटाइयो (source: 9)
{ "messageId": 9930, "text": "Updated message text" }
{ "messageId": 9931, "delete": true }
६.९ टाइपिङ सूचक (source: 8)
{ "chat_id": 1867, "event": "start_typing", "operator_name": "Iryna" }
{ "chat_id": 1867, "event": "end_typing" }
७. घटना मतदान
इनबाउन्ड HTTP स्वीकार गर्न नसक्ने वातावरणहरूको लागि।
७.१ घटनाहरू प्राप्त गर्नुहोस्
GET https://chatapi.smsbat.com/api/chat/callback-events?page=1&perPage=20
Authorization: Bearer <token>
| प्यारामिटर | विवरण |
|---|---|
organizationId | ऐच्छिक। छुटेको बेला टोकनबाट लिइएको |
page / perPage | पृष्ठांकन, पूर्वनिर्धारित 1 / 20 |
{
"page": 1,
"perPage": 20,
"total": 947,
"items": [
{
"ChatId": 1867,
"MessageId": 9928,
"MessageText": "Hello there!",
"MessageMedia": null,
"Phone": null,
"Username": "marianna_cat",
"UserId": 123,
"ShopId": 12,
"ShopName": "instagram shop name",
"Author": 1,
"type_messenger": 7,
"message_date": "2026-08-13T12:27:39.724Z",
"timestamp": "2026-08-13T12:27:39.736Z",
"event_guid": "ff60129e-c6e4-4876-9d90-badb430c0606",
"organization_id": 1,
"callback_type": "3"
}
]
}
प्रत्येक घटनामा event_guid, timestamp, organization_id र callback_type — a
§8.2 मा source मानहरूसँग मिल्ने स्ट्रिङ। बाँकी क्षेत्रहरू सम्बन्धितसँग मेल खान्छ
वेबहुक §6 मा।
७.२ प्रशोधित घटनाहरू स्वीकार गर्नुहोस्
POST https://chatapi.smsbat.com/api/chat/callback-events/processed
Authorization: Bearer <token>
Content-Type: application/json
[ "ff60129e-c6e4-4876-9d90-badb430c0606" ]
200 OK → { "deleted": 1 }
पहिले नै हटाइएका घटनाहरू deleted मा गणना गर्दैनन्। अर्डर र पुन: प्रयास तपाईंको हो
पक्षको जिम्मेवारी।
७.३ सिफारिस गरिएको लुप
- समयतालिकामा मतदान
GET /api/chat/callback-events। - तपाईंको सेवामा घटनाहरू प्रशोधन गर्नुहोस्।
- प्रक्रिया गरिएको
event_guidसूची/callback-events/processedमा पठाउनुहोस्। - दोहोर्याउनुहोस्।
८. एनम सन्दर्भ
८.१ ChatSource — च्यानल (०–९)
| कोड | च्यानल |
|---|---|
| ० | भाइबर |
| १ | ViberBot |
| २ | टेलिग्रामबोट |
| ३ | व्हाट्सएप |
| ४ | विजेट |
| ५ | रोजेत्का |
| ६ | फेसबुक |
| 7 | इन्स्टाग्राम |
| ८ | प्रोम |
| ९ | ओएलएक्स |
८.२ SendingSourceCallback — कलब्याक घटना प्रकार (०–१३)
| कोड | घटना |
|---|---|
| ३ | Chat — नयाँ च्याट सन्देश, कथा जवाफहरू सहित |
| ५ | च्याट स्थिति परिवर्तन भयो |
| ६ | सन्देश स्थिति परिवर्तन |
| ७ | नयाँ च्याट सिर्जना गरियो |
| ८ | टाइपिङ सूचक |
| ९ | सन्देश अद्यावधिक वा मेटाइएको |
| ११ | AnyChatMessage — कुनै पनि च्याट सन्देश |
| १२ | MetaNewComment — नयाँ इन्स्टाग्राम / फेसबुक टिप्पणी |
| १३ | MetaCommentStatus — हाम्रो टिप्पणी जवाफको डेलिभरी स्थिति |
एनम स्प्यान्स 0–13; बाँकी मानहरू इन्स्टाग्राम एकीकरणका लागि आवश्यक पर्दैन।
८.३ ChatStatus (०–४)
0 नयाँ, 1 खुला, 2 प्रतीक्षा गर्दै, 3 अनपज, 4 बन्द
८.४ MessageStatus (०–११)
| कोड | नाम |
|---|---|
| ० | नयाँ |
| १ | सफलता |
| २ | अस्वीकृत |
| ३ | पढ्नुहोस् |
| ४ | अज्ञात |
| ५ | प्रशोधन गर्दै |
| ६ | पठाइयो |
| ७ | BLOCKED_BY_USER |
| ८ | USER_NOT_FOUND |
enum 0–11 फैलिएको छ। मानहरू 9, 10 र 11 API मा अवस्थित छन् तर अझै कागजात गरिएको छैन —
तिनीहरूलाई UNKNOWN को रूपमा व्यवहार गर्नुहोस्।
८.५ MediaType (१–१०)
1 फोटो, 2 फाइल, 3 अडियो, 4 भिडियो, 5 स्टिकर, 6 स्टिकर एनिमेटेड,
7 स्टिकरभिडियो, 8 एनिमेसन, 9 आवाज, 10 भिडियो नोट
8.6 AuthorMessage — Chat API मा लेखक (0–4)
0 अपरेटर, 1 ग्राहक, 2 Bot, 3 ViberAccount
एनम स्प्यान्स 0–4; मान 4 कागजात छैन। ** “नयाँ सन्देश” कलब्याकहरू प्रयोग गर्दछ
विपरीत म्यापिङ** — §6.2 हेर्नुहोस्।
८.७ ChatMessageType (०–२)
0 पाठ, 1 फोटो, 2 फाइल
८.८ टिप्पणी replyStatus
null इनबाउन्ड प्रयोगकर्ता टिप्पणी, "pending" हाम्रो जवाफ लाइनमा छ, "sent" डेलिभर गरिएको छ,
"failure" डेलिभरी असफल भयो।
प्रश्नहरू खोल्नुहोस्
तीन बिन्दुहरू जहाँ आन्तरिक विशिष्टता र कोड-उत्पन्न स्वागर असहमत छन्। एक एक वास्तविक टोकन संग अनुरोध ती सबै मिल्छ; तब सम्म, ग्राहकलाई रक्षात्मक रूपमा लेख्नुहोस्।
| # | प्रश्न | विशिष्टता | स्वगर | कसरी जाँच गर्ने |
|---|---|---|---|---|
| १ | /api/meta/* | को लागि प्रमाणिकरण हेडर X-Authorization-Key | मात्र Bearer घोषित | curl -i -H "X-Authorization-Key: <token>" ".../api/meta/posts?perPage=1" — अपेक्षा 200, होइन 401 |
| २ | मेटा प्रतिक्रियाहरूमा काउन्टर क्षेत्र | totalCount | total | उही अनुरोध - मूल JSON कुञ्जी पढ्नुहोस् |
| ३ | author.type प्रकार र reply स्थिति कोड | "meta_user" / "owner", 202 शरीर सहित | int [0,1], 200 शरीर बिना | curl -i .../api/meta/comments?perPage=1 प्लस एक परीक्षण जवाफ |
अन्तरिम निर्देशन:
- काउन्टर - पढ्नुहोस्
total ?? totalCount; author.type— स्ट्रिङ र एक पूर्णांक दुवै स्वीकार गर्नुहोस् (0↔meta_user,1↔owner, म्यापिङ पुष्टि गर्न);reply— कुनै पनि2xxलाई सफलताको रूपमा व्यवहार गर्नुहोस्, कुनै शरीर आवश्यक पर्दैन,source: 13कलब्याकबाट अन्तिम स्थिति लिनुहोस्।
कार्यान्वयन नोटहरू
- प्रमाणीकरण प्रति अन्तिम बिन्दु समूह फरक हुन्छ —
/api/meta/*X-Authorization-Key, च्याट र प्रयोग गर्दछ अपरेटरहरूलेBearerप्रयोग गर्छन्,restapiले स्वीकार गर्दछ। - पृष्ठांकन दुई तरिकाले लेखिएको छ —
per_pageमा/api/chat/chats,perPageअन/api/meta/*र/api/chat/callback-events। multipart/form-dataफिल्डहरू डट नोटेशन (Media.File,Media.Type) सँग PascalCase हुन्।- कलब्याकबाट शून्य क्षेत्रहरू हटाइएका छन् — अनुपस्थित कुञ्जीको अर्थ
nullहो। phoneसामान्यतयाnullInstagram मा हुन्छ।instagramUser.id/ द्वारा ग्राहक पहिचान गर्नुहोस्metaUserIdर पसलinstaAccount.id(entityIdफिल्टर मान) द्वारा।- कलब्याकबाट
Story.Idमेटा API माid/postIdको रूपमा सीधा फिर्ता पठाउन सकिन्छ। - डिपलिंक वा विजेटमा प्रयोग गर्नु अघि अपरेटर JWT को
expiresAtजाँच गर्नुहोस्।