Quizler
Quizler, kullanıcıların soruları cevaplayarak puan kazandığı bilgi tabanlı içeriklerdir. Her quiz, önceden tanımlanmış cevap seçenekleriyle bir veya daha fazla soru içerir.
İçerik segmente edilmişse, bu endpointler yalnızca mevcut kullanıcıyla eşleşen içerikleri döndürür.
Quizleri Listele
Mevcut quizlerin sayfalanmış listesini alın.
/v1/quizzesQuery Parametreleri
| Parametre | Tür | Açıklama |
|---|---|---|
page[number] | integer | Sayfa numarası (varsayılan: 1) |
filter[answered] | boolean | Cevaplanma durumuna göre filtrele. 0/1 veya true/false kabul eder |
Örnek İstek
curl -X GET "https://marka.prod.loyetta.com/api/v1/quizzes?page[number]=1" \
-H "Authorization: Bearer {musteri-tokeni}" \
-H "Accept: application/json"Yanıt
{
"data": [
{
"id": "1a5c77ff",
"title": "Genel Kültür Quizi",
"description": "Genel kültür bilginizi test edin!",
"points": 100,
"image": {
"url": "https://example.com/quiz.jpg",
"sizes": {
"full": "https://example.com/quiz.webp",
"large": "https://example.com/quiz-large.webp",
"thumbnail": "https://example.com/quiz-thumb.webp"
}
},
"share_text": "Az önce bir quiz tamamladım! Sen de dene.",
"questions": [
{
"id": "q1a2b3",
"content": "Fransa'nın başkenti neresidir?",
"answers": [
{
"id": "a1x2y3",
"content": "Paris"
},
{
"id": "a4x5y6",
"content": "Londra"
}
]
}
]
}
],
"links": {
"first": "https://marka.prod.loyetta.com/api/v1/quizzes?page[number]=1",
"last": "https://marka.prod.loyetta.com/api/v1/quizzes?page[number]=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"path": "https://marka.prod.loyetta.com/api/v1/quizzes",
"per_page": 15,
"to": 1,
"total": 1
}
}Quiz Nesnesi
| Alan | Tür | Açıklama |
|---|---|---|
id | string | Benzersiz quiz tanımlayıcısı |
title | string | Quiz başlığı |
description | string | Quiz açıklaması |
points | integer | Quiz tamamlandığında kazanılan puan |
image | object | url ve sizes içeren görsel nesnesi (aşağıdaki Görsel Nesnesi bölümüne bakın) |
share_text | string | Sistem paylaşım diyaloğunda kullanılacak metin |
questions | array | Quiz soruları dizisi |
Soru Nesnesi
| Alan | Tür | Açıklama |
|---|---|---|
id | string | Soru tanımlayıcısı |
content | string | Soru metni |
answers | array | Olası cevaplar dizisi |
Cevap Nesnesi
| Alan | Tür | Açıklama |
|---|---|---|
id | string | Cevap tanımlayıcısı |
content | string | Cevap metni |
Görsel Nesnesi
| Alan | Tür | Açıklama |
|---|---|---|
url | string | Ham görsel URL'i, her zaman mevcuttur |
sizes.full | string | null | WebP formatında orijinal boyutlar |
sizes.large | string | null | WebP formatında maks. 1920px genişlik |
sizes.thumbnail | string | null | WebP formatında maks. 400px genişlik |
image.url alanı her zaman mevcuttur. Ancak image.sizes değerleri, görseller işlenirken null olabilir. Her zaman bir fallback deseni kullanın: image.sizes.thumbnail ?? image.url veya image.sizes.large ?? image.url.
Quiz Detayı
Belirli bir quizin soruları ve cevapları dahil detaylı bilgilerini alın.
/v1/quizzes/{quiz}Listeleme endpoint'i de içerik verilerini döndürse de, kullanıcı belirli bir içerikle etkileşime geçtiğinde bu detay endpoint'ini çağırmanız önerilir. Bu istek arka planda yapılabilir ve Loyetta'nın analitiği doğru şekilde takip etmesine yardımcı olur.
Path Parametreleri
| Parametre | Tür | Açıklama |
|---|---|---|
quiz | string | Alınacak quizin ID'si |
Örnek İstek
curl -X GET "https://marka.prod.loyetta.com/api/v1/quizzes/1a5c77ff" \
-H "Authorization: Bearer {musteri-tokeni}" \
-H "Accept: application/json"Yanıt
{
"success": true,
"data": {
"id": "1a5c77ff",
"title": "Genel Kültür Quizi",
"description": "Genel kültür bilginizi test edin!",
"points": 100,
"image": {
"url": "https://example.com/quiz.jpg",
"sizes": {
"full": "https://example.com/quiz.webp",
"large": "https://example.com/quiz-large.webp",
"thumbnail": "https://example.com/quiz-thumb.webp"
}
},
"share_text": "Az önce bir quiz tamamladım! Sen de dene.",
"questions": [
{
"id": "q1a2b3",
"content": "Fransa'nın başkenti neresidir?",
"answers": [
{
"id": "a1x2y3",
"content": "Paris"
},
{
"id": "a4x5y6",
"content": "Londra"
},
{
"id": "a7x8y9",
"content": "Berlin"
}
]
}
]
}
}Hata Yanıtı (404)
{
"success": false,
"message": "Quiz not found"
}Quiz Cevaplarını Gönder
Belirli bir quiz için kullanıcının cevaplarını gönderin. Her soru için tek bir cevap kabul edilir. Puanlar doğruluğa göre verilir.
/v1/quizzes/{quiz}/answersPath Parametreleri
| Parametre | Tür | Açıklama |
|---|---|---|
quiz | string | Quizin ID'si |
İstek Gövdesi
İstek gövdesi bir JSON cevap dizisidir:
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | integer | Evet | Soru ID'si |
answer_id | integer | Evet | Seçilen cevabın ID'si |
Örnek İstek
curl -X POST "https://marka.prod.loyetta.com/api/v1/quizzes/1a5c77ff/answers" \
-H "Authorization: Bearer {musteri-tokeni}" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '[
{
"id": 1,
"answer_id": 3
},
{
"id": 2,
"answer_id": 7
}
]'Başarılı Yanıt
{
"success": true,
"message": "Tebrikler! Quiz'i cevaplayarak 100 puan kazandınız.",
"correct": true,
"correct_answers": {
"1": 3,
"2": 7
},
"earned_points": 100,
"user": {
"points": 1500
}
}Başarılı Yanıt Alanları
| Alan | Tür | Açıklama |
|---|---|---|
success | boolean | Gönderimin başarılı olup olmadığı |
message | string | Geri bildirim mesajı |
correct | boolean | Tüm cevapların doğru olup olmadığı |
correct_answers | object | Soru ID'lerinin doğru cevap ID'lerine eşlemesi |
earned_points | integer | Bu quizden kazanılan puan |
user.points | integer | Kullanıcının güncellenmiş toplam puan bakiyesi |
Hata Yanıtı (400) — Daha Önce Cevaplanmış
{
"success": false,
"message": "Bu quiz'i daha önce cevaplamışsınız."
}Hata Yanıtı (422) — Doğrulama Hatası
Geçersiz soru ID'si veya cevap ID'si gönderildiğinde döndürülür.
Her quiz, kullanıcı başına yalnızca bir kez cevaplanabilir. Tekrar cevap göndermeye çalışmak 400 hatası döndürür.
Quiz Paylaş
Kullanıcı bir quizi paylaştığında paylaşım aksiyonunu kaydedin. Analitik ve etkileşim takibi için kullanılabilir.
/v1/quizzes/{quiz}/sharePath Parametreleri
| Parametre | Tür | Açıklama |
|---|---|---|
quiz | string | Quizin ID'si |
Örnek İstek
curl -X POST "https://marka.prod.loyetta.com/api/v1/quizzes/1a5c77ff/share" \
-H "Authorization: Bearer {musteri-tokeni}" \
-H "Accept: application/json"Yanıt
{
"success": true
}