Help Center मेटा र इन्स्टाग्राम एपीआई एकीकरण

मेटा र इन्स्टाग्राम एपीआई एकीकरण

SMSBAT ChatHub प्लेटफर्म मा एक Instagram एप निर्माणको लागि सन्दर्भ: प्रमाणीकरण, इन्स्टाग्राम प्रत्यक्ष कुराकानी, पोष्टहरूमा टिप्पणीहरू र रिलहरू, कथा जवाफहरू, वेबहुकहरू र मतदान।

स्रोतहरू

यो पृष्ठले प्रत्यक्ष OpenAPI सँग आन्तरिक मेटा टिप्पणी API विनिर्देशहरू मर्ज गर्दछ https://chatapi.smsbat.com/swagger/v1/swagger.json मा परिभाषाहरू र https://restapi.smsbat.com/swagger/v1/swagger.json। जहाँ दुई जना असहमत छन्, त्यहाँ भिन्नतालाई इनलाइन भनिन्छ र खुला प्रश्नहरू अन्तर्गत सूचीबद्ध गरिन्छ।


१. आधार URL हरू

उद्देश्यURL
च्याट API + मेटा APIhttps://chatapi.smsbat.com
Swagger UI / OpenAPIhttps://chatapi.smsbat.com/index.html · …/swagger/v1/swagger.json
REST API (संगठनहरू, कलब्याक URL हरू)https://restapi.smsbat.com
REST API Swaggerhttps://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 ले दुबै प्रयोग गर्दछ।

क्वेरी प्यारामिटरहरू, सबै वैकल्पिक:

प्यारामिटरप्रकारविवरण
sourceChatSource7 परिणामहरू इन्स्टाग्राममा सीमित गर्दछ
entityIdintव्यापार खाता आईडी। source
instagram_user_idintChatHub मा इन्स्टाग्राम प्रयोगकर्ता आईडी
facebook_user_idintChatHub मा फेसबुक प्रयोगकर्ता आईडी
page / per_pageintपृष्ठांकन, पूर्वनिर्धारित 1 / 20
statusChatStatus[]च्याट स्थिति, दोहोर्याउन मिल्ने
searchstringनि: शुल्क-पाठ खोज (नाम, फोन, …)
organizationIdintसंगठन ID
operatorIdint[]तोकिएको अपरेटरहरू द्वारा फिल्टर
datestring[]दुई सीमाहरू: ?date=…&date=…
isChainboolच्याटहरू चेनको रूपमा फर्काउनुहोस्, अघिल्लो च्याटहरूबाट सन्देशहरू बोक्दै
isUnread, starMark, isOperator, isAIAgentboolअतिरिक्त फिल्टरहरू
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
  }
}
क्षेत्रप्रकारविवरण
textMessagestring?सन्देश पाठ। media उपस्थित हुँदा खाली हुन सक्छ
authorAuthorMessage?0 अपरेटर, 1 ग्राहक
isInternalbool?true ले ग्राहकलाई नपुगेको आन्तरिक नोट चिन्ह लगाउँछ
replyToMessageIdint?जवाफ दिईएको सन्देशको ID
appGuiduuid?रेफरल GUID
mediaMediaDTO?{ 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 चुपचाप बेवास्ता गरिन्छ। तलको सही नामहरू प्रयोग गर्नुहोस्।

फारम क्षेत्रप्रकारविवरण
TextMessagestringसन्देश पाठ
Authorint0 अपरेटर, 1 ग्राहक
IsInternalboolआन्तरिक नोट
ReplyToMessageIdintसन्देशको जवाफ दिँदै
AppGuiduuidरेफरल GUID
Media.Filebinaryफाइल नै
Media.Namestringफाइल नाम
Media.FormatstringMIME प्रकार (video/mp4, image/png, application/pdf)
Media.TypeMediaTypeहेर्नुहोस् §8.5
Media.DataBase64stringMedia.File को वैकल्पिक
Media.ThumbnailstringBase64 भिडियो पूर्वावलोकन फ्रेम
Media.Durationdoubleसेकेन्डमा भिडियो अवधि
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>
प्यारामिटरप्रकारआवश्यकविवरण
pageintछैनपृष्ठ, पूर्वनिर्धारित 1
perPageintछैनप्रति पृष्ठ वस्तुहरू, पूर्वनिर्धारित 20
idintछैनआन्तरिक पोस्ट आईडी द्वारा फिल्टर
platformstringछैनinstagram वा facebook
mediaTypestringछैन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 द्वारा कुञ्जी।
platformfacebook वा instagram
mediaTypepost, reel वा story
createdAtसिर्जना मिति (प्लेटफर्म मिति, वा डाटाबेस मिति)
storymediaType: "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>
प्यारामिटरप्रकारआवश्यकविवरण
pageintछैनपृष्ठ, पूर्वनिर्धारित 1
perPageintछैनप्रति पृष्ठ वस्तुहरू, पूर्वनिर्धारित 20
postIdintछैनपोस्ट आईडी द्वारा फिल्टर
parentCommentIdintछैनदिइएको टिप्पणीको बाल टिप्पणीहरू (उत्तरहरू)
platformstringछैन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सिर्जना मिति
platformfacebook वा instagram
replyStatusइनबाउन्ड प्रयोगकर्ता टिप्पणीको लागि null; हाम्रो जवाफको लागि "pending" / "sent" / "failure"
author.type"meta_user" बाह्य प्रयोगकर्ता, "owner" पृष्ठ मालिक
author.nameलेखकको नाम
author.metaUserIdमेटामा स्कोप गरिएको प्रयोगकर्ता आईडी; null "owner" को लागि
postपोस्ट, रिल वा कथा टिप्पणी
post.mediaTypepost, 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
  }'
क्षेत्रप्रकारविवरण
urlstringतपाईंको अन्तिम बिन्दु
sourceSendingSourceCallbackघटना प्रकार, हेर्नुहोस् §8.2
headerName / headerValuestringआर्बिट्ररी प्रमाणीकरण हेडर हामीले अनुरोधमा संलग्न गर्छौं (वैकल्पिक)
channelTypeChatSourceच्यानल। 7 Instagram को लागी। ऐच्छिक
channelEntityIdintएक विशिष्ट व्यापार खाता। 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च्याट र सन्देश पहिचानकर्ता
Author0 प्रयोगकर्ता, 1 अपरेटर
Usernameइन्स्टाग्राम / फेसबुक प्रदर्शन नाम वा ह्यान्डल
UserIdSMSBAT मा आन्तरिक संख्यात्मक प्रयोगकर्ता 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 मा गणना गर्दैनन्। अर्डर र पुन: प्रयास तपाईंको हो पक्षको जिम्मेवारी।

७.३ सिफारिस गरिएको लुप

  1. समयतालिकामा मतदान GET /api/chat/callback-events।
  2. तपाईंको सेवामा घटनाहरू प्रशोधन गर्नुहोस्।
  3. प्रक्रिया गरिएको event_guid सूची /callback-events/processed मा पठाउनुहोस्।
  4. दोहोर्याउनुहोस्।

८. एनम सन्दर्भ

८.१ 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
२मेटा प्रतिक्रियाहरूमा काउन्टर क्षेत्रtotalCounttotalउही अनुरोध - मूल 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 सामान्यतया null Instagram मा हुन्छ। instagramUser.id / द्वारा ग्राहक पहिचान गर्नुहोस् metaUserId र पसल instaAccount.id (entityId फिल्टर मान) द्वारा।
  • कलब्याकबाट Story.Id मेटा API मा id / postId को रूपमा सीधा फिर्ता पठाउन सकिन्छ।
  • डिपलिंक वा विजेटमा प्रयोग गर्नु अघि अपरेटर JWT को expiresAt जाँच गर्नुहोस्।