Integracija API-ja Meta & Instagram
Referenca za izdelavo aplikacije Instagram na platformi SMSBAT ChatHub: preverjanje pristnosti, Pogovori Instagram Direct, komentarji na objave in kolute, odgovori na zgodbe, spletne trnke in glasovanje.
Viri
Ta stran združuje notranjo specifikacijo API-ja Meta Comments z aktivnim OpenAPI-jem
definicije na https://chatapi.smsbat.com/swagger/v1/swagger.json in
https://restapi.smsbat.com/swagger/v1/swagger.json. Kjer se ne strinjata, je
razlika je prikazana v vrstici in navedena pod Odprta vprašanja.
1. Osnovni URL-ji
| Namen | URL |
|---|---|
| API za klepet + API za meta | https://chatapi.smsbat.com |
| Uporabniški vmesnik Swagger / OpenAPI | https://chatapi.smsbat.com/index.html · …/swagger/v1/swagger.json |
| REST API (organizacije, URL-ji za povratni klic) | https://restapi.smsbat.com |
| REST API Swagger | https://restapi.smsbat.com/swagger/v1/swagger.json |
| Spletna plošča operaterja | https://chat.smsbat.com |
2. Preverjanje pristnosti
Shema avtorizacije je odvisna od skupine končnih točk. Njihovo mešanje je najpogostejši vzrok za 401.
| Skupina | Glava |
|---|---|
chatapi.smsbat.com/api/meta/* (objave, komentarji) | 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 · Osnovna avtorizacija |
Organizacijski žeton za X-Authorization-Key se izda v plošči pod Profil.
JWT podjetja in operaterja prihajajo iz /api/company/get-token in /api/operator/get-token.
Neskladje
Dokument chatapi OpenAPI deklarira eno samo varnostno shemo — Bearer — in jo uporabi
globalno. X-Authorization-Key tam sploh ni deklariran, čeprav notranja Meta
Komentarji Specifikacija API-ja ga imenuje za /api/meta/*. Najverjetneje ga obravnava
vmesna programska oprema, ki se ne odraža v Swaggerju. Potrdite empirično, preden pošljete.
2.1 Žeton podjetja
POST https://chatapi.smsbat.com/api/company/get-token
Content-Type: application/json
{ "login": "company_login", "password": "company_password" }
200 OK vrne goli niz žetona.
2.2 Organizacije
GET https://chatapi.smsbat.com/api/company/organization
Authorization: Bearer <company_token>
[ { "id": 24, "name": "My Instagram Store" } ]
2.3 Operaterji v organizaciji
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" }
}
]
Statusi operaterja: 0 Aktiven, 1 Neaktiven, 2 Izbrisan.
2.4 Dodajanje / sinhroniziranje operaterjev
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 Operater 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 vrne JWT kot niz.
2.6 Preverjanje žetona operaterja
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
}
Ko je neveljavno: { "isValid": false, "error": "Invalid token" }.
2.7 Vdelajte ploščo za klepet operaterja
<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. Globinske povezave v ploščo za klepet
Zunanji sistem (CRM, ERP, spletna stran) lahko odpre določen pogovor v
https://chat.smsbat.com/. Operaterja pooblasti JWT, posredovan kot poizvedbeni parameter.
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>
| Parameter | Opis |
|---|---|
chat_raw_id | ID klepeta |
phone | Telefonska številka v mednarodni obliki |
from | Identifikator blagovne znamke/poslovnega računa (bm_id) |
source | Vir klepeta — 7 za Instagram, glejte §8.1 |
token | Veljaven, nepotekel operater JWT z dostopom do klepetov |
Neveljaven JWT pripelje obiskovalca na prijavni zaslon nadzorne plošče.
4. Instagram Direct pogovori
4.1 Seznam klepetov
GET https://chatapi.smsbat.com/api/chat/chats?source=7&page=1&per_page=20
Authorization: Bearer <token>
Note
Paginacija tukaj je per_page (snake_case). Pod /api/meta/* in glasovanje
končna točka je perPage (camelCase). To ni tipkarska napaka - API uporablja oboje.
Parametri poizvedbe, vsi neobvezni:
| Parameter | Vrsta | Opis |
|---|---|---|
source | ChatSource | 7 omejuje rezultate na Instagram |
entityId | int | ID poslovnega računa. Uporablja se samo skupaj z source |
instagram_user_id | int | ID uporabnika Instagrama v ChatHubu |
facebook_user_id | int | ID uporabnika Facebooka v ChatHubu |
page / per_page | int | Paginacija, privzeto 1 / 20 |
status | ChatStatus[] | Stanje klepeta, ponovljivo |
search | string | Iskanje po prostem besedilu (ime, telefon, …) |
organizationId | int | ID organizacije |
operatorId | int[] | Filtriraj po dodeljenih operaterjih |
date | string[] | Dve meji: ?date=…&date=… |
isChain | bool | Vrni klepete kot verige, ki prenašajo sporočila iz prejšnjih klepetov |
isUnread, starMark, isOperator, isAIAgent | bool | Dodatni filtri |
phone, email, contactId, clientId, tagIds, rate, sortedBy | — | Drugi filtri |
200 OK vrne 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": []
}
]
}
Polja, ki so pomembna za aplikacijo Instagram:
| Polje | Pomen |
|---|---|
instaAccount | Instagram poslovni račun (trgovina). id je vrednost filtra entityId; name je ime računa iz Meta |
instagramUser | Stranka. name je Instagram ročaj, id je instagram_user_id vrednost filtra |
metaUserId | ID stranke v obsegu na strani Mete (niz) |
messSource | 7 za Instagram |
phone | Običajno null za Instagram — ne uporabljajte ga kot ključ |
ChatDTO nosi tudi 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 in taggedMessages.
4.2 Sporočila klepeta
GET https://chatapi.smsbat.com/api/chat/chats/1867/messages?isChain=false
Authorization: Bearer <token>
200 OK vrne niz 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 je zapolnjeno, ko se sporočilo nanaša na objavo ali zgodbo na Instagramu – posredujte
naravnost nazaj kot id / postId v Meta API. media je ChatMediaDTO:
{ name, format, type, uri, raw, length, isUploaded }.
4.3 Pošljite sporočilo (JSON)
POST https://chatapi.smsbat.com/api/chat/1867/message
Authorization: Bearer <token>
Content-Type: application/json
Telo — 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
}
}
| Polje | Vrsta | Opis |
|---|---|---|
textMessage | string? | Besedilo sporočila. Lahko je prazno, če je prisoten media |
author | AuthorMessage? | 0 operater, 1 odjemalec |
isInternal | bool? | true označuje interno opombo, ki ni dostavljena stranki |
replyToMessageId | int? | ID sporočila, na katerega se odgovarja |
appGuid | uuid? | Napotitveni GUID |
media | MediaDTO? | { name, format, dataBase64, thumbnail, duration, type } |
200 OK → { "id": 9930, "messageStatus": 0 }
Napotitveni GUID je lahko posredovan tudi na poti:
POST /api/chat/{chatId}/{referralGuid}/message (prav tako …/message/v1, …/message/v2).
4.4 Pošiljanje datoteke ali videa (večdelno, v2)
POST https://chatapi.smsbat.com/api/chat/1867/message/v2
Authorization: Bearer <token>
Content-Type: multipart/form-data
Imena polj obrazcev so v PascalCase z zapisom s pikami
textMessage in media.file sta tiho prezrta. Uporabite točna imena spodaj.
| Polje obrazca | Vrsta | Opis |
|---|---|---|
TextMessage | string | Besedilo sporočila |
Author | int | 0 operater, 1 odjemalec |
IsInternal | bool | Interna opomba |
ReplyToMessageId | int | Sporočilo, na katerega se odgovarja |
AppGuid | uuid | Napotitveni GUID |
Media.File | binary | Sama datoteka |
Media.Name | string | Ime datoteke |
Media.Format | string | Vrsta MIME (video/mp4, image/png, application/pdf) |
Media.Type | MediaType | Glej §8.5 |
Media.DataBase64 | string | Alternativa Media.File |
Media.Thumbnail | string | Okvir za predogled videa Base64 |
Media.Duration | double | Trajanje videa v sekundah |
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 Spremenite status klepeta
PUT https://chatapi.smsbat.com/api/chat/status
Authorization: Bearer <token>
Content-Type: application/json
{ "id": 1867, "status": 4 }
200 OK odmeva posodobljen predmet.
4.6 Posodobite statuse sporočil
PUT https://chatapi.smsbat.com/api/chat/messages/status
Authorization: Bearer <token>
Content-Type: application/json
{ "status": 3, "messageIds": [9928, 9929] }
4.7 Izbriši klepet
DELETE https://chatapi.smsbat.com/api/chat/chats/1867
Authorization: Bearer <token>
5. Objave, koluti in zgodbe
Osnovna pot: https://chatapi.smsbat.com/api/meta
Avtor: X-Authorization-Key: <organization token>
5.1 Seznam objav, kolutov in zgodb
GET https://chatapi.smsbat.com/api/meta/posts?platform=instagram&mediaType=story&page=1&perPage=20
X-Authorization-Key: <token>
| Parameter | Vrsta | Zahtevano | Opis |
|---|---|---|---|
page | int | ne | Stran, privzeto 1 |
perPage | int | ne | Elementi na stran, privzeto 20 |
id | int | ne | Filtriraj po ID interne objave |
platform | string | ne | instagram ali facebook |
mediaType | string | ne | post, reel ali story. Vse vrste, če so izpuščene |
# 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"
}
}
]
}
Neskladje — ime polja števca
Swaggerjeva shema MetaCommentPostListItemDtoPaginationDTO definira total. The
notranji specifikacijski dokumenti totalCount. Swagger se ustvari iz kode, torej
total je bolj verjetna resnica. Razčlenite total ?? totalCount, dokler to ni urejeno.
| Polje | Opis |
|---|---|
id | ID interne objave |
metaId | Zunanja objava / kolut / ID zgodbe v meta |
text | Napis objave |
imageUrl | URL posredniškega medija z nezaporednim ključem MetaPost.Guid ali null |
platform | facebook ali instagram |
mediaType | post, reel ali story |
createdAt | Datum ustvarjanja (datum platforme ali datum baze podatkov) |
story | Prisotno samo za mediaType: "story" |
story.id | Notranji ID zgodbe; enako post.id |
story.metaId | Zunanji ID zgodbe v meta |
story.url | Stabilen proxy URL shranjenega medija Story; null, če medija ni bilo mogoče shraniti |
Poštni mediji so na voljo po dveh poteh: GET /api/meta/post/media/{id:int} za nazaj
združljivost in GET /api/meta/post/media/{guid:guid}. Novi odgovori API in povratni klici
vedno ustvari obrazec GUID.
5.2 Seznam komentarjev
GET https://chatapi.smsbat.com/api/meta/comments?platform=instagram&postId=42&page=1&perPage=20
X-Authorization-Key: <token>
| Parameter | Vrsta | Zahtevano | Opis |
|---|---|---|---|
page | int | ne | Stran, privzeto 1 |
perPage | int | ne | Elementi na stran, privzeto 20 |
postId | int | ne | Filtriraj po ID objave |
parentCommentId | int | ne | Otroški komentarji (odgovori) danega komentarja |
platform | string | ne | facebook ali 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..."
}
}
]
}
| Polje | Opis |
|---|---|
id | ID notranjega komentarja |
metaId | Zunanji ID v Meta. null za naš čakajoči odgovor, dokler ni poslan |
text | Besedilo komentarja |
createdAt | Datum nastanka |
platform | facebook ali instagram |
replyStatus | null za vhodni komentar uporabnika; "pending" / "sent" / "failure" za naš odgovor |
author.type | "meta_user" zunanji uporabnik, "owner" lastnik strani |
author.name | Ime avtorja |
author.metaUserId | ID uporabnika v meti; null za "owner" |
post | Objava, kolut ali zgodba, kateri pripada komentar |
post.mediaType | post, reel ali story |
post.story | Referenca zgodbe { id, metaId, url }, samo zgodbe |
mediaUrl | Mediji priloženi komentarju ali null |
replyTo | Komentar staršev { id, metaId, text }; null na najvišji ravni |
Neskladje — vrsta `author.type`
Notranja specifikacija dokumentira nize "meta_user" / "owner". Razvajeni tipi
MetaCommentAuthorType kot celo število z enumom [0, 1]. A JsonStringEnumConverter
bi pojasnil vrzel, vendar to ni bilo potrjeno z resničnim odzivom. Napišite a
razčlenjevalnik, ki sprejme oboje.
5.3 Odgovorite na komentar
Odgovor postavi v čakalno vrsto za dostavo.
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"
Telo zahteve: { "text": "Reply text" }
202 Accepted vrne objekt komentarja — enake oblike kot GET /api/meta/comments — z
replyStatus: "pending" in metaId: null. Izid dostave pride kasneje kot a
source: 13 povratni klic (§6.4).
Neskladje — odzivna koda
Swagger izjavlja 200 brez telesa; notranja specifikacija navaja 202 Accepted
s komentarjem kot telesom. Krmilnik verjetno nima ProducesResponseType
atribut, pri čemer Swagger ostane privzet. Sprejmite katerikoli 2xx in ne bodite odvisni od telesa.
6. Webhooks
SMSBAT pošlje POST zahtevkov s application/json na vaš URL in pričakuje HTTP 200 nazaj.
Ničelna polja so v celoti izpuščena
Polje, katerega vrednost je null, sploh ni serializirano v telo povratnega klica. Za a
sporočilo, ki ni prišlo s Facebooka ali Instagrama, ključa MetaUserId preprosto ni.
Obravnavajte “odsoten” in null kot isto stvar.
6.1 Registrirajte URL povratnega klica
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
}'
| Polje | Vrsta | Opis |
|---|---|---|
url | string | Vaša končna točka |
source | SendingSourceCallback | Vrsta dogodka, glejte §8.2 |
headerName / headerValue | string | Poljubna avtorska glava, ki jo priložimo zahtevi (neobvezno) |
channelType | ChatSource | Kanal. 7 za Instagram. Neobvezno |
channelEntityId | int | Poseben poslovni račun. Zahteva channelType |
Brez channelType URL prejema dogodke iz vsakega kanala.
Tip
Popolna pokritost s komentarji zahteva dve registraciji: source: 12 za nove komentarje in
source: 13 za statuse odgovorov. Za odgovore Direct in Story dodajte source: 3
(in 11, če želite vsako sporočilo klepeta).
Preostale operacije:
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 vrne:
[
{
"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 Novo sporočilo in odgovor Instagram Story (source: 3, 11)
Uporabnikov odgovor na Instagram Story prispe kot običajno sporočilo v teh povratnih klicih,
z dodatnim blokom Story najvišje ravni:
{
"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"
}
}
| Polje | Opis |
|---|---|
ChatId / MessageId | Identifikatorji klepetov in sporočil |
Author | 0 uporabnik, 1 operater |
Username | Instagram/Facebook prikazno ime ali ročaj |
UserId | Notranji številčni ID uporabnika v SMSBAT |
MetaUserId | Obsežen ID sogovornika v Meti. Pri odhodnem sporočilu operaterja to še vedno identificira Meta uporabnika klepeta in ne operaterja |
ShopId | Interni ID poslovnega računa Instagram/Facebook |
ShopName | Ime poslovnega računa, kot je bilo prejeto od Mete ob času povezave |
MessageText | Besedilo sporočila |
MessageMedia | URL medija, ko je sporočilo medij |
type_messenger | Vir, 7 za Instagram |
operator_name | Ime operaterja, ko je Author = 1 |
Story | Prisoten samo pri dohodnem odgovoru Story |
Story.Id | ID notranje zgodbe (MetaPost) — uporabno neposredno kot id / postId v Meta API |
Story.MetaId | Zunanji ID zgodbe v meta |
Story.Url | Stabilen proxy URL shranjenega medija Story. Odsoten, ko medija ni bilo mogoče shraniti — blok Story in sporočilo sta še vedno dostavljena |
`Author` je obrnjeno glede na API za klepet
V ChatMessageDTO.author 0 pomeni operater in 1 pomeni odjemalca. V tem povratnem klicu je
obratno: 0 je uporabnik, 1 je operater. Ne delite preslikave.
6.3 Nov komentar (source: 12)
Sproži se, ko uporabnik Meta komentira objavo na Facebooku ali Instagram objavo / Reel.
Note
Instagram Odgovori na zgodbe niso dostavljeni prek source: 12. Prispejo kot navadni
dohodna sporočila na source: 3 in/ali 11 z blokom Story — glejte §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 Stanje odgovora na komentar (source: 13)
Sproži, ko poskušamo dostaviti odgovor, ne glede na to, ali uspe ali ne.
{
"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 Polja za povratni klic v skupni rabi komentarjev
Oba povratna klica komentarjev imata eno obliko telesa in se razlikujeta le za type.
| Polje | Opis |
|---|---|
type | "new_comment" ali "comment_status" |
platform | "facebook" ali "instagram" |
comment.id | ID notranjega komentarja |
comment.metaId | Zunanji ID v Meta; null za čakajoči odgovor, preden je poslan |
comment.parentCommentId | ID nadrejenega komentarja. Odsoten za komentar na najvišji ravni |
comment.parentMetaId | ID zunanjega nadrejenega komentarja. Odsoten na najvišji ravni |
comment.parentCommentText | Besedilo komentarja staršev. Odsoten na najvišji ravni |
comment.text | Besedilo komentarja |
comment.createdAt | Datum nastanka |
comment.updatedAt | Zadnja posodobitev. Odsoten, če komentar ni bil nikoli urejen |
comment.replyStatus | "pending" / "sent" / "failure". Odsoten za komentar vhodnega uporabnika |
comment.author.type | "meta_user" ali "owner" |
comment.author.name | Ime avtorja |
comment.author.metaUserId | ID avtorja v meti. Odsoten za "owner" |
comment.mediaUrl | Komentirajte medije. Odsoten, ko ga ni |
post.id | ID interne objave |
post.metaId | Zunanja objava / kolut / ID zgodbe v meta |
post.text | Objavi besedilo |
post.imageUrl | Objavite URL slike ali null |
post.createdAt | Datum ustvarjanja objave |
post.mediaType | Pri povratnih klicih komentarjev samo post ali reel |
6.6 Nov klepet (source: 7)
{ "ChatId": 12345, "Phone": "+380501234567", "chat.Source": 7 }
6.7 Spremembe stanja sporočil in klepeta (source: 6 / 5)
{ "name": "changed_message_status", "id": 9928, "status": 6 }
{ "name": "changed_chat_status", "id": 1867, "status": 4 }
6.8 Sporočilo urejeno ali izbrisano (source: 9)
{ "messageId": 9930, "text": "Updated message text" }
{ "messageId": 9931, "delete": true }
6.9 Indikator tipkanja (source: 8)
{ "chat_id": 1867, "event": "start_typing", "operator_name": "Iryna" }
{ "chat_id": 1867, "event": "end_typing" }
7. Anketiranje dogodkov
Za okolja, ki ne morejo sprejeti vhodnega HTTP-ja.
7.1 Pridobivanje dogodkov
GET https://chatapi.smsbat.com/api/chat/callback-events?page=1&perPage=20
Authorization: Bearer <token>
| Parameter | Opis |
|---|---|
organizationId | Neobvezno. Vzeto iz žetona, če je izpuščeno |
page / perPage | Paginacija, privzeto 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"
}
]
}
Vsak dogodek nosi event_guid, timestamp, organization_id in callback_type — a
niz, ki se ujema z vrednostmi source v §8.2. Preostala polja se ujemajo z ustreznimi
webhook v §6.
7.2 Potrditev obdelanih dogodkov
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 }
Že odstranjeni dogodki preprosto ne štejejo k deleted. Naročanje in ponovni poskusi so vaši
odgovornost strani.
7.3 Priporočena zanka
- Anketa
GET /api/chat/callback-eventspo urniku. - Obdelajte dogodke v vaši storitvi.
- Pošljite obdelan seznam
event_guidna/callback-events/processed. - Ponovite.
8. Enum referenca
8.1 ChatSource — kanal (0–9)
| Koda | Kanal |
|---|---|
| 0 | Viber |
| 1 | ViberBot |
| 2 | TelegramBot |
| 3 | |
| 4 | Pripomoček |
| 5 | Rozetka |
| 6 | |
| 7 | |
| 8 | Maturantski ples |
| 9 | Olx |
8.2 SendingSourceCallback — vrsta dogodka povratnega klica (0–13)
| Koda | Dogodek |
|---|---|
| 3 | Chat — novo sporočilo klepeta, vključno z odgovori Story |
| 5 | Stanje klepeta spremenjeno |
| 6 | Stanje sporočila spremenjeno |
| 7 | Nov klepet ustvarjen |
| 8 | Indikator tipkanja |
| 9 | Sporočilo posodobljeno ali izbrisano |
| 11 | AnyChatMessage — poljubno sporočilo klepeta |
| 12 | MetaNewComment — nov komentar na Instagramu / Facebooku |
| 13 | MetaCommentStatus — stanje dostave našega odgovora na komentar |
Enum obsega 0–13; preostale vrednosti niso potrebne za integracije Instagrama.
8,3 ChatStatus (0–4)
0 Novo, 1 Odprto, 2 Čakanje, 3 Vklopljeno, 4 Zaprto
8,4 MessageStatus (0–11)
| Koda | Ime |
|---|---|
| 0 | NOVO |
| 1 | USPEH |
| 2 | ZAVRNJENO |
| 3 | PREBERITE |
| 4 | NEZNANO |
| 5 | PREDELAVA |
| 6 | DOSTAVLJENO |
| 7 | BLOCKED_BY_USER |
| 8 | USER_NOT_FOUND |
Enum obsega 0–11. Vrednosti 9, 10 in 11 obstajajo v API-ju, vendar še niso dokumentirane —
obravnavajte jih kot UNKNOWN.
8,5 MediaType (1–10)
1 Fotografija, 2 Datoteka, 3 Avdio, 4 Video, 5 Nalepka, 6 Animirana nalepka,
7 StickerVideo, 8 Animacija, 9 Glas, 10 VideoNote
8.6 AuthorMessage — avtor v API-ju za klepet (0–4)
0 Operater, 1 Client, 2 Bot, 3 ViberAccount
Enum obsega 0–4; vrednost 4 ni dokumentirana. Povratni klic »novo sporočilo« uporablja
nasprotno preslikavo — glej §6.2.
8,7 ChatMessageType (0–2)
0 besedilo, 1 fotografija, 2 datoteka
8.8 Komentar replyStatus
null vhodni komentar uporabnika, "pending" naš odgovor je v čakalni vrsti, "sent" dostavljen,
"failure" dostava ni uspela.
Odprta vprašanja
Tri točke, kjer se notranja specifikacija in s kodo ustvarjena Swagger ne strinjata. ena zahteva s pravim žetonom poravna vse; do takrat pa pišite stranki obrambno.
| # | Vprašanje | Specifikacija | Bahanje | Kako preveriti |
|---|---|---|---|---|
| 1 | Glava overitve za /api/meta/* | X-Authorization-Key | prijavljenih samo Bearer | curl -i -H "X-Authorization-Key: <token>" ".../api/meta/posts?perPage=1" — pričakujte 200, ne 401 |
| 2 | Polje števca v meta odgovorih | totalCount | total | Ista zahteva — preberite korenski ključ JSON |
| 3 | author.type vrsta in reply statusna koda | "meta_user" / "owner", 202 z ohišjem | int [0,1], 200 brez telesa | curl -i .../api/meta/comments?perPage=1 plus preizkusni odgovor |
Začasna navodila:
- števec — preberite
total ?? totalCount; author.type— sprejme tako niz kot celo število (0↔meta_user,1↔owner, preslikavo je treba potrditi);reply— vsak2xxobravnavajte kot uspeh, ne zahtevajte telesa, prevzamete končni status iz povratnega klicasource: 13.
Opombe o izvajanju
- Auth se razlikuje glede na skupino končnih točk —
/api/meta/*uporabljaX-Authorization-Key, klepete in operaterji uporabljajoBearer,restapisprejema bodisi. - Paginacija se črkuje na dva načina —
per_pagena/api/chat/chats,perPagena/api/meta/*in/api/chat/callback-events. - Polja
multipart/form-dataso v PascalCase z zapisom s pikami (Media.File,Media.Type). - Ničelna polja so izpuščena iz povratnih klicev — odsoten ključ pomeni
null. phoneje običajnonullna Instagramu. Prepoznajte stranko poinstagramUser.id/metaUserIdin nakupujte priinstaAccount.id(vrednost filtraentityId).Story.Idiz povratnega klica je mogoče neposredno posredovati nazaj kotid/postIdv Meta API.- Preverite
expiresAtoperaterja JWT, preden ga uporabite v globoki povezavi ali pripomočku.