Meta un Instagram API integrācija
Atsauce par Instagram lietotnes izveidi SMSBAT ChatHub platformā: autentifikācija, Instagram Tiešās sarunas, komentāri par ziņām un rullīšiem, stāstu atbildes, tīmekļa aizķeres un aptaujas.
Avoti
Šajā lapā ir apvienota iekšējā Meta Comments API specifikācija ar reāllaika OpenAPI
definīcijas https://chatapi.smsbat.com/swagger/v1/swagger.json un
https://restapi.smsbat.com/swagger/v1/swagger.json. Ja abiem nav vienprātības,
atšķirība tiek izsaukta iekļauta un norādīta sadaļā Atvērtie jautājumi.
1. Pamata URL
| Mērķis | URL |
|---|---|
| Tērzēšanas API + Meta API | https://chatapi.smsbat.com |
| Swagger UI / OpenAPI | https://chatapi.smsbat.com/index.html · …/swagger/v1/swagger.json |
| REST API (organizācijas, atzvanīšanas URL) | https://restapi.smsbat.com |
| REST API Swagger | https://restapi.smsbat.com/swagger/v1/swagger.json |
| Operatora tīmekļa panelis | https://chat.smsbat.com |
2. Autentifikācija
Autentifikācijas shēma atkarīga no galapunktu grupas. To sajaukšana ir visizplatītākais 401 cēlonis.
| Grupa | Virsraksts |
|---|---|
chatapi.smsbat.com/api/meta/* (ziņas, komentāri) | 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 · Pamata autentifikācija |
Organizācijas pilnvara X-Authorization-Key tiek izsniegta panelī sadaļā Profils.
Uzņēmums un operators JWT nāk no /api/company/get-token un /api/operator/get-token.
Neatbilstība
chatapi OpenAPI dokuments deklarē vienotu drošības shēmu — Bearer — un piemēro to
globāli. X-Authorization-Key tur vispār nav deklarēts, lai gan iekšējais Meta
Comments API specifikācijā tas tiek nosaukts ar /api/meta/*. Visticamāk, to apstrādā
starpprogrammatūra, kas nav atspoguļota Swagger. Pirms nosūtīšanas empīriski apstipriniet.
2.1 Uzņēmuma marķieris
POST https://chatapi.smsbat.com/api/company/get-token
Content-Type: application/json
{ "login": "company_login", "password": "company_password" }
200 OK atgriež tukšu marķiera virkni.
2.2. Organizācijas
GET https://chatapi.smsbat.com/api/company/organization
Authorization: Bearer <company_token>
[ { "id": 24, "name": "My Instagram Store" } ]
2.3 Operatori organizācijā
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" }
}
]
Operatora statusi: 0 Aktīvs, 1 Neaktīvs, 2 Dzēsts.
2.4 Pievienojiet/sinhronizējiet operatorus
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 Operators 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 atgriež JWT kā virkni.
2.6. Validējiet operatora marķieri
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
}
Ja nederīgs: { "isValid": false, "error": "Invalid token" }.
2.7. Iegult operatora tērzēšanas paneli
<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. Dziļās saites uz tērzēšanas paneli
Ārēja sistēma (CRM, ERP, vietne) var atvērt konkrētu sarunu
https://chat.smsbat.com/. Operatoru pilnvaro JWT, kas nodots kā vaicājuma parametrs.
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>
| Parametrs | Apraksts |
|---|---|
chat_raw_id | Tērzēšanas ID |
phone | Tālruņa numurs starptautiskā formātā |
from | Zīmola/uzņēmuma konta identifikators (bm_id) |
source | Tērzēšanas avots — 7 Instagram, skatiet §8.1 |
token | Derīgs, beztermiņa operators JWT ar piekļuvi tērzēšanas sarunām |
Nederīgs JWT nosūta apmeklētāju operatora paneļa pieteikšanās ekrānā.
4. Instagram Tiešās sarunas
4.1. Saraksta tērzēšanas sarunas
GET https://chatapi.smsbat.com/api/chat/chats?source=7&page=1&per_page=20
Authorization: Bearer <token>
Note
Lapu skaits šeit ir per_page (snake_case). Zem /api/meta/* un aptauja
beigu punkts tas ir perPage (camelCase). Šī nav drukas kļūda — API izmanto abus.
Vaicājuma parametri, visi nav obligāti:
| Parametrs | Tips | Apraksts |
|---|---|---|
source | ChatSource | 7 ierobežo rezultātus tikai Instagram |
entityId | int | Uzņēmuma konta ID. Piemērots tikai kopā ar source |
instagram_user_id | int | Instagram lietotāja ID pakalpojumā ChatHub |
facebook_user_id | int | Facebook lietotāja ID pakalpojumā ChatHub |
page / per_page | int | Lapu šķirošana, noklusējuma iestatījumi 1 / 20 |
status | ChatStatus[] | Tērzēšanas statuss, atkārtojams |
search | string | Brīvā teksta meklēšana (vārds, tālrunis, …) |
organizationId | int | Organizācijas ID |
operatorId | int[] | Filtrēt pēc piešķirtajiem operatoriem |
date | string[] | Divas robežas: ?date=…&date=… |
isChain | bool | Atgriezt tērzēšanu kā ķēdes, pārnēsājot ziņojumus no iepriekšējām tērzēšanas sarunām |
isUnread, starMark, isOperator, isAIAgent | bool | Papildu filtri |
phone, email, contactId, clientId, tagIds, rate, sortedBy | — | Citi filtri |
200 OK atgriež 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 lietotnei svarīgie lauki:
| Lauks | Nozīme |
|---|---|
instaAccount | Instagram biznesa konts (veikals). id ir entityId filtra vērtība; name ir konta nosaukums no Meta |
instagramUser | klients. name ir Instagram rokturis, id ir instagram_user_id filtra vērtība |
metaUserId | Klienta tvēruma ID Meta pusē (virkne) |
messSource | 7 Instagram |
phone | Parasti null Instagram — neizmantojiet to kā atslēgu |
ChatDTO satur arī 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 un taggedMessages.
4.2. Tērzēšanas ziņas
GET https://chatapi.smsbat.com/api/chat/chats/1867/messages?isChain=false
Authorization: Bearer <token>
200 OK atgriež masīvu 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 tiek aizpildīts, ja ziņojums attiecas uz Instagram ziņu vai stāstu — nodod to
taisni atpakaļ kā id / postId uz Meta API. media ir ChatMediaDTO:
{ name, format, type, uri, raw, length, isUploaded }.
4.3. Sūtīt ziņojumu (JSON)
POST https://chatapi.smsbat.com/api/chat/1867/message
Authorization: Bearer <token>
Content-Type: application/json
Pamatteksts — 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
}
}
| Lauks | Tips | Apraksts |
|---|---|---|
textMessage | string? | Ziņas teksts. Var būt tukšs, ja ir media |
author | AuthorMessage? | 0 operators, 1 klients |
isInternal | bool? | true apzīmē iekšējo piezīmi, kas netiek piegādāta klientam |
replyToMessageId | int? | Tā ziņojuma ID, uz kuru tiek atbildēts |
appGuid | uuid? | Novirzīšanas GUID |
media | MediaDTO? | { name, format, dataBase64, thumbnail, duration, type } |
200 OK → { "id": 9930, "messageStatus": 0 }
Ceļā var tikt nodots arī novirzīšanas GUID:
POST /api/chat/{chatId}/{referralGuid}/message (tāpat …/message/v1, …/message/v2).
4.4. Faila vai video sūtīšana (daudzdaļu, v2)
POST https://chatapi.smsbat.com/api/chat/1867/message/v2
Authorization: Bearer <token>
Content-Type: multipart/form-data
Veidlapas lauku nosaukumi ir PascalCase ar punktu apzīmējumu
textMessage un media.file tiek klusi ignorēti. Izmantojiet tālāk norādītos precīzus nosaukumus.
| Veidlapas lauks | Tips | Apraksts |
|---|---|---|
TextMessage | string | Ziņojuma teksts |
Author | int | 0 operators, 1 klients |
IsInternal | bool | Iekšējā piezīme |
ReplyToMessageId | int | Uz ziņojumu tiek atbildēts |
AppGuid | uuid | Novirzīšanas GUID |
Media.File | binary | Pats fails |
Media.Name | string | Faila nosaukums |
Media.Format | string | MIME veids (video/mp4, image/png, application/pdf) |
Media.Type | MediaType | Skatīt §8.5 |
Media.DataBase64 | string | Alternatīva Media.File |
Media.Thumbnail | string | Base64 video priekšskatījuma rāmis |
Media.Duration | double | Video ilgums sekundēs |
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. Mainiet tērzēšanas statusu
PUT https://chatapi.smsbat.com/api/chat/status
Authorization: Bearer <token>
Content-Type: application/json
{ "id": 1867, "status": 4 }
200 OK atbalso atjaunināto objektu.
4.6. Atjauniniet ziņojumu statusus
PUT https://chatapi.smsbat.com/api/chat/messages/status
Authorization: Bearer <token>
Content-Type: application/json
{ "status": 3, "messageIds": [9928, 9929] }
4.7. Dzēst tērzēšanu
DELETE https://chatapi.smsbat.com/api/chat/chats/1867
Authorization: Bearer <token>
5. Ziņas, ruļļi un stāsti
Bāzes ceļš: https://chatapi.smsbat.com/api/meta
Autent.: X-Authorization-Key: <organization token>
5.1. Saraksta ziņas, rullīši un stāsti
GET https://chatapi.smsbat.com/api/meta/posts?platform=instagram&mediaType=story&page=1&perPage=20
X-Authorization-Key: <token>
| Parametrs | Tips | Nepieciešams | Apraksts |
|---|---|---|---|
page | int | nē | Lapa, noklusējuma 1 |
perPage | int | nē | Vienumi lapā, noklusējuma 20 |
id | int | nē | Filtrēt pēc iekšējās ziņas ID |
platform | string | nē | instagram vai facebook |
mediaType | string | nē | post, reel vai story. Visi veidi, ja tie ir izlaisti |
# 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"
}
}
]
}
Neatbilstība — skaitītāja lauka nosaukums
Swagger shēma MetaCommentPostListItemDtoPaginationDTO definē total. The
iekšējās specifikācijas dokumenti totalCount. Swagger tiek ģenerēts no koda, tāpēc
total ir visticamākā patiesība. Parsējiet total ?? totalCount, līdz tas ir atrisināts.
| Lauks | Apraksts |
|---|---|
id | Iekšējās ziņas ID |
metaId | Ārējā ziņa / ruļļa / stāsta ID pakalpojumā Meta |
text | Ziņas paraksts |
imageUrl | Starpniekservera multivides URL, kas ievadīts ar nesecīgu MetaPost.Guid vai null |
platform | facebook vai instagram |
mediaType | post, reel vai story |
createdAt | Izveidošanas datums (platformas datums vai datu bāzes datums) |
story | Dāvana tikai par mediaType: "story" |
story.id | Iekšējais stāsta ID; vienāds ar post.id |
story.metaId | Ārējā stāsta ID pakalpojumā Meta |
story.url | Saglabātā Story multivides stabils starpniekservera URL; null, ja datu nesēju nevarēja saglabāt |
Pasta mediji tiek apkalpoti pa diviem ceļiem: GET /api/meta/post/media/{id:int} atpakaļgaitā
saderība un GET /api/meta/post/media/{guid:guid}. Jaunas API atbildes un atzvani
vienmēr ģenerē GUID veidlapu.
5.2. Saraksta komentārus
GET https://chatapi.smsbat.com/api/meta/comments?platform=instagram&postId=42&page=1&perPage=20
X-Authorization-Key: <token>
| Parametrs | Tips | Nepieciešams | Apraksts |
|---|---|---|---|
page | int | nē | Lapa, noklusējuma 1 |
perPage | int | nē | Vienumi lapā, noklusējuma 20 |
postId | int | nē | Filtrēt pēc pasta ID |
parentCommentId | int | nē | Dotā komentāra bērna komentāri (atbildes) |
platform | string | nē | facebook vai 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..."
}
}
]
}
| Lauks | Apraksts |
|---|---|
id | Iekšējā komentāra ID |
metaId | Ārējais ID pakalpojumā Meta. null par mūsu gaidīto atbildi, līdz tā tiek nosūtīta |
text | Komentāra teksts |
createdAt | Izveidošanas datums |
platform | facebook vai instagram |
replyStatus | null ienākošajam lietotāja komentāram; "pending" / "sent" / "failure" mūsu atbildei |
author.type | "meta_user" ārējais lietotājs, "owner" lapas īpašnieks |
author.name | Autora vārds |
author.metaUserId | Aptvēra lietotāja ID meta; null par "owner" |
post | Ziņa, rullītis vai stāsts, kam komentārs pieder |
post.mediaType | post, reel vai story |
post.story | Stāsta atsauce { id, metaId, url }, tikai stāsti |
mediaUrl | Komentāram pievienots plašsaziņas līdzeklis vai null |
replyTo | Vecāku komentārs { id, metaId, text }; null augstākā līmenī |
Neatbilstība — `author.type` veids
Iekšējā specifikācija dokumentē virknes "meta_user" / "owner". Swagger veidi
MetaCommentAuthorType kā vesels skaitlis ar numuru [0, 1]. A JsonStringEnumConverter
varētu izskaidrot plaisu, bet tas nav apstiprināts pret reālu atbildi. Uzrakstiet a
parsētājs, kas pieņem abus.
5.3. Atbildēt uz komentāru
Rindā atbildi piegādei.
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"
Pieprasījuma pamatteksts: { "text": "Reply text" }
202 Accepted atgriež komentāra objektu — tādu pašu formu kā GET /api/meta/comments — ar
replyStatus: "pending" un metaId: null. Piegādes rezultāts tiek saņemts vēlāk kā a
source: 13 atzvanīšana (6.4. §).
Neatbilstība — atbildes kods
Swagger paziņo 200 bez ķermeņa; iekšējā specifikācija deklarē 202 Accepted
ar komentāru kā pamattekstu. Visticamāk, kontrolierim trūkst ProducesResponseType
atribūtu, atstājot Swagger noklusējuma vērtību. Pieņemiet jebkuru 2xx un neesiet atkarīgi no ķermeņa.
6. Tīmekļa aizķeres
SMSBAT nosūta POST pieprasījumus ar application/json uz jūsu URL un sagaida HTTP 200 atpakaļ.
Null lauki ir pilnībā izlaisti
Lauks, kura vērtība ir null, vispār nav serializēts atzvanīšanas pamattekstā. Par a
Ziņojums, kas nenāca no Facebook vai Instagram, vienkārši nav atslēgas MetaUserId.
Uztveriet “nav klāt” un null kā vienu un to pašu.
6.1. Reģistrējiet atzvanīšanas 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
}'
| Lauks | Tips | Apraksts |
|---|---|---|
url | string | Jūsu galapunkts |
source | SendingSourceCallback | Notikuma veids, skatiet 8.2. § |
headerName / headerValue | string | Patvaļīga autentifikācijas galvene, ko pievienojam pieprasījumam (neobligāti) |
channelType | ChatSource | Kanāls. 7 pakalpojumam Instagram. Pēc izvēles |
channelEntityId | int | Konkrēts uzņēmuma konts. Nepieciešams channelType |
Bez channelType URL saņem notikumus no katra kanāla.
Tip
Pilnam komentāru pārklājumam nepieciešamas divas reģistrācijas: source: 12 jauniem komentāriem un
source: 13 atbildes statusiem. Tiešajām un stāsta atbildēm pievienojiet source: 3
(un 11, ja vēlaties katru tērzēšanas ziņojumu).
Atlikušās darbības:
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 atgriež:
[
{
"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. Jauns ziņojums un atbilde uz Instagram Story (source: 3, 11)
Lietotāja atbilde uz Instagram Story tiek saņemta kā parasts ziņojums šajos atzvanos,
ar papildu augstākā līmeņa 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"
}
}
| Lauks | Apraksts |
|---|---|
ChatId / MessageId | Tērzēšanas un ziņojumu identifikatori |
Author | 0 lietotājs, 1 operators |
Username | Instagram/Facebook parādāmais vārds vai rokturis |
UserId | Iekšējais skaitliskais lietotāja ID SMSBAT |
MetaUserId | Sarunu partnera aptvērtais ID pakalpojumā Meta. Izejošā operatora ziņojumā tas joprojām identificē tērzēšanas meta lietotāju, nevis operatoru |
ShopId | Instagram/Facebook biznesa konta iekšējais ID |
ShopName | Uzņēmuma konta nosaukums, kas saņemts no Meta savienojuma laikā |
MessageText | Ziņojuma teksts |
MessageMedia | Multivides URL, ja ziņojums ir multivide |
type_messenger | Avots, 7 vietnei Instagram |
operator_name | Operatora nosaukums, kad Author = 1 |
Story | Rādīt tikai ienākošajā stāsta atbildē |
Story.Id | Iekšējā stāsta (MetaPost) ID — izmantojams tieši kā id / postId Meta API |
Story.MetaId | Ārējā stāsta ID pakalpojumā Meta |
Story.Url | Saglabātās Story multivides stabils starpniekservera URL. Nav klāt, kad datu nesēju nevarēja saglabāt — bloks Story un ziņojums joprojām tiek piegādāti |
`Author` ir apgriezts attiecībā pret tērzēšanas API
ChatMessageDTO.author 0 nozīmē operatoru un 1 apzīmē klientu. Šajā atzvanīšanā tā ir
otrādi: 0 ir lietotājs, 1 ir operators. Nekopīgojiet kartēšanu.
6.3. Jauns komentārs (source: 12)
Iedegas, kad Meta lietotājs komentē Facebook ziņu vai Instagram ziņu/rullīti.
Note
Instagram ** Atbildes uz stāstiem netiek piegādātas, izmantojot numuru source: 12.** Tās tiek saņemtas kā parasti
ienākošie ziņojumi uz source: 3 un/vai 11 ar Story bloku — skatiet 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. Komentāra atbildes statuss (source: 13)
Aktivizējas pēc tam, kad mēģinām sniegt atbildi neatkarīgi no tā, vai tā izdodas vai neizdodas.
{
"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. Kopīgoto komentāru atzvanīšanas lauki
Abiem komentāru atzvaniem ir viena ķermeņa forma un atšķiras tikai par type.
| Lauks | Apraksts |
|---|---|
type | "new_comment" vai "comment_status" |
platform | "facebook" vai "instagram" |
comment.id | Iekšējā komentāra ID |
comment.metaId | Ārējais ID meta; null par neapstiprinātu atbildi pirms tās nosūtīšanas |
comment.parentCommentId | Vecāku komentāra ID. Nav klāt augstākā līmeņa komentāram |
comment.parentMetaId | Ārējā vecāku komentāra ID. Nav augstākā līmenī |
comment.parentCommentText | Vecāku komentāra teksts. Nav augstākā līmenī |
comment.text | Komentāra teksts |
comment.createdAt | Izveidošanas datums |
comment.updatedAt | Pēdējais atjauninājums. Nav, ja komentārs nekad nav rediģēts |
comment.replyStatus | "pending" / "sent" / "failure". Nav klāt ienākošajam lietotāja komentāram |
comment.author.type | "meta_user" vai "owner" |
comment.author.name | Autora vārds |
comment.author.metaUserId | Tvēruma autora ID sadaļā Meta. Nav "owner" |
comment.mediaUrl | Komentāru mediji. Nav klāt, kad nav |
post.id | Iekšējās ziņas ID |
post.metaId | Ārējā ziņa / ruļļa / stāsta ID pakalpojumā Meta |
post.text | Ziņas teksts |
post.imageUrl | Publicējiet attēla URL vai null |
post.createdAt | Ziņas izveides datums |
post.mediaType | Komentāru atzvanījumos tikai post vai reel |
### 6.6 Jauna tērzēšana (source: 7)
{ "ChatId": 12345, "Phone": "+380501234567", "chat.Source": 7 }
6.7. Ziņojumu un tērzēšanas statusa izmaiņas (source: 6 / 5)
{ "name": "changed_message_status", "id": 9928, "status": 6 }
{ "name": "changed_chat_status", "id": 1867, "status": 4 }
6.8 Ziņojums rediģēts vai dzēsts (source: 9)
{ "messageId": 9930, "text": "Updated message text" }
{ "messageId": 9931, "delete": true }
6.9. Rakstīšanas indikators (source: 8)
{ "chat_id": 1867, "event": "start_typing", "operator_name": "Iryna" }
{ "chat_id": 1867, "event": "end_typing" }
7. Pasākumu aptauja
Vidēm, kas nevar pieņemt ienākošo HTTP.
7.1. Notikumu iegūšana
GET https://chatapi.smsbat.com/api/chat/callback-events?page=1&perPage=20
Authorization: Bearer <token>
| Parametrs | Apraksts |
|---|---|
organizationId | Pēc izvēles. Paņemts no marķiera, ja tas ir izlaists |
page / perPage | Lapu šķirošana, noklusējuma iestatījumi 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"
}
]
}
Katrs notikums satur event_guid, timestamp, organization_id un callback_type —
virkne, kas atbilst source vērtībām 8.2. §. Atlikušie lauki atbilst attiecīgajiem laukiem
tīmekļa aizķere 6. §.
7.2. Apstiprināt apstrādātos notikumus
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 noņemtie notikumi vienkārši netiek ieskaitīti deleted. Pasūtīšana un atkārtošana ir jūsu
puses atbildība.
7.3. Ieteicamā cilpa
- Aptauja
GET /api/chat/callback-eventspēc grafika. 2. Apstrādājiet notikumus savā pakalpojumā. - Nosūtiet apstrādāto
event_guidsarakstu uz/callback-events/processed. - Atkārtojiet.
8. Enum atsauce
8.1 ChatSource — kanāls (0–9)
| Kods | Kanāls |
|---|---|
| 0 | Viber |
| 1 | ViberBot |
| 2 | TelegramBot |
| 3 | |
| 4 | Logrīks |
| 5 | Rozetka |
| 6 | |
| 7 | |
| 8 | Prom |
| 9 | Olx |
8.2 SendingSourceCallback — atzvanīšanas notikuma veids (0–13)
| Kods | Pasākums |
|---|---|
| 3 | Chat — jauns tērzēšanas ziņojums, tostarp stāstu atbildes |
| 5 | Tērzēšanas statuss mainīts |
| 6 | Ziņojuma statuss mainīts |
| 7 | Izveidota jauna tērzēšana |
| 8 | Rakstīšanas indikators |
| 9 | Ziņojums atjaunināts vai dzēsts |
| 11 | AnyChatMessage — jebkurš tērzēšanas ziņojums |
| 12 | MetaNewComment — jauns Instagram/Facebook komentārs |
| 13 | MetaCommentStatus — mūsu komentāra atbildes piegādes statuss |
Enum aptver 0–13; atlikušās vērtības nav nepieciešamas Instagram integrācijām.
8.3 ChatStatus (0–4)
0 Jauns, 1 Atvērts, 2 Gaida, 3 OnPause, 4 Slēgts
8,4 MessageStatus (0–11)
| Kods | Vārds |
|---|---|
| 0 | JAUNS |
| 1 | VEIKSMES |
| 2 | NORAIDĪTS |
| 3 | LASĪT |
| 4 | NEZINĀMS |
| 5 | APSTRĀDE |
| 6 | PIEGĀDĀTS |
| 7 | BLOCKED_BY_USER |
| 8 | USER_NOT_FOUND |
Saraksts aptver 0–11. Vērtības 9, 10 un 11 pastāv API, bet vēl nav dokumentētas —
uzskatīt tos par UNKNOWN.
8,5 MediaType (1–10)
1 fotoattēls, 2 fails, 3 audio, 4 video, 5 uzlīme, 6 animēta uzlīme,
7 UzlīmesVideo, 8 Animācija, 9 Balss, 10 VideoNote
8.6 AuthorMessage — autors tērzēšanas API (0–4)
0 operators, 1 klients, 2 robots, 3 ViberAccount
Enum aptver 0–4; vērtība 4 nav dokumentēta. Atzvanīšanai “jauns ziņojums” tiek izmantots
pretējā kartēšana — skatīt §6.2.
8.7 ChatMessageType (0–2)
0 teksts, 1 fotoattēls, 2 fails
8.8 Komentārs replyStatus
null ienākošais lietotāja komentārs, "pending" mūsu atbilde ir rindā, "sent" piegādāta,
"failure" piegāde neizdevās.
Atvērtie jautājumi
Trīs punkti, kuros iekšējā specifikācija un koda ģenerētais Swagger nesakrīt. Viens pieprasījums ar reālu žetonu nokārto tos visus; līdz tam rakstiet klientam aizstāvoties.
| # | Jautājums | Specifikācija | Swagger | Kā pārbaudīt |
|---|---|---|---|---|
| 1 | Auth galvene /api/meta/* | X-Authorization-Key | tikai Bearer deklarēti | curl -i -H "X-Authorization-Key: <token>" ".../api/meta/posts?perPage=1" — gaidīt 200, nevis 401 |
| 2 | Skaitītāja lauks meta atbildēs | totalCount | total | Tas pats pieprasījums — izlasiet saknes JSON atslēgu |
| 3 | author.type veids un reply statusa kods | "meta_user" / "owner", 202 ar korpusu | int [0,1], 200 bez korpusa | curl -i .../api/meta/comments?perPage=1 plus testa atbilde |
Pagaidu norādījumi:
- skaitītājs — lasīt
total ?? totalCount; author.type— pieņemt gan virkni, gan veselu skaitli (0↔meta_user,1↔owner, kartēšana jāapstiprina);reply— uztveriet jebkuru2xxkā veiksmi, neprasa ķermeni, iegūstiet galīgo statusu nosource: 13atzvanīšanas.
Ieviešanas piezīmes
- Autentifikācija atšķiras atkarībā no galapunktu grupas —
/api/meta/*izmantoX-Authorization-Key, tērzēšanu un operatori izmantoBearer,restapipieņem vienu vai otru. - Paginācija tiek rakstīta divējādi —
per_pageuz/api/chat/chats,perPageuz/api/meta/*un/api/chat/callback-events. multipart/form-datalauki ir PascalCase ar punktu apzīmējumu (Media.File,Media.Type).- Atzvanīšanas laikā tiek izlaisti nulle lauki — ja atslēgas nav, tas nozīmē
null. *phonepakalpojumā Instagram parasti irnull. Identificējiet klientu pēcinstagramUser.id/metaUserIdun iepirkties pēcinstaAccount.id(filtra vērtībaentityId). *Story.Idno atzvanīšanas var nosūtīt tieši atpakaļ kāid/postIduz Meta API. - Pārbaudiet operatora JWT
expiresAt, pirms to izmantojat dziļajā saitē vai logrīkā.