REST API v1.0 & Widget Entegrasyonu

Merkezi Destek Sisteminiz

Tüm PHP, Next.js, React, Vue, Python veya mobil projelerinizden tek tıkla canlı destek talepleri toplayın, listeleyin ve yönetin.

Çoklu Proje Desteği

Sınırsız sayıda web sitesi ve mobil uygulamayı tek bir destek panelinden API key’ler ile bağımsız olarak yönetin.

Güvenli REST API

X-API-Key tabanlı yetkilendirme ile projeniz haricinde kimse verilerinize erişemez. Verileriniz tamamen izoledir.

1 Satır Widget & Özel UI

İsterseniz 1 satır script ile canlı destek sohbet penceresi ekleyin, isterseniz kendi projenizde özel ekranlar tasarlayın.

API Entegrasyon Dokümanı

Uygulamalarınızdan istek atarak talep oluşturma, listeleme, detay görme ve yanıt gönderme rehberi

Geliştirici Dokümanı
BASE API URL https://destek.sensofta.com/api/index.php
KİMLİK DOĞRULAMA (HTTP HEADER) X-API-Key: PROJE_API_ANAHTARI
API Servisleri Özeti
Metot Endpoint İşlev / Açıklama
POST /tickets Yeni bir destek talebi (bilet) oluşturur.
GET /tickets Projenize ait tüm talepleri filtreleme ve sayfalama ile getirir.
GET /tickets/{id} Talep detayını, müşteri ve temsilci mesaj geçmişini ve ekleri getirir.
POST /tickets/{id}/messages Mevcut talebe yeni müşteri/sistem yanıtı ekler.
POST /upload Taleplere veya mesajlara eklenecek resim/dosya yükler.
Kod Örnekleri
POST /api/index.php/tickets
Headers:
  X-API-Key: PROJE_API_ANAHTARI
  Content-Type: application/json

Body:
{
  "subject": "Giriş Sayfası Hatası",
  "message": "<p>Kullanıcılar giriş yapamıyor.</p>",
  "priority": "high",
  "email": "musteri@ornek.com",
  "name": "Ahmet Yılmaz",
  "client_identifier": "user_12345"
}
const axios = require('axios');

async function createTicket() {
  const response = await axios.post('https://destek.sensofta.com/api/index.php/tickets', {
    subject: 'Giriş Sayfası Hatası',
    message: '<p>Kullanıcılar giriş yapamıyor.</p>',
    email: 'musteri@ornek.com',
    name: 'Ahmet Yılmaz',
    priority: 'high',
    client_identifier: 'user_12345'
  }, {
    headers: {
      'X-API-Key': 'PROJE_API_ANAHTARI',
      'Content-Type': 'application/json'
    }
  });
  console.log(response.data);
}
// React / Next.js Destek Formu Gönderimi
const res = await fetch('https://destek.sensofta.com/api/index.php/tickets', {
  method: 'POST',
  headers: {
    'X-API-Key': 'PROJE_API_ANAHTARI',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    subject: 'Ödeme Sorunu',
    message: '<p>Kredi kartı işlem hatası.</p>',
    email: 'musteri@ornek.com',
    name: 'Mehmet Demir',
    priority: 'urgent'
  })
});
const data = await res.json();
<?php
$ch = curl_init('https://destek.sensofta.com/api/index.php/tickets');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'X-API-Key: PROJE_API_ANAHTARI',
        'Content-Type: application/json'
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'subject' => 'Teknik Destek Talebi',
        'message' => '<p>Sunucu erişim sorunu.</p>',
        'email' => 'musteri@ornek.com',
        'name' => 'Ali Kaya',
        'priority' => 'medium'
    ])
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
import requests

url = "https://destek.sensofta.com/api/index.php/tickets"
headers = {
    "X-API-Key": "PROJE_API_ANAHTARI",
    "Content-Type": "application/json"
}
payload = {
    "subject": "Otomatik Sistem Raporu",
    "message": "<p>Günlük veritabanı yedeği alındı.</p>",
    "email": "bot@ornek.com",
    "name": "Sistem Botu",
    "priority": "low"
}

response = requests.post(url, json=payload, headers=headers)
print(response.json())
GET /api/index.php/tickets?status=open&page=1&limit=20
Headers:
  X-API-Key: PROJE_API_ANAHTARI

Parametreler:
  status: open | pending | waiting_customer | waiting_agent | resolved | closed
  search: Konu/mesaj içeriğinde arama
  page: Sayfa numarası (varsayılan: 1)
  limit: Sayfa başı kayıt sayısı (varsayılan: 20)
const axios = require('axios');

async function listTickets() {
  const response = await axios.get('https://destek.sensofta.com/api/index.php/tickets', {
    headers: { 'X-API-Key': 'PROJE_API_ANAHTARI' },
    params: { status: 'open', page: 1, limit: 20 }
  });
  console.log('Talepler:', response.data.data.data);
}
// Next.js / React Müşteri Destek Geçmişi Ekranı
const res = await fetch('https://destek.sensofta.com/api/index.php/tickets?status=open&page=1', {
  headers: { 'X-API-Key': 'PROJE_API_ANAHTARI' }
});
const { data } = await res.json();
const tickets = data.data;        // Destek talepleri dizisi
const pagination = data.pagination; // Toplam sayfa ve kayıt metadataları
<?php
$ch = curl_init('https://destek.sensofta.com/api/index.php/tickets?status=open&limit=10');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['X-API-Key: PROJE_API_ANAHTARI']
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);

$tickets = $result['data']['data'] ?? [];
import requests

url = "https://destek.sensofta.com/api/index.php/tickets"
headers = {"X-API-Key": "PROJE_API_ANAHTARI"}
params = {"status": "open", "page": 1, "limit": 20}

response = requests.get(url, headers=headers, params=params)
tickets = response.json().get("data", {}).get("data", [])
GET /api/index.php/tickets/1
Headers:
  X-API-Key: PROJE_API_ANAHTARI

Yanıt:
{
  "success": true,
  "data": {
    "ticket": {
      "id": 1,
      "ticket_id": "SUP-0001",
      "subject": "Giriş Sayfası Hatası",
      "status": "open",
      "messages": [
        { "id": 1, "message": "<p>Mesaj detay...</p>", "created_at": "..." }
      ],
      "attachments": []
    }
  }
}
const axios = require('axios');

async function getTicket(ticketId) {
  const response = await axios.get(`https://destek.sensofta.com/api/index.php/tickets/${ticketId}`, {
    headers: { 'X-API-Key': 'PROJE_API_ANAHTARI' }
  });
  console.log(response.data.data.ticket);
}
// Next.js / React Ticket View Ekranı
async function fetchTicketDetail(ticketId) {
  const res = await fetch(`https://destek.sensofta.com/api/index.php/tickets/${ticketId}`, {
    headers: { 'X-API-Key': 'PROJE_API_ANAHTARI' }
  });
  const { data } = await res.json();
  return data.ticket; // ticket.messages dizisi mesajlaşma geçmişini içerir
}
<?php
$ticketId = 1;
$ch = curl_init("https://destek.sensofta.com/api/index.php/tickets/{$ticketId}");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['X-API-Key: PROJE_API_ANAHTARI']
]);
$ticket = json_decode(curl_exec($ch), true)['data']['ticket'];
curl_close($ch);
import requests

ticket_id = 1
url = f"https://destek.sensofta.com/api/index.php/tickets/{ticket_id}"
headers = {"X-API-Key": "PROJE_API_ANAHTARI"}

response = requests.get(url, headers=headers)
ticket = response.json().get("data", {}).get("ticket", {})
POST /api/index.php/tickets/1/messages
Headers:
  X-API-Key: PROJE_API_ANAHTARI
  Content-Type: application/json

Body:
{
  "message": "<p>Teşekkürler, sorunu çözdüm.</p>",
  "email": "musteri@ornek.com",
  "name": "Ahmet Yılmaz"
}
const axios = require('axios');

async function addReply(ticketId) {
  const response = await axios.post(`https://destek.sensofta.com/api/index.php/tickets/${ticketId}/messages`, {
    message: '<p>Sorun devam ediyor, tekrar bakar mısınız?</p>',
    email: 'musteri@ornek.com'
  }, {
    headers: {
      'X-API-Key': 'PROJE_API_ANAHTARI',
      'Content-Type': 'application/json'
    }
  });
  console.log(response.data);
}
const res = await fetch(`https://destek.sensofta.com/api/index.php/tickets/${ticketId}/messages`, {
  method: 'POST',
  headers: {
    'X-API-Key': 'PROJE_API_ANAHTARI',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    message: '<p>Müşteri yeni yanıtı...</p>',
    email: 'musteri@ornek.com'
  })
});
const data = await res.json();
<?php
$ticketId = 1;
$ch = curl_init("https://destek.sensofta.com/api/index.php/tickets/{$ticketId}/messages");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'X-API-Key: PROJE_API_ANAHTARI',
        'Content-Type: application/json'
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'message' => '<p>Yanıt mesajı...</p>',
        'email' => 'musteri@ornek.com'
    ])
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
import requests

ticket_id = 1
url = f"https://destek.sensofta.com/api/index.php/tickets/{ticket_id}/messages"
headers = {
    "X-API-Key": "PROJE_API_ANAHTARI",
    "Content-Type": "application/json"
}
payload = {
    "message": "<p>Yanıt içeriği</p>",
    "email": "musteri@ornek.com"
}

response = requests.post(url, json=payload, headers=headers)
print(response.json())
POST /api/index.php/upload
Headers:
  X-API-Key: PROJE_API_ANAHTARI
  Content-Type: multipart/form-data

Form Data:
  file: [GÖRSEL/DOKÜMAN DOSYASI]
const FormData = require('form-data');
const fs = require('fs');
const axios = require('axios');

async function uploadFile() {
  const form = new FormData();
  form.append('file', fs.createReadStream('./hata.png'));

  const response = await axios.post('https://destek.sensofta.com/api/index.php/upload', form, {
    headers: {
      'X-API-Key': 'PROJE_API_ANAHTARI',
      ...form.getHeaders()
    }
  });
  console.log('Dosya ID:', response.data.data.id);
}
const formData = new FormData();
formData.append('file', fileInput.files[0]);

const res = await fetch('https://destek.sensofta.com/api/index.php/upload', {
  method: 'POST',
  headers: { 'X-API-Key': 'PROJE_API_ANAHTARI' },
  body: formData
});
const { data } = await res.json();
// data.id bilgisini talebe attachments dizisi olarak geçebilirsiniz
<?php
$ch = curl_init('https://destek.sensofta.com/api/index.php/upload');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['X-API-Key: PROJE_API_ANAHTARI'],
    CURLOPT_POSTFIELDS => [
        'file' => new CURLFile('/yol/dosya.png')
    ]
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
import requests

url = "https://destek.sensofta.com/api/index.php/upload"
headers = {"X-API-Key": "PROJE_API_ANAHTARI"}
files = {"file": open("ekran_goruntusu.png", "rb")}

response = requests.post(url, headers=headers, files=files)
print(response.json())
1 Satırlık Gömülü (Embed) Destek Widget'ı

Web sitelerinizin sağ alt köşesine hazır sohbet butonu eklemek için aşağıdaki script kodunu </body> etiketinden önce yapıştırın.

<script src="<?= APP_URL ?>/widget/embed.php?project_key=PROJE_API_ANAHTARI"></script>
<link rel="stylesheet" href="<?= APP_URL ?>/assets/css/widget.css">