Мета & Инстаграм АПИ интеграција
Референца за прављење Инстаграм апликације на СМСБАТ ЦхатХуб платформи: аутентификација, Инстаграм Директни разговори, коментари на објаве и колутове, одговори на приче, веб-хукови и анкете.
Извори
Ова страница спаја интерну Мета Цомментс АПИ спецификацију са активним ОпенАПИ-јем
дефиниције на https://chatapi.smsbat.com/swagger/v1/swagger.json и
https://restapi.smsbat.com/swagger/v1/swagger.json. Тамо где се њих двоје не слажу,
разлика се позива на линију и наводи под Отворена питања.
1. Основни УРЛ-ови
| Сврха | УРЛ |
|---|---|
| Цхат АПИ + Мета АПИ | https://chatapi.smsbat.com |
| Сваггер УИ / ОпенАПИ | https://chatapi.smsbat.com/index.html · …/swagger/v1/swagger.json |
| РЕСТ АПИ (организације, УРЛ адресе за повратни позив) | https://restapi.smsbat.com |
| РЕСТ АПИ Сваггер | https://restapi.smsbat.com/swagger/v1/swagger.json |
| Веб панел оператера | https://chat.smsbat.com |
2. Аутентификација
Шема аутентификације зависи од групе крајњих тачака. Њихово мешање је најчешћи узрок 401.
| Група | Хеадер |
|---|---|
chatapi.smsbat.com/api/meta/* (објаве, коментари) | 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 · Басиц Аутх |
Токен организације за X-Authorization-Key се издаје у табли под Профил.
ЈВТ компаније и оператера долазе из /api/company/get-token и /api/operator/get-token.
Неподударност
chatapi ОпенАПИ документ декларише једну безбедносну шему — Bearer — и примењује је
глобално. X-Authorization-Key тамо уопште није декларисан, иако интерни Мета
Коментари АПИ спецификација га именује за /api/meta/*. Највероватније се њиме баве
средњи софтвер који се не одражава у Сваггер-у. Потврдите емпиријски пре него што пошаљете.
2.1 Токен компаније
POST https://chatapi.smsbat.com/api/company/get-token
Content-Type: application/json
{ "login": "company_login", "password": "company_password" }
200 OK враћа голи низ токена.
2.2 Организације
GET https://chatapi.smsbat.com/api/company/organization
Authorization: Bearer <company_token>
[ { "id": 24, "name": "My Instagram Store" } ]
2.3 Оператери у организацији
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" }
}
]
Статуси оператера: 0 Активан, 1 Неактиван, 2 Избрисан.
2.4 Додавање/синхронизација оператора
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 Оператор ЈВТ
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 враћа ЈВТ као стринг.
2.6 Потврдите токен оператора
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
}
Када је неважећи: { "isValid": false, "error": "Invalid token" }.
2.7 Уградите панел за ћаскање оператера
<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. Дубоке везе у панел за ћаскање
Екстерни систем (ЦРМ, ЕРП, веб локација) може да отвори одређени разговор
https://chat.smsbat.com/. Оператор је овлашћен од стране ЈВТ-а који је прослеђен као параметар упита.
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>
| Параметар | Опис |
|---|---|
chat_raw_id | ИД ћаскања |
phone | Број телефона у међународном формату |
from | Идентификатор бренда / пословног налога (bm_id) |
source | Извор ћаскања — 7 за Инстаграм, погледајте §8.1 |
token | Важећи оператер ЈВТ без истека са приступом четовима |
Неважећи ЈВТ доводи посетиоца на екран за пријаву на панелу оператера.
4. Инстаграм Директни разговори
4.1 Листа ћаскања
GET https://chatapi.smsbat.com/api/chat/chats?source=7&page=1&per_page=20
Authorization: Bearer <token>
Note
Пагинација овде је per_page (смаке_цасе). Под /api/meta/* и гласање
крајња тачка је perPage (цамелЦасе). Ово није штампарска грешка - АПИ користи обоје.
Параметри упита, сви опционални:
| Параметар | Тип | Опис |
|---|---|---|
source | ChatSource | 7 ограничава резултате на Инстаграм |
entityId | int | ИД пословног налога. Примењује се само заједно са source |
instagram_user_id | int | ИД корисника Инстаграма у ЦхатХуб-у |
facebook_user_id | int | ИД корисника Фејсбука у ЦхатХуб-у |
page / per_page | int | Пагинација, подразумеване вредности 1 / 20 |
status | ChatStatus[] | Статус ћаскања, поновљиво |
search | string | Претрага слободног текста (име, телефон, …) |
organizationId | int | ИД организације |
operatorId | int[] | Филтрирај по додељеним операторима |
date | string[] | Две границе: ?date=…&date=… |
isChain | bool | Врати ћаскања као ланце, носећи поруке из претходних ћаскања |
isUnread, starMark, isOperator, isAIAgent | bool | Додатни филтери |
phone, email, contactId, clientId, tagIds, rate, sortedBy | — | Остали филтери |
200 OK враћа 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": []
}
]
}
Поља која су важна за Инстаграм апликацију:
| Поље | Значење |
|---|---|
instaAccount | Инстаграм пословни налог (продавница). id је вредност филтера entityId; name је име налога из Мета |
instagramUser | муштерија. name је Инстаграм дршка, id је вредност филтера instagram_user_id |
metaUserId | ИД клијента у опсегу на Мета страни (стринг) |
messSource | 7 за Инстаграм |
phone | Обично null за Инстаграм — немојте га користити као кључ |
ChatDTO такође носи 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 и taggedMessages.
4.2 Поруке ћаскања
GET https://chatapi.smsbat.com/api/chat/chats/1867/messages?isChain=false
Authorization: Bearer <token>
200 OK враћа низ од 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 се попуњава када се порука односи на Инстаграм пост или причу — проследите је
право назад као id / postId у Мета АПИ. media је ChatMediaDTO:
{ name, format, type, uri, raw, length, isUploaded }.
4.3 Пошаљите поруку (ЈСОН)
POST https://chatapi.smsbat.com/api/chat/1867/message
Authorization: Bearer <token>
Content-Type: application/json
Тело — 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
}
}
| Поље | Тип | Опис |
|---|---|---|
textMessage | string? | Текст поруке. Може бити празан када је присутно media |
author | AuthorMessage? | 0 оператер, 1 клијент |
isInternal | bool? | true означава интерну напомену која се не испоручује купцу |
replyToMessageId | int? | ИД поруке на коју се одговара |
appGuid | uuid? | Реферрал ГУИД |
media | MediaDTO? | { name, format, dataBase64, thumbnail, duration, type } |
200 OK → { "id": 9930, "messageStatus": 0 }
ГУИД препоруке се такође може пренети на путањи:
POST /api/chat/{chatId}/{referralGuid}/message (исто …/message/v1, …/message/v2).
4.4 Пошаљите датотеку или видео (вишеделни, в2)
POST https://chatapi.smsbat.com/api/chat/1867/message/v2
Authorization: Bearer <token>
Content-Type: multipart/form-data
Имена поља обрасца су ПасцалЦасе са тачком
textMessage и media.file се тихо игноришу. Користите тачна имена испод.
| Поље обрасца | Тип | Опис |
|---|---|---|
TextMessage | string | Текст поруке |
Author | int | 0 оператер, 1 клијент |
IsInternal | bool | Интерна напомена |
ReplyToMessageId | int | Порука на коју се одговара |
AppGuid | uuid | Реферрал ГУИД |
Media.File | binary | Сама датотека |
Media.Name | string | Име датотеке |
Media.Format | string | МИМЕ тип (video/mp4, image/png, application/pdf) |
Media.Type | MediaType | Видети §8.5 |
Media.DataBase64 | string | Алтернатива Media.File |
Media.Thumbnail | string | Басе64 оквир за преглед видео записа |
Media.Duration | double | Трајање видеа у секундама |
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 Промена статуса ћаскања
PUT https://chatapi.smsbat.com/api/chat/status
Authorization: Bearer <token>
Content-Type: application/json
{ "id": 1867, "status": 4 }
200 OK понавља ажурирани објекат.
4.6 Ажурирање статуса порука
PUT https://chatapi.smsbat.com/api/chat/messages/status
Authorization: Bearer <token>
Content-Type: application/json
{ "status": 3, "messageIds": [9928, 9929] }
4.7 Избришите ћаскање
DELETE https://chatapi.smsbat.com/api/chat/chats/1867
Authorization: Bearer <token>
5. Постови, колути и приче
Основна путања: https://chatapi.smsbat.com/api/meta
Аутх: X-Authorization-Key: <organization token>
5.1 Листа постова, колутова и прича
GET https://chatapi.smsbat.com/api/meta/posts?platform=instagram&mediaType=story&page=1&perPage=20
X-Authorization-Key: <token>
| Параметар | Тип | Обавезно | Опис |
|---|---|---|---|
page | int | но | Страница, подразумевано 1 |
perPage | int | но | Ставке по страници, подразумевано 20 |
id | int | но | Филтрирај према интерном ИД-у поста |
platform | string | но | instagram или facebook |
mediaType | string | но | post, reel или story. Сви типови када су изостављени |
# 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"
}
}
]
}
Неслагање — назив поља бројача
Свагерова шема MetaCommentPostListItemDtoPaginationDTO дефинише total. Тхе
документи интерне спецификације totalCount. Сваггер се генерише из кода, дакле
total је вероватнија истина. Парсирајте total ?? totalCount док се ово не реши.
| Поље | Опис |
|---|---|
id | Интерни ИД поста |
metaId | Спољна објава / Реел / ИД приче у Мета |
text | Наслов поста |
imageUrl | УРЛ прокси медија са кључем несеквентног MetaPost.Guid или null |
platform | facebook или instagram |
mediaType | post, reel или story |
createdAt | Датум креирања (датум платформе или датум базе података) |
story | Поклоните само за mediaType: "story" |
story.id | Интерни ИД приче; једнако post.id |
story.metaId | ИД спољне приче у Мета |
story.url | Стабилни проки УРЛ сачуваног медија прича; null ако се медиј не може сачувати |
Пост медији се опслужују на два пута: GET /api/meta/post/media/{id:int} за назад
компатибилност и GET /api/meta/post/media/{guid:guid}. Нови АПИ одговори и повратни позиви
увек генерише ГУИД образац.
5.2 Листа коментара
GET https://chatapi.smsbat.com/api/meta/comments?platform=instagram&postId=42&page=1&perPage=20
X-Authorization-Key: <token>
| Параметар | Тип | Обавезно | Опис |
|---|---|---|---|
page | int | но | Страница, подразумевано 1 |
perPage | int | но | Ставке по страници, подразумевано 20 |
postId | int | но | Филтрирај по ИД-у поште |
parentCommentId | int | но | Подређени коментари (одговори) датог коментара |
platform | string | но | facebook или 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..."
}
}
]
}
| Поље | Опис |
|---|---|
id | Интерни ИД коментара |
metaId | Екстерни ИД у Мета. null за наш одговор на чекању док се не пошаље |
text | Текст коментара |
createdAt | Датум креирања |
platform | facebook или instagram |
replyStatus | null за долазни коментар корисника; "pending" / "sent" / "failure" за наш одговор |
author.type | "meta_user" спољни корисник, "owner" власник странице |
author.name | Име аутора |
author.metaUserId | ИД корисника са опсегом у Мета; null за "owner" |
post | Објава, колут или прича којој коментар припада |
post.mediaType | post, reel или story |
post.story | Референца приче { id, metaId, url }, само приче |
mediaUrl | Медији приложени уз коментар, или null |
replyTo | Коментар родитеља { id, metaId, text }; null на највишем нивоу |
Неподударност — тип `author.type`
Интерна спецификација документује низове "meta_user" / "owner". Сваггер типови
MetaCommentAuthorType као цео број са енумом [0, 1]. А JsonStringEnumConverter
би објаснио јаз, али то није потврђено у односу на прави одговор. Напишите а
парсер који прихвата и једно и друго.
5.3 Одговори на коментар
У реду чека одговор за испоруку.
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"
Тело захтева: { "text": "Reply text" }
202 Accepted враћа објекат коментара — истог облика као GET /api/meta/comments — са
replyStatus: "pending" и metaId: null. Исход испоруке стиже касније као а
source: 13 повратни позив (§6.4).
Неподударност — код одговора
Сваггер изјављује 200 без тела; интерна спецификација наводи 202 Accepted
са коментаром као телом. Контролору највероватније недостаје ProducesResponseType
атрибута, остављајући Сваггер на подразумеваном. Прихватите било који 2xx и не зависите од тела.
6. Вебхоокс
СМСБАТ шаље POST захтева са application/json на ваш УРЛ и очекује HTTP 200 назад.
Нулта поља су у потпуности изостављена
Поље чија је вредност null уопште није серијализовано у тело повратног позива. За а
порука која није стигла са Фејсбука или Инстаграма једноставно не постоји кључ MetaUserId.
Третирајте „одсутан“ и null као исту ствар.
6.1 Региструјте УРЛ за повратни позив
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
}'
| Поље | Тип | Опис |
|---|---|---|
url | string | Ваша крајња тачка |
source | SendingSourceCallback | Тип догађаја, видети §8.2 |
headerName / headerValue | string | Произвољно аутх заглавље које прилажемо захтеву (опционо) |
channelType | ChatSource | Канал. 7 за Инстаграм. Опционо |
channelEntityId | int | Конкретан пословни рачун. Захтева channelType |
Без channelType УРЛ прима догађаје са сваког канала.
Tip
За потпуну покривеност коментара потребне су две регистрације: source: 12 за нове коментаре и
source: 13 за статусе одговора. За директне одговоре и одговоре на причу додајте source: 3
(и 11 ако желите сваку поруку ћаскања).
Преостале операције:
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 враћа:
[
{
"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 Нова порука и одговор на Инстаграм прича (source: 3, 11)
Одговор корисника на Инстаграм причу стиже као обична порука у овим повратним позивима,
са додатним блоком Story највишег нивоа:
{
"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"
}
}
| Поље | Опис |
|---|---|
ChatId / MessageId | Идентификатори ћаскања и порука |
Author | 0 корисник, 1 оператер |
Username | Инстаграм/Фацебоок име или ручица за приказ |
UserId | Интерни бројчани ИД корисника у СМСБАТ-у |
MetaUserId | ИД саговорника са опсегом у Мета-у. У одлазној поруци оператера ово и даље идентификује Мета корисника ћаскања, а не оператера |
ShopId | Интерни ИД Инстаграм/Фацебоок пословног налога |
ShopName | Име пословног налога како је примљено од Мета у време повезивања |
MessageText | Текст поруке |
MessageMedia | УРЛ медија када је порука медијска |
type_messenger | Извор, 7 за Инстаграм |
operator_name | Име оператера када је Author = 1 |
Story | Присутни само на долазном одговору на причу |
Story.Id | ИД интерне приче (MetaPost) — употребљив директно као id / postId у Мета АПИ-ју |
Story.MetaId | ИД спољне приче у Мета |
Story.Url | Стабилни прокси УРЛ сачуваног медија прича. Одсутан када медиј није могао да се сачува — блок Story и порука се и даље испоручују |
`Author` је обрнуто у односу на АПИ за ћаскање
У ChatMessageDTO.author, 0 значи оператер, а 1 значи клијент. У овом повратном позиву јесте
обрнуто: 0 је корисник, 1 је оператер. Не делите мапирање.
6.3 Нови коментар (source: 12)
Покреће се када корисник Мета коментарише објаву на Фејсбуку или Инстаграм објаву / Реел.
Note
Инстаграм Одговори на причу се не испоручују преко source: 12. Стижу као обични
долазне поруке на source: 3 и/или 11 са блоком Story — видети §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 Статус одговора на коментар (source: 13)
Пали се након што покушамо да доставимо одговор, било да успе или не.
{
"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 Дељена поља повратног позива за коментаре
Оба повратна позива коментара деле један облик тела и разликују се само за type.
| Поље | Опис |
|---|---|
type | "new_comment" или "comment_status" |
platform | "facebook" или "instagram" |
comment.id | Интерни ИД коментара |
comment.metaId | Екстерни ИД у Мета; null за одговор на чекању пре него што се пошаље |
comment.parentCommentId | ИД надређеног коментара. Одсутан за коментар највишег нивоа |
comment.parentMetaId | ИД спољног надређеног коментара. Одсутан на највишем нивоу |
comment.parentCommentText | Текст коментара родитеља. Одсутан на највишем нивоу |
comment.text | Текст коментара |
comment.createdAt | Датум креирања |
comment.updatedAt | Последње ажурирање. Одсутан ако коментар никада није уређиван |
comment.replyStatus | "pending" / "sent" / "failure". Одсутан за долазни коментар корисника |
comment.author.type | "meta_user" или "owner" |
comment.author.name | Име аутора |
comment.author.metaUserId | ИД аутора у опсегу у Мета-у. Одсутан за "owner" |
comment.mediaUrl | Коментирајте медије. Одсутан када га нема |
post.id | Интерни ИД поста |
post.metaId | Спољна објава / Реел / ИД приче у Мета |
post.text | Текст поста |
post.imageUrl | УРЛ слике поста, или null |
post.createdAt | Датум креирања објаве |
post.mediaType | У повратним позивима коментара, само post или reel |
6.6 Ново ћаскање (source: 7)
{ "ChatId": 12345, "Phone": "+380501234567", "chat.Source": 7 }
6.7 Промене статуса порука и ћаскања (source: 6 / 5)
{ "name": "changed_message_status", "id": 9928, "status": 6 }
{ "name": "changed_chat_status", "id": 1867, "status": 4 }
6.8 Порука измењена или обрисана (source: 9)
{ "messageId": 9930, "text": "Updated message text" }
{ "messageId": 9931, "delete": true }
6.9 Индикатор куцања (source: 8)
{ "chat_id": 1867, "event": "start_typing", "operator_name": "Iryna" }
{ "chat_id": 1867, "event": "end_typing" }
7. Испитивање догађаја
За окружења која не могу да прихвате улазни ХТТП.
7.1 Преузимање догађаја
GET https://chatapi.smsbat.com/api/chat/callback-events?page=1&perPage=20
Authorization: Bearer <token>
| Параметар | Опис |
|---|---|
organizationId | Опционо. Преузето из токена када се изостави |
page / perPage | Пагинација, подразумеване вредности 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"
}
]
}
Сваки догађај носи event_guid, timestamp, organization_id и callback_type — а
стринг који одговара вредностима source у §8.2. Преостала поља одговарају одговарајућим
вебхоок у §6.
7.2 Потврдите обрађене догађаје
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 }
Догађаји који су већ уклоњени једноставно се не рачунају у deleted. Наручивање и поновни покушаји су ваши
одговорност стране.
7.3 Препоручена петља
- Анкета
GET /api/chat/callback-eventsпо распореду. - Обрадите догађаје у вашој служби.
- Пошаљите обрађену листу
event_guidна/callback-events/processed. - Поновите.
8. Енум референце
8.1 ChatSource — канал (0–9)
| Код | Канал |
|---|---|
| 0 | Вибер |
| 1 | ВиберБот |
| 2 | ТелеграмБот |
| 3 | Вхатсапп |
| 4 | Видгет |
| 5 | Розетка |
| 6 | Фацебоок |
| 7 | Инстаграм |
| 8 | Пром |
| 9 | Олк |
8.2 SendingSourceCallback — тип догађаја повратног позива (0–13)
| Код | Догађај |
|---|---|
| 3 | Chat — нова порука за ћаскање, укључујући одговоре на причу |
| 5 | Статус ћаскања је промењен |
| 6 | Статус поруке је промењен |
| 7 | Ново ћаскање је направљено |
| 8 | Индикатор куцања |
| 9 | Порука ажурирана или обрисана |
| 11 | AnyChatMessage — било која порука за ћаскање |
| 12 | MetaNewComment — нови Инстаграм / Фацебоок коментар |
| 13 | MetaCommentStatus — статус испоруке нашег одговора на коментар |
Енум обухвата 0–13; преостале вредности нису потребне за Инстаграм интеграције.
8.3 ChatStatus (0–4)
0 Ново, 1 Отворено, 2 Чекање, 3 У паузи, 4 Затворено
8.4 MessageStatus (0–11)
| Код | Име |
|---|---|
| 0 | НОВО |
| 1 | СУЦЦЕСС |
| 2 | РЕЈЕЦТЕД |
| 3 | ПРОЧИТАЈТЕ |
| 4 | УНКНОВН |
| 5 | ПРОЦЕССИНГ |
| 6 | ДЕЛИВЕРЕД |
| 7 | БЛОЦКЕД_БИ_УСЕР |
| 8 | УСЕР_НОТ_ФОУНД |
Наброј се простире на 0–11. Вредности 9, 10 и 11 постоје у АПИ-ју, али још увек нису документоване —
третирати их као UNKNOWN.
8.5 MediaType (1–10)
1 Фотографија, 2 Фајл, 3 Аудио, 4 Видео, 5 Стикер, 6 СтицкерАниматед,
7 СтицкерВидео, 8 Анимација, 9 Глас, 10 ВидеоБелешка
8.6 AuthorMessage — аутор у АПИ-ју за ћаскање (0–4)
0 Оператор, 1 Клијент, 2 Бот, 3 Вибер налог
Енум се простире на 0–4; вредност 4 је недокументована. Повратни позиви „нове поруке“ користе
супротно пресликавање — видети §6.2.
8.7 ChatMessageType (0–2)
0 Текст, 1 Слика, 2 Фајл
8.8 Коментар replyStatus
null долазни коментар корисника, "pending" наш одговор је на чекању, "sent" испоручен,
"failure" испорука није успела.
Отворена питања
Три тачке у којима се интерна спецификација и Сваггер генерисани код не слажу. Један захтев са правим токеном све их решава; до тада напишите клијента дефанзивно.
| # | Питање | Спецификација | Сваггер | Како проверити |
|---|---|---|---|---|
| 1 | Аутх хеадер за /api/meta/* | X-Authorization-Key | само Bearer декларисано | curl -i -H "X-Authorization-Key: <token>" ".../api/meta/posts?perPage=1" — очекујте 200, а не 401 |
| 2 | Поље бројача у Мета одговорима | totalCount | total | Исти захтев — прочитајте основни ЈСОН кључ |
| 3 | author.type тип и reply статусни код | "meta_user" / "owner", 202 са телом | int [0,1], 200 без тела | curl -i .../api/meta/comments?perPage=1 плус тест одговор |
Привремене смернице:
- бројач — читај
total ?? totalCount; author.type— прихватите и стринг и цео број (0↔meta_user,1↔owner, мапирање треба да буде потврђено);reply— третирајте било који2xxкао успех, не захтевајте тело, узмите коначни статус из повратног позиваsource: 13.
Напомене о примени
- Аутх се разликује по групи крајњих тачака —
/api/meta/*користиX-Authorization-Key, ћаскање и оператери користеBearer,restapiприхвата било које. - Пагинација се пише на два начина —
per_pageна/api/chat/chats,perPageна/api/meta/*и/api/chat/callback-events. multipart/form-dataпоља су ПасцалЦасе са нотацијом тачака (Media.File,Media.Type).- Нулта поља су изостављена из повратних позива — одсутан кључ значи
null. phoneје обичноnullна Инстаграму. Идентификујте купца помоћуinstagramUser.id/metaUserIdи продавницу заinstaAccount.id(вредност филтераentityId).Story.Idиз повратног позива може се проследити директно назад каоid/postIdМета АПИ-ју.- Проверите
expiresAtоператера ЈВТ пре него што га употребите у дубокој вези или у виџету.