Help Center Integrimi i Meta & Instagram API

Integrimi i Meta & Instagram API

Referencë për ndërtimin e një aplikacioni Instagram në platformën SMSBAT ChatHub: vërtetimi, Biseda direkte në Instagram, komente në postime dhe rrotullime, përgjigje në histori, grepa në internet dhe sondazhe.

Burimet

Kjo faqe bashkon specifikimin e brendshëm të Meta Comments API me OpenAPI live përkufizimet në https://chatapi.smsbat.com/swagger/v1/swagger.json dhe https://restapi.smsbat.com/swagger/v1/swagger.json. Aty ku të dy nuk pajtohen, ndryshimi thirret në linjë dhe renditet nën Pyetje të hapura.


1. URL-të bazë

QëllimiURL
Chat API + Meta APIhttps://chatapi.smsbat.com
Swagger UI / OpenAPIhttps://chatapi.smsbat.com/index.html · …/swagger/v1/swagger.json
REST API (organizatat, URL-të e kthimit të thirrjes)https://restapi.smsbat.com
REST API Swaggerhttps://restapi.smsbat.com/swagger/v1/swagger.json
Paneli ueb i operatorithttps://chat.smsbat.com

2. Autentifikimi

Skema e vërtetimit varet nga grupi i pikës fundore. Përzierja e tyre është shkaku më i zakonshëm i 401.

GrupiKreu
chatapi.smsbat.com/api/meta/* (postimet, komentet)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 · Auth bazë

Shenja e organizatës për X-Authorization-Key lëshohet në panel nën Profili. Kompania dhe operatori JWT vijnë nga /api/company/get-token dhe /api/operator/get-token.

Mospërputhje

Dokumenti chatapi OpenAPI deklaron një skemë të vetme sigurie — Bearer — dhe e zbaton atë globalisht. X-Authorization-Key nuk është deklaruar fare aty, megjithëse Meta e brendshme Specifikimi i komenteve API e emërton atë për /api/meta/*. Me shumë mundësi trajtohet nga programi i mesëm që nuk pasqyrohet në Swagger. Konfirmoni në mënyrë empirike përpara se të dërgoni.

2.1 Shenja e kompanisë

POST https://chatapi.smsbat.com/api/company/get-token
Content-Type: application/json

{ "login": "company_login", "password": "company_password" }

200 OK kthen një varg token të zhveshur.

2.2 Organizatat

GET https://chatapi.smsbat.com/api/company/organization
Authorization: Bearer <company_token>
[ { "id": 24, "name": "My Instagram Store" } ]

2.3 Operatorët në një organizatë

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" }
  }
]

Statuset e operatorit: 0 aktiv, 1 joaktiv, 2 i fshirë.

2.4 Shtoni / sinkronizoni operatorët

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" } ]

2.5 Operatori 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 kthen JWT si varg.

2.6 Vërtetoni një shenjë operatori

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
}

Kur është i pavlefshëm: { "isValid": false, "error": "Invalid token" }.

2.7 Fut panelin e bisedës së operatorit

<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>

3. Lidhje të thella në panelin e bisedës

Një sistem i jashtëm (CRM, ERP, faqe interneti) mund të hapë një bisedë specifike https://chat.smsbat.com/. Operatori është i autorizuar nga një JWT e kaluar si një parametër pyetës.

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>
ParametriPërshkrimi
chat_raw_idID e bisedës
phoneNumri i telefonit në format ndërkombëtar
fromIdentifikuesi i llogarisë së markës / biznesit (bm_id)
sourceBurimi i bisedës — 7 për Instagram, shikoni §8.1
tokenOperatori i vlefshëm, i paskaduar JWT me akses në biseda

Një JWT e pavlefshme e vendos vizitorin në ekranin e identifikimit të panelit të operatorit.


4. Biseda direkte në Instagram

4.1 Lista e bisedave

GET https://chatapi.smsbat.com/api/chat/chats?source=7&page=1&per_page=20
Authorization: Bearer <token>

Note

Fletëzimi këtu është per_page (snake_case). Nën /api/meta/* dhe votimi pika përfundimtare është perPage (CamelCase). Ky nuk është një gabim shtypi – API i përdor të dyja.

Parametrat e pyetjes, të gjitha opsionale:

ParametriLlojiPërshkrimi
sourceChatSource7 kufizon rezultatet në Instagram
entityIdintID-ja e llogarisë së biznesit. Aplikohet vetëm së bashku me source
instagram_user_idintID e përdoruesit të Instagramit në ChatHub
facebook_user_idintID-ja e përdoruesit të Facebook në ChatHub
page / per_pageintPagimi, parazgjedhjet 1 / 20
statusChatStatus[]Statusi i bisedës, i përsëritshëm
searchstringKërkimi në tekst të lirë (emri, telefoni, …)
organizationIdintID organizate
operatorIdint[]Filtro sipas operatorëve të caktuar
datestring[]Dy kufij: ?date=…&date=…
isChainboolKthejini bisedat si zinxhirë, duke mbajtur mesazhe nga bisedat e mëparshme
isUnread, starMark, isOperator, isAIAgentboolFiltra shtesë
phone, email, contactId, clientId, tagIds, rate, sortedBy—Filtra të tjerë

200 OK kthen 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": []
    }
  ]
}

Fushat që kanë rëndësi për një aplikacion Instagram:

FushaKuptimi
instaAccount**Llogaria e biznesit në Instagram ** (dyqan). id është vlera e filtrit entityId; name është emri i llogarisë nga Meta
instagramUserKlienti. name është doreza e Instagramit, id është vlera e filtrit instagram_user_id
metaUserIdID-ja e klientit me shtrirje në anën e Metës (varg)
messSource7 për Instagram
phoneZakonisht null për Instagram — mos e përdorni si çelës

ChatDTO mbart gjithashtu 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 dhe taggedMessages.

4.2 Mesazhet e bisedës

GET https://chatapi.smsbat.com/api/chat/chats/1867/messages?isChain=false
Authorization: Bearer <token>

200 OK kthen një grup prej 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 plotësohet kur mesazhi lidhet me një postim ose Story në Instagram — kalojeni drejt mbrapa si id / postId në Meta API. media është një ChatMediaDTO: { name, format, type, uri, raw, length, isUploaded }.

4.3 Dërgo një mesazh (JSON)

POST https://chatapi.smsbat.com/api/chat/1867/message
Authorization: Bearer <token>
Content-Type: application/json

Trupi — 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
  }
}
FushaLlojiPërshkrimi
textMessagestring?Teksti i mesazhit. Mund të jetë bosh kur media është i pranishëm
authorAuthorMessage?Operatori 0, klienti 1
isInternalbool?true shënon një shënim të brendshëm që nuk i dorëzohet klientit
replyToMessageIdint?ID e mesazhit që i është përgjigjur
appGuiduuid?GUID Referimi
mediaMediaDTO?{ name, format, dataBase64, thumbnail, duration, type }

200 OK → { "id": 9930, "messageStatus": 0 }

Një GUID referimi mund të kalohet gjithashtu në rrugën: POST /api/chat/{chatId}/{referralGuid}/message (po kështu …/message/v1, …/message/v2).

4.4 Dërgo një skedar ose video (shumë pjesësh, v2)

POST https://chatapi.smsbat.com/api/chat/1867/message/v2
Authorization: Bearer <token>
Content-Type: multipart/form-data

Emrat e fushave të formularit janë PascalCase me shënim me pikë

textMessage dhe media.file janë injoruar në heshtje. Përdorni emrat e saktë më poshtë.

Fusha e formularitLlojiPërshkrimi
TextMessagestringTeksti i mesazhit
AuthorintOperatori 0, klienti 1
IsInternalboolShënim i brendshëm
ReplyToMessageIdintMesazhi po i përgjigjet
AppGuiduuidGUID-i i referimit
Media.FilebinaryVetë skedari
Media.NamestringEmri i skedarit
Media.FormatstringLloji MIME (video/mp4, image/png, application/pdf)
Media.TypeMediaTypeShih §8.5
Media.DataBase64stringAlternativë për Media.File
Media.ThumbnailstringKorniza e shikimit të videos Base64
Media.DurationdoubleKohëzgjatja e videos në sekonda
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 }

4.5 Ndrysho statusin e bisedës

PUT https://chatapi.smsbat.com/api/chat/status
Authorization: Bearer <token>
Content-Type: application/json

{ "id": 1867, "status": 4 }

200 OK i bën jehonë objektit të përditësuar.

4.6 Përditësoni statuset e mesazheve

PUT https://chatapi.smsbat.com/api/chat/messages/status
Authorization: Bearer <token>
Content-Type: application/json

{ "status": 3, "messageIds": [9928, 9929] }

4.7 Fshi një bisedë

DELETE https://chatapi.smsbat.com/api/chat/chats/1867
Authorization: Bearer <token>

5. Postimet, rrotullat dhe tregimet

Rruga bazë: https://chatapi.smsbat.com/api/meta E vërteta: X-Authorization-Key: <organization token>

5.1 Listoni postimet, rrotullat dhe tregimet

GET https://chatapi.smsbat.com/api/meta/posts?platform=instagram&mediaType=story&page=1&perPage=20
X-Authorization-Key: <token>
ParametriLlojiKërkohetPërshkrimi
pageintjoFaqja, e paracaktuar 1
perPageintjoArtikujt për faqe, parazgjedhja 20
idintjoFiltro sipas ID-së së postës së brendshme
platformstringjoinstagram ose facebook
mediaTypestringjopost, reel ose story. Të gjitha llojet kur hiqen
# 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"
      }
    }
  ]
}

Mospërputhja — emri i fushës së numëruesit

Skema Swagger MetaCommentPostListItemDtoPaginationDTO përcakton total. Të dokumentet e specifikimeve të brendshme totalCount. Swagger gjenerohet nga kodi, pra total është e vërteta më e mundshme. Analizoni total ?? totalCount derisa kjo të zgjidhet.

FushaPërshkrimi
idID e postës së brendshme
metaIdPostimi i jashtëm / Bobina / ID e tregimit në Meta
textTitulli i postimit
imageUrlURL-ja e medias së përfaqësuesit e kyçur nga MetaPost.Guid jo sekuenciale, ose null
platformfacebook ose instagram
mediaTypepost, reel ose story
createdAtData e krijimit (data e platformës, ose data e bazës së të dhënave)
storyPrezantoni vetëm për mediaType: "story"
story.idID-ja e historisë së brendshme; e barabartë me post.id
story.metaIdID-ja e historisë së jashtme në Meta
story.urlURL e qëndrueshme e përfaqësuesit të medias së ruajtur të Story; null nëse media nuk mund të ruhej

Media postare shërbehet nga dy rrugë: GET /api/meta/post/media/{id:int} për prapa pajtueshmërinë dhe GET /api/meta/post/media/{guid:guid}. Përgjigjet dhe kthimet e reja të API-së gjeneroni gjithmonë formularin GUID.

5.2 Listoni komentet

GET https://chatapi.smsbat.com/api/meta/comments?platform=instagram&postId=42&page=1&perPage=20
X-Authorization-Key: <token>
ParametriLlojiKërkohetPërshkrimi
pageintjoFaqja, e paracaktuar 1
perPageintjoArtikujt për faqe, parazgjedhja 20
postIdintjoFiltro sipas ID-së së postës
parentCommentIdintjoKomentet (përgjigjet) e fëmijëve të një komenti të dhënë
platformstringjofacebook ose 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..."
      }
    }
  ]
}
FushaPërshkrimi
idID e komentit të brendshëm
metaIdID e jashtme në Meta. null për një përgjigje tonën në pritje derisa të dërgohet
textTeksti i komentit
createdAtData e krijimit
platformfacebook ose instagram
replyStatusnull për një koment të përdoruesit hyrës; "pending" / "sent" / "failure" për përgjigjen tonë
author.type"meta_user" përdorues i jashtëm, "owner" pronar i faqes
author.nameEmri i autorit
author.metaUserIdID-ja e përdoruesit me shtrirje në Meta; null për "owner"
postPostimi, rrotullimi ose Historia komenti i përket
post.mediaTypepost, reel ose story
post.storyReferenca e historisë { id, metaId, url }, Vetëm histori
mediaUrlMedia bashkangjitur komentit, ose null
replyToKomenti i prindit { id, metaId, text }; null në nivel të lartë

Mospërputhja — lloji i `author.type`

Specifikimi i brendshëm dokumenton vargjet "meta_user" / "owner". Llojet swagger MetaCommentAuthorType si numër i plotë me numër [0, 1]. A JsonStringEnumConverter do të shpjegonte boshllëkun, por kjo nuk është konfirmuar kundër një përgjigjeje reale. Shkruani një analizues që i pranon të dyja.

5.3 Përgjigjuni një komenti

Radhë një përgjigje për dorëzim.

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"

Trupi i kërkesës: { "text": "Reply text" }

202 Accepted kthen objektin e komentit — të njëjtën formë si GET /api/meta/comments — me replyStatus: "pending" dhe metaId: null. Rezultati i dorëzimit arrin më vonë si a source: 13 kthim thirrje (§6.4).

Mospërputhja — kodi i përgjigjes

Swagger deklaron 200 pa trup; specifikimi i brendshëm deklaron 202 Accepted me komentin si trup. Me shumë mundësi, kontrolluesit i mungon një ProducesResponseType atribut, duke e lënë Swagger në parazgjedhjen e tij. Pranoni çdo 2xx dhe mos u varni nga një trup.


6. Uebhooks

SMSBAT dërgon POST kërkesa me application/json në URL-në tuaj dhe pret HTTP 200 të kthehet.

Fushat e pavlefshme janë hequr tërësisht

Një fushë vlera e së cilës është null nuk serializohet fare në trupin e kthimit të thirrjes. Për një mesazhi që nuk ka ardhur nga Facebook ose Instagram, thjesht nuk ka asnjë çelës MetaUserId. Trajto “mungon” dhe null si të njëjtën gjë.

6.1 Regjistroni një URL të kthimit të thirrjes

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
  }'
FushaLlojiPërshkrimi
urlstringPika juaj përfundimtare
sourceSendingSourceCallbackLloji i ngjarjes, shih §8.2
headerName / headerValuestringTitulli i autorizimit arbitrar i bashkangjitim kërkesës (opsionale)
channelTypeChatSourceKanali. 7 për Instagram. Opsionale
channelEntityIdintNjë llogari specifike biznesi. Kërkon channelType

Pa channelType URL-ja merr ngjarje nga çdo kanal.

Tip

Mbulimi i plotë i komenteve ka nevojë për **dy ** regjistrime: source: 12 për komente të reja dhe source: 13 për statuset e përgjigjes. Për përgjigje të drejtpërdrejta dhe të tregimit, shtoni source: 3 (dhe 11 nëse dëshironi çdo mesazh chat).

Operacionet e mbetura:

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 kthen:

[
  {
    "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
  }
]

6.2 Mesazhi i ri dhe përgjigja e Instagram Story (source: 3, 11)

Përgjigjja e një përdoruesi për një Instagram Story mbërrin si një mesazh i zakonshëm në këto kthime telefonatash, me një bllok shtesë të nivelit të lartë 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"
  }
}
FushaPërshkrimi
ChatId / MessageIdIdentifikuesit e bisedës dhe mesazheve
Author0 përdorues, 1 operator
UsernameEmri ose doreza e shfaqur në Instagram / Facebook
UserIdID-ja numerike e brendshme e përdoruesit në SMSBAT
MetaUserIdID me shtrirje të partnerit të bisedës në Meta. Në një mesazh operatori dalës ky ende identifikon përdoruesin Meta të bisedës, jo operatorin
ShopIdID e brendshme e llogarisë së biznesit në Instagram / Facebook
ShopNameEmri i llogarisë së biznesit siç është marrë nga Meta në kohën e lidhjes
MessageTextTeksti i mesazhit
MessageMediaURL e medias kur mesazhi është media
type_messengerBurimi, 7 për Instagram
operator_nameEmri i operatorit kur Author = 1
StoryParaqisni vetëm në një përgjigje hyrëse të Story
Story.IdID-ja e historisë së brendshme (MetaPost) — përdoret drejtpërdrejt si id / postId në Meta API
Story.MetaIdID-ja e historisë së jashtme në Meta
Story.UrlURL e qëndrueshme e përfaqësuesit të medias së ruajtur të Story. Mungon kur media nuk mund të ruhej — blloku Story dhe mesazhi janë ende të dorëzuar

`Author` është përmbysur në lidhje me API-në e Chat

Në ChatMessageDTO.author, 0 do të thotë operator dhe 1 do të thotë klient. Në këtë callback është anasjelltas: 0 është përdoruesi, 1 është operatori. Mos e ndani hartën.

6.3 Koment i ri (source: 12)

Ndizet kur një përdorues i Meta komenton një postim në Facebook ose një postim në Instagram / Reel.

Note

Instagram Përgjigjet e historisë nuk dorëzohen përmes source: 12. Mbërrin si të zakonshme mesazhet hyrëse në source: 3 dhe/ose 11 me një bllok Story — shihni §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 Statusi i përgjigjes së komentit (source: 13)

Ndizet pasi ne përpiqemi të japim një përgjigje, pavarësisht nëse ka sukses ose dështon.

{
  "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 Fushat e kthimit të komenteve të përbashkëta

Të dy kthimet e komenteve ndajnë një formë trupi dhe ndryshojnë vetëm nga type.

FushaPërshkrimi
type"new_comment" ose "comment_status"
platform"facebook" ose "instagram"
comment.idID e komentit të brendshëm
comment.metaIdID e jashtme në Meta; null për një përgjigje në pritje përpara se të dërgohet
comment.parentCommentIdID-ja e komentit të prindit. Mungon për një koment të nivelit të lartë
comment.parentMetaIdID-ja e komentit të jashtëm të prindit. Mungon në nivelin më të lartë
comment.parentCommentTextTeksti i komentit të prindërve. Mungon në nivelin më të lartë
comment.textTeksti i komentit
comment.createdAtData e krijimit
comment.updatedAtPërditësimi i fundit. Mungon nëse komenti nuk është redaktuar kurrë
comment.replyStatus"pending" / "sent" / "failure". Mungon për një koment të përdoruesit hyrës
comment.author.type"meta_user" ose "owner"
comment.author.nameEmri i autorit
comment.author.metaUserIdID e autorit me shtrirje në Meta. Mungon për "owner"
comment.mediaUrlKoment media. Mungon kur nuk ka asnjë
post.idID e postës së brendshme
post.metaIdPostimi i jashtëm / Bobina / ID e tregimit në Meta
post.textTeksti i postimit
post.imageUrlPostoni URL-në e imazhit, ose null
post.createdAtData e postimit të krijimit
post.mediaTypeNë kthimet e komenteve, vetëm post ose reel

6.6 Bisedë e re (source: 7)

{ "ChatId": 12345, "Phone": "+380501234567", "chat.Source": 7 }

6.7 Ndryshimet e statusit të mesazheve dhe bisedës (source: 6 / 5)

{ "name": "changed_message_status", "id": 9928, "status": 6 }
{ "name": "changed_chat_status",    "id": 1867, "status": 4 }

6.8 Mesazhi u modifikua ose u fshi (source: 9)

{ "messageId": 9930, "text": "Updated message text" }
{ "messageId": 9931, "delete": true }

6.9 Treguesi i shkrimit (source: 8)

{ "chat_id": 1867, "event": "start_typing", "operator_name": "Iryna" }
{ "chat_id": 1867, "event": "end_typing" }

7. Sondazhi i ngjarjes

Për mjediset që nuk mund të pranojnë HTTP hyrëse.

7.1 Merr ngjarje

GET https://chatapi.smsbat.com/api/chat/callback-events?page=1&perPage=20
Authorization: Bearer <token>
ParametriPërshkrimi
organizationIdFakultative. Marrë nga shenja kur hiqet
page / perPagePagimi, parazgjedhjet 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"
    }
  ]
}

Çdo ngjarje mbart event_guid, timestamp, organization_id dhe callback_type — një varg që përputhet me vlerat source në §8.2. Fushat e mbetura përputhen me ato përkatëse uebhook në §6.

7.2 Pranoni ngjarjet e përpunuara

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 }

Ngjarjet e hequra tashmë thjesht nuk llogariten në deleted. Porositja dhe riprovimet janë tuajat përgjegjësi e palës.

7.3 Cikli i rekomanduar

  1. Anketa GET /api/chat/callback-events në një orar.
  2. Përpunoni ngjarjet në shërbimin tuaj.
  3. Dërgo listën e përpunuar event_guid në /callback-events/processed.
  4. Përsëriteni.

8. Referenca e numrit

8.1 ChatSource — kanal (0–9)

KodiKanali
0Viber
1ViberBot
2TelegramBot
3Whatsapp
4Widget
5Rozetka
6Facebook
7Instagram
8Prom
9Olx

8.2 SendingSourceCallback — lloji i ngjarjes së kthimit të thirrjes (0–13)

KodiNgjarja
3Chat — mesazh i ri bisede, duke përfshirë përgjigjet e Story
5Statusi i bisedës ndryshoi
6Statusi i mesazhit ndryshoi
7U krijua një bisedë e re
8Treguesi i shtypjes
9Mesazhi u përditësua ose u fshi
11AnyChatMessage — çdo mesazh bisede
12MetaNewComment — koment i ri në Instagram / Facebook
13MetaCommentStatus — statusi i dorëzimit të përgjigjes së komentit tonë

Numri përfshin 0–13; vlerat e mbetura nuk nevojiten për integrimet në Instagram.

8.3 ChatStatus (0–4)

0 E re, 1 Hapur, 2 Në pritje, 3 Në pauzë, 4 Mbyllur

8,4 MessageStatus (0–11)

KodiEmri
0E RE
1SUKSES
2REFUZOHET
3LEXO
4E PANJOHUR
5PËRPUNIMI
6DORËZUAR
7BLOCKED_BY_PERDORUES
8PËRDORIMI_NOT_FOUND

Numri përfshin 0–11. Vlerat 9, 10 dhe 11 ekzistojnë në API, por nuk janë ende të dokumentuara — trajtojini ato si UNKNOWN.

8,5 MediaType (1–10)

1 Foto, 2 Skedar, 3 Audio, 4 Video, 5 Ngjitës, 6 StickerAnimated, 7 StickerVideo, 8 Animacion, 9 Zëri, 10 VideoNote

8.6 AuthorMessage — autor në Chat API (0–4)

0 Operator, 1 Klient, 2 Bot, 3 ViberAccount

Numri përfshin 0–4; vlera 4 është e padokumentuar. Thirrjet e “mesazhit të ri” përdorin hartëzimi i kundërt — shih §6.2.

8,7 ChatMessageType (0–2)

0 Tekst, 1 Foto, 2 Skedar

8.8 Koment replyStatus

null komenti i përdoruesit hyrës, "pending" përgjigja jonë është në radhë, "sent" është dorëzuar, Dorëzimi "failure" dështoi.


Pyetje të hapura

Tre pika ku specifikimi i brendshëm dhe kodi i gjeneruar nga Swagger nuk pajtohen. Një kërkesa me një shenjë të vërtetë i zgjidh të gjitha; deri atëherë, shkruani klientin në mënyrë mbrojtëse.

#PyetjeSpecifikimiKërcimSi të kontrolloni
1Kreu i vërtetimit për /api/meta/*X-Authorization-Keyvetëm Bearer deklaruarcurl -i -H "X-Authorization-Key: <token>" ".../api/meta/posts?perPage=1" — prisni 200, jo 401
2Fusha e numërimit në përgjigjet MetatotalCounttotalE njëjta kërkesë — lexoni çelësin rrënjë JSON
3Lloji author.type dhe kodi i statusit reply"meta_user" / "owner", 202 me trupint [0,1], 200 pa trupcurl -i .../api/meta/comments?perPage=1 plus një përgjigje provë

Udhëzime të përkohshme:

  • numërues — lexo total ?? totalCount;
  • author.type — pranoni një varg dhe një numër të plotë (0 ↔ meta_user, 1 ↔ owner, harta për t’u konfirmuar);
  • reply — trajto çdo 2xx si sukses, nuk kërkon asnjë trup, merr statusin përfundimtar nga kthimi i thirrjes source: 13.

Shënime të zbatimit

  • Auth ndryshon sipas grupit të pikës fundore — /api/meta/* përdor X-Authorization-Key, biseda dhe operatorët përdorin Bearer, restapi pranon ose.
  • Falifikimi shkruhet në dy mënyra — per_page në /api/chat/chats, perPage më /api/meta/* dhe /api/chat/callback-events.
  • Fushat multipart/form-data janë PascalCase me shënim me pikë (Media.File, Media.Type).
  • **Fushat nule janë hequr nga kthimet e thirrjeve ** - një çelës që mungon do të thotë null.
  • phone është zakonisht null në Instagram. Identifikoni klientin me instagramUser.id / metaUserId dhe dyqani me instaAccount.id (vlera e filtrit entityId).
  • Story.Id nga një kthim i telefonatës mund të kalohet drejtpërsëdrejti si id / postId te Meta API.
  • Kontrolloni expiresAt të operatorit JWT përpara se ta përdorni në një lidhje të thellë ose në miniaplikacion.