Help Center Meta & Instagram API-integration

Meta & Instagram API-integration

Reference til opbygning af en Instagram-app på SMSBAT ChatHub-platformen: autentificering, Instagram Direkte samtaler, kommentarer til opslag og ruller, historiesvar, webhooks og afstemninger.

Kilder

Denne side fusionerer den interne Meta Comments API-specifikation med den levende OpenAPI definitioner ved https://chatapi.smsbat.com/swagger/v1/swagger.json og https://restapi.smsbat.com/swagger/v1/swagger.json. Hvor de to er uenige, er det forskel kaldes inline og opført under Åbne spørgsmål.


1. Basis-URL’er

FormålURL
Chat API + Meta APIhttps://chatapi.smsbat.com
Swagger UI / OpenAPIhttps://chatapi.smsbat.com/index.html · …/swagger/v1/swagger.json
REST API (organisationer, tilbagekalds-URL’er)https://restapi.smsbat.com
REST API Swaggerhttps://restapi.smsbat.com/swagger/v1/swagger.json
Operatør webpanelhttps://chat.smsbat.com

2. Godkendelse

Godkendelsesordningen afhænger af endepunktsgruppen. At blande dem er den mest almindelige årsag til 401.

GruppeOverskrift
chatapi.smsbat.com/api/meta/* (indlæg, kommentarer)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 · Grundlæggende godkendelse

Organisationstokenet for X-Authorization-Key udstedes i panelet under Profil. Firma- og operatør-JWT’er kommer fra /api/company/get-token og /api/operator/get-token.

Uoverensstemmelse

chatapi OpenAPI-dokumentet erklærer et enkelt sikkerhedsskema — Bearer — og anvender det globalt. X-Authorization-Key er slet ikke deklareret der, selvom den interne Meta Kommentarer API-specifikationen navngiver den til /api/meta/*. Det håndteres højst sandsynligt af middleware, der ikke afspejles i Swagger. Bekræft empirisk, før du sender.

2.1 Virksomhedstoken

POST https://chatapi.smsbat.com/api/company/get-token
Content-Type: application/json

{ "login": "company_login", "password": "company_password" }

200 OK returnerer en bar token-streng.

2.2 Organisationer

GET https://chatapi.smsbat.com/api/company/organization
Authorization: Bearer <company_token>
[ { "id": 24, "name": "My Instagram Store" } ]

2.3 Operatører i en organisation

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" }
  }
]

Operatørstatusser: 0 Aktiv, 1 Inaktiv, 2 Slettet.

2.4 Tilføj/synkroniser operatorer

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 Operatør 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 returnerer JWT som en streng.

2.6 Valider et operatørtoken

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
}

Når ugyldig: { "isValid": false, "error": "Invalid token" }.

2.7 Integrer operatørchatpanelet

<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>

Et eksternt system (CRM, ERP, hjemmeside) kan åbne en specifik samtale i https://chat.smsbat.com/. Operatøren er autoriseret af en JWT, der sendes som en forespørgselsparameter.

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>
ParameterBeskrivelse
chat_raw_idChat ID
phoneTelefonnummer i internationalt format
fromBrand-/virksomhedskonto-id (bm_id)
sourceChatkilde — 7 for Instagram, se §8.1
tokenGyldig, uudløbet operatør JWT med adgang til chats

En ugyldig JWT lander den besøgende på operatørpanelets login-skærm.


4. Instagram Direkte samtaler

4.1 Liste over chats

GET https://chatapi.smsbat.com/api/chat/chats?source=7&page=1&per_page=20
Authorization: Bearer <token>

Note

Sideinddeling her er per_page (slangekasse). Under /api/meta/* og afstemningen endepunktet er perPage (camelCase). Dette er ikke en tastefejl - API’en bruger begge dele.

Forespørgselsparametre, alle valgfrie:

ParameterSkrivBeskrivelse
sourceChatSource7 begrænser resultater til Instagram
entityIdintVirksomhedskonto-id. Kun anvendt sammen med source
instagram_user_idintInstagram bruger-id i ChatHub
facebook_user_idintFacebook-bruger-id i ChatHub
page / per_pageintSideinddeling, standardindstillinger 1 / 20
statusChatStatus[]Chatstatus, gentagelig
searchstringFritekstsøgning (navn, telefon, …)
organizationIdintOrganisations-id
operatorIdint[]Filtrer efter tildelte operatorer
datestring[]To grænser: ?date=…&date=…
isChainboolReturner chats som kæder, med meddelelser fra tidligere chats
isUnread, starMark, isOperator, isAIAgentboolYderligere filtre
phone, email, contactId, clientId, tagIds, rate, sortedBy—Andre filtre

200 OK returnerer 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": []
    }
  ]
}

De felter, der betyder noget for en Instagram-app:

FeltBetydning
instaAccountInstagram-virksomhedskontoen (butikken). id er entityId filterværdien; name er kontonavnet fra Meta
instagramUserkunden. name er Instagram-håndtaget, id er instagram_user_id-filterværdien
metaUserIdKundens scoped ID på Metas side (streng)
messSource7 til Instagram
phoneNormalt null til Instagram — brug det ikke som en nøgle

ChatDTO bærer også 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 og taggedMessages.

4.2 Chatbeskeder

GET https://chatapi.smsbat.com/api/chat/chats/1867/messages?isChain=false
Authorization: Bearer <token>

200 OK returnerer en matrix på 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 er udfyldt, når beskeden vedrører et Instagram-opslag eller en historie – send det lige tilbage som id / postId til Meta API. media er en ChatMediaDTO: { name, format, type, uri, raw, length, isUploaded }.

4.3 Send en besked (JSON)

POST https://chatapi.smsbat.com/api/chat/1867/message
Authorization: Bearer <token>
Content-Type: application/json

Krop — 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
  }
}
FeltSkrivBeskrivelse
textMessagestring?Beskedtekst. Kan være tom, når media er til stede
authorAuthorMessage?0 operatør, 1 klient
isInternalbool?true markerer en intern note, der ikke er leveret til kunden
replyToMessageIdint?ID for den besked, der besvares
appGuiduuid?Henvisnings GUID
mediaMediaDTO?{ name, format, dataBase64, thumbnail, duration, type }

200 OK → { "id": 9930, "messageStatus": 0 }

En henvisnings-GUID kan også sendes i stien: POST /api/chat/{chatId}/{referralGuid}/message (ligeså …/message/v1, …/message/v2).

4.4 Send en fil eller video (multipart, v2)

POST https://chatapi.smsbat.com/api/chat/1867/message/v2
Authorization: Bearer <token>
Content-Type: multipart/form-data

Formularfeltnavne er PascalCase med priknotation

textMessage og media.file ignoreres stille. Brug de nøjagtige navne nedenfor.

FormularfeltSkrivBeskrivelse
TextMessagestringMeddelelsestekst
Authorint0 operatør, 1 klient
IsInternalboolIntern note
ReplyToMessageIdintBesked bliver besvaret
AppGuiduuidHenvisnings GUID
Media.FilebinarySelve filen
Media.NamestringFilnavn
Media.FormatstringMIME-type (video/mp4, image/png, application/pdf)
Media.TypeMediaTypeSe §8.5
Media.DataBase64stringAlternativ til Media.File
Media.ThumbnailstringBase64 video forhåndsvisningsramme
Media.DurationdoubleVideovarighed i sekunder
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 Skift chatstatus

PUT https://chatapi.smsbat.com/api/chat/status
Authorization: Bearer <token>
Content-Type: application/json

{ "id": 1867, "status": 4 }

200 OK ekkoer det opdaterede objekt.

4.6 Opdater meddelelsesstatusser

PUT https://chatapi.smsbat.com/api/chat/messages/status
Authorization: Bearer <token>
Content-Type: application/json

{ "status": 3, "messageIds": [9928, 9929] }

4.7 Slet en chat

DELETE https://chatapi.smsbat.com/api/chat/chats/1867
Authorization: Bearer <token>

5. Indlæg, ruller og historier

Basissti: https://chatapi.smsbat.com/api/meta Auth: X-Authorization-Key: <organization token>

5.1 Liste indlæg, ruller og historier

GET https://chatapi.smsbat.com/api/meta/posts?platform=instagram&mediaType=story&page=1&perPage=20
X-Authorization-Key: <token>
ParameterSkrivPåkrævetBeskrivelse
pageintnejSide, standard 1
perPageintnejElementer pr. side, standard 20
idintnejFiltrer efter internt post-id
platformstringnejinstagram eller facebook
mediaTypestringnejpost, reel eller story. Alle typer, når de er udeladt
# 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"
      }
    }
  ]
}

Afvigelse — tællerfeltnavn

Swagger-skemaet MetaCommentPostListItemDtoPaginationDTO definerer total. Den interne specifikationsdokumenter totalCount. Swagger genereres fra koden, så total er den mere sandsynlige sandhed. Parse total ?? totalCount indtil dette er afgjort.

FeltBeskrivelse
idInternt post-id
metaIdEkstern post / Reel / Story ID i Meta
textIndlægstekst
imageUrlProxymedie-URL indtastet af den ikke-sekventielle MetaPost.Guid eller null
platformfacebook eller instagram
mediaTypepost, reel eller story
createdAtOprettelsesdato (platformsdato eller databasedato)
storyTil stede kun for mediaType: "story"
story.idInternt historie-id; lig med post.id
story.metaIdEkstern historie-id i Meta
story.urlStabil proxy-URL for det lagrede Story-medie; null hvis mediet ikke kunne gemmes

Postmedier betjenes af to ruter: GET /api/meta/post/media/{id:int} for baglæns kompatibilitet og GET /api/meta/post/media/{guid:guid}. Nye API-svar og tilbagekald generer altid GUID-formularen.

5.2 Liste kommentarer

GET https://chatapi.smsbat.com/api/meta/comments?platform=instagram&postId=42&page=1&perPage=20
X-Authorization-Key: <token>
ParameterSkrivPåkrævetBeskrivelse
pageintnejSide, standard 1
perPageintnejElementer pr. side, standard 20
postIdintnejFiltrer efter post ID
parentCommentIdintnejUnderordnede kommentarer (svar) til en given kommentar
platformstringnejfacebook eller 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..."
      }
    }
  ]
}
FeltBeskrivelse
idInternt kommentar-id
metaIdEksternt ID i Meta. null for et afventende svar fra vores, indtil det sendes
textKommentartekst
createdAtOprettelsesdato
platformfacebook eller instagram
replyStatusnull for en indgående brugerkommentar; "pending" / "sent" / "failure" til vores svar
author.type"meta_user" ekstern bruger, "owner" sideejer
author.nameForfatternavn
author.metaUserIdScoped bruger-ID i Meta; null for "owner"
postIndlægget, rullen eller historien kommentaren tilhører
post.mediaTypepost, reel eller story
post.storyHistoriereference { id, metaId, url }, kun historier
mediaUrlMedier vedhæftet kommentaren, eller null
replyToForældrekommentar { id, metaId, text }; null på øverste niveau

Afvigelse — type `author.type`

Den interne specifikation dokumenterer strengene "meta_user" / "owner". Swagger typer MetaCommentAuthorType som et heltal med enum [0, 1]. A JsonStringEnumConverter ville forklare kløften, men det er ikke blevet bekræftet mod et reelt svar. Skriv en parser, der accepterer begge dele.

5.3 Svar på en kommentar

Sætter et svar i kø for levering.

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"

Anmodningstekst: { "text": "Reply text" }

202 Accepted returnerer kommentarobjektet — samme form som GET /api/meta/comments — med replyStatus: "pending" og metaId: null. Leveringsresultatet kommer senere som en source: 13 tilbagekald (§6.4).

Uoverensstemmelse — svarkode

Swagger erklærer 200 uden krop; den interne specifikation erklærer 202 Accepted med kommentaren som krop. Controlleren mangler sandsynligvis en ProducesResponseType attribut, hvilket efterlader Swagger på sin standard. Accepter enhver 2xx og vær ikke afhængig af en krop.


6. Webhooks

SMSBAT sender POST anmodninger med application/json til din URL og forventer HTTP 200 tilbage.

Nul felter er udeladt helt

Et felt, hvis værdi er null, serialiseres slet ikke i tilbagekaldsteksten. For en besked, der ikke kom fra Facebook eller Instagram, er der simpelthen ingen MetaUserId nøgle. Behandl “fraværende” og null som det samme.

6.1 Registrer en tilbagekalds-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
  }'
FeltSkrivBeskrivelse
urlstringDit slutpunkt
sourceSendingSourceCallbackBegivenhedstype, se §8.2
headerName / headerValuestringVilkårlig godkendelseshoved, vi vedhæfter anmodningen (valgfrit)
channelTypeChatSourceKanal. 7 til Instagram. Valgfrit
channelEntityIdintEn specifik virksomhedskonto. Kræver channelType

Uden channelType modtager URL’en begivenheder fra hver kanal.

Tip

Fuld kommentardækning kræver to registreringer: source: 12 for nye kommentarer og source: 13 for svarstatusser. For direkte svar og historiesvar tilføj source: 3 (og 11 hvis du vil have hver chatbesked).

Resterende operationer:

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 returnerer:

[
  {
    "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 Ny besked og Instagram Story-svar (source: 3, 11)

En brugers svar på en Instagram Story ankommer som en almindelig besked i disse tilbagekald, med en ekstra Story blok på øverste niveau:

{
  "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"
  }
}
FeltBeskrivelse
ChatId / MessageIdChat- og besked-id’er
Author0 bruger, 1 operatør
UsernameInstagram / Facebook visningsnavn eller håndtag
UserIdInternt numerisk bruger-id i SMSBAT
MetaUserIdScoped ID for samtalepartneren i Meta. På en udgående operatørmeddelelse identificerer dette stadig metabrugeren af ​​chatten, ikke operatøren
ShopIdInternt ID for Instagram / Facebook-virksomhedskontoen
ShopNameVirksomhedskontonavn som modtaget fra Meta på tilslutningstidspunktet
MessageTextMeddelelsestekst
MessageMediaMedie-URL, når meddelelsen er media
type_messengerKilde, 7 til Instagram
operator_nameOperatørnavn når Author = 1
StoryViser kun på et indgående historiesvar
Story.IdInternt historie (MetaPost) ID — kan bruges direkte som id / postId i Meta API
Story.MetaIdEkstern historie-id i Meta
Story.UrlStabil proxy-URL for det gemte Story-medie. Fraværende, når mediet ikke kunne gemmes — Story-blokken og beskeden leveres stadig

`Author` er inverteret i forhold til Chat API'en

I ChatMessageDTO.author betyder 0 operatør og 1 betyder klient. I dette tilbagekald er det omvendt: 0 er brugeren, 1 er operatøren. Del ikke kortlægningen.

6.3 Ny kommentar (source: 12)

Udløses, når en Meta-bruger kommenterer et Facebook-opslag eller et Instagram-opslag/Reel.

Note

Instagram Storysvar leveres ikke gennem source: 12. De ankommer som almindelige indgående beskeder på source: 3 og/eller 11 med en Story blok — se §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 Kommentar svarstatus (source: 13)

Udløses, efter at vi forsøger at levere et svar, uanset om det lykkes eller mislykkes.

{
  "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 Delte kommentartilbagekaldsfelter

Begge tilbagekald af kommentarer deler én kropsform og adskiller sig kun med type.

FeltBeskrivelse
type"new_comment" eller "comment_status"
platform"facebook" eller "instagram"
comment.idInternt kommentar-id
comment.metaIdEksternt ID i Meta; null for et afventende svar, før det sendes
comment.parentCommentIdForældres kommentar-id. Fraværende for en kommentar på øverste niveau
comment.parentMetaIdEkstern forældrekommentar-id. Fraværende på topniveau
comment.parentCommentTextForældrekommentartekst. Fraværende på topniveau
comment.textKommentartekst
comment.createdAtOprettelsesdato
comment.updatedAtSidste opdatering. Fraværende, hvis kommentaren aldrig blev redigeret
comment.replyStatus"pending" / "sent" / "failure". Fraværende for en indgående brugerkommentar
comment.author.type"meta_user" eller "owner"
comment.author.nameForfatternavn
comment.author.metaUserIdScoped forfatter-id i Meta. Fraværende i "owner"
comment.mediaUrlKommentarmedie. Fraværende, når der ikke er nogen
post.idInternt post-id
post.metaIdEkstern post / Reel / Story ID i Meta
post.textIndlægstekst
post.imageUrlSend billed-URL eller null
post.createdAtPost oprettelsesdato
post.mediaTypeI kommentartilbagekald, kun post eller reel

6.6 Ny chat (source: 7)

{ "ChatId": 12345, "Phone": "+380501234567", "chat.Source": 7 }

6.7 Besked- og chatstatusændringer (source: 6 / 5)

{ "name": "changed_message_status", "id": 9928, "status": 6 }
{ "name": "changed_chat_status",    "id": 1867, "status": 4 }

6.8 Besked redigeret eller slettet (source: 9)

{ "messageId": 9930, "text": "Updated message text" }
{ "messageId": 9931, "delete": true }

6.9 Indtastningsindikator (source: 8)

{ "chat_id": 1867, "event": "start_typing", "operator_name": "Iryna" }
{ "chat_id": 1867, "event": "end_typing" }

7. Begivenhedsafstemning

Til miljøer, der ikke kan acceptere indgående HTTP.

7.1 Hent begivenheder

GET https://chatapi.smsbat.com/api/chat/callback-events?page=1&perPage=20
Authorization: Bearer <token>
ParameterBeskrivelse
organizationIdValgfri. Taget fra token, når udeladt
page / perPageSideinddeling, standardindstillinger 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"
    }
  ]
}

Hver begivenhed har event_guid, timestamp, organization_id og callback_type — en streng, der matcher source-værdierne i §8.2. De resterende felter matcher de tilsvarende webhook i §6.

7.2 Anerkend behandlede hændelser

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 }

Begivenheder, der allerede er fjernet, tæller simpelthen ikke med i deleted. Bestilling og genforsøg er din sides ansvar.

7.3 Anbefalet sløjfe

  1. Afstemning GET /api/chat/callback-events på en tidsplan.
  2. Behandle begivenhederne i din tjeneste.
  3. Send den behandlede event_guid-liste til /callback-events/processed.
  4. Gentag.

8. Enum reference

8.1 ChatSource — kanal (0–9)

KodeKanal
0Viber
1ViberBot
2TelegramBot
3Whatsapp
4Widget
5Rozetka
6Facebook
7Instagram
8Bal
9Olx

8.2 SendingSourceCallback — tilbagekaldshændelsestype (0–13)

KodeBegivenhed
3Chat — ny chatbesked, inklusive historiesvar
5Chatstatus ændret
6Meddelelsesstatus ændret
7Ny chat oprettet
8Indtastningsindikator
9Besked opdateret eller slettet
11AnyChatMessage — enhver chatbesked
12MetaNewComment — ny Instagram/Facebook-kommentar
13MetaCommentStatus — leveringsstatus for vores kommentarsvar

Enumet spænder over 0–13; de resterende værdier er ikke nødvendige for Instagram-integrationer.

8.3 ChatStatus (0-4)

0 Ny, 1 Åben, 2 Venter, 3 OnPause, 4 Lukket

8,4 MessageStatus (0–11)

KodeNavn
0NYHED
1SUCCES
2AFVISET
3LÆS
4UKENDT
5BEHANDLING
6LEVERET
7BLOCKED_BY_USER
8USER_NOT_FOUND

Enummet spænder over 0–11. Værdierne 9, 10 og 11 findes i API’et, men er endnu ikke dokumenteret — behandle dem som UNKNOWN.

8,5 MediaType (1-10)

1 Foto, 2 Fil, 3 Lyd, 4 Video, 5 Sticker, 6 StickerAnimated, 7 StickerVideo, 8 Animation, 9 Stemme, 10 VideoNote

8.6 AuthorMessage — forfatter i Chat API (0–4)

0 Operatør, 1 Client, 2 Bot, 3 ViberAccount

Enumet spænder over 0–4; værdien 4 er udokumenteret. De “nye besked”-tilbagekald bruger modsat kortlægning — se §6.2.

8.7 ChatMessageType (0–2)

0 Tekst, 1 Foto, 2 Fil

8.8 Kommentar replyStatus

null indgående brugerkommentar, "pending" vores svar er i kø, "sent" leveret, "failure" levering mislykkedes.


Åbne spørgsmål

Tre punkter, hvor den interne specifikation og den kodegenererede Swagger er uenige. En anmodning med en rigtig token afgør dem alle; indtil da, skriv klienten defensivt.

#SpørgsmålSpecifikationSwaggerSådan tjekker du
1Auth header for /api/meta/*X-Authorization-Keykun Bearer erklæretcurl -i -H "X-Authorization-Key: <token>" ".../api/meta/posts?perPage=1" — forvent 200, ikke 401
2Tællerfelt i Meta-svartotalCounttotalSamme anmodning — læs root-JSON-nøglen
3author.type type og reply statuskode"meta_user" / "owner", 202 med kropint [0,1], 200 uden kropcurl -i .../api/meta/comments?perPage=1 plus et testsvar

Midlertidig vejledning:

  • tæller — læs total ?? totalCount;
  • author.type — accepter både en streng og et heltal (0 ↔ meta_user, 1 ↔ owner, kortlægning skal bekræftes);
  • reply — behandle enhver 2xx som succes, kræver ingen krop, tag den endelige status fra source: 13 tilbagekaldet.

Implementeringsnoter

  • Godkendelse er forskellig fra endepunktsgruppe — /api/meta/* bruger X-Authorization-Key, chats og operatører bruger Bearer, restapi accepterer enten.
  • Søgning staves på to måder — per_page på /api/chat/chats, perPage på /api/meta/* og /api/chat/callback-events.
  • multipart/form-data felter er PascalCase med priknotation (Media.File, Media.Type).
  • Nul-felter er udeladt fra tilbagekald — en fraværende tast betyder null.
  • phone er normalt null på Instagram. Identificer kunden ved instagramUser.id / metaUserId og butikken ved instaAccount.id (filterværdien entityId).
  • Story.Id fra et tilbagekald kan sendes direkte tilbage som id / postId til Meta API.
  • Tjek operatørens JWT’s expiresAt, før du bruger den i et dyblink eller widget.