Anketler
Anketler, kullanıcıların sorulara yanıt vererek puan kazandığı etkileşim içerikleridir. Quizlerden farklı olarak anketlerde doğru veya yanlış cevap yoktur — kullanıcı görüşleri toplanır. Anket soruları çoktan seçmeli (opsiyonel çoklu seçim) ve serbest metin (paragraf) yanıtlarını destekler.
İçerik segmente edilmişse, bu endpointler yalnızca mevcut kullanıcıyla eşleşen içerikleri döndürür.
Anketleri Listele
Mevcut anketlerin sayfalanmış listesini alın.
/v1/pollsQuery Parametreleri
| Parametre | Tür | Açıklama |
|---|---|---|
page[number] | integer | Sayfa numarası (varsayılan: 1) |
filter[answered] | integer | Cevaplanma durumuna göre filtrele. 0 veya 1 kabul eder |
Örnek İstek
curl -X GET "https://marka.prod.loyetta.com/api/v1/polls?page[number]=1" \
-H "Authorization: Bearer {musteri-tokeni}" \
-H "Accept: application/json"Yanıt
{
"data": [
{
"id": "2b6d88aa",
"title": "Müşteri Memnuniyet Anketi",
"description": "Geri bildiriminizi paylaşarak bize yardımcı olun.",
"points": 50,
"image": {
"url": "https://example.com/anket.jpg",
"sizes": {
"full": "https://example.com/anket.webp",
"large": "https://example.com/anket-large.webp",
"thumbnail": "https://example.com/anket-thumb.webp"
}
},
"share_text": "Az önce bir anket tamamladım! Sen de fikirlerini paylaş.",
"questions": [
{
"id": "pq1a2b",
"content": "Hizmetimizden ne kadar memnunsunuz?",
"type": "multiple_choice",
"allow_multiple_answers": false,
"answers": [
{
"id": "pa1x2y",
"content": "Çok memnunum"
},
{
"id": "pa3x4y",
"content": "Memnunum"
},
{
"id": "pa5x6y",
"content": "Kararsızım"
}
]
},
{
"id": "pq3c4d",
"content": "Neleri geliştirebiliriz?",
"type": "paragraph",
"allow_multiple_answers": false,
"answers": []
}
]
}
],
"links": {
"first": "https://marka.prod.loyetta.com/api/v1/polls?page[number]=1",
"last": "https://marka.prod.loyetta.com/api/v1/polls?page[number]=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"path": "https://marka.prod.loyetta.com/api/v1/polls",
"per_page": 15,
"to": 1,
"total": 1
}
}Anket Nesnesi
| Alan | Tür | Açıklama |
|---|---|---|
id | string | Benzersiz anket tanımlayıcısı |
title | string | Anket başlığı |
description | string | Anket açıklaması |
points | integer | Anket 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 | Anket soruları dizisi |
Soru Nesnesi
| Alan | Tür | Açıklama |
|---|---|---|
id | string | Soru tanımlayıcısı |
content | string | Soru metni |
type | string | Soru tipi: multiple_choice veya paragraph |
allow_multiple_answers | boolean | Birden fazla cevap seçilip seçilemeyeceği (yalnızca multiple_choice için geçerli) |
answers | array | Olası cevaplar dizisi (paragraph tipi için boş) |
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.
Anket Detayı
Belirli bir anketin soruları ve cevapları dahil detaylı bilgilerini alın.
/v1/polls/{poll}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 |
|---|---|---|
poll | string | Alınacak anketin ID'si |
Örnek İstek
curl -X GET "https://marka.prod.loyetta.com/api/v1/polls/2b6d88aa" \
-H "Authorization: Bearer {musteri-tokeni}" \
-H "Accept: application/json"Yanıt
{
"success": true,
"data": {
"id": "2b6d88aa",
"title": "Müşteri Memnuniyet Anketi",
"description": "Geri bildiriminizi paylaşarak bize yardımcı olun.",
"points": 50,
"image": {
"url": "https://example.com/anket.jpg",
"sizes": {
"full": "https://example.com/anket.webp",
"large": "https://example.com/anket-large.webp",
"thumbnail": "https://example.com/anket-thumb.webp"
}
},
"share_text": "Az önce bir anket tamamladım! Sen de fikirlerini paylaş.",
"questions": [
{
"id": "pq1a2b",
"content": "Hizmetimizden ne kadar memnunsunuz?",
"type": "multiple_choice",
"allow_multiple_answers": false,
"answers": [
{
"id": "pa1x2y",
"content": "Çok memnunum"
},
{
"id": "pa3x4y",
"content": "Memnunum"
},
{
"id": "pa5x6y",
"content": "Kararsızım"
}
]
},
{
"id": "pq3c4d",
"content": "Neleri geliştirebiliriz?",
"type": "paragraph",
"allow_multiple_answers": false,
"answers": []
}
]
}
}Hata Yanıtı (404)
{
"success": false,
"message": "Poll not found"
}Anket Cevaplarını Gönder
Belirli bir anket için kullanıcının yanıtlarını gönderin. Her soru, yapılandırmasına bağlı olarak bir veya daha fazla cevap kabul edebilir.
/v1/polls/{poll}/answersPath Parametreleri
| Parametre | Tür | Açıklama |
|---|---|---|
poll | integer | Anketin ID'si |
İstek Gövdesi
İstek gövdesi bir JSON yanıt dizisidir:
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | integer | Evet | Soru ID'si |
answers | array | Evet | Cevap nesneleri dizisi |
answers[].answer_id | integer | Evet | Seçilen cevabın ID'si (paragraf soruları için 0 gönderin veya atlayın) |
answers[].user_answer | string | Hayır | Serbest metin yanıtı (yalnızca paragraph tipi sorular için) |
Örnek İstek — Çoktan Seçmeli
curl -X POST "https://marka.prod.loyetta.com/api/v1/polls/2b6d88aa/answers" \
-H "Authorization: Bearer {musteri-tokeni}" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '[
{
"id": 1,
"answers": [
{
"answer_id": 3
}
]
}
]'Örnek İstek — Paragraf
curl -X POST "https://marka.prod.loyetta.com/api/v1/polls/2b6d88aa/answers" \
-H "Authorization: Bearer {musteri-tokeni}" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '[
{
"id": 2,
"answers": [
{
"answer_id": 0,
"user_answer": "Teslimat sürelerinin iyileştirilmesi gerektiğini düşünüyorum."
}
]
}
]'Örnek İstek — Çoklu Seçim
allow_multiple_answers değeri true olduğunda, answers dizisine birden fazla cevap gönderin:
curl -X POST "https://marka.prod.loyetta.com/api/v1/polls/2b6d88aa/answers" \
-H "Authorization: Bearer {musteri-tokeni}" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '[
{
"id": 3,
"answers": [
{ "answer_id": 5 },
{ "answer_id": 8 }
]
}
]'Başarılı Yanıt
{
"success": true,
"message": "Tebrikler! Anketi cevaplayarak 50 puan kazandınız.",
"earned_points": 50,
"user": {
"points": 1550
}
}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ı |
earned_points | integer | Bu anketten 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 anketi 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 anket, kullanıcı başına yalnızca bir kez cevaplanabilir. Tekrar cevap göndermeye çalışmak 400 hatası döndürür.
Quizlerden farklı olarak anketler correct veya correct_answers alanları döndürmez — anketlerde doğru ya da yanlış cevap yoktur.
Anket Paylaş
Kullanıcı bir anketi paylaştığında paylaşım aksiyonunu kaydedin. Analitik ve etkileşim takibi için kullanılabilir.
/v1/polls/{poll}/sharePath Parametreleri
| Parametre | Tür | Açıklama |
|---|---|---|
poll | string | Anketin ID'si |
Örnek İstek
curl -X GET "https://marka.prod.loyetta.com/api/v1/polls/2b6d88aa/share" \
-H "Authorization: Bearer {musteri-tokeni}" \
-H "Accept: application/json"Yanıt
{
"success": true
}