Help Center Meta ir Instagram API integracija

Meta ir Instagram API integracija

Instagram programos kūrimo SMSBAT ChatHub platformoje nuoroda: autentifikavimas, „Instagram“ Tiesioginiai pokalbiai, įrašų ir ritinių komentarai, pasakojimų atsakymai, internetiniai kabliukai ir apklausos.

Šaltiniai

Šiame puslapyje vidinė meta komentarų API specifikacija sujungiama su tiesiogine OpenAPI apibrėžimai https://chatapi.smsbat.com/swagger/v1/swagger.json ir https://restapi.smsbat.com/swagger/v1/swagger.json. Jei abu nesutaria, Skirtumas nurodomas eilutėje ir pateikiamas skiltyje Atviri klausimai.


1. Pagrindiniai URL

PaskirtisURL
Pokalbių API + Meta APIhttps://chatapi.smsbat.com
Swagger UI / OpenAPIhttps://chatapi.smsbat.com/index.html · …/swagger/v1/swagger.json
REST API (organizacijos, atgalinio skambinimo URL)https://restapi.smsbat.com
REST API Swaggerhttps://restapi.smsbat.com/swagger/v1/swagger.json
Operatoriaus žiniatinklio skydelishttps://chat.smsbat.com

2. Autentifikavimas

Auth schema priklauso nuo galutinių taškų grupės. Jų maišymas yra dažniausia 401 priežastis.

GrupėAntraštė
chatapi.smsbat.com/api/meta/* (įrašai, komentarai)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 · Pagrindinis autentifikavimas

X-Authorization-Key organizacijos prieigos raktas išduodamas skydelyje Profilis. Įmonės ir operatorių JWT yra iš /api/company/get-token ir /api/operator/get-token.

Neatitikimas

chatapi OpenAPI dokumentas deklaruoja vieną saugos schemą – Bearer – ir ją taiko visame pasaulyje. X-Authorization-Key ten išvis nedeklaruojamas, nors vidinė Meta Komentarų API specifikacijoje jis pavadintas /api/meta/*. Greičiausiai jį tvarko tarpinė programinė įranga, kuri neatsispindi Swagger. Prieš išsiųsdami patvirtinkite empiriškai.

2.1 Įmonės prieigos raktas

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

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

200 OK grąžina tuščią žetonų eilutę.

2.2 Organizacijos

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

2.3 Operatoriai organizacijoje

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

Operatoriaus būsenos: 0 Aktyvus, 1 Neaktyvus, 2 Ištrintas.

2.4 Pridėti / sinchronizuoti operatorius

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 Operatorius 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 grąžina JWT kaip eilutę.

2.6 Patvirtinkite operatoriaus prieigos raktą

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
}

Kai negalioja: { "isValid": false, "error": "Invalid token" }.

2.7 Įdėkite operatoriaus pokalbių skydelį

<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. Giliosios nuorodos į pokalbių skydelį

Išorinė sistema (CRM, ERP, svetainė) gali atidaryti konkretų pokalbį https://chat.smsbat.com/. Operatorius įgaliotas JWT, perduoto kaip užklausos parametras.

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>
ParametrasAprašymas
chat_raw_idPokalbio ID
phoneTelefono numeris tarptautiniu formatu
fromPrekės ženklo / verslo paskyros identifikatorius (bm_id)
sourcePokalbių šaltinis – 7 Instagram, žr. §8.1
tokenGaliojantis, nepasibaigęs operatorius JWT, turintis prieigą prie pokalbių

Netinkamas JWT nukreipia lankytoją į operatoriaus skydelio prisijungimo ekraną.


4. Instagram Tiesioginiai pokalbiai

4.1 Pokalbių sąrašas

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

Note

Puslapių skaičius čia yra per_page (snake_case). Pagal /api/meta/* ir apklausa galutinis taškas yra perPage (camelCase). Tai nėra rašybos klaida – API naudoja abu.

Užklausos parametrai, visi neprivalomi:

ParametrasTipasAprašymas
sourceChatSource7 apriboja rezultatus Instagram
entityIdintĮmonės paskyros ID. Taikoma tik kartu su source
instagram_user_idint„Instagram“ vartotojo ID „ChatHub“
facebook_user_idint„Facebook“ vartotojo ID „ChatHub“
page / per_pageintPuslapiai, numatytieji nustatymai 1 / 20
statusChatStatus[]Pokalbio būsena, kartojama
searchstringPaieška laisvu tekstu (vardas, telefonas, …)
organizationIdintOrganizacijos ID
operatorIdint[]Filtruoti pagal priskirtus operatorius
datestring[]Dvi ribos: ?date=…&date=…
isChainboolGrąžinti pokalbius kaip grandines, pernešant pranešimus iš ankstesnių pokalbių
isUnread, starMark, isOperator, isAIAgentboolPapildomi filtrai
phone, email, contactId, clientId, tagIds, rate, sortedBy—Kiti filtrai

200 OK grąžina 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": []
    }
  ]
}

„Instagram“ programai svarbūs laukai:

LaukasReikšmė
instaAccountInstagram verslo paskyra (parduotuvė). id yra entityId filtro reikšmė; name yra paskyros pavadinimas iš Meta
instagramUserklientas. name yra Instagram rankena, id yra instagram_user_id filtro reikšmė
metaUserIdKliento apimtas ID meta pusėje (eilutė)
messSource7 Instagram
phonePaprastai null Instagram – nenaudokite jo kaip rakto

ChatDTO taip pat turi 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 ir taggedMessages.

4.2 Pokalbių pranešimai

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

200 OK grąžina masyvą 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 užpildomas, kai pranešimas yra susijęs su Instagram įrašu ar istorija – perduokite jį tiesiai atgal kaip id / postId į Meta API. media yra ChatMediaDTO: { name, format, type, uri, raw, length, isUploaded }.

4.3 Siųsti pranešimą (JSON)

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

Kūnas – 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
  }
}
LaukasTipasAprašymas
textMessagestring?Pranešimo tekstas. Gali būti tuščias, kai yra media
authorAuthorMessage?0 operatorius, 1 klientas
isInternalbool?true žymi vidinį užrašą, kuris nėra pristatytas klientui
replyToMessageIdint?Laiško, į kurį atsakoma, ID
appGuiduuid?Persiuntimo GUID
mediaMediaDTO?{ name, format, dataBase64, thumbnail, duration, type }

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

Persiuntimo GUID taip pat gali būti perduotas kelyje: POST /api/chat/{chatId}/{referralGuid}/message (taip pat …/message/v1, …/message/v2).

4.4 Siųsti failą arba vaizdo įrašą (daugialypis, v2)

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

Formos laukų pavadinimai yra „PascalCase“ su taško žymėjimu

textMessage ir media.file tyliai ignoruojami. Naudokite toliau nurodytus tikslius pavadinimus.

Formos laukasTipasAprašymas
TextMessagestringPranešimo tekstas
Authorint0 operatorius, 1 klientas
IsInternalboolVidinė pastaba
ReplyToMessageIdintĮ pranešimą atsakoma
AppGuiduuidPersiuntimo GUID
Media.FilebinaryPats failas
Media.NamestringFailo pavadinimas
Media.FormatstringMIME tipas (video/mp4, image/png, application/pdf)
Media.TypeMediaTypeŽr. §8.5
Media.DataBase64stringAlternatyva Media.File
Media.ThumbnailstringBase64 vaizdo peržiūros kadras
Media.DurationdoubleVaizdo įrašo trukmė sekundėmis
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 Pakeiskite pokalbio būseną

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

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

200 OK kartoja atnaujintą objektą.

4.6 Atnaujinkite pranešimų būsenas

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

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

4.7 Ištrinkite pokalbį

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

5. Įrašai, ritiniai ir istorijos

Bazinis kelias: https://chatapi.smsbat.com/api/meta Auth: X-Authorization-Key: <organization token>

5.1 Įrašų, ritinių ir istorijų sąrašas

GET https://chatapi.smsbat.com/api/meta/posts?platform=instagram&mediaType=story&page=1&perPage=20
X-Authorization-Key: <token>
ParametrasTipasReikalingasAprašymas
pageintnePuslapis, numatytasis 1
perPageintneElementai puslapyje, numatytoji 20
idintneFiltruoti pagal vidinį įrašo ID
platformstringneinstagram arba facebook
mediaTypestringnepost, reel arba story. Visi tipai, kai praleista
# 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"
      }
    }
  ]
}

Neatitikimas – skaitiklio lauko pavadinimas

Swagger schema MetaCommentPostListItemDtoPaginationDTO apibrėžia total. The vidinės specifikacijos dokumentai totalCount. Swagger generuojamas iš kodo, taigi total yra labiau tikėtina tiesa. Išanalizuoti total ?? totalCount, kol tai bus išspręsta.

LaukasAprašymas
idVidinis įrašo ID
metaIdIšorinis įrašas / ritė / istorijos ID meta
textĮrašo antraštė
imageUrlTarpinio serverio medijos URL, įvestas nenuosekliu MetaPost.Guid arba null
platformfacebook arba instagram
mediaTypepost, reel arba story
createdAtSukūrimo data (platformos data arba duomenų bazės data)
storyDovanokite tik už mediaType: "story"
story.idVidinis istorijos ID; lygus post.id
story.metaIdIšorinis istorijos ID meta
story.urlStabilus saugomos istorijos laikmenos tarpinio serverio URL; null, jei nepavyko išsaugoti laikmenos

Pašto medija aptarnaujama dviem maršrutais: GET /api/meta/post/media/{id:int} atgal suderinamumas ir GET /api/meta/post/media/{guid:guid}. Nauji API atsakymai ir atgaliniai skambučiai visada generuokite GUID formą.

5.2 Komentarų sąrašas

GET https://chatapi.smsbat.com/api/meta/comments?platform=instagram&postId=42&page=1&perPage=20
X-Authorization-Key: <token>
ParametrasTipasReikalingasAprašymas
pageintnePuslapis, numatytasis 1
perPageintneElementai puslapyje, numatytoji 20
postIdintneFiltruoti pagal pašto ID
parentCommentIdintneDuotojo komentaro antriniai komentarai (atsakymai)
platformstringnefacebook arba 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..."
      }
    }
  ]
}
LaukasAprašymas
idVidinis komentaro ID
metaIdIšorinis ID meta. null už laukiantį mūsų atsakymą, kol jis bus išsiųstas
textKomentaro tekstas
createdAtSukūrimo data
platformfacebook arba instagram
replyStatusnull gaunamo vartotojo komentarui; "pending" / "sent" / "failure" mūsų atsakymui
author.type"meta_user" išorinis vartotojas, "owner" puslapio savininkas
author.nameAutoriaus vardas
author.metaUserIdApimtas vartotojo ID meta; null už "owner"
postĮrašas, ritė arba istorija, kuriai komentaras priklauso
post.mediaTypepost, reel arba story
post.storyIstorijos nuoroda { id, metaId, url }, tik istorijos
mediaUrlPrie komentaro pridėta žiniasklaida arba null
replyToTėvų komentaras { id, metaId, text }; null aukščiausio lygio

Neatitikimas – `author.type` tipas

Vidinėje specifikacijoje dokumentuojamos eilutės "meta_user" / "owner". Swagger tipai MetaCommentAuthorType kaip sveikasis skaičius su eilute [0, 1]. A JsonStringEnumConverter paaiškintų spragą, tačiau tai nebuvo patvirtinta prieš tikrą atsakymą. Rašyti a analizatorius, kuris priima abu.

5.3 Atsakyti į komentarą

Sudaro atsakymo eilę dėl pristatymo.

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"

Užklausos turinys: { "text": "Reply text" }

202 Accepted grąžina komentaro objektą – tokią pačią formą kaip GET /api/meta/comments – su replyStatus: "pending" ir metaId: null. Pristatymo rezultatas ateina vėliau kaip a source: 13 atgalinis skambutis (§6.4).

Neatitikimas – atsakymo kodas

Swaggeris pareiškia 200 be kūno; vidinė specifikacija skelbia 202 Accepted su komentaru kaip korpusu. Valdiklyje greičiausiai trūksta ProducesResponseType atributas, paliekant Swagger numatytąjį. Priimkite bet kokį 2xx ir nepriklausykite nuo kūno.


6. Webhooks

SMSBAT siunčia POST užklausas su application/json į jūsų URL ir tikisi HTTP 200 atgal.

Nuliniai laukai yra visiškai praleisti

Laukas, kurio reikšmė yra null, iš viso nėra įtrauktas į atgalinio skambinimo turinį. Dėl a žinutė, kuri atėjo ne iš „Facebook“ ar „Instagram“, tiesiog nėra rakto MetaUserId. Sąvokas „nėra“ ir null traktuokite kaip tą patį.

6.1 Užregistruokite atgalinio skambučio 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
  }'
LaukasTipasAprašymas
urlstringJūsų galutinis taškas
sourceSendingSourceCallbackĮvykio tipas, žr. §8.2
headerName / headerValuestringSavavališka autentifikavimo antraštė, kurią pridedame prie užklausos (neprivaloma)
channelTypeChatSourceKanalas. 7, skirtas Instagram. Neprivaloma
channelEntityIdintKonkreti verslo sąskaita. Reikia channelType

Be channelType URL gauna įvykius iš kiekvieno kanalo.

Tip

Norint gauti visą komentarą, reikia dviejų registracijų: source: 12 naujiems komentarams ir source: 13 atsakymo būsenoms. Norėdami gauti tiesioginių ir istorijos atsakymų, pridėkite source: 3 (ir 11, jei norite kiekvieno pokalbio pranešimo).

Likusios operacijos:

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 grąžina:

[
  {
    "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 Naujas pranešimas ir „Instagram Story“ atsakymas (source: 3, 11)

Vartotojo atsakymas į Instagram Story gaunamas kaip įprastas pranešimas per šiuos atgalinius skambučius, su papildomu aukščiausio lygio Story bloku:

{
  "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"
  }
}
LaukasAprašymas
ChatId / MessageIdPokalbių ir pranešimų identifikatoriai
Author0 vartotojas, 1 operatorius
Username„Instagram“ / „Facebook“ rodomas vardas arba rankena
UserIdVidinis skaitmeninis vartotojo ID SMSBAT
MetaUserIdApimtas pokalbio partnerio metas ID. Operatoriaus žinutėje išeinantis vis tiek identifikuojamas pokalbio metavartotojas, o ne operatorius
ShopId„Instagram“ / „Facebook“ verslo paskyros vidinis ID
ShopNameĮmonės paskyros pavadinimas, gautas iš Meta prisijungimo metu
MessageTextPranešimo tekstas
MessageMediaMedijos URL, kai pranešimas yra medija
type_messengerŠaltinis, 7 Instagram
operator_nameOperatoriaus vardas, kai Author = 1
StoryPateikti tik gautame istorijos atsakyme
Story.IdVidinės istorijos (MetaPost) ID – galima tiesiogiai naudoti kaip id / postId Meta API
Story.MetaIdIšorinis istorijos ID meta
Story.UrlStabilus saugomos istorijos laikmenos tarpinio serverio URL. Nebuvo, kai nepavyko išsaugoti laikmenos — blokas Story ir pranešimas vis dar pristatomi

`Author` yra apverstas pokalbių API atžvilgiu

ChatMessageDTO.author 0 reiškia operatorių, o 1 – klientą. Šiame atgaliniame skambutyje taip yra atvirkščiai: 0 yra vartotojas, 1 yra operatorius. Nesidalinkite žemėlapiu.

6.3 Naujas komentaras (source: 12)

Suveikia, kai Meta vartotojas pakomentuoja Facebook arba Instagram įrašą / Reel.

Note

„Instagram“ Istorijų atsakymai nesiunčiami numeriu source: 12. Jie gaunami kaip įprasti gaunamus pranešimus source: 3 ir (arba) 11 su Story bloku – žr. §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 Atsakymo į komentarą būsena (source: 13)

Suveikia po to, kai bandome pateikti atsakymą, nesvarbu, ar tai pavyksta, ar nepavyksta.

{
  "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 Bendrinami komentarų atgalinio skambinimo laukai

Abu komentarų skambučiai turi vieną kūno formą ir skiriasi tik type.

LaukasAprašymas
type"new_comment" arba "comment_status"
platform"facebook" arba "instagram"
comment.idVidinis komentaro ID
comment.metaIdIšorinis ID Meta; null laukiančiam atsakymui prieš jį išsiunčiant
comment.parentCommentIdTėvų komentaro ID. Nedalyvauja aukščiausio lygio komentarui
comment.parentMetaIdIšorinis tėvų komentaro ID. Nėra aukščiausio lygio
comment.parentCommentTextTėvų komentaro tekstas. Nėra aukščiausio lygio
comment.textKomentaro tekstas
comment.createdAtSukūrimo data
comment.updatedAtPaskutinis atnaujinimas. Nėra, jei komentaras niekada nebuvo redaguotas
comment.replyStatus"pending" / "sent" / "failure". Nėra gaunamo vartotojo komentaro
comment.author.type"meta_user" arba "owner"
comment.author.nameAutoriaus vardas
comment.author.metaUserIdApimtas autoriaus ID meta. Nėra "owner"
comment.mediaUrlKomentarų žiniasklaida. Nėra, kai nėra
post.idVidinis įrašo ID
post.metaIdIšorinis įrašas / ritė / istorijos ID meta
post.textĮrašo tekstas
post.imageUrlPaskelbti vaizdo URL arba null
post.createdAtĮrašo sukūrimo data
post.mediaTypeKomentarų atgaliniuose skambučiuose tik post arba reel

6.6 Naujas pokalbis (source: 7)

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

6.7 Pranešimų ir pokalbių būsenos pakeitimai (source: 6 / 5)

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

6.8 Pranešimas redaguotas arba ištrintas (source: 9)

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

6.9 Rašymo indikatorius (source: 8)

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

7. Renginių apklausa

Aplinkoms, kurios negali priimti įeinančio HTTP.

7.1 Gauti įvykius

GET https://chatapi.smsbat.com/api/chat/callback-events?page=1&perPage=20
Authorization: Bearer <token>
ParametrasAprašymas
organizationIdNeprivaloma. Paimta iš žetono, kai praleista
page / perPagePuslapiai, numatytieji nustatymai 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"
    }
  ]
}

Kiekvienas įvykis turi event_guid, timestamp, organization_id ir callback_type – eilutė, atitinkanti source reikšmes 8.2. Likę laukai atitinka atitinkamus laukus „Webhook“ §6.

7.2 Patvirtinti apdorotus įvykius

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 }

Jau pašalinti įvykiai tiesiog neįskaičiuojami į deleted. Užsakymas ir pakartotiniai bandymai yra jūsų pusės atsakomybė.

7.3 Rekomenduojamas ciklas

  1. Apklausa GET /api/chat/callback-events pagal tvarkaraštį.
  2. Apdorokite savo paslaugos įvykius.
  3. Išsiųskite apdorotą event_guid sąrašą į /callback-events/processed.
  4. Pakartokite.

8. Enum nuoroda

8.1 ChatSource – kanalas (0–9)

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

8.2 SendingSourceCallback – atgalinio skambinimo įvykio tipas (0–13)

KodasRenginys
3Chat – naujas pokalbio pranešimas, įskaitant istorijos atsakymus
5Pokalbio būsena pakeista
6Pranešimo būsena pakeista
7Sukurtas naujas pokalbis
8Rašymo indikatorius
9Pranešimas atnaujintas arba ištrintas
11AnyChatMessage — bet koks pokalbio pranešimas
12MetaNewComment — naujas Instagram / Facebook komentaras
13MetaCommentStatus — mūsų atsakymo į komentarą pristatymo būsena

Eenum apima 0–13; Likusios reikšmės Instagram integravimui nereikalingos.

8.3 ChatStatus (0–4)

0 Nauja, 1 Atidaryta, 2 Laukiama, 3 Įjungta pauzė, 4 Uždaryta

8.4 MessageStatus (0–11)

KodasVardas
0NAUJIENA
1SĖKMĖS
2ATMESTA
3SKAITYTI
4NEŽINOMA
5APDOROJIMAS
6PRISTATYTA
7BLOCKED_BY_USER
8USER_NOT_FOUND

Sąrašas apima 0–11. Reikšmės 9, 10 ir 11 yra API, bet dar nėra dokumentuotos — traktuokite juos kaip UNKNOWN.

8.5 MediaType (1–10)

1 nuotrauka, 2 failas, 3 garsas, 4 vaizdo įrašas, 5 lipdukas, 6 animuotas lipdukas, 7 lipdukas vaizdo įrašas, 8 animacija, 9 balsas, 10 vaizdo įrašas

8.6 AuthorMessage – autorius pokalbių API (0–4)

0 operatorius, 1 klientas, 2 robotas, 3 ViberAccount

Eenum apima 0–4; reikšmė 4 yra nedokumentuota. „Naujo pranešimo“ atgaliniai skambučiai naudoja priešingas žemėlapis — žr. §6.2.

8.7 ChatMessageType (0–2)

0 tekstas, 1 nuotrauka, 2 failas

8.8 Komentuoti replyStatus

null gaunamas vartotojo komentaras, "pending" mūsų atsakymas yra eilėje, "sent" pristatytas, "failure" pristatymas nepavyko.


Atviri klausimai

Trys taškai, kuriuose nesutampa vidinė specifikacija ir kodo sukurtas „Swagger“. Vienas užklausa su tikru žetonu išsprendžia visus juos; iki tol rašykite klientui gynybiškai.

#KlausimasSpecifikacijaSwaggerKaip patikrinti
1Auth antraštė /api/meta/*X-Authorization-Keytik Bearer deklaruotacurl -i -H "X-Authorization-Key: <token>" ".../api/meta/posts?perPage=1" — tikėtis 200, o ne 401
2Skaitiklio laukas meta atsakymuosetotalCounttotalTa pati užklausa – perskaitykite šakninį JSON raktą
3author.type tipas ir reply būsenos kodas"meta_user" / "owner", 202 su korpusuint [0,1], 200 be korpusocurl -i .../api/meta/comments?perPage=1 ir bandomasis atsakymas

Laikinosios gairės:

  • skaitiklis - skaitykite total ?? totalCount;
  • author.type – priimti ir eilutę, ir sveikąjį skaičių (0 ↔ meta_user, 1 ↔ owner, atvaizdavimas turi būti patvirtintas);
  • reply — bet kurį 2xx vertinkite kaip sėkmę, nereikalauja kūno, perimkite galutinę būseną iš source: 13 atgalinio skambinimo.

Diegimo pastabos

  • Autentifikavimas skiriasi pagal galinių taškų grupę — /api/meta/* naudoja X-Authorization-Key, pokalbius ir operatoriai naudoja Bearer, restapi priima bet kurį.
  • ** Puslapiai rašomi dviem būdais** — per_page ant /api/chat/chats, perPage ant /api/meta/* ir /api/chat/callback-events.
  • multipart/form-data laukai yra PascalCase su taško žymėjimu (Media.File, Media.Type).
  • Nuliniai laukai išleidžiami atgalinio skambučio metu – rakto nėra, reiškia null.
  • phone paprastai yra null „Instagram“. Atpažinkite klientą naudodami instagramUser.id / metaUserId ir parduotuvė instaAccount.id (entityId filtro vertė).
  • Story.Id iš atgalinio skambinimo gali būti perduodamas tiesiai atgal kaip id / postId į Meta API.
  • Prieš naudodami giliojoje nuorodoje arba valdiklyje, patikrinkite operatoriaus JWT expiresAt.