Meta és Instagram API integráció
Referencia egy Instagram-alkalmazás létrehozásához az SMSBAT ChatHub platformon: hitelesítés, Instagram Közvetlen beszélgetések, hozzászólások bejegyzésekhez és tekercsekhez, történetekre adott válaszok, webhookok és szavazások.
Források
Ez az oldal egyesíti a belső Meta Comments API specifikációt az élő OpenAPI-val
meghatározások: https://chatapi.smsbat.com/swagger/v1/swagger.json és
https://restapi.smsbat.com/swagger/v1/swagger.json. Ahol a kettő nem ért egyet, a
A különbség soron belül ki van hívva, és a Nyitott kérdések alatt található.
1. Alap URL-ek
| Cél | URL |
|---|---|
| Chat API + Meta API | https://chatapi.smsbat.com |
| Swagger UI / OpenAPI | https://chatapi.smsbat.com/index.html · …/swagger/v1/swagger.json |
| REST API (szervezetek, visszahívási URL-ek) | https://restapi.smsbat.com |
| REST API Swagger | https://restapi.smsbat.com/swagger/v1/swagger.json |
| Kezelői web panel | https://chat.smsbat.com |
2. Hitelesítés
A hitelesítési séma a végpontcsoporttól függ. Ezek összekeverése a 401 leggyakoribb oka.
| Csoport | Fejléc |
|---|---|
chatapi.smsbat.com/api/meta/* (bejegyzések, megjegyzések) | 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 · Alapszintű hitelesítés |
Az X-Authorization-Key szervezeti tokent a Profil alatti panelen adják ki.
A vállalat és az üzemeltető JWT-k /api/company/get-token és /api/operator/get-token országból származnak.
Eltérés
A chatapi OpenAPI dokumentum egyetlen biztonsági sémát deklarál – Bearer – és alkalmazza azt
globálisan. A X-Authorization-Key ott egyáltalán nincs deklarálva, bár a belső Meta
A megjegyzések API specifikációja a /api/meta/*-re nevezi el. Nagy valószínűséggel kezeli
köztes szoftver, amely nem tükröződik a Swaggerben. Erősítse meg tapasztalati úton, mielőtt elküldi.
2.1 Vállalati token
POST https://chatapi.smsbat.com/api/company/get-token
Content-Type: application/json
{ "login": "company_login", "password": "company_password" }
A 200 OK csupasz token karakterláncot ad vissza.
2.2 Szervezetek
GET https://chatapi.smsbat.com/api/company/organization
Authorization: Bearer <company_token>
[ { "id": 24, "name": "My Instagram Store" } ]
2.3 Operátorok egy szervezetben
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" }
}
]
Kezelői állapotok: 0 Aktív, 1 Inaktív, 2 Törölve.
2.4 Operátorok hozzáadása/szinkronizálása
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 Kezelői 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" }
A 200 OK a JWT-t karakterláncként adja vissza.
2.6 Operátori token érvényesítése
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
}
Ha érvénytelen: { "isValid": false, "error": "Invalid token" }.
2.7 A kezelői csevegőpanel beágyazása
<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. Mélyhivatkozások a csevegőpanelre
Egy külső rendszer (CRM, ERP, webhely) képes megnyitni egy adott beszélgetést
https://chat.smsbat.com/. Az operátort egy lekérdezési paraméterként átadott JWT engedélyezi.
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>
| Paraméter | Leírás |
|---|---|
chat_raw_id | Chat ID |
phone | Telefonszám nemzetközi formátumban |
from | Márka/üzleti fiók azonosítója (bm_id) |
source | Csevegés forrása – 7 az Instagramhoz, lásd a 8.1. szakaszt |
token | Érvényes, le nem járt JWT operátor, hozzáféréssel a chatekhez |
Érvénytelen JWT esetén a látogató a kezelőpanel bejelentkezési képernyőjére kerül.
4. Instagram Közvetlen beszélgetések
4.1 Csevegések listázása
GET https://chatapi.smsbat.com/api/chat/chats?source=7&page=1&per_page=20
Authorization: Bearer <token>
Note
Az oldalszámozás itt per_page (snake_case). A /api/meta/* és a szavazás alatt
végpont ez perPage (camelCase). Ez nem elírás – az API mindkettőt használja.
Lekérdezési paraméterek, mindegyik nem kötelező:
| Paraméter | Típus | Leírás |
|---|---|---|
source | ChatSource | 7 az eredményeket az Instagramra korlátozza |
entityId | int | Üzleti fiók azonosítója. Csak a source |
instagram_user_id | int | Instagram felhasználói azonosító a ChatHubban |
facebook_user_id | int | Facebook felhasználói azonosító a ChatHubban |
page / per_page | int | Lapozás, alapértelmezett 1 / 20 |
status | ChatStatus[] | Chat állapot, megismételhető |
search | string | Szabadszöveges keresés (név, telefon, …) |
organizationId | int | Szervezeti azonosító |
operatorId | int[] | Szűrés hozzárendelt operátorok szerint |
date | string[] | Két korlát: ?date=…&date=… |
isChain | bool | A csevegések visszaküldése láncként, a korábbi csevegésekből származó üzenetek átvitelével |
isUnread, starMark, isOperator, isAIAgent | bool | További szűrők |
phone, email, contactId, clientId, tagIds, rate, sortedBy | — | Egyéb szűrők |
200 OK visszaadja 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": []
}
]
}
Az Instagram-alkalmazások számára fontos mezők:
| Mező | Jelentése |
|---|---|
instaAccount | Az Instagram üzleti fiók (az üzlet). id a entityId szűrőérték; name a Meta |
instagramUser | A ügyfél. name az Instagram fogója, id a instagram_user_id szűrő értéke |
metaUserId | Az ügyfél hatókörű azonosítója a Meta oldalán (karakterlánc) |
messSource | 7 az Instagram számára |
phone | Általában null Instagram esetén – ne használja kulcsként |
A ChatDTO a következőt is hordozza: 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 és taggedMessages.
4.2 Csevegőüzenetek
GET https://chatapi.smsbat.com/api/chat/chats/1867/messages?isChain=false
Authorization: Bearer <token>
A 200 OK egy ChatMessageDTO tömböt ad vissza:
[
{
"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
}
]
A postId akkor van kitöltve, ha az üzenet egy Instagram-bejegyzéshez vagy történethez kapcsolódik – adja át
egyenesen vissza mint id / postId a Meta API-hoz. media egy ChatMediaDTO:
{ name, format, type, uri, raw, length, isUploaded }.
4.3 Üzenet küldése (JSON)
POST https://chatapi.smsbat.com/api/chat/1867/message
Authorization: Bearer <token>
Content-Type: application/json
Törzs — 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
}
}
| Mező | Típus | Leírás |
|---|---|---|
textMessage | string? | Üzenet szövege. Üres lehet, ha a media jelen van |
author | AuthorMessage? | 0 operátor, 1 kliens |
isInternal | bool? | true olyan belső megjegyzést jelöl, amelyet nem kézbesítenek az ügyfélnek |
replyToMessageId | int? | A megválaszolt üzenet azonosítója |
appGuid | uuid? | Hivatkozási GUID |
media | MediaDTO? | { name, format, dataBase64, thumbnail, duration, type } |
200 OK → { "id": 9930, "messageStatus": 0 }
Egy hivatkozási GUID is átadható az útvonalon:
POST /api/chat/{chatId}/{referralGuid}/message (hasonlóan …/message/v1, …/message/v2).
4.4 Fájl vagy videó küldése (többrészes, v2)
POST https://chatapi.smsbat.com/api/chat/1867/message/v2
Authorization: Bearer <token>
Content-Type: multipart/form-data
Az űrlapmezők neve PascalCase, pontjelöléssel
A textMessage és a media.file csendben figyelmen kívül marad. Használja az alábbi pontos neveket.
| Űrlap mező | Típus | Leírás |
|---|---|---|
TextMessage | string | Üzenet szövege |
Author | int | 0 operátor, 1 kliens |
IsInternal | bool | Belső megjegyzés |
ReplyToMessageId | int | Üzenetre válaszolnak |
AppGuid | uuid | Hivatkozási GUID |
Media.File | binary | Maga a fájl |
Media.Name | string | Fájlnév |
Media.Format | string | MIME-típus (video/mp4, image/png, application/pdf) |
Media.Type | MediaType | Lásd: 8.5 |
Media.DataBase64 | string | A Media.File |
Media.Thumbnail | string | Base64 videó előnézeti keret |
Media.Duration | double | Videó időtartama másodpercben |
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 A chat állapotának módosítása
PUT https://chatapi.smsbat.com/api/chat/status
Authorization: Bearer <token>
Content-Type: application/json
{ "id": 1867, "status": 4 }
A 200 OK a frissített objektumot visszhangozza.
4.6 Üzenetek állapotának frissítése
PUT https://chatapi.smsbat.com/api/chat/messages/status
Authorization: Bearer <token>
Content-Type: application/json
{ "status": 3, "messageIds": [9928, 9929] }
4.7 Csevegés törlése
DELETE https://chatapi.smsbat.com/api/chat/chats/1867
Authorization: Bearer <token>
5. Bejegyzések, tekercsek és történetek
Alapútvonal: https://chatapi.smsbat.com/api/meta
Auth: X-Authorization-Key: <organization token>
5.1 Posztok, tekercsek és történetek listázása
GET https://chatapi.smsbat.com/api/meta/posts?platform=instagram&mediaType=story&page=1&perPage=20
X-Authorization-Key: <token>
| Paraméter | Típus | Kötelező | Leírás |
|---|---|---|---|
page | int | nem | Oldal, alapértelmezett 1 |
perPage | int | nem | Elemek oldalanként, alapértelmezett 20 |
id | int | nem | Szűrés belső bejegyzésazonosító szerint |
platform | string | nem | instagram vagy facebook |
mediaType | string | nem | post, reel vagy story. Minden típus kihagyva |
# 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"
}
}
]
}
Eltérés – számlálómező neve
A Swagger séma MetaCommentPostListItemDtoPaginationDTO a total értéket határozza meg. A
belső specifikációs dokumentumok totalCount. A Swagger a kódból jön létre, tehát
total a valószínűbb igazság. Elemezze a total ?? totalCount értéket, amíg ez meg nem oldódik.
| Mező | Leírás |
|---|---|
id | Belső bejegyzésazonosító |
metaId | Külső bejegyzés / tekercs / történetazonosító a Meta |
text | Hozzászólás felirata |
imageUrl | A proxy média URL-je nem szekvenciális MetaPost.Guid vagy null |
platform | facebook vagy instagram |
mediaType | post, reel vagy story |
createdAt | Létrehozás dátuma (platform dátuma vagy adatbázis dátuma) |
story | Ajándék csak mediaType: "story" |
story.id | Belső történetazonosító; egyenlő post.id |
story.metaId | Külső történetazonosító a Meta |
story.url | A tárolt Story-média stabil proxy URL-je; null ha az adathordozót nem sikerült elmenteni |
A postai médiát két útvonal szolgálja ki: GET /api/meta/post/media/{id:int} visszafelé
kompatibilitás és GET /api/meta/post/media/{guid:guid}. Új API-válaszok és visszahívások
mindig generálja a GUID űrlapot.
5.2 Megjegyzések listázása
GET https://chatapi.smsbat.com/api/meta/comments?platform=instagram&postId=42&page=1&perPage=20
X-Authorization-Key: <token>
| Paraméter | Típus | Kötelező | Leírás |
|---|---|---|---|
page | int | nem | Oldal, alapértelmezett 1 |
perPage | int | nem | Elemek oldalanként, alapértelmezett 20 |
postId | int | nem | Szűrés postaazonosító szerint |
parentCommentId | int | nem | Egy adott megjegyzés gyermek megjegyzései (válaszai) |
platform | string | nem | facebook vagy 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..."
}
}
]
}
| Mező | Leírás |
|---|---|
id | Belső megjegyzésazonosító |
metaId | Külső azonosító a Metában. null egy függőben lévő válaszunkért, amíg el nem küldik |
text | Megjegyzés szövege |
createdAt | Létrehozás dátuma |
platform | facebook vagy instagram |
replyStatus | null bejövő felhasználói megjegyzés esetén; "pending" / "sent" / "failure" válaszunkért |
author.type | "meta_user" külső felhasználó, "owner" oldaltulajdonos |
author.name | Szerző neve |
author.metaUserId | Hatáskörű felhasználói azonosító a Meta-ban; null for "owner" |
post | A bejegyzés, tekercs vagy történet, amelyhez a megjegyzés tartozik |
post.mediaType | post, reel vagy story |
post.story | Történeti hivatkozás { id, metaId, url }, csak történetek |
mediaUrl | A megjegyzéshez csatolt média, vagy null |
replyTo | Szülői megjegyzés { id, metaId, text }; null a legfelső szinten |
Eltérés – `author.type` típusa
A belső specifikáció dokumentálja a "meta_user" / "owner" karakterláncokat. Swagger típusok
MetaCommentAuthorType egész számként [0, 1] sorszámmal. A JsonStringEnumConverter
megmagyarázná a hiányt, de ezt nem erősítették meg valós válaszhoz képest. Írj a
elemző, amely mindkettőt elfogadja.
5.3. Válasz egy megjegyzésre
Sorba állítja a választ a kézbesítéshez.
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"
Kérelem törzse: { "text": "Reply text" }
A 202 Accepted visszaadja a megjegyzés objektumot – ugyanolyan alakú, mint a GET /api/meta/comments – a következővel
replyStatus: "pending" és metaId: null. A szállítási eredmény később érkezik, mint a
source: 13 visszahívás (§6.4).
Eltérés – válaszkód
Swagger kijelenti, hogy 200 test nélkül; a belső specifikáció kijelenti, hogy 202 Accepted
a megjegyzéssel, mint a testtel. A vezérlőből valószínűleg hiányzik a ProducesResponseType
attribútum, így a Swagger az alapértelmezett értéken marad. Fogadjon el bármilyen 2xx-t, és ne függjön testtől.
6. Webhooks
Az SMSBAT POST kérést küld a application/json kóddal az Ön URL-címére, és a HTTP 200 visszajelzést várja.
A nulla mezők teljesen kimaradnak
Az a mező, amelynek értéke null, egyáltalán nem szerepel a visszahívás törzsében. A
olyan üzenet, amely nem a Facebookról vagy az Instagramról érkezett, egyszerűen nincs MetaUserId kulcs.
Kezelje a „hiányzó” és a null szavakat azonos dologként.
6.1 Regisztráljon egy visszahívási URL-t
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
}'
| Mező | Típus | Leírás |
|---|---|---|
url | string | Az Ön végpontja |
source | SendingSourceCallback | Esemény típusa, lásd a 8.2. szakaszt |
headerName / headerValue | string | Önkényes hitelesítési fejléc, amelyet a kérelemhez csatolunk (opcionális) |
channelType | ChatSource | Csatorna. 7 az Instagram számára. Választható |
channelEntityId | int | Egy adott üzleti fiók. channelType |
channelType nélkül az URL minden csatornáról fogad eseményeket.
Tip
A teljes kommentárhoz két regisztráció szükséges: source: 12 az új megjegyzésekhez és
source: 13 a válaszállapotokhoz. Közvetlen és Story válaszokhoz add hozzá a source: 3 számot
(és 11, ha minden csevegőüzenetet szeretne).
A hátralévő műveletek:
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 visszatér:
[
{
"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 Új üzenet és válasz az Instagram Story-hoz (source: 3, 11)
A felhasználó válasza egy Instagram-sztorira közönséges üzenetként érkezik ezekben a visszahívásokban,
egy extra legfelső szintű Story blokkal:
{
"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"
}
}
| Mező | Leírás |
|---|---|
ChatId / MessageId | Csevegés és üzenetazonosítók |
Author | 0 felhasználó, 1 operátor |
Username | Instagram / Facebook megjelenített név vagy fogantyú |
UserId | Belső numerikus felhasználói azonosító az SMSBAT-ban |
MetaUserId | A beszélgetőpartner kiterjedt azonosítója a Metában. Egy kimenő operátori üzenet esetén ez továbbra is a csevegés Meta felhasználóját azonosítja, nem az operátort |
ShopId | Az Instagram/Facebook üzleti fiók belső azonosítója |
ShopName | Vállalkozási számlanév, amelyet a Metától kaptunk a csatlakozás időpontjában |
MessageText | Üzenet szövege |
MessageMedia | Média URL, ha az üzenet média |
type_messenger | Forrás, 7 az Instagram számára |
operator_name | Operátor neve, ha Author = 1 |
Story | Jelentés csak egy bejövő Story-válasznál |
Story.Id | Belső történet (MetaPost) azonosítója – közvetlenül id / postId néven használható a Meta API-ban |
Story.MetaId | Külső történetazonosító a Meta |
Story.Url | A tárolt Story-média stabil proxy URL-je. Hiányzik, ha az adathordozót nem lehetett menteni — a Story blokk és az üzenet továbbra is kézbesítve |
A `Author` fordított a Chat API-hoz képest
A ChatMessageDTO.author-ben a 0 operátort, a 1 pedig ügyfelet jelent. Ebben a visszahívásban az
fordítva: 0 a felhasználó, 1 az operátor. Ne ossza meg a térképet.
6.3 Új megjegyzés (source: 12)
Akkor aktiválódik, amikor egy Meta-felhasználó megjegyzést fűz egy Facebook- vagy Instagram-bejegyzéshez/Tekercshez.
Note
Instagram A történetekre adott válaszokat nem a source: 12 számon kézbesítjük. A szokásos módon érkeznek
bejövő üzenetek a source: 3 és/vagy a 11 számon Story blokkal – lásd a 6.2. szakaszt.
{
"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 Megjegyzés válasz állapota (source: 13)
Akkor aktiválódik, amikor megpróbálunk választ adni, akár sikerrel, akár kudarccal.
{
"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 Megosztott megjegyzés-visszahívási mezők
Mindkét megjegyzés-visszahívás egy testalkatú, és csak type-kal különbözik.
| Mező | Leírás |
|---|---|
type | "new_comment" vagy "comment_status" |
platform | "facebook" vagy "instagram" |
comment.id | Belső megjegyzésazonosító |
comment.metaId | Külső azonosító a Metában; null egy függőben lévő válaszhoz, mielőtt elküldené |
comment.parentCommentId | Szülői megjegyzés azonosítója. Hiányzik a legfelső szintű megjegyzéshez |
comment.parentMetaId | Külső szülő megjegyzés azonosítója. Hiányzik a legfelső szinten |
comment.parentCommentText | Szülői megjegyzés szövege. Hiányzik a legfelső szinten |
comment.text | Megjegyzés szövege |
comment.createdAt | Létrehozás dátuma |
comment.updatedAt | Utolsó frissítés. Hiányzik, ha a megjegyzést soha nem szerkesztették |
comment.replyStatus | "pending" / "sent" / "failure". Hiányzik egy bejövő felhasználói megjegyzéshez |
comment.author.type | "meta_user" vagy "owner" |
comment.author.name | Szerző neve |
comment.author.metaUserId | Hatáskörrel rendelkező szerzői azonosító a Metában. "owner" |
comment.mediaUrl | Megjegyzés média. Hiányzik, ha nincs |
post.id | Belső bejegyzésazonosító |
post.metaId | Külső bejegyzés / tekercs / történetazonosító a Meta |
post.text | Hozzászólás szövege |
post.imageUrl | Tegye közzé a kép URL-jét, vagy null |
post.createdAt | A bejegyzés létrehozásának dátuma |
post.mediaType | A megjegyzés-visszahívásoknál csak post vagy reel |
6.6 Új csevegés (source: 7)
{ "ChatId": 12345, "Phone": "+380501234567", "chat.Source": 7 }
6.7 Az üzenetek és a csevegés állapotának változásai (source: 6 / 5)
{ "name": "changed_message_status", "id": 9928, "status": 6 }
{ "name": "changed_chat_status", "id": 1867, "status": 4 }
6.8 Üzenet szerkesztve vagy törölve (source: 9)
{ "messageId": 9930, "text": "Updated message text" }
{ "messageId": 9931, "delete": true }
6.9 Gépelésjelző (source: 8)
{ "chat_id": 1867, "event": "start_typing", "operator_name": "Iryna" }
{ "chat_id": 1867, "event": "end_typing" }
7. Eseményszavazás
Olyan környezetekhez, amelyek nem fogadják el a bejövő HTTP-t.
7.1 Események lekérése
GET https://chatapi.smsbat.com/api/chat/callback-events?page=1&perPage=20
Authorization: Bearer <token>
| Paraméter | Leírás |
|---|---|
organizationId | Választható. A tokenből kihagyva |
page / perPage | Lapozás, alapértelmezett 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"
}
]
}
Minden esemény tartalmaz event_guid, timestamp, organization_id és callback_type – egy
karakterlánc, amely megegyezik a 8.2. §-ban található source értékekkel. A fennmaradó mezők megegyeznek a megfelelő mezőkkel
webhook a 6. §-ban.
7.2 A feldolgozott események nyugtázása
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 }
A már eltávolított események egyszerűen nem számítanak bele a deleted-be. A rendelés és az újrapróbálkozás a tiéd
oldal felelőssége.
7.3 Ajánlott ciklus
- Szavazás
GET /api/chat/callback-eventsütemezett. - A szolgáltatásban lévő események feldolgozása.
- Küldje el a feldolgozott
event_guidlistát a/callback-events/processedszámra. - Ismételje meg.
8. Enum hivatkozás
8.1 ChatSource – csatorna (0–9)
| Kód | Csatorna |
|---|---|
| 0 | Viber |
| 1 | ViberBot |
| 2 | TelegramBot |
| 3 | |
| 4 | Widget |
| 5 | Rozetka |
| 6 | |
| 7 | |
| 8 | Bál |
| 9 | Olx |
8.2 SendingSourceCallback — visszahívási esemény típusa (0–13)
| Kód | Esemény |
|---|---|
| 3 | Chat — új csevegőüzenet, beleértve a történet válaszait |
| 5 | A csevegés állapota megváltozott |
| 6 | Az üzenet állapota megváltozott |
| 7 | Új csevegés létrehozva |
| 8 | Gépelésjelző |
| 9 | Üzenet frissítve vagy törölve |
| 11 | AnyChatMessage — bármilyen csevegőüzenet |
| 12 | MetaNewComment — új Instagram-/Facebook-megjegyzés |
| 13 | MetaCommentStatus — megjegyzésre adott válaszunk kézbesítési állapota |
Az enum 0–13; a fennmaradó értékekre nincs szükség az Instagram-integrációkhoz.
8.3 ChatStatus (0–4)
0 Új, 1 Nyitott, 2 Várakozás, 3 OnPause, 4 Zárva
8.4 MessageStatus (0–11)
| Kód | Név |
|---|---|
| 0 | ÚJ |
| 1 | SIKER |
| 2 | ELUTASÍTVA |
| 3 | OLVASSA |
| 4 | ISMERETLEN |
| 5 | FELDOLGOZÁS |
| 6 | SZÁLLÍTVA |
| 7 | BLOCKED_BY_USER |
| 8 | USER_NOT_FOUND |
Az enum 0–11-ig terjed. A 9, 10 és 11 értékek léteznek az API-ban, de még nincsenek dokumentálva —
kezelje őket UNKNOWN-ként.
8.5 MediaType (1–10)
1 fénykép, 2 fájl, 3 hang, 4 videó, 5 matrica, 6 animált matrica,
7 StickerVideo, 8 Animáció, 9 Hang, 10 VideoNote
8.6 AuthorMessage – szerző a Chat API-ban (0–4)
0 Operátor, 1 Kliens, 2 Bot, 3 ViberAccount
Az enum 0–4; az 4 érték nem dokumentált. Az “új üzenet” visszahívások a
ellentétes leképezés – lásd a 6.2.
8.7 ChatMessageType (0–2)
0 szöveg, 1 fénykép, 2 fájl
8.8 Megjegyzés replyStatus
null bejövő felhasználói megjegyzés, "pending" válaszunk sorban áll, "sent" kézbesítve,
"failure" kézbesítés sikertelen.
Nyitott kérdések
Három pont, ahol a belső specifikáció és a kód által generált Swagger nem egyezik. Egy valódi tokennel való kérés mindegyiket rendezi; addig védekezően írj az ügyfélnek.
| # | kérdés | Specifikáció | Swagger | Hogyan ellenőrizhető |
|---|---|---|---|---|
| 1 | Auth header for /api/meta/* | X-Authorization-Key | csak Bearer deklarált | curl -i -H "X-Authorization-Key: <token>" ".../api/meta/posts?perPage=1" — 200 vár, nem 401 |
| 2 | Számláló mező a Meta válaszokban | totalCount | total | Ugyanez a kérés – olvassa el a gyökér JSON-kulcsot |
| 3 | author.type típus és reply állapotkód | "meta_user" / "owner", 202 testtel | int [0,1], 200 test nélkül | curl -i .../api/meta/comments?perPage=1 plusz egy tesztválasz |
Átmeneti útmutatás:
- számláló — olvassa el az
total ?? totalCount-t; author.type— karakterlánc és egész szám elfogadása (0↔meta_user,1↔owner, a leképezés megerősítésre vár);reply— minden2xx-t sikeresként kezel, nincs szükség testre, a végső állapot azsource: 13visszahívásból származik.
Megvalósítási megjegyzések
- A hitelesítés végpontcsoportonként eltérő —
/api/meta/*azX-Authorization-Keykódot, csevegéseket és operátorokBearer-t használnak, azrestapibármelyiket elfogadja. - Az oldalszámozás kétféleképpen íródik —
per_pageon/api/chat/chats,perPageon/api/meta/*és/api/chat/callback-events. - A
multipart/form-datamezők PascalCase, pontjelöléssel (Media.File,Media.Type). - A nulla mezők kimaradnak a visszahívásokból – a hiányzó kulcs
nullértéket jelent. - Az
phoneaz Instagramon általábannull. Azonosítsa az ügyfelet azinstagramUser.id/metaUserId, a bolt pediginstaAccount.id(azentityIdszűrőérték). - A visszahívásból származó
Story.Idegyenesenid/postIdnéven továbbítható a Meta API-nak. - Ellenőrizze az operátor JWT
expiresAtszámát, mielőtt mélyhivatkozásban vagy widgetben használná.