Help Center Meta & Instagram API ինտեգրում

Meta & Instagram API ինտեգրում

**SMSBAT ChatHub հարթակում SMSBAT ChatHub հարթակում Instagram հավելված ստեղծելու տեղեկանք՝ նույնականացում, Instagram Ուղիղ խոսակցություններ, գրառումների և Reels-ի մեկնաբանություններ, Story-ի պատասխաններ, վեբ-կեռիկներ և հարցումներ:

Աղբյուրներ

Այս էջը միաձուլում է ներքին Meta Comments API-ի ճշգրտումը կենդանի OpenAPI-ի հետ սահմանումները https://chatapi.smsbat.com/swagger/v1/swagger.json և https://restapi.smsbat.com/swagger/v1/swagger.json. Այնտեղ, որտեղ երկուսը հակասում են, տարբերությունը ներառված է ներդիրում և նշված է Բաց հարցեր տակ:


1. Հիմնական URL-ներ

ՆպատակըURL
Chat API + Meta APIhttps://chatapi.smsbat.com
Swagger UI / OpenAPIhttps://chatapi.smsbat.com/index.html · …/swagger/v1/swagger.json
REST API (կազմակերպություններ, հետադարձ կապի URL-ներ)https://restapi.smsbat.com
REST API Swaggerhttps://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 համարի կազմակերպության նշանը թողարկվում է Պրոֆիլ բաժնում: Ընկերության և օպերատորի JWT-ները գալիս են /api/company/get-token և /api/operator/get-token-ից:

Անհամապատասխանություն

chatapi OpenAPI փաստաթուղթը հայտարարում է մեկ անվտանգության սխեման — Bearer — և կիրառում է այն համաշխարհային մասշտաբով։ X-Authorization-Key այնտեղ ընդհանրապես հայտարարված չէ, չնայած ներքին Meta-ն Comments API-ի հստակեցումն այն անվանում է /api/meta/*: Այն, ամենայն հավանականությամբ, վարվում է միջին ծրագիր, որը չի արտացոլվում Swagger-ում: Հաստատեք փորձնականորեն նախքան առաքումը:

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 Օպերատոր 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 վերադարձնում է JWT-ը որպես տող:

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. Խորքային հղումներ դեպի զրույցի վահանակ

Արտաքին համակարգը (CRM, ERP, կայք) կարող է բացել կոնկրետ զրույց https://chat.smsbat.com/. Օպերատորը լիազորված է JWT-ով, որը փոխանցվում է որպես հարցման պարամետր:

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Զրույցի ID
phoneՀեռախոսահամարը միջազգային ձևաչափով
fromԱպրանքանիշի / բիզնես հաշվի նույնացուցիչ (bm_id)
sourceԶրույցի աղբյուր — 7 Instagram-ի համար, տես §8.1
tokenՎավեր, ժամկետանց JWT օպերատոր՝ չաթերի հասանելիությամբ

Անվավեր JWT-ն այցելուին տեղափոխում է օպերատորի վահանակի մուտքի էկրան:


4. Instagram Direct խոսակցություններ

4.1 Ցուցադրել զրույցները

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

Note

Էջագրումն այստեղ per_page է (snake_case): /api/meta/*-ի տակ և քվեարկությունը վերջնակետը perPage է (camelCase): Սա տառասխալ չէ. API-ն օգտագործում է երկուսն էլ:

Հարցման պարամետրեր, բոլորը կամընտիր.

ՊարամետրՏեսակՆկարագրություն
sourceChatSource7 սահմանափակում է արդյունքները Instagram-ով
entityIdintԲիզնես հաշվի ID. Կիրառվում է միայն source
instagram_user_idintInstagram-ի օգտատիրոջ ID-ն ChatHub-ում
facebook_user_idintFacebook-ի օգտատիրոջ ID-ն ChatHub-ում
page / per_pageintԷջավորում, լռելյայն 1 / 20
statusChatStatus[]Զրույցի կարգավիճակը, կրկնվող
searchstringԱզատ տեքստի որոնում (անուն, հեռախոս,…)
organizationIdintԿազմակերպության ID
operatorIdint[]Զտել ըստ նշանակված օպերատորների
datestring[]Երկու սահման՝ ?date=…&date=…
isChainboolՎերադարձեք զրույցները որպես շղթաներ՝ կրելով հաղորդագրություններ նախորդ զրույցներից
isUnread, starMark, isOperator, isAIAgentboolԼրացուցիչ զտիչներ
—Այլ զտիչներ

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

Instagram հավելվածի համար կարևոր դաշտերը.

ԴաշտայինԻմաստը
instaAccountInstagram բիզնես հաշիվ (խանութ): id-ը entityId զտիչի արժեքն է; name-ը Meta
instagramUserհաճախորդը. name Instagram-ի բռնիչն է, id՝ instagram_user_id զտիչի արժեքը
metaUserIdՀաճախորդի շրջանակի ID-ն Meta-ի կողմում (տող)
messSource7 Instagram-ի համար
phoneՍովորաբար null Instagram-ի համար — մի օգտագործեք այն որպես բանալի

ChatDTO նաև կրում է olxUser, promUser, waba, rozetkaUser, facebookAccount, facebookUser, media, 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 լրացվում է, երբ հաղորդագրությունը վերաբերում է Instagram-ի գրառմանը կամ Story-ին. փոխանցեք այն: ուղիղ ետ որպես id / postId դեպի Meta API: media-ը ChatMediaDTO է. { name, format, type, uri, raw, length, isUploaded }։

4.3 Ուղարկել հաղորդագրություն (JSON)

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
  }
}
ԴաշտայինՏեսակՆկարագրություն
textMessagestring?Հաղորդագրության տեքստ: Կարող է դատարկ լինել, երբ առկա է media
authorAuthorMessage?0 օպերատոր, 1 հաճախորդ
isInternalbool?true նշում է ներքին նշում, որը չի առաքվում հաճախորդին
replyToMessageIdint?Պատասխանվող հաղորդագրության ID
appGuiduuid?Ուղղորդման GUID
mediaMediaDTO?{ name, format, dataBase64, thumbnail, duration, type }

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

Ուղղորդման GUID-ը կարող է փոխանցվել նաև հետևյալ ճանապարհով. POST /api/chat/{chatId}/{referralGuid}/message (նույնպես …/message/v1, …/message/v2):

4.4 Ուղարկել ֆայլ կամ տեսանյութ (բազմամաս, v2)

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

Ձևի դաշտերի անունները PascalCase են՝ կետային նշումով

textMessage և media.file լուռ անտեսվում են: Օգտագործեք ստորև նշված ճշգրիտ անունները:

Ձևի դաշտՏեսակՆկարագրություն
TextMessagestringՀաղորդագրության տեքստ
Authorint0 օպերատոր, 1 հաճախորդ
IsInternalboolՆերքին նշում
ReplyToMessageIdintՀաղորդագրությանը պատասխանվում է
AppGuiduuidՈւղղորդման GUID
Media.FilebinaryՖայլն ինքնին
Media.NamestringՖայլի անվանում
Media.FormatstringMIME տեսակը (video/mp4, image/png, application/pdf)
Media.TypeMediaTypeՏես §8.5
Media.DataBase64stringMedia.File-ի այլընտրանք
Media.ThumbnailstringBase64 տեսանյութի նախադիտման շրջանակ
Media.DurationdoubleՏեսանյութի տևողությունը վայրկյաններով
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>
ՊարամետրՏեսակՊահանջվում էՆկարագրություն
pageintոչԷջ, լռելյայն 1
perPageintոչՆյութեր մեկ էջում, լռելյայն 20
idintոչԶտել ըստ ներքին փոստի ID-ի
platformstringոչinstagram կամ facebook
mediaTypestringոչ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"
      }
    }
  ]
}

Անհամապատասխանություն — հաշվիչի դաշտի անվանում

Swagger MetaCommentPostListItemDtoPaginationDTO սխեման սահմանում է total: Այն ներքին տեխնիկական փաստաթղթեր totalCount: Swagger-ը ստեղծվում է կոդից, ուստի total ավելի հավանական ճշմարտություն է: Վերլուծեք total ?? totalCount մինչև սա կարգավորվի:

ԴաշտայինՆկարագրություն
idՆերքին գրառման ID
metaIdԱրտաքին գրառում / Reel / Story ID in Meta
textԳրառման վերնագիր
imageUrlՊրոքսերի մեդիայի URL-ը, որը բանալի է ոչ հաջորդական MetaPost.Guid կամ null
platformfacebook կամ instagram
mediaTypepost, reel կամ story
createdAtՍտեղծման ամսաթիվը (պլատֆորմի ամսաթիվը կամ տվյալների բազայի ամսաթիվը)
storyՆերկայացրեք միայն mediaType: "story" համար
story.idՊատմության ներքին ID; հավասար է post.id
story.metaIdԱրտաքին պատմության ID-ն Meta
story.urlՊահված Story լրատվամիջոցի կայուն վստահված անձի URL; null եթե մեդիան հնարավոր չլինի պահպանել

Փոստային լրատվամիջոցները սպասարկվում են երկու երթուղիներով՝ GET /api/meta/post/media/{id:int} հետադարձի համար համատեղելիություն և GET /api/meta/post/media/{guid:guid}: Նոր API պատասխաններ և հետադարձ զանգեր միշտ ստեղծեք GUID ձևը:

5.2 Նշեք մեկնաբանությունները

GET https://chatapi.smsbat.com/api/meta/comments?platform=instagram&postId=42&page=1&perPage=20
X-Authorization-Key: <token>
ՊարամետրՏեսակՊահանջվում էՆկարագրություն
pageintոչԷջ, լռելյայն 1
perPageintոչՆյութեր մեկ էջի համար, լռելյայն 20
postIdintոչԶտել ըստ փոստային ID
parentCommentIdintոչԵրեխայի մեկնաբանությունները (պատասխանները) տրված մեկնաբանության
platformstringոչ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Ներքին մեկնաբանության ID
metaIdԱրտաքին ID-ն Meta-ում: null մեր սպասվող պատասխանի համար, մինչև այն ուղարկվի
textՄեկնաբանության տեքստ
createdAtՍտեղծման ամսաթիվը
platformfacebook կամ instagram
replyStatusnull մուտքային օգտվողի մեկնաբանության համար; "pending" / "sent" / "failure" մեր պատասխանի համար
author.type"meta_user" արտաքին օգտվող, "owner" էջի սեփականատեր
author.nameՀեղինակի անունը
author.metaUserIdՇրջանակով օգտագործողի ID-ն Meta-ում; null "owner"-ի համար
postԳրառումը, Reel կամ Story մեկնաբանությունը պատկանում է
post.mediaTypepost, reel կամ story
post.storyՊատմության հղում { id, metaId, url }, Միայն պատմություններ
mediaUrlՄեկնաբանություններին կցված լրատվամիջոցներ, կամ null
replyToԾնողի մեկնաբանություն { id, metaId, text }; null բարձր մակարդակով

Անհամապատասխանություն — `author.type` տեսակ

Ներքին բնութագրերը փաստաթղթերում են "meta_user" / "owner" տողերը: Սվագերի տեսակները MetaCommentAuthorType որպես ամբողջ թիվ թվով [0, 1]: A 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: Առաքման արդյունքը գալիս է ավելի ուշ որպես a source: 13 հետկանչ (§6.4):

Անհամապատասխանություն — պատասխանի կոդը

Swagger-ը հայտարարում է 200 առանց մարմնի; ներքին մասնագրերը հայտարարում են 202 Accepted մեկնաբանությամբ որպես մարմին։ Կարգավորիչը, ամենայն հավանականությամբ, չունի ProducesResponseType հատկանիշ՝ թողնելով Swagger-ին իր լռելյայն: Ընդունեք ցանկացած 2xx և մի կախվեք մարմնից:


6. Վեբկեռիկներ

SMSBAT-ն ուղարկում է POST հարցումներ application/json-ով ձեր URL-ին և սպասում է HTTP 200 հետ:

Զուրկ դաշտերն ամբողջությամբ բաց են թողնվել

Դաշտը, որի արժեքը null է, ընդհանրապես սերիականացված չէ հետ կանչի մարմնում: Համար ա հաղորդագրություն, որը չի եկել Facebook-ից կամ Instagram-ից, պարզապես MetaUserId ստեղն չկա: Վերաբերվեք «բացակային» և null-ին որպես նույն բանի:

6.1 Գրանցեք հետ կանչի 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
  }'
ԴաշտայինՏեսակՆկարագրություն
urlstringՁեր վերջնակետը
sourceSendingSourceCallbackՄիջոցառման տեսակը, տես §8.2
headerName / headerValuestringԿամայական հաստատման վերնագիր, որը մենք կցում ենք հարցումին (ըստ ցանկության)
channelTypeChatSourceԱլիք. 7 Instagram-ի համար։ Ընտրովի
channelEntityIdintՀատուկ բիզնես հաշիվ: Պահանջում է channelType

Առանց channelType URL-ը իրադարձություններ է ստանում յուրաքանչյուր ալիքից:

Tip

Մեկնաբանությունների ամբողջական ծածկույթին անհրաժեշտ է երկու գրանցում. source: 12 նոր մեկնաբանությունների և source: 13 պատասխանի կարգավիճակների համար: Direct և Story պատասխանների համար ավելացրեք 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 Նոր հաղորդագրություն և Instagram Story-ի պատասխան (source: 3, 11)

Օգտատիրոջ պատասխանը Instagram Story-ին գալիս է որպես սովորական հաղորդագրություն այս հետադարձ զանգերի ժամանակ, լրացուցիչ վերին մակարդակի 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Զրույցի և հաղորդագրությունների նույնացուցիչներ
Author0 օգտվող, 1 օպերատոր
UsernameInstagram / Facebook ցուցադրվող անունը կամ բռնիչը
UserIdՕգտվողի ներքին թվային ID-ն SMSBAT-ում
MetaUserIdMeta-ում զրույցի գործընկերոջ շրջանակի ID-ն: ելքային օպերատորի հաղորդագրության վրա սա դեռ նույնականացնում է զրույցի Meta օգտագործողին, ոչ թե օպերատորին
ShopIdInstagram / Facebook բիզնես հաշվի ներքին ID
ShopNameԲիզնես հաշվի անվանումը, ինչպես ստացվել է Meta-ից միացման պահին
MessageTextՀաղորդագրության տեքստ
MessageMediaՄեդիա URL, երբ հաղորդագրությունը մեդիա
type_messengerԱղբյուր, 7 Instagram-ի համար
operator_nameՕպերատորի անունը, երբ Author = 1
StoryՆերկայացրե՛ք միայն ներգնա Story-ի պատասխանում
Story.IdՆերքին պատմության (MetaPost) ID — ուղղակիորեն օգտագործելի որպես id / postId Meta API-ում
Story.MetaIdԱրտաքին պատմության ID-ն Meta
Story.UrlՊահված Story լրատվամիջոցի կայուն վստահված անձի URL: Բացակայում է, երբ մեդիան հնարավոր չէ պահել — Story բլոկը և հաղորդագրությունը դեռ առաքվում են

`Author` շրջված է Chat API-ի համեմատ

ChatMessageDTO.author-ում 0 նշանակում է օպերատոր, իսկ 1 նշանակում է հաճախորդ: Այս հետադարձ կապի մեջ այն է հակառակը՝ 0 օգտվողն է, 1 օպերատորը: Մի տարածեք քարտեզագրումը:

6.3 Նոր մեկնաբանություն (source: 12)

Այրվում է, երբ Meta-ի օգտատերը մեկնաբանում է ֆեյսբուքյան գրառումը կամ Instagram-ի գրառումը / Reel:

Note

Instagram Story-ի պատասխանները չեն առաքվում 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Ներքին մեկնաբանության ID
comment.metaIdԱրտաքին ID-ն Meta-ում; null սպասող պատասխանի համար, նախքան այն ուղարկելը
comment.parentCommentIdԾնողի մեկնաբանության ID: Բացակայում է վերին մակարդակի մեկնաբանության համար
comment.parentMetaIdԱրտաքին ծնողի մեկնաբանության ID: Բացակայում է վերին մակարդակում
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Սահմանված հեղինակի ID-ն Meta-ում: Բացակայում է "owner"
comment.mediaUrlՄեկնաբանության լրատվամիջոցներ. Բացակայում է, երբ չկա
post.idՆերքին գրառման ID
post.metaIdԱրտաքին գրառում / Reel / Story ID in Meta
post.textԳրառման տեքստ
post.imageUrlՏեղադրեք պատկերի URL, կամ 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. Իրադարձությունների հարցում

Միջավայրերի համար, որոնք չեն կարող ընդունել ներգնա HTTP:

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. §8.2-ի source արժեքներին համապատասխանող տող: Մնացած դաշտերը համապատասխանում են համապատասխանին webhook §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 Առաջարկվող հանգույց

  1. Հարցում GET /api/chat/callback-events ժամանակացույցով:
  2. Մշակեք իրադարձությունները ձեր ծառայության մեջ:
  3. Ուղարկեք մշակված event_guid ցուցակը /callback-events/processed համարին:
  4. Կրկնել.

8. Թվային տեղեկանք

8.1 ChatSource — ալիք (0–9)

ԿոդԱլիք
0Viber
1ViberBot
2TelegramBot
3Whatsapp
4Վիջեթ
5Ռոզետկա
6Ֆեյսբուք
7Ինստագրամ
8ՊՐՈՄ
9Olx

8.2 SendingSourceCallback — հետադարձ զանգի իրադարձության տեսակը (0–13)

ԿոդՄիջոցառում
3Chat — նոր զրույցի հաղորդագրություն, ներառյալ Story-ի պատասխանները
5Զրույցի կարգավիճակը փոխվել է
6Հաղորդագրության կարգավիճակը փոխվել է
7Ստեղծվել է նոր զրույց
8Մուտքագրման ցուցիչ
9Հաղորդագրությունը թարմացվել կամ ջնջվել է
11AnyChatMessage — ցանկացած զրույցի հաղորդագրություն
12MetaNewComment — նոր Instagram / Facebook մեկնաբանություն
13MetaCommentStatus — մեր մեկնաբանության պատասխանի առաքման կարգավիճակը

Թիվն ընդգրկում է 0–13; Մնացած արժեքները Instagram-ի ինտեգրման համար անհրաժեշտ չեն:

8.3 ChatStatus (0–4)

0 Նոր, 1 Բաց, 2 Սպասում, 3 On Pause, 4 Փակ

8.4 MessageStatus (0–11)

ԿոդԱնունը
0ՆՈՐ
1ՀԱՋՈՂՈՒԹՅՈՒՆ
2ՄԵՐԺՎԵԼ Է
3ԿԱՐԴԱԼ
4ԱՆՀԱՅՏԻ
5ՄՇԱԿՈՒՄԸ
6ԱՌԱՔՎԵԼ Է
7BLOCKED_BY_USER
8USER_NOT_FOUND

Թիվն ընդգրկում է 0–11: 9, 10 և 11 արժեքները գոյություն ունեն API-ում, սակայն դեռևս փաստաթղթավորված չեն. վերաբերվեք նրանց որպես UNKNOWN:

8.5 MediaType (1–10)

1 Լուսանկար, 2 Ֆայլ, 3 Աուդիո, 4 Տեսանյութ, 5 Կպչուն, 6 StickerAnimated, 7 StickerVideo, 8 Անիմացիա, 9 Ձայն, 10 VideoNote

8.6 AuthorMessage — հեղինակ Chat API-ում (0–4)

0 օպերատոր, 1 հաճախորդ, 2 բոտ, 3 ViberAccount

Թիվն ընդգրկում է 0–4; 4 արժեքը փաստաթղթավորված չէ: «Նոր հաղորդագրության» հետադարձ զանգերն օգտագործում են հակառակ քարտեզագրում — տես §6.2.

8.7 ChatMessageType (0–2)

0 Տեքստ, 1 լուսանկար, 2 ֆայլ

8.8 Մեկնաբանություն replyStatus

null մուտքային օգտվողի մեկնաբանություն, "pending" մեր պատասխանը հերթագրված է, "sent" առաքվել է, "failure" առաքումը ձախողվեց:


Բաց հարցեր

Երեք կետ, որտեղ ներքին բնութագրերը և կոդով ստեղծված Swagger-ը համաձայն չեն: Մեկը իրական նշանով խնդրանքը լուծում է բոլորին. մինչ այդ, գրեք հաճախորդին պաշտպանված կերպով:

#ՀարցՏեխնիկականԿռահողԻնչպես ստուգել
1Հավաստագրման վերնագիր /api/meta/*-ի համարX-Authorization-Keyմիայն Bearer հայտարարագրվածcurl -i -H "X-Authorization-Key: <token>" ".../api/meta/posts?perPage=1" — սպասել 200, ոչ թե 401
2Հաշվիչ դաշտ Meta պատասխաններումtotalCounttotalՆույն խնդրանքը — կարդալ արմատային JSON ստեղնը
3author.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 հետ կանչից:

Իրականացման նշումներ

  • Auth-ը տարբերվում է ըստ վերջնակետի խմբի — /api/meta/* օգտագործում է X-Authorization-Key, զրույցներ և օպերատորներն օգտագործում են Bearer, restapi ընդունում են կամ:
  • Էջավորումը գրվում է երկու ձևով — per_page /api/chat/chats, perPage վրա /api/meta/* և /api/chat/callback-events:
  • multipart/form-data դաշտերը PascalCase են՝ կետային նշումով (Media.File, Media.Type):
  • Զուրկ դաշտերը բաց են թողնվել հետ կանչերից — բացակայող ստեղնը նշանակում է null:
  • phone սովորաբար null է Instagram-ում: Նույնականացրեք հաճախորդին ըստ instagramUser.id / metaUserId և խանութը՝ instaAccount.id (entityId զտիչի արժեքը):
  • Հետադարձ զանգից Story.Id կարող է ուղիղ ետ փոխանցվել որպես id / postId Meta API-ին:
  • Ստուգեք օպերատորի JWT-ի expiresAt նախքան այն խորը հղումում կամ վիջեթում օգտագործելը: