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
| Paskirtis | URL |
|---|---|
| Pokalbių API + Meta API | https://chatapi.smsbat.com |
| Swagger UI / OpenAPI | https://chatapi.smsbat.com/index.html · …/swagger/v1/swagger.json |
| REST API (organizacijos, atgalinio skambinimo URL) | https://restapi.smsbat.com |
| REST API Swagger | https://restapi.smsbat.com/swagger/v1/swagger.json |
| Operatoriaus žiniatinklio skydelis | https://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>
| Parametras | Aprašymas |
|---|---|
chat_raw_id | Pokalbio ID |
phone | Telefono numeris tarptautiniu formatu |
from | Prekės ženklo / verslo paskyros identifikatorius (bm_id) |
source | Pokalbių šaltinis – 7 Instagram, žr. §8.1 |
token | Galiojantis, 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:
| Parametras | Tipas | Aprašymas |
|---|---|---|
source | ChatSource | 7 apriboja rezultatus Instagram |
entityId | int | Įmonės paskyros ID. Taikoma tik kartu su source |
instagram_user_id | int | „Instagram“ vartotojo ID „ChatHub“ |
facebook_user_id | int | „Facebook“ vartotojo ID „ChatHub“ |
page / per_page | int | Puslapiai, numatytieji nustatymai 1 / 20 |
status | ChatStatus[] | Pokalbio būsena, kartojama |
search | string | Paieška laisvu tekstu (vardas, telefonas, …) |
organizationId | int | Organizacijos ID |
operatorId | int[] | Filtruoti pagal priskirtus operatorius |
date | string[] | Dvi ribos: ?date=…&date=… |
isChain | bool | Grąžinti pokalbius kaip grandines, pernešant pranešimus iš ankstesnių pokalbių |
isUnread, starMark, isOperator, isAIAgent | bool | Papildomi 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:
| Laukas | Reikšmė |
|---|---|
instaAccount | Instagram verslo paskyra (parduotuvė). id yra entityId filtro reikšmė; name yra paskyros pavadinimas iš Meta |
instagramUser | klientas. name yra Instagram rankena, id yra instagram_user_id filtro reikšmė |
metaUserId | Kliento apimtas ID meta pusėje (eilutė) |
messSource | 7 Instagram |
phone | Paprastai 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
}
}
| Laukas | Tipas | Aprašymas |
|---|---|---|
textMessage | string? | Pranešimo tekstas. Gali būti tuščias, kai yra media |
author | AuthorMessage? | 0 operatorius, 1 klientas |
isInternal | bool? | true žymi vidinį užrašą, kuris nėra pristatytas klientui |
replyToMessageId | int? | Laiško, į kurį atsakoma, ID |
appGuid | uuid? | Persiuntimo GUID |
media | MediaDTO? | { 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 laukas | Tipas | Aprašymas |
|---|---|---|
TextMessage | string | Pranešimo tekstas |
Author | int | 0 operatorius, 1 klientas |
IsInternal | bool | Vidinė pastaba |
ReplyToMessageId | int | Į pranešimą atsakoma |
AppGuid | uuid | Persiuntimo GUID |
Media.File | binary | Pats failas |
Media.Name | string | Failo pavadinimas |
Media.Format | string | MIME tipas (video/mp4, image/png, application/pdf) |
Media.Type | MediaType | Žr. §8.5 |
Media.DataBase64 | string | Alternatyva Media.File |
Media.Thumbnail | string | Base64 vaizdo peržiūros kadras |
Media.Duration | double | Vaizdo į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>
| Parametras | Tipas | Reikalingas | Aprašymas |
|---|---|---|---|
page | int | ne | Puslapis, numatytasis 1 |
perPage | int | ne | Elementai puslapyje, numatytoji 20 |
id | int | ne | Filtruoti pagal vidinį įrašo ID |
platform | string | ne | instagram arba facebook |
mediaType | string | ne | post, 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.
| Laukas | Aprašymas |
|---|---|
id | Vidinis įrašo ID |
metaId | Išorinis įrašas / ritė / istorijos ID meta |
text | Įrašo antraštė |
imageUrl | Tarpinio serverio medijos URL, įvestas nenuosekliu MetaPost.Guid arba null |
platform | facebook arba instagram |
mediaType | post, reel arba story |
createdAt | Sukūrimo data (platformos data arba duomenų bazės data) |
story | Dovanokite tik už mediaType: "story" |
story.id | Vidinis istorijos ID; lygus post.id |
story.metaId | Išorinis istorijos ID meta |
story.url | Stabilus 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>
| Parametras | Tipas | Reikalingas | Aprašymas |
|---|---|---|---|
page | int | ne | Puslapis, numatytasis 1 |
perPage | int | ne | Elementai puslapyje, numatytoji 20 |
postId | int | ne | Filtruoti pagal pašto ID |
parentCommentId | int | ne | Duotojo komentaro antriniai komentarai (atsakymai) |
platform | string | ne | facebook 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..."
}
}
]
}
| Laukas | Aprašymas |
|---|---|
id | Vidinis komentaro ID |
metaId | Išorinis ID meta. null už laukiantį mūsų atsakymą, kol jis bus išsiųstas |
text | Komentaro tekstas |
createdAt | Sukūrimo data |
platform | facebook arba instagram |
replyStatus | null gaunamo vartotojo komentarui; "pending" / "sent" / "failure" mūsų atsakymui |
author.type | "meta_user" išorinis vartotojas, "owner" puslapio savininkas |
author.name | Autoriaus vardas |
author.metaUserId | Apimtas vartotojo ID meta; null už "owner" |
post | Įrašas, ritė arba istorija, kuriai komentaras priklauso |
post.mediaType | post, reel arba story |
post.story | Istorijos nuoroda { id, metaId, url }, tik istorijos |
mediaUrl | Prie komentaro pridėta žiniasklaida arba null |
replyTo | Tė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
}'
| Laukas | Tipas | Aprašymas |
|---|---|---|
url | string | Jūsų galutinis taškas |
source | SendingSourceCallback | Įvykio tipas, žr. §8.2 |
headerName / headerValue | string | Savavališka autentifikavimo antraštė, kurią pridedame prie užklausos (neprivaloma) |
channelType | ChatSource | Kanalas. 7, skirtas Instagram. Neprivaloma |
channelEntityId | int | Konkreti 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"
}
}
| Laukas | Aprašymas |
|---|---|
ChatId / MessageId | Pokalbių ir pranešimų identifikatoriai |
Author | 0 vartotojas, 1 operatorius |
Username | „Instagram“ / „Facebook“ rodomas vardas arba rankena |
UserId | Vidinis skaitmeninis vartotojo ID SMSBAT |
MetaUserId | Apimtas 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 |
MessageText | Pranešimo tekstas |
MessageMedia | Medijos URL, kai pranešimas yra medija |
type_messenger | Šaltinis, 7 Instagram |
operator_name | Operatoriaus vardas, kai Author = 1 |
Story | Pateikti tik gautame istorijos atsakyme |
Story.Id | Vidinės istorijos (MetaPost) ID – galima tiesiogiai naudoti kaip id / postId Meta API |
Story.MetaId | Išorinis istorijos ID meta |
Story.Url | Stabilus 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.
| Laukas | Aprašymas |
|---|---|
type | "new_comment" arba "comment_status" |
platform | "facebook" arba "instagram" |
comment.id | Vidinis komentaro ID |
comment.metaId | Išorinis ID Meta; null laukiančiam atsakymui prieš jį išsiunčiant |
comment.parentCommentId | Tėvų komentaro ID. Nedalyvauja aukščiausio lygio komentarui |
comment.parentMetaId | Išorinis tėvų komentaro ID. Nėra aukščiausio lygio |
comment.parentCommentText | Tėvų komentaro tekstas. Nėra aukščiausio lygio |
comment.text | Komentaro tekstas |
comment.createdAt | Sukūrimo data |
comment.updatedAt | Paskutinis 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.name | Autoriaus vardas |
comment.author.metaUserId | Apimtas autoriaus ID meta. Nėra "owner" |
comment.mediaUrl | Komentarų žiniasklaida. Nėra, kai nėra |
post.id | Vidinis įrašo ID |
post.metaId | Išorinis įrašas / ritė / istorijos ID meta |
post.text | Įrašo tekstas |
post.imageUrl | Paskelbti vaizdo URL arba null |
post.createdAt | Įrašo sukūrimo data |
post.mediaType | Komentarų 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>
| Parametras | Aprašymas |
|---|---|
organizationId | Neprivaloma. Paimta iš žetono, kai praleista |
page / perPage | Puslapiai, 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
- Apklausa
GET /api/chat/callback-eventspagal tvarkaraštį. - Apdorokite savo paslaugos įvykius.
- Išsiųskite apdorotą
event_guidsąrašą į/callback-events/processed. - Pakartokite.
8. Enum nuoroda
8.1 ChatSource – kanalas (0–9)
| Kodas | Kanalas |
|---|---|
| 0 | Viber |
| 1 | ViberBot |
| 2 | TelegramBot |
| 3 | |
| 4 | Valdiklis |
| 5 | Rozetka |
| 6 | |
| 7 | |
| 8 | Prom |
| 9 | Olx |
8.2 SendingSourceCallback – atgalinio skambinimo įvykio tipas (0–13)
| Kodas | Renginys |
|---|---|
| 3 | Chat – naujas pokalbio pranešimas, įskaitant istorijos atsakymus |
| 5 | Pokalbio būsena pakeista |
| 6 | Pranešimo būsena pakeista |
| 7 | Sukurtas naujas pokalbis |
| 8 | Rašymo indikatorius |
| 9 | Pranešimas atnaujintas arba ištrintas |
| 11 | AnyChatMessage — bet koks pokalbio pranešimas |
| 12 | MetaNewComment — naujas Instagram / Facebook komentaras |
| 13 | MetaCommentStatus — 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)
| Kodas | Vardas |
|---|---|
| 0 | NAUJIENA |
| 1 | SĖKMĖS |
| 2 | ATMESTA |
| 3 | SKAITYTI |
| 4 | NEŽINOMA |
| 5 | APDOROJIMAS |
| 6 | PRISTATYTA |
| 7 | BLOCKED_BY_USER |
| 8 | USER_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.
| # | Klausimas | Specifikacija | Swagger | Kaip patikrinti |
|---|---|---|---|---|
| 1 | Auth antraštė /api/meta/* | X-Authorization-Key | tik Bearer deklaruota | curl -i -H "X-Authorization-Key: <token>" ".../api/meta/posts?perPage=1" — tikėtis 200, o ne 401 |
| 2 | Skaitiklio laukas meta atsakymuose | totalCount | total | Ta pati užklausa – perskaitykite šakninį JSON raktą |
| 3 | author.type tipas ir reply būsenos kodas | "meta_user" / "owner", 202 su korpusu | int [0,1], 200 be korpuso | curl -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į2xxvertinkite kaip sėkmę, nereikalauja kūno, perimkite galutinę būseną išsource: 13atgalinio skambinimo.
Diegimo pastabos
- Autentifikavimas skiriasi pagal galinių taškų grupę —
/api/meta/*naudojaX-Authorization-Key, pokalbius ir operatoriai naudojaBearer,restapipriima bet kurį. - ** Puslapiai rašomi dviem būdais** —
per_pageant/api/chat/chats,perPageant/api/meta/*ir/api/chat/callback-events. multipart/form-datalaukai 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. phonepaprastai yranull„Instagram“. Atpažinkite klientą naudodamiinstagramUser.id/metaUserIdir parduotuvėinstaAccount.id(entityIdfiltro vertė).Story.Idiš atgalinio skambinimo gali būti perduodamas tiesiai atgal kaipid/postIdį Meta API.- Prieš naudodami giliojoje nuorodoje arba valdiklyje, patikrinkite operatoriaus JWT
expiresAt.