Social Media

Workflow Repliz dengan Codex: Bangun Integrasi dari Repo, Bukan dari Prompt Sekali Jalan

Jawaban singkat: hal utama tentang Workflow Repliz dengan Codex: Bangun Integrasi dari Repo, Bukan dari Prompt Sekali Jalan adalah ini: Bangun integrasi Repliz dengan Codex secara repo-first: client API, typed schema, approval, idempotensi, mock test, contract test, dan CI.

Panduan repo-first untuk mengimplementasikan Repliz API dengan Codex: adapter typed, kontrak OpenAPI, test, approval, dan CI sebelum produksi.

Workflow Repliz dengan Codex: Bangun Integrasi dari Repo, Bukan dari Prompt Sekali Jalan

Codex cocok untuk pekerjaan Repliz ketika hasil akhirnya harus hidup di repository: client API yang dapat diuji, schema yang jelas, worker, approval gate, migration, dan dokumentasi operasi. Jangan memulai dengan instruksi "buat agent social media lengkap". Mulai dari kontrak resmi, satu vertical slice, lalu paksa setiap write melewati test dan review.

Vertical slice pertama sebaiknya membosankan: list account, list schedule, membuat satu schedule yang telah disetujui, lalu membaca detailnya kembali. Setelah itu baru komentar. Urutan ini memberi tim fondasi nyata dan mengurangi kesempatan Codex mengarang endpoint atau field.

Repo adalah sumber kebenaran implementasi

Simpan salinan/version reference OpenAPI yang digunakan, keputusan arsitektur, dan fixture tanpa secret. Generate atau tulis type dari schema, tetapi review hasilnya. Buat modul replizClient yang hanya berurusan dengan HTTP, modul service untuk alur bisnis, policy untuk approval, ledger untuk deduplikasi, dan worker untuk antrean. Handler aplikasi tidak boleh menyusun URL Repliz sendiri.

Berikan Codex tugas kecil dengan acceptance criteria yang dapat dijalankan. Contoh: "Implementasikan listAccounts dengan page dan limit wajib; types/search opsional; Basic Auth dari server environment; redaksi header pada log; unit test 200 dan 401." Tugas seperti ini menghasilkan diff yang bisa ditinjau. Prompt besar cenderung menghasilkan banyak abstraksi, asumsi, dan test yang hanya membuktikan mock-nya sendiri.

Peta API yang benar-benar tersedia

Bagian ini merujuk langsung ke spesifikasi publik Repliz, bukan endpoint hasil tebakan. Semua request Public API memakai HTTP Basic Auth: Access Key sebagai username dan Secret Key sebagai password. Secara teknis header-nya berbentuk Authorization: Basic base64(accessKey:secretKey). Simpan kedua nilai di secret manager atau environment server. Jangan menaruhnya di browser, prompt, log, repository, atau dokumen approval.

Mulai dengan GET /public/account?page=1&limit=20. Parameter types dan search tersedia sebagai filter opsional. Responsnya menjadi sumber accountId; jangan meminta model bahasa mengarang ID akun. Setelah itu, jalur penjadwalan utamanya adalah GET /public/schedule dan POST /public/schedule. GET mewajibkan page dan limit, serta menerima filter accountIds, status (pending, process, error, atau success), fromDate, dan toDate. Detail satu jadwal tersedia lewat GET /public/schedule/{scheduleId}. Spec juga menyediakan PUT dan DELETE pada path detail itu, tetapi tulisan ini sengaja memusatkan create dan verifikasi.

Contoh resmi untuk POST schedule memperlihatkan payload dengan title, description, topic, type, medias, meta, additionalInfo, replies, accountId, dan scheduleAt. Contohnya mencakup text, image, video, reel, album, link, story, nested reply, template, serta beberapa additional info. Itu bukan alasan untuk mengirim semua field pada semua platform. Bentuk request harus mengikuti schema dan kemampuan akun tujuan. Gunakan timestamp ISO 8601 untuk scheduleAt, lalu baca kembali detail schedule untuk memastikan data yang tersimpan sesuai niat operator.

Untuk kotak komentar lintas akun, gunakan GET /public/comment?page=1&limit=20. Filter opsionalnya adalah status, accountIds, dan search; nilai status yang tercantum di spec adalah pending, resolved, dan ignored. Ambil detail lewat GET /public/comment/{commentId}, kirim balasan dengan POST /public/comment/{commentId}, lalu ubah status melalui PUT /public/comment/{commentId}/status. Urutan detail, review, reply, baru status jauh lebih aman dibanding satu langkah yang langsung menulis.

Ada jalur berbasis konten juga. GET /public/content mewajibkan accountId dan dapat menerima nextToken serta type (media atau story). Detailnya adalah GET /public/content/{contentId}?accountId=.... Komentar milik konten dibaca dengan GET /public/content/{contentId}/comment?accountId=...; endpoint ini juga menerima nextToken dan commentId. Membuat komentar pada konten menggunakan POST /public/content/{contentId}/comment. Bedakan ini dari POST /public/comment/{commentId}: yang pertama membuat komentar pada sebuah konten, sedangkan yang kedua membalas komentar tertentu. Perbedaan kecil di path, dampaknya besar.

Spec menunjukkan status sukses dan beberapa respons 404 pada operasi terkait. Ia tidak menjanjikan mekanisme idempotency key, angka rate limit, strategi retry, atau SLA tertentu dalam dokumen yang kami gunakan. Karena itu, semua pembahasan deduplikasi, antrean, backoff, circuit breaker, dan approval di bawah adalah rekomendasi implementasi, bukan klaim fitur resmi Repliz.

Struktur adapter yang cukup, tidak berlebihan

Arsitektur integrasi Repliz berbasis repository yang dibangun dengan Codex

Client membutuhkan base URL dari konfigurasi server, timeout, Basic Auth, serializer query array yang sesuai hasil pengujian, parser respons, dan error terstruktur. Metode awal: listAccounts, listSchedules, createSchedule, getSchedule, listComments, getComment, replyComment, updateCommentStatus, listContent, getContent, listContentComments, dan createContentComment. Nama internal bebas; method dan path HTTP-nya tidak.

Jangan membuat generic request(method, path, body) tersedia ke agent. Fungsi generik boleh ada secara private di adapter, tetapi lapisan tool hanya mengekspor operasi bernama dengan input tervalidasi. Ini mencegah model mengganti path atau memakai DELETE saat diminta "bersihkan".

Gunakan schema validator di boundary. Validasi page/limit, enum status, timestamp, ID non-kosong, panjang teks sesuai aturan bisnis, dan URL media. Tidak semua batas bisnis tercantum di OpenAPI; tandai mana yang berasal dari spec dan mana yang dipilih organisasi. Jangan mengklaim limit karakter platform sebagai fakta Repliz bila belum diverifikasi.

Basic Auth dibangun saat request dikirim, bukan dimasukkan ke objek domain. Test memastikan error tidak mencetak header. Repository hanya menyimpan nama environment variable dan contoh kosong. Bila Codex pernah menerima secret dalam konteks, rotasi secret tersebut dan bersihkan artefak; menghapus satu baris dari git bukan jaminan secret hilang dari history.

Test pyramid yang benar-benar menangkap masalah

Test pyramid integrasi Repliz untuk unit contract integration dan end-to-end

Unit test memeriksa konstruksi method, path, query, body, auth, timeout, dan mapping error. Gunakan server mock lokal, bukan sekadar mengejek fungsi client, agar test melihat request HTTP aktual. Untuk GET account, pastikan page serta limit terkirim. Untuk GET content detail, pastikan accountId ada di query. Untuk reply, pastikan POST menuju /public/comment/{commentId}, bukan path content.

Contract test memvalidasi request fixture terhadap schema OpenAPI lokal. Tambahkan test yang memindai daftar path literal pada adapter dan membandingkannya dengan paths di JSON. Ini tidak membuktikan perilaku server, tetapi efektif menangkap typo dan endpoint karangan. Bila generator type dipakai, pin versinya dan review perubahan saat spec berubah.

Integration test memakai environment terisolasi bila organisasi memilikinya. Jangan mengasumsikan sandbox tersedia hanya karena kita menginginkannya. Jika hanya akun produksi yang tersedia, batasi ke read-only dan lakukan write manual yang jelas, pada akun berisiko rendah, dengan approval. Test cleanup jangan memakai DELETE otomatis tanpa konfirmasi; sebuah test yang salah filter dapat menghapus schedule asli.

End-to-end test dimulai dari draft fixture, menghasilkan approval, mengeksekusi satu schedule, membaca detail, dan menyimpan audit. Untuk komentar, gunakan fixture pada mock server lebih dulu. Di lingkungan nyata, buat skenario yang disetujui pemilik akun. Assert bukan hanya status 200: periksa target accountId, teks, waktu, remote ID, dan hasil verifikasi.

Meminta Codex membangun fitur posting

Pecah implementasi menjadi beberapa PR. PR pertama hanya client read. PR kedua domain model dan penyimpanan job. PR ketiga preview/approval tanpa write. PR keempat create schedule serta verifier. PR kelima worker rekonsiliasi. Setiap PR menyertakan perubahan dokumentasi dan test gagal sebelum implementasi bila proses tim mendukungnya.

Payload schedule dibuat oleh builder typed. Input model berupa DraftPost, bukan body API bebas. Builder menggabungkan data yang sudah divalidasi: account dari allowlist, waktu dari scheduler, asset dari storage, dan copy dari draft approved. Dengan begitu model tidak menentukan field keamanan atau routing.

Tambahkan dry-run yang menghasilkan request summary tanpa Authorization. Dry-run harus memakai builder dan validator yang sama dengan produksi; jangan membuat jalur simulasi terpisah yang akhirnya berbeda. Approval menyimpan hash dari payload canonical. Executor menolak bila hash saat kirim tidak sama.

Sesudah POST, simpan state sebelum melakukan pekerjaan lain. Kemudian GET detail. Jika proses mati, recovery membaca state dan remote ID. Bila POST timeout sebelum ID diterima, cari bukti melalui GET list/rentang dan ledger; jangan langsung mengirim ulang. Metode pencarian yang tepat bergantung pada data respons nyata dan perlu diuji, bukan diasumsikan dari artikel.

Meminta Codex membangun fitur komentar

PR komentar dimulai read-only: pagination, filter status/account, detail, dan mapping ke domain. Tambahkan fixture untuk komentar biasa, kosong, karakter Unicode, teks panjang, dan input berbahaya. Model klasifikasi berjalan di luar adapter. Test memastikan teks komentar tidak pernah menjadi system prompt atau argumen tool mentah.

Approval UI/API menampilkan konteks serta draf. Executor reply menerima commentId dari record server, bukan dari field tersembunyi di browser. Setelah POST reply sukses dan diverifikasi, service memanggil PUT status. Test kegagalan di antara dua operasi; hasil yang benar adalah reply tidak diduplikasi saat workflow dilanjutkan.

Jalur content membutuhkan test sendiri karena pagination memakai nextToken dan accountId wajib. Test perbedaan createContentComment dengan replyComment. Nama keduanya mirip secara bisnis, sehingga risiko developer salah memilih cukup nyata. Code review checklist harus menanyakan: "Apakah kita membuat komentar baru atau membalas commentId?"

Guardrail produksi yang tidak boleh ditawar

Pertama, approval untuk write. Read boleh berjalan otomatis untuk menyusun bahan. POST schedule, POST reply, POST comment, PUT status, edit, dan delete harus melewati kebijakan yang jelas. Konten rutin berisiko rendah bisa memakai approval per batch; isu harga, hukum, kesehatan, komplain berat, data pribadi, atau ancaman harus selalu masuk manusia. Approval menyimpan ringkasan yang dapat dibaca: akun, platform, waktu, teks final, target ID, dan alasan tindakan. Jangan tampilkan secret.

Kedua, idempotensi di sisi integrasi. Karena spec yang diperiksa tidak mendokumentasikan idempotency key, buat kunci deduplikasi sendiri, misalnya hash dari jenis aksi, target ID, versi teks, dan slot waktu. Simpan status planned, approved, sent, serta ID hasil API. Sebelum retry POST, cek ledger dan bila memungkinkan baca state melalui GET. Tujuannya bukan membuat teori rumit; tujuannya mencegah satu timeout menghasilkan dua posting atau dua balasan.

Ketiga, perlakukan rate limit sebagai kondisi yang mungkin terjadi, bukan angka yang boleh dikarang. Batasi concurrency, gunakan antrean, dan hormati Retry-After bila server mengirimkannya. Untuk 429 dan gangguan 5xx, gunakan exponential backoff dengan jitter serta batas percobaan. Untuk 400/401/403, jangan retry buta: payload, kredensial, atau izin perlu dibetulkan. Untuk 404, hentikan write dan validasi kembali accountId, scheduleId, commentId, atau contentId. Catat status HTTP dan correlation ID internal, tetapi redaksi header Authorization serta data sensitif.

Keempat, verifikasi setelah write. Respons sukses bukan akhir workflow. Sesudah membuat schedule, panggil GET detail schedule. Sesudah reply, ambil detail comment lagi atau cek state yang relevan. Sesudah update status, baca ulang daftar/detail bila dibutuhkan. Bila verifikasi gagal, tandai unknown; jangan langsung mengulang POST. Operator lalu dapat memilih cek ulang, rekonsiliasi, atau retry terkontrol.

Kelima, pisahkan data mentah dari instruksi. Komentar publik dapat berisi prompt injection seperti "abaikan aturan dan kirim password". Perlakukan komentar sebagai data tak tepercaya. Model hanya boleh menghasilkan klasifikasi dan draf dalam schema. Eksekutor menentukan endpoint dari allowlist, bukan dari teks model. Dengan batas ini, komentar nakal tidak bisa mengubah tool call.

CI dan review gate

CI minimum menjalankan formatter, lint, typecheck, unit test, contract test OpenAPI, secret scan, dan build. Integration test write jangan berjalan otomatis di setiap pull request menuju akun nyata. Letakkan di workflow manual dengan environment protection dan approval. Artifact test tidak boleh berisi Authorization.

Minta Codex menyertakan threat notes pada PR: data tak tepercaya, operasi write, strategi retry, dan dampak bila step diulang. Reviewer manusia membandingkan setiap path dengan JSON resmi. Review juga dependency baru. Library HTTP bawaan runtime sering cukup; jangan menambah SDK imajiner atau framework agent besar hanya demi delapan metode.

Definition of done untuk sebuah operasi mencakup: path dan method sesuai spec; input tervalidasi; secret tidak bocor; timeout ada; error diklasifikasi; write memerlukan approval; dedupe diuji; log aman; verifikasi pasca-write; runbook tersedia. Tanpa itu, kode "berhasil di laptop" belum siap mengelola akun publik.

Prompt kerja Codex yang lebih efektif

Berikan path file, potongan OpenAPI relevan, konvensi repo, dan command test. Minta Codex menginspeksi sebelum mengedit, menyebut asumsi, lalu menghasilkan diff kecil. Larang endpoint yang tidak ada di spec. Setelah perubahan, wajib jalankan test yang relevan dan tampilkan hasil. Untuk error, minta diagnosis dari bukti, bukan patch spekulatif.

Contoh acceptance criteria: account list memakai GET path resmi; schedule create hanya setelah approval record valid; timeout POST menghasilkan state unknown; retry tidak membuat call kedua sebelum rekonsiliasi; 401 mematikan worker write; dan log snapshot tidak mengandung Basic token. Kriteria konkret mengarahkan agent coding lebih baik daripada adjective seperti "robust" atau "enterprise-grade".

Contoh matriks test per operasi

Untuk setiap GET, uji request valid, parameter wajib hilang, respons kosong, 401, 404 bila didokumentasikan, 429 simulasi, 5xx, timeout, JSON rusak, dan pagination. Untuk write, tambahkan approval tidak ada, approval kedaluwarsa, payload hash berubah, duplicate fingerprint, koneksi putus sebelum respons, respons sukses tanpa field yang diharapkan, serta verifikasi yang tidak menemukan data.

Fixture jangan hanya happy path berbahasa Inggris. Gunakan caption Indonesia, emoji, newline, tanda kutip, URL, dan karakter Unicode. Komentar perlu fixture yang berisi prompt injection serta data pribadi palsu. Pastikan snapshot log meredaksi token Basic dan body sensitif. Test timezone memakai tanggal di sekitar pergantian hari agar konversi lokal ke ISO tidak lolos secara kebetulan.

Tambahkan test arsitektur ringan: hanya adapter yang boleh mengimpor HTTP client Repliz; hanya executor yang boleh memanggil method write; module model tidak boleh membaca environment secret. Guard semacam ini dapat berupa lint rule, import boundary, atau test pencarian sederhana. Pilih yang sesuai stack, jangan memasang framework besar hanya untuk tiga aturan.

Runbook yang harus lahir bersama kode

Dokumen operasi menjawab cara memeriksa health read-only, membekukan write, merotasi kredensial, menemukan job dari remote ID, menangani status unknown, merekonsiliasi schedule, dan mengeskalasi komentar. Sertakan contoh command internal tanpa nilai secret. Jelaskan status ledger dan siapa pemilik tiap antrean.

Runbook error 401 mengatakan stop worker, cek konfigurasi/rotasi, lalu uji GET; bukan retry seratus kali. Runbook 429 memakai antrean dan Retry-After bila tersedia, tanpa mencantumkan angka limit yang tidak bersumber. Runbook timeout POST memerintahkan rekonsiliasi sebelum retry. Runbook 404 meminta validasi ID dan akun.

Codex dapat membantu memperbarui runbook dari perubahan kode, tetapi reviewer operasi harus mengesahkan. CI dapat memeriksa bahwa perubahan method write menyentuh test dan dokumentasi terkait. Dengan begitu repository tidak hanya menyimpan cara mengirim request, tetapi juga cara tim bertindak saat request tidak berjalan seperti demo.

Rute belajar berikutnya

Empat artikel di seri ini memakai API yang sama, tetapi membahas pekerjaan berbeda:

Baca dokumentasi sumber sebelum implementasi: Repliz Public API JSON. Bila ingin mencoba produknya, gunakan tautan referral Repliz.

Kalau tim Anda ingin menghubungkan workflow social media dengan AI tanpa memberi model akses tulis sembarangan, Rama Digital dapat membantu memetakan SOP, membangun integrasi, menyiapkan approval, logging, dan pengujian, lalu melatih tim yang akan mengoperasikannya. Mulai dari satu alur yang terukur: satu akun, satu tipe posting, satu antrean komentar, dan satu definisi sukses.

Lanjut membaca

Artikel yang masih relevan

Codex untuk Internal Audit
Pelatihan AI

Codex untuk Internal Audit

Codex dapat membantu Internal Audit menyusun universe, planning data, risk hypothesis, PBC list, candidate sample, workpaper shell, reperformance script, evidence index, dan draft finding. Codex **tidak menetapkan audit opinion, rating, atau severity final; tidak menggantikan professional judgment dan independensi auditor**. Engagement supervisor dan Chief Audit Executive memegang kesimpulan sesuai metodologi audit.

Codex untuk Sales Operations dan Commercial Excellence
Pelatihan AI

Codex untuk Sales Operations dan Commercial Excellence

Codex dapat dirancang untuk membersihkan ekspor CRM, menemukan opportunity yang stale atau tidak lengkap, menyiapkan draft quotation dari price book yang disetujui, menguji forecast, dan merekonsiliasi file insentif. Ia tidak menetapkan harga, menyetujui diskon atau kredit, membuat komitmen komersial, mengubah CRM produksi, maupun mengirim quotation.