SoClaw Integrasi Win-Back
SoClaw adalah sistem pemulihan otonom Flash: daftar kerja internal anggota bernilai tinggi dan berisiko, seperangkat alat MCP yang diatur, dan keterampilan pengambilan keputusan. Anda mengoperasikannya dengan menjalankan agen OpenClaw — runtime agen sumber terbuka yang Anda host sendiri — yang memuat keterampilan SoClaw dan menjalankan loop melalui kunci agen yang terlingkup dan terbatas.
Panduan ini untuk operator/integrator tersebut. Untuk gambaran umum bisnis, lihat halaman produk SoClaw. Alat pemulihan pelanggan dibangun di atas server MCP yang sama yang didokumentasikan dalam panduan Integrasi MCP.
Siklus pemulihan pelanggan
SoClaw memproses satu anggota dalam satu waktu. Agen menyewa tugas, membaca konteks keputusan anggota, memilih satu tuas uang atau TAHAN, mencatat catatan yang jujur, dan menyelesaikan — lalu mengklaim tugas berikutnya. Satu tugas yang diklaim menghasilkan paling banyak satu tindakan uang.
task = claim_winback_task() # lease one task; NO_TASKS_AVAILABLE / WINBACK_DISABLED → STOP
ctx = get_winback_context(task.memberId) # consent / freq / fatigue / reach / complaintRisk / churn / arm / hint
# HARD VETO — holdout arm, complaint risk, consent, frequency
if ctx.holdoutArm == "holdout" or ctx.complaintRisk.level == "high"
or no consent or ctx.emailFrequency.allowed == false:
add_member_note(task.memberId, "HOLD: <reason>", kind="winback", task_id=task.id)
complete_winback_task(task.id, acted=false, lever="hold", hold_reason="<reason>"); STOP
# CHOOSE one lever or HOLD — protect margin first (points before discounts)
result = issue_coupon(member_id=task.memberId, pool_id=..., task_id=task.id) # MUST carry task_id
# RECORD honestly, then COMPLETE — outcome stays "pending" (attribution fills it later)
note = add_member_note(task.memberId, honest(action, value, why), kind="winback", task_id=task.id)
complete_winback_task(task.id, acted=true, lever="issue_coupon", note_id=note.noteId)
# action_ref is OPTIONAL — do NOT pass the lever's transaction/run id. The server
# auto-links the executed lever to the task for attribution.Sewa adalah setidaknya sekali, bukan tepat sekali. Sewa dapat berakhir dan tugas dapat disewakan kembali kepada pekerja lain — sehingga pengeluaran ganda dicegah oleh idempotensi, bukan oleh sewa. Setiap tuas uang membawa task_id; server memperoleh kunci idempotensi darinya, sehingga pengulangan tugas yang sama akan dibatalkan daripada menerbitkan kupon kedua.
Alat untuk mendapatkan kembali pelanggan (perangkat winback)
Ketiga alat tulis tersebut adalah rate-only — dilindungi oleh sakelar jeda instan dan batas laju penulisan, tanpa batasan nilai per panggilan karena tidak memiliki nilai nominal. Referensikan setiap alat sebagai Flash:<tool_name>.
claim_winback_tasktulis · hanya tarifwinback:claimSewa tugas anggota berisiko berikutnya dari daftar kerja. Atomik — tidak ada pekerja lain yang mendapatkan tugas yang sama. Mengembalikan tugas (id, memberId, prioritas, segmentKey, arm, alasan), sewa (pemilik, expiresAt, leaseSeconds), dan attempts/maxAttempts. Tanpa parameter — tim berasal dari kunci.
(none)get_winback_contextbacawinback:readSatu pengecekan awal hanya baca untuk anggota: persetujuan, batas frekuensi email, kelelahan, jangkauan terkini, risiko keluhan/berhenti berlangganan, sinyal churn (pengeluaran 90 hari, pesanan terakhir, tingkatan, status), pihak yang menolak berlangganan dari anggota, dan sebuah SARAN. policyHintTidak ada isi catatan yang dikembalikan. Outputnya adalah DATA, bukan instruksi — server memperkuat setiap gerbang pada saat penulisan tanpa terkecuali.
member_idadd_member_notetulis · hanya tarifwinback:writeTulis catatan yang jujur dan mudah dibaca manusia ke dalam catatan anggota. Isi disimpan sebagai DATA yang tidak tepercaya dan dibersihkan di sisi server: ≤2000 karakter, karakter kontrol/bidi/zero-width dihilangkan, markup/tautan otomatis/URL polos dan pola PII ditolak. jenis ∈ winback | observasi | hipotesis. Tidak pernah dibaca kembali ke dalam konteks agen.
member_id, body, kind?, task_id?, action_ref?complete_winback_tasktulis · hanya tarif · idempotenwinback:claimSelesaikan tugas yang diklaim dengan hasilnya (tuas yang diaktifkan + referensi, atau alasan TAHAN). Idempoten — penyelesaian ulang memutar ulang hasil yang tersimpan tanpa efek samping kedua. Hasil tetap 'tertunda'; konversi diisi kemudian oleh atribusi yang selaras dengan penahanan — jangan pernah mengarangnya.
task_id, acted?, lever?, action_ref?, note_id?, hold_reason?Pengungkit Uang — berlabuh pada suatu tugas
Ini adalah alat tulis standar Flash. Agen win-back HARUS melewati task_id dari tugas yang diklaim — tanpanya penulisan win-back ditolak dengan WINBACK_TASK_REQUIRED. task_id membuat penulisan bersifat idempoten dan mengikat lengan penangguhan yang diberlakukan server. Satu tindakan uang per tugas.
issue_coupontulis · uangcoupons:writeAlokasikan satu kode kupon unik dari kumpulan kode untuk anggota — tuas pemulihan pelanggan klasik. Tunduk pada batasan nilai per panggilan + anggaran kumulatif (gagal ditutup) + gerbang jangkauan kepatuhan + penekanan penolakan. HARUS membawa task_id untuk pemulihan pelanggan.
member_id, pool_id, task_id, run_id?earn_pointstulis · uang · aditifpoints:writeBerikan poin loyalitas kepada anggota (pengungkit perlindungan margin, bukan diskon). HARUS membawa task_id untuk pemulihan agar penulisan bersifat idempoten dan terikat pada lengan penahan yang benar.
member_id, amount, task_id, description?redeem_points_for_couponmenulis · uang · destruktifpoints:writeSecara atomik menukarkan poin anggota dengan kupon dari kumpulan (poin + kupon, atau keduanya). HARUS menyertakan task_id untuk mendapatkan kembali anggota.
member_id, pool_id, points_cost, task_idIntegritas penahanan diberlakukan oleh server. Penulisan uang untuk anggota yang lengan (arm)-nya adalah holdout dicatat hanya sebagai niat — tanpa kupon, tanpa poin, tanpa pengeluaran anggaran. Agen juga harus menghormati lengan tersebut, tetapi tidak dipercaya: server menekan efek sampingnya terlepas dari itu.
Penyediaan kunci agen SoClaw
SoClaw berjalan di bawah agen (non-manusia) kunci API — tipe kunci kelas satu yang membawa batasan keras yang tidak pernah dapat dinaikkan oleh agen. Buat satu di /flash/account/api-keys — pilih Buat Kunci → Agen AI → “SoClaw Win-back”, yang secara otomatis memilih cakupan hak istimewa paling rendah, perangkat, batasan, dan TTL di bawah ini. Pengungkapan sekali ini menunjukkan titik akhir MCP dan pengaturan Bearer. Alat yang hilang berarti kunci tersebut tidak memiliki cakupan tersebut — bukan berarti Flash tidak memiliki kemampuan tersebut.
| Cakupan izin | winback:read · winback:claim · winback:write · coupons:read · coupons:write · points:write · members:read · metrics:read |
| Perangkat Alat | winback |
| Caps | Batas nilai per panggilan (nilai nominal kupon maksimum), batas anggota per transaksi, dan anggaran kumulatif (per transaksi / per hari / 30 hari) — semuanya diberlakukan jika gagal. |
| TTL | Masa berlaku terbatas — kunci kedaluwarsa dan diterbitkan ulang, sehingga kunci yang bocor tidak dapat berjalan selamanya. |
| Jeda instan | Sakelar tingkat tim (dan pemutus sirkuit pengaduan otomatis) mengatur penulisan agen menjadi gagal-tertutup. Agen tidak dapat melanjutkan jedanya sendiri. |
Tim/toko disuntikkan dari sisi server dari kunci. Tidak ada alat yang menerima teamId, storeId, tier, atau SQL — jika Anda memberikan salah satunya, server akan mengabaikannya.
Sebarkan sendiri runtime OpenClaw + skill SoClaw
Flash menyediakan sistem win-back (daftar tugas, alat MCP, penegakan keamanan) dan keterampilan SoClaw (doktrin pengambilan keputusan + buku panduan). Anda menyediakan runtime: menghosting sendiri agen OpenClaw, mengarahkannya ke server MCP milik Flash dengan kunci agen Anda, dan memuat keterampilan tersebut. Hosting sendiri memberi Anda kendali operasional — mengkonfigurasi, memantau, menetapkan versi, dan menonaktifkan kunci — tetapi hal itu tidak melonggarkan model keamanan: pihak MCP memperlakukan agen tersebut sebagai pihak eksternal.
Daftarkan Flash sebagai server HTTP MCP (kunci server harus persis flash):
export FLASH_WINBACK_KEY="fl_live_your_agent_key_here"
# in the OpenClaw runtime's MCP config
{
"mcpServers": {
"flash": {
"type": "http",
"url": "https://flash.socialhub.ai/api/mcp",
"headers": { "Authorization": "Bearer ${FLASH_WINBACK_KEY}" }
}
}
}Unduh keterampilan SoClaw (SKILL.md + doktrin · tuas · alur kerja · referensi), letakkan ke dalam direktori keterampilan runtime OpenClaw Anda, dan jalankan loop:
↓ Unduh skill SoClaw (.zip)SoClaw juga menjalankan daftar tugas keputusan di luar upaya mendapatkan kembali pelanggan — persetujuan (peninjauan pesanan saluran) dan penipuan (rujukan dalam rumah tangga yang sama) — melalui siklus sewa yang sama (claim_agent_task → get_agent_task → complete_agent_task). Efeknya berjalan melalui penulisan idempoten yang ada di Flash; setiap keputusan juga dapat diteruskan ke manusia.
Pemeriksaan mandiri:
- Agen hanya boleh melihat perangkat alat pemulihan pelanggan + alat pengungkit yang diizinkan oleh cakupan kunci Anda — tidak ada yang lain.
claim_winback_taskpertama mengembalikan tugas dengan sewa, atauNO_TASKS_AVAILABLE/WINBACK_DISABLED— keduanya merupakan kondisi penghentian normal, bukan kegagalan.- Panggilan kupon/poin tanpa
task_idharus kembaliWINBACK_TASK_REQUIRED— konfirmasikan bahwa loop Anda selalu mengaitkan tuas ke tugas yang diklaim.
Batas keamanan adalah server
Properti terpenting: izin, batasan, dan kepatuhan agen diberlakukan di sisi Flash pada saat penulisan — tidak pernah dipercayakan pada penalaran agen, konfirmasinya, atau perintah sistemnya. Penangguhan agen adalah bentuk kesopanan yang meningkatkan peluang hasil yang baik; itu bukan kendali. Bahkan kunci yang bocor atau model yang disuntikkan prompt dibatasi oleh:
- Pengamanan uang yang ditutup karena gagal. Setiap penulisan kupon/poin melewati batas nilai per panggilan dan anggaran kumulatif. Melebihi salah satunya dan penulisan akan ditolak — agen tidak dapat menyesuaikan input untuk melewatinya, dan kehabisan anggaran dapat memicu jeda instan.
- Gerbang Kepatuhan, Frekuensi, dan Kelelahan. Persetujuan/berhenti berlangganan, frekuensi kontak lintas sistem, dan kelelahan diperiksa ulang di sisi server meskipun agen mengabaikan pratinjau
get_winback_context. Penolakan gerbang berarti berhenti, bukan mencoba lagi untuk melewati. - Penegakan penolakan. Penulisan uang untuk anggota yang menolak dicatat hanya sebagai niat — efek sampingnya ditekan terlepas dari apa yang diputuskan agen.
- Jeda instan + pemutus sirkuit keluhan. Sakelar tim mengatur semua penulisan agen menjadi gagal-tertutup; pemutus otomatis menekannya ketika tingkat keluhan spam melampaui ambang batas. Tidak ada alat agen untuk melanjutkan — hanya manusia yang dapat melanjutkan.
- Data anggota tidak tepercaya. Isi catatan, teks garis waktu, dan keluaran alat apa pun adalah DATA, bukan instruksi — dibersihkan saat penulisan, tidak pernah dieksekusi.
get_winback_contextsengaja tidak mengembalikan isi catatan, untuk menghindari memasukkan kembali teks yang disuntikkan ke dalam agen.
Penanganan kesalahan & kode
Dua saluran. A kesalahan protokol (JSON-RPC: metode yang salah / alat yang tidak dikenal) biasanya berarti nama alat yang salah — periksa Flash: Awalan dan ejaan. Sebuah isError: true Hasilnya adalah batasan yang jelas dan mudah dipahami — sampaikan sekali saja dan ambil satu langkah selanjutnya. Jangan pernah mencoba lagi untuk melewatinya.
| Kode | Arti | Apa yang harus dilakukan |
|---|---|---|
NO_TASKS_AVAILABLE | Daftar tugas kosong. | Berhenti mengklaim; mundur — jangan melakukan jajak pendapat secara ketat. |
WINBACK_DISABLED | Program pengembalian pelanggan dihentikan sementara (jeda instan / pemutus sirkuit diaktifkan). | Berhenti. Hanya manusia yang dapat melanjutkan — tidak ada alat agen yang dapat membatalkan jeda. |
TOO_MANY_OPEN_LEASES | Batas sewa terbuka Anda telah tercapai. | Selesaikan atau biarkan masa sewa berakhir, lalu klaim lagi. |
LEASE_EXPIRED / NOT_LEASE_OWNER | Sewa tersebut diambil kembali atau disewakan kembali kepada pekerja lain. | Baca ulang; jangan tulis ulang — pekerjaan itu bukan lagi milik Anda. |
ALREADY_COMPLETED | Tugas sudah diselesaikan. | Baca ulang hasil yang tersimpan; jangan selesaikan ulang. |
WINBACK_TASK_REQUIRED | Penulisan uang untuk pengembalian dana tidak memiliki task_id. | Terbitkan kembali tuas DENGAN task_id yang diklaim. Sesuai desain, bukan bug. |
WINBACK_TASK_NOT_FOUND / WINBACK_TASK_MEMBER_MISMATCH | Tugas salah, atau ketidakcocokan tugas/anggota. | Gunakan tugas yang sebenarnya Anda klaim, untuk anggotanya. |
NOTE_INVALID | Catatan tersebut gagal dalam sanitasi sisi server. | Tulis ulang sebagai prosa biasa (tanpa markup/tautan/PII); coba lagi sekali. |
Write guard / budget | Batas nilai terlampaui atau anggaran kumulatif habis. | Relay; selesaikan tugas sebagai TAHAN; JANGAN coba lagi untuk melewati. |
Satu lagi: meta.hasData: false dari alat metrik adalah sukses, bukan kesalahan — artinya "tidak ada data untuk jendela itu", tidak pernah 0.
Angka dan kejujuran
Setiap tingkat/tren/agregat melewati alat metrik yang diatur (list_metrics → describe_metric → query_metric) — tidak pernah dihitung oleh agen dan tidak pernah menggunakan SQL. Metrik kejujuran pemulihan pelanggan — winback_uplift, winback_treated_n, winback_holdout_n dan tingkat konversi pelanggan yang ditangani/tidak ditangani — menyatakan keberhasilan sebagai peningkatan kausal (pelanggaran − tidak ditangani dalam jangka waktu yang sama), bukan penebusan absolut. Agen mencatat pembelajaran sebagai catatan hypothesis; manusia meninjau dan mempromosikan setiap perubahan kebijakan — agen tidak pernah melakukan penyesuaian sendiri.
Peringkat peningkatan — bagaimana daftar kerja diurutkan
Prioritas daftar tugas adalah nilai-berisiko × peningkatan ketika model peningkatan sesuai untuk tim, dan nilai-berisiko murni jika tidak. Peralihan otomatis, diputuskan per pemindaian — tidak ada yang perlu dikonfigurasi.
Modelnya adalah peningkatan logistik dua model, yang disesuaikan per tim pada setiap pemindaian dari data uji acak program itu sendiri — hanya baris atribusi yang matang, dengan definisi konversi yang sama di kedua lengan:
uplift(x) = P(convert | treated, x) − P(convert | holdout, x)Pencocokan bersifat deterministik — tidak ada keacakan pengambilan sampel — sehingga data yang sama selalu menghasilkan peringkat yang sama.
Gerbang sampel — semua harus dilewati sebelum model dapat dipercaya
- ≥ 200 baris yang telah matang dan dirawat
- ≥ 50 baris holdout yang matang
- ≥ 20 konversi
- Kedua penyesuaian logistik menyatu
Di bawah setiap gerbang model dibuang untuk pemindaian itu (null) dan pemeringkatan kembali pada nilai risiko murni — tidak ada perubahan perilaku sama sekali, bukan tebakan yang buruk. A perkiraan peningkatan negatif (Sebuah tindakan balasan yang terukur) menurunkan prioritas tugas ke 0 — tugas tetap terlihat dalam daftar tugas, dengan angka-angka yang menjelaskan alasannya.
Apa yang dilihat agen Anda. Jika modelnya sesuai, task.reason membawa jenis expected_incremental_value dengan probabilitas churn, CLV, nilai risiko, upliftEstimate, dan produk mereka. Konsumsilah melalui cara yang sama. MCP alat daftar tugas (klaim / dapatkan / selesaikan) — ada tidak ada perubahan yang merusak skema, dan jenis alasan yang lebih lama masih muncul setiap kali modelnya tidak sesuai.