Bu sayfada
Genel bakış
BaşlarkenBaşlarken
Miko web sohbetinizi ve e-postanızı tek gelen kutusunda toplar. Miko AI bilgi bankanızdan yanıt verir, emin olmadığında konuşmayı ekibinize devreder.
- Kayıt sayfasından bir çalışma alanı açın.
- Bilgi ekleyin: web siteniz, yardım makaleleri ya da dokümanlar (Bilgi).
- Web sohbetini sitenize ekleyin (Ayarlar › Kanallar › Web chat).
- Destek adresinizi bağlayın (Ayarlar › Kanallar › E-posta).
Kurulumu Operatör'e de yaptırabilirsiniz: ne istediğinizi yazın, örneğin “Sitemi indeksle ve Miko AI'ı iade sorularıyla dene”; adımları canlı olarak yürütür.
Web sohbetini kurun
Kurulum kodu Ayarlar › Kanallar › Web chat › Kurulum ekranındadır ve çalışma alanınızın anahtarıyla hazır gelir. Sohbetin görüneceği her sayfada kapanış </body> etiketinden önce ekleyin.
<script src="https://getmiko.co/widget.js" data-key="YOUR_WORKSPACE_KEY" async></script>Tek sayfalı bir uygulamada aynı betiği uygulama açılırken koddan yükleyin:
const script = document.createElement("script");
script.src = "https://getmiko.co/widget.js";
script.dataset.key = "YOUR_WORKSPACE_KEY";
script.async = true;
document.body.appendChild(script);İzinli siteler: web sohbeti ayarlarında alan adlarınızı listelerseniz sohbet yalnızca bu sitelerde açılır. Liste boşsa kodun eklendiği her yerde açılır.
Giriş yapmış kullanıcıları tanıtın
Ziyaretçi sitenizde oturum açmışsa kimliğini ve bilgilerini koddan önce verin. Konuşmaları cihazdan cihaza onu izler ve aynı kişi kartına düşer.
<script>
window.mikoSettings = {
userId: "u_123",
userHash: "<computed on your server>",
email: "[email protected]",
name: "Ada Lovelace",
company: { id: "c_42", name: "Acme", plan: "Pro" },
attributes: { orders: 12 }
};
</script>
<script src="https://getmiko.co/widget.js" data-key="YOUR_WORKSPACE_KEY" async></script>Yalnızca kimliğe güvenilir, o da eşleşen userHash ile: kullanıcı kimliğinin kimlik gizli anahtarınızla (Ayarlar › Kanallar › Web chat › Güvenlik) alınmış HMAC-SHA256 değeri. Bunu sunucunuzda hesaplayın; gizli anahtarı asla sayfaya koymayın. Eksik ya da yanlış hash reddedilir.
import { createHmac } from "node:crypto";
// On your server, never in the page.
const userHash = createHmac("sha256", process.env.MIKO_IDENTITY_SECRET)
.update(user.id)
.digest("hex");Çıkış yapıldığında oturumu kapatın ki cihazdaki sonraki kişi temiz başlasın:
Miko("shutdown");JavaScript API
Kod yüklendikten sonra sayfa sohbeti window.Miko ile yönetebilir:
Miko("open")- Sohbeti açar.
Miko("close")- Kapatır.
Miko("toggle")- Kapalıysa açar, açıksa kapatır.
Miko("hide")- Başlatıcı düğmeyi kaldırır; sohbeti kendi düğmesinden açan siteler için.
Miko("show")- Başlatıcıyı geri getirir.
Miko("newMessage", "…")- Sohbeti bir mesaj yazılmış olarak açar (en fazla 2.000 karakter).
Miko("identify", { userId, userHash, … })- Sayfa yüklendikten sonra kullanıcıyı tanıtır, örneğin girişin hemen ardından.
Miko("shutdown")- Giriş yapmış kullanıcıyı unutur.
Miko("on", "unread", fn)- open, close ve unread olaylarını dinler.
Miko("off", "unread", fn)- Dinlemeyi bırakır.
E-postayı bağlayın
Ayarlar › Kanallar › E-posta iki yol sunar:
- Destek adresinizi Miko'nun çalışma alanınıza verdiği gelen kutusu adresine yönlendirin. Her e-posta bir konuşma olur; müşterileriniz kendi adresinize yazmaya devam eder.
- Ya da posta kutusunun kendisini IMAP ve SMTP ile bağlayın (Gmail, Outlook ya da kendi sunucunuz). Miko yeni e-postaları okur, yanıtları onun üzerinden gönderir.
Yanıtların kendi alan adınızdan gitmesi için Alan adları ve adresler bölümündeki DKIM ve return-path kayıtlarını ekleyin; ekran bunları sizin için kontrol eder. DMARC, imzasız e-postalarla ne yapılacağını posta sağlayıcılarına söyler.
Bilgi bankası
Miko AI yalnızca buraya eklediklerinizden yanıt verir ve her yanıtta dayandığı makaleyi ya da sayfayı gösterir.
- Web sitesi: sayfalar taranır ve eşitlenir; her eşitleme geçmişte saklanır.
- Yardım merkezi makaleleri: yardım merkezinizde yayımlanır, Miko AI da kullanır.
- Dahili makaleler: Miko AI ve Cue kullanır, müşteriye asla gösterilmez.
- Snippet'ler: makale gerektirmeyen kısa bilgiler ve yanıtlar.
- Dokümanlar: yüklediğiniz dosyalar, örneğin iade politikası.
Miko AI ve insana devir
Miko AI konuşmanın dilinde yanıt verir. Bilgi bankanızda yanıt yoksa ya da AI krediniz biterse konuşmayı o an müsait olan bir ekip arkadaşınıza, tüm geçmişiyle birlikte devreder.
Gelen kutusunda Cue aynı bilgiden temsilci için bir yanıt taslağı hazırlar. Temsilci düzenler ve gönderir; Cue'nun yazdığı hiçbir şey müşteriye kendiliğinden gitmez.
REST API
Ayarlar › Entegrasyonlar › Geliştiriciler altından bir anahtar oluşturun. Anahtarlar mk_live_ ile başlar ve onu oluşturan ekip arkadaşı adına çalışır: onun görebildiğini görür, yapabildiğini yapar. Anahtarı Authorization başlığında gönderin:
curl https://getmiko.co/api/dev/v1/conversations?status=open \
-H "Authorization: Bearer mk_live_…"Uç noktalar, hepsi https://getmiko.co/api/dev/v1 altında:
- GET
/conversations - Konuşmalar, en son hareket edenden başlayarak.Sorgu: status, assigneeId, search, limit (en fazla 100), cursor (önceki sayfanın pageInfo.nextCursor değeri).
- GET
/conversations/{id} - Tek bir konuşma, mesajlarıyla.
- POST
/conversations/{id}/replies - Müşteriye yanıt verir. Gövde: { "body": "…" }.
- POST
/conversations/{id}/notes - Dahili not ekler. Gövde: { "body": "…" }.
- POST
/conversations/{id}/status - Konuşmayı taşır. Gövde: { "action": "resolve" | "reopen" | "snooze" | "close", "hours": 4 } — hours yalnızca snooze için.
- POST
/procedures/{id}/runs - Bir konuşmada prosedür başlatır; prosedürün buna izin vermesi gerekir. Gövde: { "conversationId": "…", "vars": { … } }.
- POST
/signals - Sunucunuzdan bir müşteri için sinyal (ödeme sağlayıcıda başarısız oldu gibi). Gövde: { "name": "payment_failed", "customer": { "userId": "u_123" } ya da { "email": "…" }, "data": { … } }. Bu sinyale bağlı prosedür bir sohbet açar.
Sayfa aynı sinyali ziyaretçinin tarayıcısından kendisi de gönderebilir. Bu sinyale bağlı prosedür sohbeti ilk cümlesiyle açar; ziyaret başına en çok bir, kişi başına günde en çok üç sohbet açılır ve kişi ekibinizle konuşurken açılmaz.
<script>
// On the page itself, after the chat's snippet:
Miko("signal", "payment_failed", { amount: 349.9, reason: "card_declined" });
</script>Hatalar kod ve mesaj içeren JSON olarak döner:
{ "error": { "code": "…", "message": "…", "requestId": "…" } }MCP sunucusu
Miko, https://getmiko.co/mcp adresinde bir MCP sunucusudur (Streamable HTTP). Claude Code, Cursor ya da kendi ajanınızı bir geliştirici API anahtarıyla bağlayın; anahtarı oluşturan ekip arkadaşı olarak, anahtarın kapsamı ve o kişinin rolü içinde çalışır, her araç çağrısı denetim kaydına yazılır. Claude Code'da:
claude mcp add --transport http miko https://getmiko.co/mcp \
--header "Authorization: Bearer mk_live_…"Cursor'da, .cursor/mcp.json dosyasında:
{
"mcpServers": {
"miko": {
"url": "https://getmiko.co/mcp",
"headers": { "Authorization": "Bearer mk_live_…" }
}
}
}Anahtarın kapsamı hangi araçları çağırabileceğini belirler. Okuma anahtarı okur; yazma anahtarı ayrıca müşterilere yanıt verir (yanıt müşteriye gider, bu yüzden asistanlardan önce onay almaları istenir), not yazar, atar, kapatır ve oluşturur; yönetici anahtarı ayrıca kişileri birleştirir.
read- search_conversations, get_conversation, search_customers, get_customer, search_knowledge, list_tickets, get_report, list_procedures
write- reply_to_conversation, add_note, assign_conversation, close_conversation, create_ticket, create_snippet, draft_article, start_procedure
admin- merge_customers
Her araç, argümanları gövde olarak gönderilen bir REST çağrısıdır da:
curl -X POST https://getmiko.co/api/dev/v1/tools/get_report \
-H "Authorization: Bearer mk_live_…" -H "Content-Type: application/json" \
-d '{"days": 7}'Webhook'lar
Ayarlar › Entegrasyonlar › Geliştiriciler altından bir webhook ekleyin: bir https adresi ve alacağı olaylar. Test düğmesi bir webhook.test gönderimi yapar.
Olaylar:
conversation.created- Yeni bir konuşma başladı.
message.created- Müşteri yazdı.
message.replied- Bir ekip arkadaşı yanıt verdi.
message.ai_replied- Miko AI yanıt verdi.
conversation.handed_off- Miko AI konuşmayı ekibinize devretti.
conversation.status_changed- Konuşma çözüldü, yeniden açıldı, ertelendi ya da kapatıldı.
conversation.assigned- Konuşma atandı.
conversation.rated- Müşteri konuşmayı puanladı.
customer.merged- İki kişi tek kişide birleştirildi.
order.action- Bir sipariş iptali ya da iadesi hazırlandı, onaylandı, reddedildi ya da yapıldı.
Bir gönderim konuşmanın tamamını değil, kimlikleri ve olayın bilgilerini taşır; gerisini API ile okuyun.
POST /your/webhook
Miko-Signature: t=1790290000,v1=9f3c…
{
"id": "0b8e…",
"type": "conversation.handed_off",
"createdAt": "2026-09-25T09:41:00.000Z",
"workspaceId": "5d21…",
"data": { "conversationId": "4c62…" }
}Her gönderim imzalıdır. İmzayı ham gövdeden yeniden hesaplayın ve eski zaman damgalarını reddedin; bu, yakalanmış bir gönderimin tekrar oynatılmasını engeller:
import { createHmac, timingSafeEqual } from "node:crypto";
function verify(rawBody, header, secret) {
const parts = Object.fromEntries(header.split(",").map((part) => part.split("=")));
const age = Date.now() / 1000 - Number(parts.t);
if (!(age < 300)) return false; // older than five minutes
const expected = createHmac("sha256", secret).update(`${parts.t}.${rawBody}`).digest("hex");
const given = Buffer.from(parts.v1 ?? "");
return given.length === expected.length && timingSafeEqual(given, Buffer.from(expected));
}10 saniye içinde herhangi bir 2xx ile yanıt verin. Aksi her durum artan aralıklarla, en fazla altı saatte bir yeniden denenir.