Help Center Meta ve Instagram API Entegrasyonu

Meta ve Instagram API Entegrasyonu

SMSBAT ChatHub Platformu üzerinde Instagram uygulaması oluşturmaya yönelik referans: kimlik doğrulama, Instagram Direct sohbetleri, gönderiler ve Reels hakkındaki yorumlar, Hikaye yanıtları, web kancaları ve anketler.

Kaynaklar

Bu sayfa, dahili Meta Yorumları API spesifikasyonunu canlı OpenAPI ile birleştirir https://chatapi.smsbat.com/swagger/v1/swagger.json’deki tanımlar ve https://restapi.smsbat.com/swagger/v1/swagger.json. İkisinin anlaşamadığı yerde, fark satır içinde belirtilir ve Açık sorular altında listelenir.


1. Temel URL’ler

AmaçURL’si
Sohbet API’si + Meta APIhttps://chatapi.smsbat.com
Swagger Kullanıcı Arayüzü / OpenAPIhttps://chatapi.smsbat.com/index.html · …/swagger/v1/swagger.json
REST API (kuruluşlar, geri çağırma URL’leri)https://restapi.smsbat.com
REST API Swaggerhttps://restapi.smsbat.com/swagger/v1/swagger.json
Operatör web panelihttps://chat.smsbat.com

2. Kimlik Doğrulama

Kimlik doğrulama şeması uç nokta grubuna bağlıdır. Bunları karıştırmak 401’un en yaygın nedenidir.

GrupBaşlık
chatapi.smsbat.com/api/meta/* (gönderiler, yorumlar)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 · Temel Kimlik Doğrulaması

X-Authorization-Key için organizasyon jetonu, Profil altındaki panelde düzenlenir. Şirket ve operatör JWT’leri /api/company/get-token ve /api/operator/get-token’den gelir.

Tutarsızlık

chatapi OpenAPI belgesi tek bir güvenlik şemasını (Bearer) bildirir ve onu uygular küresel olarak. X-Authorization-Key orada hiç bildirilmiyor, ancak dahili Meta Yorumlar API spesifikasyonu bunu /api/meta/* olarak adlandırır. Büyük olasılıkla tarafından ele alınır Swagger’a yansımayan ara yazılım. Göndermeden önce ampirik olarak onaylayın.

2.1 Şirket jetonu

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

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

200 OK çıplak bir belirteç dizesi döndürür.

2.2 Organizasyonlar

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

2.3 Bir kuruluştaki operatörler

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ör durumları: 0 Aktif, 1 Aktif Değil, 2 Silindi.

2.4 Operatör ekleme / senkronize etme

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 JWT’yi bir dize olarak döndürür.

2.6 Operatör jetonunu doğrulama

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
}

Geçersiz olduğunda: { "isValid": false, "error": "Invalid token" }.

2.7 Operatör sohbet panelini yerleştirme

<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. Sohbet paneline derin bağlantılar

Harici bir sistem (CRM, ERP, web sitesi) belirli bir konuşmayı açabilir. https://chat.smsbat.com/. Operatör, sorgu parametresi olarak iletilen bir JWT tarafından yetkilendirilir.

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>
ParametreAçıklama
chat_raw_idSohbet Kimliği
phoneUluslararası formatta telefon numarası
fromMarka / işletme hesabı tanımlayıcı (bm_id)
sourceSohbet kaynağı — 7 Instagram için, bkz. §8.1
tokenSohbetlere erişimi olan geçerli, süresi dolmamış operatör JWT

Geçersiz bir JWT, ziyaretçiyi operatör panelinin oturum açma ekranına yönlendirir.


4. Instagram Doğrudan sohbetleri

4.1 Sohbetleri listeleme

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

Note

Buradaki sayfalandırma per_page (snake_case) şeklindedir. /api/meta/* altında ve oylama bitiş noktası perPage (camelCase). Bu bir yazım hatası değildir; API her ikisini de kullanır.

Sorgu parametreleri, tümü isteğe bağlı:

ParametreTürAçıklama
sourceChatSource7 sonuçları Instagram ile kısıtlıyor
entityIdintİşletme hesabı kimliği. Yalnızca source
instagram_user_idintChatHub’da Instagram kullanıcı kimliği
facebook_user_idintChatHub’da Facebook kullanıcı kimliği
page / per_pageintSayfalandırma, varsayılanlar 1 / 20
statusChatStatus[]Sohbet durumu, tekrarlanabilir
searchstringSerbest metin araması (isim, telefon,…)
organizationIdintKuruluş Kimliği
operatorIdint[]Atanan operatörlere göre filtrele
datestring[]İki sınır: ?date=…&date=…
isChainboolÖnceki sohbetlerden gelen mesajları taşıyarak sohbetleri zincirler halinde döndürün
isUnread, starMark, isOperator, isAIAgentboolEk filtreler
phone, email, contactId, clientId, tagIds, rate, sortedBy—Diğer filtreler

200 OK GetChatsResponse değerini döndürür:

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

Bir Instagram uygulaması için önemli olan alanlar:

AlanAnlamı
instaAccountInstagram işletme hesabı (mağaza). id, entityId filtre değeridir; name Meta’daki hesap adıdır
instagramUserMüşteri. name Instagram tanıtıcısıdır, id instagram_user_id filtre değeridir
metaUserIdMüşterinin Meta tarafındaki kapsamlı kimliği (string)
messSource7 Instagram için
phoneGenellikle Instagram için null — bunu anahtar olarak kullanmayın

ChatDTO ayrıca olxUser, promUser, waba, rozetkaUser, facebookAccount’yi de taşır facebookUser, viberAccount, tgBot, tgUser, viberBot, viberBotUser, widget, media, isConnectedAI, isPromo, rate, rateComment, closedBy, draft, lang, starMark, contactId, contactName, block, isInStopList, stopList, isSmsFallbackEnabled ve taggedMessages.

4.2 Sohbet mesajları

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

200 OK, ChatMessageDTO dizisini döndürür:

[
  {
    "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, mesaj bir Instagram gönderisi veya Hikayeyle ilgili olduğunda doldurulur - iletin id / postId olarak Meta API’ye geri dönün. media bir ChatMediaDTO’dir: { name, format, type, uri, raw, length, isUploaded }.

4.3 Mesaj gönderme (JSON)

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

Gövde — 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
  }
}
AlanTürAçıklama
textMessagestring?Mesaj metni. media mevcut olduğunda boş olabilir
authorAuthorMessage?0 operatör, 1 istemci
isInternalbool?true müşteriye teslim edilmeyen dahili notu işaret eder
replyToMessageIdint?Yanıtlanan mesajın kimliği
appGuiduuid?Yönlendirme GUID’i
mediaMediaDTO?{ name, format, dataBase64, thumbnail, duration, type }

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

Yolda bir yönlendirme GUID’si de iletilebilir: POST /api/chat/{chatId}/{referralGuid}/message (aynı şekilde …/message/v1, …/message/v2).

4.4 Dosya veya video gönderme (çok parçalı, v2)

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

Form alanı adları nokta gösterimli PascalCase'dir

textMessage ve media.file sessizce göz ardı edilir. Aşağıdaki adları tam olarak kullanın.

Form alanıTürAçıklama
TextMessagestringMesaj metni
Authorint0 operatör, 1 istemci
IsInternalboolDahili not
ReplyToMessageIdintYanıtlanan mesaj
AppGuiduuidYönlendirme GUID’i
Media.FilebinaryDosyanın kendisi
Media.NamestringDosya adı
Media.FormatstringMIME türü (video/mp4, image/png, application/pdf)
Media.TypeMediaType§8.5’e bakın
Media.DataBase64stringMedia.File’ye alternatif
Media.ThumbnailstringBase64 video önizleme çerçevesi
Media.DurationdoubleSaniye cinsinden video süresi
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 Sohbet durumunu değiştir

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

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

200 OK güncellenen nesneyi yansıtır.

4.6 Mesaj durumlarını güncelleyin

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

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

4.7 Sohbeti silme

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

5. Gönderiler, Makaralar ve Hikayeler

Temel yol: https://chatapi.smsbat.com/api/meta Yazarı: X-Authorization-Key: <organization token>

5.1 Gönderileri, Makaraları ve Hikayeleri listeleyin

GET https://chatapi.smsbat.com/api/meta/posts?platform=instagram&mediaType=story&page=1&perPage=20
X-Authorization-Key: <token>
ParametreTürGerekliAçıklama
pageinthayırSayfa, varsayılan 1
perPageinthayırSayfa başına öğe sayısı, varsayılan 20
idinthayırDahili posta kimliğine göre filtrele
platformstringhayırinstagram veya facebook
mediaTypestringhayırpost, reel veya story. Atlandığında tüm türler
# 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"
      }
    }
  ]
}

Tutarsızlık — sayaç alanı adı

Swagger şeması MetaCommentPostListItemDtoPaginationDTO total’yi tanımlar. dahili spesifikasyon belgeleri totalCount. Swagger koddan oluşturulmuştur, dolayısıyla total daha muhtemel gerçektir. Bu sorun çözülene kadar total ?? totalCount’yi ayrıştırın.

AlanAçıklama
idDahili gönderi kimliği
metaIdMeta’da harici gönderi / Makara / Hikaye Kimliği
textYazı başlığı
imageUrlSıralı olmayan MetaPost.Guid veya null ile anahtarlanan proxy medya URL’si
platformfacebook veya instagram
mediaTypepost, reel veya story
createdAtOluşturulma tarihi (platform tarihi veya veritabanı tarihi)
storyyalnızca mediaType: "story" için mevcut
story.idDahili Hikaye Kimliği; eşittir post.id
story.metaIdMeta’da Harici Hikaye Kimliği
story.urlSaklanan Hikaye ortamının kararlı proxy URL’si; null medya kaydedilemezse

Posta medyası iki yolla sunulur: GET /api/meta/post/media/{id:int} geriye doğru uyumluluk ve GET /api/meta/post/media/{guid:guid}. Yeni API yanıtları ve geri aramalar her zaman GUID formunu oluşturun.

5.2 Yorumları listele

GET https://chatapi.smsbat.com/api/meta/comments?platform=instagram&postId=42&page=1&perPage=20
X-Authorization-Key: <token>
ParametreTürGerekliAçıklama
pageinthayırSayfa, varsayılan 1
perPageinthayırSayfa başına öğe sayısı, varsayılan 20
postIdinthayırPosta kimliğine göre filtrele
parentCommentIdinthayırBelirli bir yorumun alt yorumları (yanıtları)
platformstringhayırfacebook veya 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..."
      }
    }
  ]
}
AlanAçıklama
idDahili yorum kimliği
metaIdMeta’da harici kimlik. null gönderilinceye kadar bekleyen cevabımız için
textYorum metni
createdAtOluşturulma tarihi
platformfacebook veya instagram
replyStatusnull gelen kullanıcı yorumu için; "pending" / "sent" / "failure" cevabımız için
author.type"meta_user" harici kullanıcı, "owner" sayfa sahibi
author.nameYazar adı
author.metaUserIdMeta’da kapsamlı kullanıcı kimliği; null için "owner"
postYorumun ait olduğu gönderi, Reel veya Hikaye
post.mediaTypepost, reel veya story
post.storyHikaye referansı { id, metaId, url }, Yalnızca hikayeler
mediaUrlYoruma eklenen medya veya null
replyToVeli yorumu { id, metaId, text }; null üst seviyede

Tutarsızlık — `author.type` türü

Dahili spesifikasyon "meta_user" / "owner" dizelerini belgelemektedir. Havalı türleri MetaCommentAuthorType enum [0, 1] ile tamsayı olarak. bir JsonStringEnumConverter boşluğu açıklayabilir, ancak bu gerçek bir yanıtla doğrulanmadı. Bir yaz her ikisini de kabul eden ayrıştırıcı.

5.3 Bir yorumu yanıtlama

Teslimat için bir yanıtı sıraya koyar.

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"

Talep gövdesi: { "text": "Reply text" }

202 Accepted, GET /api/meta/comments ile aynı şekle sahip olan yorum nesnesini döndürür. replyStatus: "pending" ve metaId: null. Teslimat sonucu daha sonra gelir source: 13 geri arama (§6.4).

Tutarsızlık — yanıt kodu

Swagger gövde olmadan 200 ilan eder; dahili spesifikasyon şunu belirtir: 202 Accepted vücut olarak yorumla. Denetleyicide büyük ihtimalle ProducesResponseType eksik özelliği, Swagger’ı varsayılan olarak bırakıyor. Herhangi bir 2xx kabul edin ve bir bedene bağımlı olmayın.


6. Web Kancaları

SMSBAT, URL’nize application/json ile POST istek gönderir ve HTTP 200 geri dönüş bekler.

Boş alanlar tamamen atlandı

Değeri null olan bir alan, geri çağırma gövdesinde hiçbir şekilde serileştirilmez. bir için Facebook veya Instagram’dan gelmeyen mesajda MetaUserId tuşu yoktur. “Yok” ve null’yi aynı şeymiş gibi ele alın.

6.1 Geri arama URL’sini kaydedin

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
  }'
AlanTürAçıklama
urlstringUç noktanız
sourceSendingSourceCallbackOlay türü, bkz. §8.2
headerName / headerValuestringİsteğe eklediğimiz rastgele kimlik doğrulama başlığı (isteğe bağlı)
channelTypeChatSourceKanal. 7 Instagram için. İsteğe bağlı
channelEntityIdintBelirli bir işletme hesabı. channelType gerektirir

channelType olmadan URL her kanaldan etkinlik alır.

Tip

Yorumların tam kapsamı iki kayıt gerektirir: source: 12 yeni yorumlar ve source: 13 yanıt durumları için. Doğrudan ve Hikaye yanıtları için source: 3 ekleyin (ve her sohbet mesajını istiyorsanız 11).

Geriye kalan işlemler:

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 şunu döndürür:

[
  {
    "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 Yeni mesaj ve Instagram Hikaye yanıtı (source: 3, 11)

Bir kullanıcının Instagram Hikayesine verdiği yanıt, bu geri aramalarda sıradan bir mesaj olarak gelir. ekstra üst düzey Story bloğuyla:

{
  "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"
  }
}
AlanAçıklama
ChatId / MessageIdSohbet ve mesaj tanımlayıcıları
Author0 kullanıcı, 1 operatör
UsernameInstagram / Facebook görünen adı veya tanıtıcısı
UserIdSMSBAT’ta dahili sayısal kullanıcı kimliği
MetaUserIdMeta’daki konuşma ortağının Kapsamlı Kimliği. Giden operatör mesajında ​​bu, operatörü değil, yine de sohbetin Meta kullanıcısını tanımlar
ShopIdInstagram / Facebook işletme hesabının dahili kimliği
ShopNameBağlantı anında Meta’dan alınan işletme hesabı adı
MessageTextMesaj metni
MessageMediaMesaj medya olduğunda medya URL’si
type_messengerKaynak, 7 Instagram için
operator_nameOperatör adı şu durumda: Author = 1
StoryYalnızca gelen Hikaye yanıtında sunum yapın
Story.IdDahili Hikaye (MetaPost) Kimliği — Meta API’sinde doğrudan id / postId olarak kullanılabilir
Story.MetaIdMeta’da Harici Hikaye Kimliği
Story.UrlDepolanan Hikaye ortamının kararlı proxy URL’si. Medya kaydedilemediğinde yok — Story bloğu ve mesaj hala teslim ediliyor

`Author`, Sohbet API'sine göre ters çevrilmiştir

ChatMessageDTO.author’da 0 operatör, 1 ise istemci anlamına gelir. Bu geri aramada tam tersi: 0 kullanıcı, 1 operatördür. Haritalamayı paylaşmayın.

6.3 Yeni yorum (source: 12)

Bir Meta kullanıcısı bir Facebook gönderisine veya Instagram gönderisine/Reel’e yorum yaptığında tetiklenir.

Note

Instagram Hikaye yanıtları source: 12 üzerinden iletilmiyor. Sıradan bir şekilde geliyor source: 3 ve/veya 11 üzerinden Story bloğuyla gelen mesajlar — bkz. §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 Yorum yanıt durumu (source: 13)

Başarılı ya da başarısız olsun, bir yanıt iletmeye çalıştıktan sonra tetiklenir.

{
  "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 Paylaşılan yorum geri çağırma alanları

Her iki yorum geri araması da bir vücut şeklini paylaşır ve yalnızca type farklılık gösterir.

AlanAçıklama
type"new_comment" veya "comment_status"
platform"facebook" veya "instagram"
comment.idDahili yorum kimliği
comment.metaIdMeta’da harici kimlik; null gönderilmeden önce bekleyen bir yanıt için
comment.parentCommentIdEbeveyn yorum kimliği. Üst düzey bir yorum için yok
comment.parentMetaIdHarici üst yorum kimliği. Üst düzeyde yok
comment.parentCommentTextEbeveyn yorum metni. Üst düzeyde yok
comment.textYorum metni
comment.createdAtOluşturulma tarihi
comment.updatedAtSon güncelleme. Yorum hiç düzenlenmemişse yok
comment.replyStatus"pending" / "sent" / "failure". Gelen kullanıcı yorumu için yok
comment.author.type"meta_user" veya "owner"
comment.author.nameYazar adı
comment.author.metaUserIdMeta’da kapsamlı yazar kimliği. "owner" için yok
comment.mediaUrlYorum medyası. Hiçbiri olmadığında yok
post.idDahili gönderi kimliği
post.metaIdMeta’da harici gönderi / Makara / Hikaye Kimliği
post.textMesaj metni
post.imageUrlResim URL’sini yayınlayın veya null
post.createdAtGönderinin oluşturulma tarihi
post.mediaTypeYorum geri aramalarında yalnızca post veya reel

6.6 Yeni sohbet (source: 7)

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

6.7 Mesaj ve sohbet durumu değişiklikleri (source: 6 / 5)

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

6.8 Mesaj düzenlendi veya silindi (source: 9)

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

6.9 Yazma göstergesi (source: 8)

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

7. Olay yoklaması

Gelen HTTP’yi kabul edemeyen ortamlar için.

7.1 Olayları getir

GET https://chatapi.smsbat.com/api/chat/callback-events?page=1&perPage=20
Authorization: Bearer <token>
ParametreAçıklama
organizationIdİsteğe bağlı. Atlandığında belirteçten alınır
page / perPageSayfalandırma, varsayılanlar 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"
    }
  ]
}

Her olay event_guid, timestamp, organization_id ve callback_type’yi taşır — bir §8.2’deki source değerleriyle eşleşen dize. Kalan alanlar karşılık gelenlerle eşleşir §6’daki web kancası.

7.2 İşlenen etkinlikleri onaylama

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 }

Halihazırda kaldırılmış olan etkinlikler deleted olarak sayılmaz. Sipariş verme ve yeniden denemeler sizin sorumluluğunuzdadır tarafın sorumluluğundadır.

7.3 Önerilen döngü

  1. Bir programa göre GET /api/chat/callback-events anketi yapın.
  2. Hizmetinizdeki olayları işleyin.
  3. İşlenen event_guid listesini /callback-events/processed’ye gönderin.
  4. Tekrar edin.

8. Numaralandırma referansı

8.1 ChatSource — kanal (0–9)

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

8.2 SendingSourceCallback — geri arama olayı türü (0–13)

KodEtkinlik
3Chat — Hikaye yanıtlarını da içeren yeni sohbet mesajı
5Sohbet durumu değişti
6Mesaj durumu değişti
7Yeni sohbet oluşturuldu
8Yazma göstergesi
9Mesaj güncellendi veya silindi
11AnyChatMessage — herhangi bir sohbet mesajı
12MetaNewComment — yeni Instagram / Facebook yorumu
13MetaCommentStatus — yorum yanıtımızın teslimat durumu

Numaralandırma 0–13’yi kapsar; Instagram entegrasyonları için geri kalan değerlere gerek yoktur.

8.3 ChatStatus (0–4)

0 Yeni, 1 Açık, 2 Bekleniyor, 3 OnPause, 4 Kapalı

8,4 MessageStatus (0–11)

Kodİsim
0YENİ
1BAŞARI
2REDDEDİLDİ
3OKU
4BİLİNMİYOR
5İŞLENİYOR
6TESLİM EDİLDİ
7BLOCKED_BY_USER
8USER_NOT_FOUND

Numaralandırma 0–11’yi kapsar. 9, 10 ve 11 değerleri API’de mevcuttur ancak henüz belgelenmemiştir — onlara UNKNOWN olarak davranın.

8,5 MediaType (1–10)

1 Fotoğraf, 2 Dosya, 3 Ses, 4 Video, 5 Çıkartma, 6 ÇıkartmaAnimasyonlu, 7 ÇıkartmaVideo, 8 Animasyon, 9 Ses, 10 VideoNot

8.6 AuthorMessage — Sohbet API’sindeki yazar (0–4)

0 Operatör, 1 Müşteri, 2 Bot, 3 ViberAccount

Numaralandırma 0–4’yi kapsar; 4 değeri belgelenmemiş. “Yeni mesaj” geri aramaları, ters eşleme — bkz. §6.2.

8.7 ChatMessageType (0–2)

0 Metin, 1 Fotoğraf, 2 Dosya

8.8 Yorum replyStatus

null gelen kullanıcı yorumu, "pending" yanıtımız sıraya alındı, "sent" iletildi, "failure" teslimat başarısız oldu.


Açık sorular

Dahili spesifikasyon ile kod tarafından oluşturulan Swagger’ın uyuşmadığı üç nokta. Bir gerçek bir jetonla talep etmek hepsini halleder; o zamana kadar istemciyi savunma amaçlı yazın.

#SoruŞartnameHavalıNasıl kontrol edilir
1/api/meta/* için kimlik doğrulama başlığıX-Authorization-Keyyalnızca Bearer ilan edildicurl -i -H "X-Authorization-Key: <token>" ".../api/meta/posts?perPage=1" — 401 değil, 200 bekliyoruz
2Meta yanıtlarındaki sayaç alanıtotalCounttotalAynı istek — kök JSON anahtarını okuyun
3author.type tipi ve reply durum kodu"meta_user" / "owner", 202 gövdeliint [0,1], 200 gövdesizcurl -i .../api/meta/comments?perPage=1 artı bir test yanıtı

Geçici rehberlik:

  • sayaç - total ?? totalCount değerini okuyun;
  • author.type — hem dizeyi hem de tam sayıyı kabul edin (0 ↔ meta_user, 1 ↔ owner, eşleme onaylanacak);
  • reply — herhangi bir 2xx’yi başarı olarak değerlendirin, gövde gerektirmez, source: 13 geri aramasından son durumu alın.

Uygulama notları

  • Kimlik doğrulama, uç nokta grubuna göre farklılık gösterir — /api/meta/*, X-Authorization-Key’yi, sohbetleri ve operatörler Bearer kullanır, restapi ikisini de kabul eder.
  • Sayfa numaralandırma iki şekilde yazılır — per_page, /api/chat/chats, perPage /api/meta/* ve /api/chat/callback-events.
  • multipart/form-data alanlar, nokta gösterimli (Media.File, Media.Type) PascalCase’dir.
  • Geri aramalarda boş alanlar dikkate alınmaz — eksik anahtar, null anlamına gelir.
  • phone Instagram’da genellikle null olur. Müşteriyi instagramUser.id / ile tanımlayın metaUserId ve instaAccount.id (entityId filtre değeri) ile alışveriş yapın.
  • Bir geri aramadan gelen Story.Id, Meta API’ye id / postId olarak doğrudan geri aktarılabilir.
  • Derin bağlantıda veya widget’ta kullanmadan önce JWT operatörünün expiresAt operatörünü kontrol edin.