Help Center Meta un Instagram API integrācija

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ķisURL
Tērzēšanas API + Meta APIhttps://chatapi.smsbat.com
Swagger UI / OpenAPIhttps://chatapi.smsbat.com/index.html · …/swagger/v1/swagger.json
REST API (organizācijas, atzvanīšanas URL)https://restapi.smsbat.com
REST API Swaggerhttps://restapi.smsbat.com/swagger/v1/swagger.json
Operatora tīmekļa panelishttps://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.

GrupaVirsraksts
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>
ParametrsApraksts
chat_raw_idTērzēšanas ID
phoneTālruņa numurs starptautiskā formātā
fromZīmola/uzņēmuma konta identifikators (bm_id)
sourceTērzēšanas avots — 7 Instagram, skatiet §8.1
tokenDerī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:

ParametrsTipsApraksts
sourceChatSource7 ierobežo rezultātus tikai Instagram
entityIdintUzņēmuma konta ID. Piemērots tikai kopā ar source
instagram_user_idintInstagram lietotāja ID pakalpojumā ChatHub
facebook_user_idintFacebook lietotāja ID pakalpojumā ChatHub
page / per_pageintLapu šķirošana, noklusējuma iestatījumi 1 / 20
statusChatStatus[]Tērzēšanas statuss, atkārtojams
searchstringBrīvā teksta meklēšana (vārds, tālrunis, …)
organizationIdintOrganizācijas ID
operatorIdint[]Filtrēt pēc piešķirtajiem operatoriem
datestring[]Divas robežas: ?date=…&date=…
isChainboolAtgriezt tērzēšanu kā ķēdes, pārnēsājot ziņojumus no iepriekšējām tērzēšanas sarunām
isUnread, starMark, isOperator, isAIAgentboolPapildu 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:

LauksNozīme
instaAccountInstagram biznesa konts (veikals). id ir entityId filtra vērtība; name ir konta nosaukums no Meta
instagramUserklients. name ir Instagram rokturis, id ir instagram_user_id filtra vērtība
metaUserIdKlienta tvēruma ID Meta pusē (virkne)
messSource7 Instagram
phoneParasti 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
  }
}
LauksTipsApraksts
textMessagestring?Ziņas teksts. Var būt tukšs, ja ir media
authorAuthorMessage?0 operators, 1 klients
isInternalbool?true apzīmē iekšējo piezīmi, kas netiek piegādāta klientam
replyToMessageIdint?Tā ziņojuma ID, uz kuru tiek atbildēts
appGuiduuid?Novirzīšanas GUID
mediaMediaDTO?{ 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 lauksTipsApraksts
TextMessagestringZiņojuma teksts
Authorint0 operators, 1 klients
IsInternalboolIekšējā piezīme
ReplyToMessageIdintUz ziņojumu tiek atbildēts
AppGuiduuidNovirzīšanas GUID
Media.FilebinaryPats fails
Media.NamestringFaila nosaukums
Media.FormatstringMIME veids (video/mp4, image/png, application/pdf)
Media.TypeMediaTypeSkatīt §8.5
Media.DataBase64stringAlternatīva Media.File
Media.ThumbnailstringBase64 video priekšskatījuma rāmis
Media.DurationdoubleVideo 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>
ParametrsTipsNepieciešamsApraksts
pageintnēLapa, noklusējuma 1
perPageintnēVienumi lapā, noklusējuma 20
idintnēFiltrēt pēc iekšējās ziņas ID
platformstringnēinstagram vai facebook
mediaTypestringnē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.

LauksApraksts
idIekšējās ziņas ID
metaIdĀrējā ziņa / ruļļa / stāsta ID pakalpojumā Meta
textZiņas paraksts
imageUrlStarpniekservera multivides URL, kas ievadīts ar nesecīgu MetaPost.Guid vai null
platformfacebook vai instagram
mediaTypepost, reel vai story
createdAtIzveidošanas datums (platformas datums vai datu bāzes datums)
storyDāvana tikai par mediaType: "story"
story.idIekšējais stāsta ID; vienāds ar post.id
story.metaIdĀrējā stāsta ID pakalpojumā Meta
story.urlSaglabā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>
ParametrsTipsNepieciešamsApraksts
pageintnēLapa, noklusējuma 1
perPageintnēVienumi lapā, noklusējuma 20
postIdintnēFiltrēt pēc pasta ID
parentCommentIdintnēDotā komentāra bērna komentāri (atbildes)
platformstringnē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..."
      }
    }
  ]
}
LauksApraksts
idIekšējā komentāra ID
metaIdĀrējais ID pakalpojumā Meta. null par mūsu gaidīto atbildi, līdz tā tiek nosūtīta
textKomentāra teksts
createdAtIzveidošanas datums
platformfacebook vai instagram
replyStatusnull 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.nameAutora vārds
author.metaUserIdAptvēra lietotāja ID meta; null par "owner"
postZiņa, rullītis vai stāsts, kam komentārs pieder
post.mediaTypepost, reel vai story
post.storyStāsta atsauce { id, metaId, url }, tikai stāsti
mediaUrlKomentāram pievienots plašsaziņas līdzeklis vai null
replyToVecā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
  }'
LauksTipsApraksts
urlstringJūsu galapunkts
sourceSendingSourceCallbackNotikuma veids, skatiet 8.2. §
headerName / headerValuestringPatvaļīga autentifikācijas galvene, ko pievienojam pieprasījumam (neobligāti)
channelTypeChatSourceKanāls. 7 pakalpojumam Instagram. Pēc izvēles
channelEntityIdintKonkrē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"
  }
}
LauksApraksts
ChatId / MessageIdTērzēšanas un ziņojumu identifikatori
Author0 lietotājs, 1 operators
UsernameInstagram/Facebook parādāmais vārds vai rokturis
UserIdIekšējais skaitliskais lietotāja ID SMSBAT
MetaUserIdSarunu partnera aptvērtais ID pakalpojumā Meta. Izejošā operatora ziņojumā tas joprojām identificē tērzēšanas meta lietotāju, nevis operatoru
ShopIdInstagram/Facebook biznesa konta iekšējais ID
ShopNameUzņēmuma konta nosaukums, kas saņemts no Meta savienojuma laikā
MessageTextZiņojuma teksts
MessageMediaMultivides URL, ja ziņojums ir multivide
type_messengerAvots, 7 vietnei Instagram
operator_nameOperatora nosaukums, kad Author = 1
StoryRādīt tikai ienākošajā stāsta atbildē
Story.IdIekšējā stāsta (MetaPost) ID — izmantojams tieši kā id / postId Meta API
Story.MetaIdĀrējā stāsta ID pakalpojumā Meta
Story.UrlSaglabā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.

LauksApraksts
type"new_comment" vai "comment_status"
platform"facebook" vai "instagram"
comment.idIekšējā komentāra ID
comment.metaIdĀrējais ID meta; null par neapstiprinātu atbildi pirms tās nosūtīšanas
comment.parentCommentIdVecā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.parentCommentTextVecāku komentāra teksts. Nav augstākā līmenī
comment.textKomentāra teksts
comment.createdAtIzveidošanas datums
comment.updatedAtPē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.nameAutora vārds
comment.author.metaUserIdTvēruma autora ID sadaļā Meta. Nav "owner"
comment.mediaUrlKomentāru mediji. Nav klāt, kad nav
post.idIekšējās ziņas ID
post.metaIdĀrējā ziņa / ruļļa / stāsta ID pakalpojumā Meta
post.textZiņas teksts
post.imageUrlPublicējiet attēla URL vai null
post.createdAtZiņas izveides datums
post.mediaTypeKomentā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>
ParametrsApraksts
organizationIdPēc izvēles. Paņemts no marķiera, ja tas ir izlaists
page / perPageLapu šķ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

  1. Aptauja GET /api/chat/callback-events pēc grafika. 2. Apstrādājiet notikumus savā pakalpojumā.
  2. Nosūtiet apstrādāto event_guid sarakstu uz /callback-events/processed.
  3. Atkārtojiet.

8. Enum atsauce

8.1 ChatSource — kanāls (0–9)

KodsKanāls
0Viber
1ViberBot
2TelegramBot
3Whatsapp
4Logrīks
5Rozetka
6Facebook
7Instagram
8Prom
9Olx

8.2 SendingSourceCallback — atzvanīšanas notikuma veids (0–13)

KodsPasākums
3Chat — jauns tērzēšanas ziņojums, tostarp stāstu atbildes
5Tērzēšanas statuss mainīts
6Ziņojuma statuss mainīts
7Izveidota jauna tērzēšana
8Rakstīšanas indikators
9Ziņojums atjaunināts vai dzēsts
11AnyChatMessage — jebkurš tērzēšanas ziņojums
12MetaNewComment — jauns Instagram/Facebook komentārs
13MetaCommentStatus — 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)

KodsVārds
0JAUNS
1VEIKSMES
2NORAIDĪTS
3LASĪT
4NEZINĀMS
5APSTRĀDE
6PIEGĀDĀTS
7BLOCKED_BY_USER
8USER_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ājumsSpecifikācijaSwaggerKā pārbaudīt
1Auth galvene /api/meta/*X-Authorization-Keytikai Bearer deklarēticurl -i -H "X-Authorization-Key: <token>" ".../api/meta/posts?perPage=1" — gaidīt 200, nevis 401
2Skaitītāja lauks meta atbildēstotalCounttotalTas pats pieprasījums — izlasiet saknes JSON atslēgu
3author.type veids un reply statusa kods"meta_user" / "owner", 202 ar korpusuint [0,1], 200 bez korpusacurl -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 jebkuru 2xx kā veiksmi, neprasa ķermeni, iegūstiet galīgo statusu no source: 13 atzvanīšanas.

Ieviešanas piezīmes

  • Autentifikācija atšķiras atkarībā no galapunktu grupas — /api/meta/* izmanto X-Authorization-Key, tērzēšanu un operatori izmanto Bearer, restapi pieņem vienu vai otru.
  • Paginācija tiek rakstīta divējādi — per_page uz /api/chat/chats, perPage uz /api/meta/* un /api/chat/callback-events.
  • multipart/form-data lauki 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. * phone pakalpojumā Instagram parasti ir null. Identificējiet klientu pēc instagramUser.id / metaUserId un iepirkties pēc instaAccount.id (filtra vērtība entityId). * Story.Id no atzvanīšanas var nosūtīt tieši atpakaļ kā id / postId uz Meta API.
  • Pārbaudiet operatora JWT expiresAt, pirms to izmantojat dziļajā saitē vai logrīkā.