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 API | https://chatapi.smsbat.com |
| Swagger UI / OpenAPI | https://chatapi.smsbat.com/index.html · …/swagger/v1/swagger.json |
| REST API (կազմակերպություններ, հետադարձ կապի URL-ներ) | https://restapi.smsbat.com |
| REST API Swagger | 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 համարի կազմակերպության նշանը թողարկվում է Պրոֆիլ բաժնում:
Ընկերության և օպերատորի 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-ն օգտագործում է երկուսն էլ:
Հարցման պարամետրեր, բոլորը կամընտիր.
| Պարամետր | Տեսակ | Նկարագրություն |
|---|---|---|
source | ChatSource | 7 սահմանափակում է արդյունքները Instagram-ով |
entityId | int | Բիզնես հաշվի ID. Կիրառվում է միայն source |
instagram_user_id | int | Instagram-ի օգտատիրոջ ID-ն ChatHub-ում |
facebook_user_id | int | Facebook-ի օգտատիրոջ ID-ն ChatHub-ում |
page / per_page | int | Էջավորում, լռելյայն 1 / 20 |
status | ChatStatus[] | Զրույցի կարգավիճակը, կրկնվող |
search | string | Ազատ տեքստի որոնում (անուն, հեռախոս,…) |
organizationId | int | Կազմակերպության ID |
operatorId | int[] | Զտել ըստ նշանակված օպերատորների |
date | string[] | Երկու սահման՝ ?date=…&date=… |
isChain | bool | Վերադարձեք զրույցները որպես շղթաներ՝ կրելով հաղորդագրություններ նախորդ զրույցներից |
isUnread, starMark, isOperator, isAIAgent | bool | Լրացուցիչ զտիչներ |
| — | Այլ զտիչներ |
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 հավելվածի համար կարևոր դաշտերը.
| Դաշտային | Իմաստը |
|---|---|
instaAccount | Instagram բիզնես հաշիվ (խանութ): id-ը entityId զտիչի արժեքն է; name-ը Meta |
instagramUser | հաճախորդը. name Instagram-ի բռնիչն է, id՝ instagram_user_id զտիչի արժեքը |
metaUserId | Հաճախորդի շրջանակի ID-ն Meta-ի կողմում (տող) |
messSource | 7 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
}
}
| Դաշտային | Տեսակ | Նկարագրություն |
|---|---|---|
textMessage | string? | Հաղորդագրության տեքստ: Կարող է դատարկ լինել, երբ առկա է media |
author | AuthorMessage? | 0 օպերատոր, 1 հաճախորդ |
isInternal | bool? | true նշում է ներքին նշում, որը չի առաքվում հաճախորդին |
replyToMessageId | int? | Պատասխանվող հաղորդագրության ID |
appGuid | uuid? | Ուղղորդման GUID |
media | MediaDTO? | { 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 լուռ անտեսվում են: Օգտագործեք ստորև նշված ճշգրիտ անունները:
| Ձևի դաշտ | Տեսակ | Նկարագրություն |
|---|---|---|
TextMessage | string | Հաղորդագրության տեքստ |
Author | int | 0 օպերատոր, 1 հաճախորդ |
IsInternal | bool | Ներքին նշում |
ReplyToMessageId | int | Հաղորդագրությանը պատասխանվում է |
AppGuid | uuid | Ուղղորդման GUID |
Media.File | binary | Ֆայլն ինքնին |
Media.Name | string | Ֆայլի անվանում |
Media.Format | string | MIME տեսակը (video/mp4, image/png, application/pdf) |
Media.Type | MediaType | Տես §8.5 |
Media.DataBase64 | string | Media.File-ի այլընտրանք |
Media.Thumbnail | string | Base64 տեսանյութի նախադիտման շրջանակ |
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 | ոչ | Զտել ըստ ներքին փոստի ID-ի |
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"
}
}
]
}
Անհամապատասխանություն — հաշվիչի դաշտի անվանում
Swagger MetaCommentPostListItemDtoPaginationDTO սխեման սահմանում է total: Այն
ներքին տեխնիկական փաստաթղթեր totalCount: Swagger-ը ստեղծվում է կոդից, ուստի
total ավելի հավանական ճշմարտություն է: Վերլուծեք total ?? totalCount մինչև սա կարգավորվի:
| Դաշտային | Նկարագրություն |
|---|---|
id | Ներքին գրառման ID |
metaId | Արտաքին գրառում / Reel / Story ID in Meta |
text | Գրառման վերնագիր |
imageUrl | Պրոքսերի մեդիայի URL-ը, որը բանալի է ոչ հաջորդական MetaPost.Guid կամ null |
platform | facebook կամ instagram |
mediaType | post, 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>
| Պարամետր | Տեսակ | Պահանջվում է | Նկարագրություն |
|---|---|---|---|
page | int | ոչ | Էջ, լռելյայն 1 |
perPage | int | ոչ | Նյութեր մեկ էջի համար, լռելյայն 20 |
postId | int | ոչ | Զտել ըստ փոստային ID |
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 | Ներքին մեկնաբանության ID |
metaId | Արտաքին ID-ն Meta-ում: null մեր սպասվող պատասխանի համար, մինչև այն ուղարկվի |
text | Մեկնաբանության տեքստ |
createdAt | Ստեղծման ամսաթիվը |
platform | facebook կամ instagram |
replyStatus | null մուտքային օգտվողի մեկնաբանության համար; "pending" / "sent" / "failure" մեր պատասխանի համար |
author.type | "meta_user" արտաքին օգտվող, "owner" էջի սեփականատեր |
author.name | Հեղինակի անունը |
author.metaUserId | Շրջանակով օգտագործողի ID-ն Meta-ում; null "owner"-ի համար |
post | Գրառումը, Reel կամ Story մեկնաբանությունը պատկանում է |
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]: 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
}'
| Դաշտային | Տեսակ | Նկարագրություն |
|---|---|---|
url | string | Ձեր վերջնակետը |
source | SendingSourceCallback | Միջոցառման տեսակը, տես §8.2 |
headerName / headerValue | string | Կամայական հաստատման վերնագիր, որը մենք կցում ենք հարցումին (ըստ ցանկության) |
channelType | ChatSource | Ալիք. 7 Instagram-ի համար։ Ընտրովի |
channelEntityId | int | Հատուկ բիզնես հաշիվ: Պահանջում է 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 | Զրույցի և հաղորդագրությունների նույնացուցիչներ |
Author | 0 օգտվող, 1 օպերատոր |
Username | Instagram / Facebook ցուցադրվող անունը կամ բռնիչը |
UserId | Օգտվողի ներքին թվային ID-ն SMSBAT-ում |
MetaUserId | Meta-ում զրույցի գործընկերոջ շրջանակի ID-ն: ելքային օպերատորի հաղորդագրության վրա սա դեռ նույնականացնում է զրույցի Meta օգտագործողին, ոչ թե օպերատորին |
ShopId | Instagram / 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 Առաջարկվող հանգույց
- Հարցում
GET /api/chat/callback-eventsժամանակացույցով: - Մշակեք իրադարձությունները ձեր ծառայության մեջ:
- Ուղարկեք մշակված
event_guidցուցակը/callback-events/processedհամարին: - Կրկնել.
8. Թվային տեղեկանք
8.1 ChatSource — ալիք (0–9)
| Կոդ | Ալիք |
|---|---|
| 0 | Viber |
| 1 | ViberBot |
| 2 | TelegramBot |
| 3 | |
| 4 | Վիջեթ |
| 5 | Ռոզետկա |
| 6 | Ֆեյսբուք |
| 7 | Ինստագրամ |
| 8 | ՊՐՈՄ |
| 9 | Olx |
8.2 SendingSourceCallback — հետադարձ զանգի իրադարձության տեսակը (0–13)
| Կոդ | Միջոցառում |
|---|---|
| 3 | Chat — նոր զրույցի հաղորդագրություն, ներառյալ Story-ի պատասխանները |
| 5 | Զրույցի կարգավիճակը փոխվել է |
| 6 | Հաղորդագրության կարգավիճակը փոխվել է |
| 7 | Ստեղծվել է նոր զրույց |
| 8 | Մուտքագրման ցուցիչ |
| 9 | Հաղորդագրությունը թարմացվել կամ ջնջվել է |
| 11 | AnyChatMessage — ցանկացած զրույցի հաղորդագրություն |
| 12 | MetaNewComment — նոր Instagram / Facebook մեկնաբանություն |
| 13 | MetaCommentStatus — մեր մեկնաբանության պատասխանի առաքման կարգավիճակը |
Թիվն ընդգրկում է 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 | ԱՌԱՔՎԵԼ Է |
| 7 | BLOCKED_BY_USER |
| 8 | USER_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 պատասխաններում | totalCount | total | Նույն խնդրանքը — կարդալ արմատային JSON ստեղնը |
| 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հետ կանչից:
Իրականացման նշումներ
- 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/postIdMeta API-ին: - Ստուգեք օպերատորի JWT-ի
expiresAtնախքան այն խորը հղումում կամ վիջեթում օգտագործելը: