Integrasi alur kerja email dan SDK
Jelajahi SendRepute API dan integrasi untuk analisis email, penulisan ulang AI berbayar terpisah, dan alat desain. Endpoint analisis pusat, penulisan ulang, dan builder tidak mengirimkan email; pengiriman Campaigns yang diaktifkan secara sengaja dan adapter penyedia tertentu dapat mengirimkan menggunakan penyedia yang Anda konfigurasi. Tidak ada hasil yang menjamin penempatan inbox.
Paket Node.js tersedia di npm. Integrasi lainnya dapat diunduh di sini atau diinstal dari repositori publik GitHub yang terverifikasi. Pilih sebuah integrasi, ikuti panduannya, dan tinjau izin, harga saat ini, serta pengaturan kegagalan sebelum mengaktifkannya.
Tetap gunakan alur kerja email Anda saat ini. Contoh API pusat ini hanya menganalisis, menulis ulang, atau membuat konten; API tersebut tidak pernah mengirim email. Secara terpisah, pengiriman Kampanye yang diaktifkan secara sengaja dan adaptor penyedia tertentu dapat mengirim melalui penyedia yang Anda konfigurasi. Pilih alat berdasarkan instalasi, konfigurasi, contoh, dan batas operasionalnya. Contoh tidak berjalan di halaman ini; tinjau operasi berbayar dan tindakan pengiriman secara terpisah.
Plugin WordPress
0.2.0
Memerlukan WordPress 5.7+, PHP 7.4+ dan OpenSSL. Unggah ZIP melalui Plugins > Add New > Upload Plugin, lalu buka Settings > SendRepute. Konfigurasikan token dan persetujuan analisis berbayar setiap situs secara terpisah. Bukti siklus hidup terinstal mencakup WordPress 6.8.3 dengan WooCommerce 10.4.3; bukti SMTP-plugin terpisah mencakup WordPress 7.1.2 dengan WP Mail SMTP 4.9.0 dan FluentSMTP 2.4.0.
Memeriksa pesan melalui pre_wp_mail tanpa mengganti SMTP atau menulis ulang pesan. Mode penasihat (advisory) memungkinkan pengiriman; mode pemblokiran menerapkan ambang probabilitas. Kebijakan kegagalan API dikonfigurasi secara terpisah. Plugin yang melewati wp_mail tidak tercakup; perubahan transportasi di tahap selanjutnya tidak dianalisis. Pemblokiran tidak mengantrekan pesan.
Analisis dinonaktifkan secara default. Konfigurasikan token pelanggan terbatas, jalankan pemeriksaan koneksi non-berbayar, tinjau harga, dan berikan persetujuan eksplisit sebelum mengaktifkan analisis berbayar. Tindakan AI manual memerlukan konfirmasi terpisah.
Unduh ZIP WordPress
Repositori sumber publik
README lengkap dan contoh
Catatan keamanan dan batasan yang diketahui
1. Instal
Jalankan perintah ini dari direktori WordPress dengan WP-CLI yang tersedia, atau unggah ZIP yang diunduh melalui Plugins > Add New > Upload Plugin dan aktifkan. Buka Settings > SendRepute. Konfigurasikan dan aktifkan setiap situs secara terpisah pada multisite. Gunakan kombinasi WordPress/PHP yang didukung; versi minimum bukan merupakan rekomendasi untuk menjalankan perangkat lunak yang sudah habis masa pakainya (end-of-life).
curl -fLO https://www.sendrepute.com/downloads/sendrepute-wp.zip
wp plugin install ./sendrepute-wp.zip --activate
Alternatif: instal dari sumber publik
Gunakan jalur sumber ini sebagai pengganti instruksi unduhan situs web di atas. README repositori menjelaskan langkah-langkah aktivasi dan konfigurasi yang tersisa; membangun ZIP saja tidak menginstal plugin. Untuk Python, perintah kedua menambahkan dukungan Django opsional. Simpan kredensial di rahasia server dan tinjau catatan keamanan sebelum mengaktifkan fitur berbayar. Hanya Node yang ada di npm; repositori GitHub publik tidak menyiratkan publikasi WordPress.org, n8n Cloud, Packagist, atau PyPI.
git clone https://github.com/sendrepute/sendrepute-wordpress.git
cd sendrepute-wordpress
python3 package.py
2. Konfigurasikan dengan aman
Buat token pelanggan sisi server dengan scope classify, account:read dan catalog:read, masa berlaku, serta batas pengeluaran. Masukkan di pengaturan atau muat SENDREPUTE_API_TOKEN dari penyimpanan rahasia server Anda seperti yang ditunjukkan. Token yang disimpan menggunakan enkripsi terautentikasi dengan salt WordPress dan OpenSSL; masukkan kembali setelah rotasi salt. Jalankan pemeriksaan koneksi non-berbayar, tinjau harga klasifikasi, lalu aktifkan analisis otomatis secara eksplisit. Atur mode advisory/blocking, threshold, dan kebijakan fail-open/fail-closed independen.
// wp-config.php — optional server-secret alternative to settings storage.
$sendreputeToken = getenv('SENDREPUTE_API_TOKEN');
if (is_string($sendreputeToken) && $sendreputeToken !== '') {
define('SENDREPUTE_API_TOKEN', $sendreputeToken);
}
3. Gunakan dengan sengaja
Fungsi di bawah ini menggunakan wp_mail normal dan hanya mengirim saat aplikasi Anda memanggilnya. Dengan analisis berbayar diaktifkan, plugin menganalisis pada pre_wp_mail dan kemudian mengizinkan atau memblokir transport yang ada. Sediakan penerima resmi Anda sendiri; uji terhadap local mail sink non-relaying terlebih dahulu. Hasil false berarti pemanggil harus menangani pengiriman yang ditolak—pengiriman tersebut tidak masuk antrean.
// Call deliberately: this sends through your existing WordPress transport.
function sendrepute_reviewed_message($recipient) {
return wp_mail(
$recipient,
'Your requested account summary',
'Here is the account summary you requested.'
);
}
Apa lagi yang bisa dilakukannya?
Settings juga menyediakan tindakan manual AI rewrite dan pembuatan templat dengan konfirmasi berbayar terpisah. Tampilan harga membutuhkan vip:read; penulisan ulang membutuhkan rewrite; pembuatan membutuhkan ai:generate, dan pembuatan VIP memerlukan keanggotaan VIP aktif. Hasilnya adalah teks copy-only yang di-escape: tidak pernah diterapkan atau dikirim secara otomatis. Token yang ada tidak mendapatkan scope secara otomatis.
Hasil, kegagalan, dan batasan
Advisory mengizinkan pengiriman; pemblokiran membandingkan probabilitas spam yang terbatas dengan ambang batas Anda. Batas waktu dan kegagalan API mengikuti kebijakan kegagalan yang terpisah, bukan label spam. local-flock yang buram menekan analisis berulang selama 24 jam; hasil jaringan yang tidak diketahui tidak dicoba ulang secara otomatis. Pengiriman itu sendiri tidak dideduplikasi. Pemeriksaan pembaruan yang diinstal mencakup ZIP 0.1.0 yang dilacak yang ditingkatkan ke 0.2.0, penolakan/penyimpanan nonce administrator, dan jalur WooCommerce yang dipilih. Matriks 40 skenario terpisah mencakup kedua urutan pemuatan plugin dengan WP Mail SMTP dan FluentSMTP, termasuk To/Cc/Bcc, Reply-To, header, lampiran, penolakan SMTP, dan hasil kebijakan. Tuple persis ini tidak menjamin versi CMS, plugin SMTP, atau penyedia lainnya. Hook yang melewati wp_mail dan perubahan transport setelahnya tetap berada di luar cakupan. Penonaktifan mempertahankan pengaturan; pencopotan pemasangan menghapus kredensial bahkan ketika mempertahankan pengaturan yang dinonaktifkan. Hapus sendiri token wp-config.
Adapter email WooCommerce
0.2.0
Disertakan dalam ZIP SendRepute 0.2.0 yang sama dengan plugin WordPress; tidak ada add-on atau unduhan WooCommerce terpisah. Ini memerlukan dasar WordPress 5.7+, PHP 7.4+ dan OpenSSL dari plugin tersebut. Adapter ini telah ditinjau sumbernya terhadap WooCommerce 10.4.3, tidak disertifikasi di seluruh versi WooCommerce atau ekstensi email.
Analisis WooCommerce memiliki sakelar administrator sendiri dan pilihan tipe email bawaan yang tepat, semuanya nonaktif secara default. Kontrol analisis global dan paid-consent juga harus aktif. Tipe yang tidak dipilih dan ditentukan ekstensi melewati analisis. Setiap tipe customer_* bawaan yang dipilih dilindungi dan bersifat advisory-only: ini mungkin dianalisis tetapi tidak pernah diblokir. Email multipart yang dipilih gagal klasifikasi sebelum permintaan berbayar apa pun; advisory atau fail-open mempertahankan pengiriman, sementara fail-closed hanya memblokir email yang tidak dilindungi.
Unduh ZIP WordPress dan WooCommerce bersama
Repositori sumber publik
README lengkap dan contoh
Catatan keamanan dan batasan yang diketahui
1. Instal
Ini adalah ZIP yang dapat diinstal yang sama dengan yang digunakan oleh panduan WordPress. Instal satu kali saja; jangan instal add-on WooCommerce kedua. Aktifkan SendRepute, lalu buka Settings > SendRepute. Pastikan WordPress, WooCommerce, PHP, dan transport mail asli tetap didukung dan diperbarui.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-wp.zip
wp plugin install ./sendrepute-wp.zip --activate
Alternatif: instal dari sumber publik
Gunakan jalur sumber ini sebagai pengganti instruksi unduhan situs web di atas. README repositori menjelaskan langkah-langkah aktivasi dan konfigurasi yang tersisa; membangun ZIP saja tidak menginstal plugin. Untuk Python, perintah kedua menambahkan dukungan Django opsional. Simpan kredensial di rahasia server dan tinjau catatan keamanan sebelum mengaktifkan fitur berbayar. Hanya Node yang ada di npm; repositori GitHub publik tidak menyiratkan publikasi WordPress.org, n8n Cloud, Packagist, atau PyPI.
git clone https://github.com/sendrepute/sendrepute-wordpress.git
cd sendrepute-wordpress
python3 package.py
2. Konfigurasikan dengan aman
Gunakan token pelanggan yang difokuskan (scoped) dari server secrets atau pengaturan WordPress yang terenkripsi. Pertama, konfigurasikan pemeriksaan koneksi non-bayar bersama, tinjauan harga saat ini, persetujuan berbayar global, mode risiko, ambang batas, dan kebijakan kegagalan. Kemudian, aktifkan analisis WooCommerce secara terpisah dan pilih hanya tipe email bawaan yang telah Anda tinjau. Tipe yang ditentukan oleh ekstensi tidak pernah dipilih secara otomatis.
// wp-config.php — keep the shared WordPress/WooCommerce token server-side.
$sendreputeToken = getenv('SENDREPUTE_API_TOKEN');
if (is_string($sendreputeToken) && $sendreputeToken !== '') {
define('SENDREPUTE_API_TOKEN', $sendreputeToken);
}
3. Gunakan dengan sengaja
Lanjutkan pengiriman melalui WooCommerce secara normal. Adaptor membungkus callback yang sudah dipilih oleh WooCommerce dan mempertahankan argumen asli serta transport-nya; adaptor ini tidak menyediakan metode pengiriman baru. Jika filter lain mengubah argumen callback, email biasa tersarang selama callback tersebut, atau callback kustom tidak pernah memanggil wp_mail, analisis secara konservatif akan dilewati (bypassed) daripada masuk ke jalur berbayar umum. Uji tipe non-kritis yang dipilih dengan sink email non-relaying.
Hasil, kegagalan, dan batasan
Email single-part yang dipilih mengikuti kebijakan penasihat, ambang batas, dan kegagalan WordPress yang dibagikan, kecuali setiap tipe customer_* dilindungi dan hanya bersifat penasihat (advisory-only). Email pelanggan yang dilindungi selalu berlanjut setelah hasil risiko tinggi, kegagalan API, atau konten yang tidak didukung. WooCommerce menyusun alternatif multipart setelah pre_wp_mail, sehingga email multipart yang dipilih akan gagal sebelum permintaan berbayar apa pun alih-alih diklasifikasikan sebagian; hanya email non-dilindungi yang dipilih yang dapat ditolak oleh fail-closed. Konteks callback dihapus setelah keberhasilan, kegagalan, dan pengiriman bertingkat.
Backend email Drupal
0.1.0
Memerlukan Drupal 10.3+ atau 11.x dan PHP 8.1+. Instal ZIP sebagai modul, berikan izin administer sendrepute hanya kepada administrator tepercaya, konfigurasikan nama tampilan pengirim non-alamat yang dibatasi, dan pilih rute modul/key mail yang tepat. Versi 0.1.0 hanya mendukung Drupal core php_mail; ini adalah backend Mail, bukan penyedia atau pengganti transport. Bukti situs terinstal mencakup rilis tepat Drupal 10.6.17 dan 11.4.7 dengan PHP 8.4.10.
Persetujuan berbayar dan setiap rute dinonaktifkan secara default. Setiap rute yang tepat menggunakan delegasi core php_mail tetap, mode penasihat atau blokir, kebijakan kegagalan pertahankan atau blokir yang independen, ambang batas, dan pemilihan email kritis yang disengaja. Email akun dan keamanan tetap dapat dikirim kecuali rute tepat tersebut secara eksplisit mengizinkan pemblokiran kritis. Instans php_mail yang sama melakukan format dan mengirim satu body final skalar; output multipart dan yang mengandung lampiran tidak didukung.
Unduh ZIP Drupal
Repositori sumber publik
README lengkap dan contoh
Catatan keamanan dan batasan yang diketahui
1. Instal
Jalankan dari root proyek Drupal, atau unggah ZIP dengan penginstal modul Drupal. Arsip berisi root modul sendrepute yang sesuai untuk modules/contrib. Aktifkan, berikan izin administer sendrepute hanya kepada administrator tepercaya, dan buka Configuration > System > SendRepute.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-drupal.zip
unzip sendrepute-drupal.zip -d modules/contrib
drush en sendrepute -y
Alternatif: instal dari sumber publik
Gunakan jalur sumber ini sebagai pengganti instruksi unduhan situs web di atas. README repositori menjelaskan langkah-langkah aktivasi dan konfigurasi yang tersisa; membangun ZIP saja tidak menginstal plugin. Untuk Python, perintah kedua menambahkan dukungan Django opsional. Simpan kredensial di rahasia server dan tinjau catatan keamanan sebelum mengaktifkan fitur berbayar. Hanya Node yang ada di npm; repositori GitHub publik tidak menyiratkan publikasi WordPress.org, n8n Cloud, Packagist, atau PyPI.
git clone https://github.com/sendrepute/sendrepute-drupal.git
cd sendrepute-drupal
2. Konfigurasikan dengan aman
Simpan SENDREPUTE_API_TOKEN dengan cakupan klasifikasi hanya di lingkungan proses web/PHP. Token tidak pernah diterima oleh formulir atau diekspor dalam konfigurasi Drupal. Di formulir, masukkan nama tampilan pengirim wajib maksimal 320 byte tanpa alamat, kurung sudut, atau kontrol. Tambahkan satu baris tujuh-kolom per rute tepat seperti yang ditunjukkan; delegate harus berupa php_mail. Pilih mode penasihat/blokir, failure_policy pertahankan/blokir, ambang batas, dan kritis ya/tidak. Mulailah dengan penasihat, pertahankan, dan tidak.
export SENDREPUTE_API_TOKEN="replace-with-a-scoped-server-token"
# Enter a non-address sender display name in Configuration > System > SendRepute.
# One exact route in Configuration > System > SendRepute:
# contact|page_mail|php_mail|advisory|preserve|0.90|no
3. Gunakan dengan sengaja
Tetap panggil pengelola email normal Drupal. Untuk rute yang telah ikut serta (opted-in), sendrepute_mail memanggil format() dari core php_mail, menganalisis body skalar final tersebut, menerapkan kebijakan, lalu memanggil mail() dari instans php_mail cache yang sama. ID delegasi lain ditolak. Ini tidak menggunakan hook_mail_alter dan tidak menulis ulang pesan.
Hasil, kegagalan, dan batasan
Keberhasilan yang tervalidasi hanya memblokir pada atau di atas ambang batas yang dikonfigurasi dalam mode blokir. Hasil klasifikasi tersarang yang lengkap dan respons penagihan divalidasi sebelum spamProbability dapat memengaruhi pengiriman. Kegagalan API, autentikasi, saldo, batas kecepatan, kesalahan format, multipart, indikator lampiran, dan ukuran mengikuti kebijakan kegagalan rute yang independen, kecuali email kritis yang dilindungi tetap dilanjutkan. Matriks 10.6.17/11.4.7 yang diinstal mencakup instalasi dan penggantian ZIP di tempat saat diaktifkan, login administrator asli, penolakan/penyimpanan Form API CSRF, penemuan plugin, pilihan rute, klasifikasi sintetik, pelestarian email kritis, dan php_mail inti melalui sink lokal. Pemeriksaan sumber dasar juga mencakup arsip 10.3.0 dan 11.0.0 yang tidak berubah; tidak ada hasil yang menjamin setiap patch kemudian atau mailer kontribusi. Nama tampilan yang dikonfigurasi, subjek yang tidak kosong, dan body dengan bingkai panjang dikirimkan; alamat, penerima, header, parameter, dan lampiran dikecualikan. Subjek dibatasi hingga 998 byte dan body hingga 256 KiB. Terdapat satu upaya HTTPS yang terverifikasi, tanpa pengalihan, percobaan ulang, atau antrean.
Modul email PrestaShop
0.1.1
Versi 0.1.1 mendukung tepat PrestaShop 9.0.0, 9.0.1, 9.0.2 dan 9.0.3 dengan PHP 8.1–8.4. Unggah ZIP di Modules > Module Manager, lalu konfigurasikan klasifikasi mail SendRepute. Keempat rilis resmi prebuilt classic telah lolos instalasi terisolasi, konfigurasi administrator terautentikasi, dan pemeriksaan ZIP-update; implementasi Mail::send() mereka yang tidak berubah juga lolos matriks real-mail offline. PrestaShop 8, 9.1+ dan patch 9.0 lainnya yang tidak terdaftar tidak didukung.
Modul, paid_consent, dan pemilihan templat yang tepat semuanya dinonaktifkan secara default. Modul ini menganalisis subjek akhir yang dirender dan setiap body tampilan yang didukung tanpa membangun ulang pesan Symfony. Pesan yang berisi text/plain dan text/html dikirim dalam satu permintaan klasifikasi terikat: alternatif teks biasa dibuat menjadi inert, HTML asli dipertahankan, dan layanan menganalisis setiap alternatif tipe secara independen tanpa penggabungan. Hasilnya menggunakan risiko tertinggi dengan content audit yang lengkap, menghasilkan satu klasifikasi berbayar, dan tidak pernah mengembalikan skor keamanan parsial. Advisory tidak pernah menghentikan pengiriman. Pemblokiran ambang batas dan fail-closed melempar satu pengecualian yang mengimplementasikan ExceptionInterface dari Symfony Mailer dan ModuleErrorInterface dari PrestaShop; pada setiap rilis yang didukung, pengujian yang diinstal mengamati Mail::send() mengembalikan false tanpa pengiriman SMTP. Kebijakan kegagalan bersifat independen dari ambang batas risiko.
Unduh ZIP PrestaShop
Repositori sumber publik
README lengkap dan contoh
Catatan keamanan dan batasan yang diketahui
1. Instal
Unduh ZIP 0.1.1, kemudian gunakan Modules > Module Manager > Upload a module dan pilih file tersebut. Buka Configure untuk klasifikasi email SendRepute. Jangan paksa instalasi di luar PrestaShop 9.0.0–9.0.3 yang tepat: perilaku pembatalan dan penandatanganan bergantung pada jalur Mail::send() yang telah diaudit.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-prestashop.zip
Alternatif: instal dari sumber publik
Gunakan jalur sumber ini sebagai pengganti instruksi unduhan situs web di atas. README repositori menjelaskan langkah-langkah aktivasi dan konfigurasi yang tersisa; membangun ZIP saja tidak menginstal plugin. Untuk Python, perintah kedua menambahkan dukungan Django opsional. Simpan kredensial di rahasia server dan tinjau catatan keamanan sebelum mengaktifkan fitur berbayar. Hanya Node yang ada di npm; repositori GitHub publik tidak menyiratkan publikasi WordPress.org, n8n Cloud, Packagist, atau PyPI.
git clone https://github.com/sendrepute/sendrepute-prestashop.git
cd sendrepute-prestashop
2. Konfigurasikan dengan aman
Atur SENDREPUTE_API_BASE ke origin HTTPS SendRepute produksi kanonik yang disediakan untuk modul ini dan SENDREPUTE_API_TOKEN ke token server terfokus di lingkungan PHP-FPM/server. Base harus berupa origin HTTPS DNS publik tanpa path; literal, kredensial, pengalihan, dan jawaban DNS privat akan ditolak. Jalankan pemeriksaan koneksi akun/harga non-bayar, lalu aktifkan modul secara eksplisit, persetujuan berbayar/konten, dan nama templat yang tepat. Pilih advisory/block, ambang batas, dan kebijakan kegagalan terbuka/tertutup secara independen.
export SENDREPUTE_API_BASE="replace-with-the-canonical-sendrepute-https-origin"
export SENDREPUTE_API_TOKEN="replace-with-a-scoped-server-token"
3. Gunakan dengan sengaja
Lanjutkan menggunakan alur normal Mail::send milik PrestaShop. Hook awal hanya mengingat templat persis yang telah dipilih (opted-in). Hook akhir membaca subjek, bodi teks, dan bodi HTML dari Email Symfony yang sudah dirender tanpa mengubah penerima, header, lampiran, atau transport. Untuk bodi ganda, ia mengirimkan teks biasa inert dan HTML asli sebagai alternatif bertipe dalam satu permintaan; normalisasi layanan independen mencegah satu fragmen mengonsumsi fragmen lainnya sambil tetap mempertahankan tujuan gambar dan tautan HTML yang terlihat untuk audit. Satu bodi biasa tetap berada di jalur teks inert yang sempit, dan satu bodi HTML tetap berada di jalur ekstraksi DOM yang sempit. Klasifikasi selesai sebelum PrestaShop membuat pesan terpisah yang ditandatangani DKIM. Matriks rilis yang didukung memverifikasi struktur multipart yang dipancarkan ditambah hash bodi DKIM dan tanda tangan RSA setelah klasifikasi. Jalur penandatanganan yang dipasang di PrestaShop menghilangkan Bcc dari header bertanda tangan yang disiapkan dan kehilangan penerima SMTP tersembunyi tersebut; oleh karena itu bukti tanda tangan yang valid tidak menetapkan kompatibilitas pengiriman Bcc. Jangan gabungkan DKIM dan Bcc pada jalur yang didukung ini. Sumber tampilan yang tidak didukung, semantik aktif, quoted-printable yang ambigu atau HTML base64, dan konten agregat yang ukurannya melampaui batas mengikuti failure_policy yang dikonfigurasi sebelum pembayaran. Biarkan templat kritis tidak terpilih kecuali jika telah disetujui dengan sengaja.
Hasil, kegagalan, dan batasan
Pengklasifikasi menerima satu bodi text/plain, satu bodi text/html, atau keduanya sebagai alternatif tampilan yang dianalisis secara independen. Teks harfiah, entitas, konten tersembunyi, dan gaya dalam alternatif yang diterima tidak dapat mengonsumsi atau menyembunyikan alternatif berikutnya; HTML quoted-printable atau base64 yang ambigu justru ditolak sebelum pembayaran. Alternatif apa pun yang diterima dapat menentukan hasil risiko tertinggi, sementara audit konten mencakup setiap alternatif; klasifikasi dikenakan biaya sekali saja setelah input berbatas yang lengkap diterima. Bodi warisan (legacy) yang diwajibkan secara persis menduplikasi alternatif teks biasa inert untuk pesan ganda, dan duplikat tersebut ditambah kedua alternatif bertipe berbagi anggaran permintaan persis 524288-byte. Penerima, lampiran, dan sumber daya tersemat dikecualikan, dan pesan transport pramutandatangan yang asli dipertahankan. Fixture surat riil secara terpisah memeriksa integritas MIME/tanda tangan dan penerima SMTP yang sesungguhnya: tanda tangan DKIM tetap valid setelah klasifikasi, tetapi jalur tertandatangan upstream yang diaudit tidak mempertahankan penerima Bcc. Klasifikasi yang divalidasi menyimpan ringkasan penasihat terbaru yang terbatas. Mode blok hanya menghentikan pada atau di atas ambang batas; pengecualian antarmuka ganda bertahan melewati hook dispatch dan menghasilkan false sebelum transport pada keempat rilis yang terinstal. Konten yang tidak didukung, kesalahan API, dan kesalahan validasi mengikuti kebijakan terbuka/tertutup secara independen. Satu upaya HTTPS menggunakan DNS publik terpaku, TLS terverifikasi, tenggat waktu berbatas, batas respons 256 KiB, tanpa pengalihan dan tanpa percobaan ulang. Pemblokiran bergantung pada penangkapan pengecualian Mail::send() PrestaShop yang diaudit, bukan nilai kembalian hook akhir.
Adaptor Symfony Mailer
0.1.1
Memerlukan PHP 8.1+ dan hanya ditujukan untuk Symfony Mailer 6.4 atau 7.4; rilis terverifikasi yang tepat adalah 6.4.46 dan 7.4.19. Tidak ada klaim kompatibilitas untuk Symfony 8.1 atau lini yang tidak teruji. Instal ZIP sumber lokal melalui repositori path Composer; paket ini tidak diterbitkan ke Packagist.
Bundel dan persetujuan berbayar dinonaktifkan secara default, dan hanya pesan dengan header opt-in yang dikonfigurasi secara tepat yang memenuhi syarat. Kebijakan skor penasihat atau pemblokiran bersifat independen dari kebijakan kegagalan izinkan atau blokir. Klasifikasi berjalan pada MessageEvent sebelum pengiriman resmi; penolakan menggunakan MessageEvent::reject(). Peristiwa kloning yang antre dilewati sehingga peristiwa transport worker adalah satu titik klasifikasi berbayar.
Unduh ZIP sumber Symfony
Repositori sumber publik
README lengkap dan contoh
Catatan keamanan dan batasan yang diketahui
1. Instal
Ekstrak ZIP yang diunduh secara persis ke dalam direktori paket yang dipertahankan, daftarkan direktori tersebut sebagai repositori jalur Composer, wajibkan paket 0.1.1 yang persis, dan daftarkan SendRepute\Symfony\SendReputeBundle jika Flex tidak melakukannya. Arsip sumber bersifat lokal dan tidak dipublikasikan.
mkdir -p packages
curl -fL https://www.sendrepute.com/downloads/sendrepute-symfony.zip -o packages/sendrepute-symfony.zip
unzip packages/sendrepute-symfony.zip -d packages
composer config repositories.sendrepute path ./packages/sendrepute-symfony
composer require sendrepute/symfony:0.1.1
Alternatif: instal dari sumber publik
Gunakan jalur sumber ini sebagai pengganti instruksi unduhan situs web di atas. README repositori menjelaskan langkah-langkah aktivasi dan konfigurasi yang tersisa; membangun ZIP saja tidak menginstal plugin. Untuk Python, perintah kedua menambahkan dukungan Django opsional. Simpan kredensial di rahasia server dan tinjau catatan keamanan sebelum mengaktifkan fitur berbayar. Hanya Node yang ada di npm; repositori GitHub publik tidak menyiratkan publikasi WordPress.org, n8n Cloud, Packagist, atau PyPI.
git clone https://github.com/sendrepute/sendrepute-symfony.git
cd sendrepute-symfony
2. Konfigurasikan dengan aman
Selesaikan SENDREPUTE_API_TOKEN dari rahasia server. Biarkan enabled dan paid_analysis_consent bernilai false selama meninjau harga saat ini. Mode, ambang batas, dan kebijakan kegagalan bersifat independen. Titik akhir (endpoint) dipatok ke HTTPS terverifikasi dengan tenggat waktu terbatas, tanpa pengalihan atau percobaan ulang, dan batas respons 1 MiB.
send_repute:
enabled: false
paid_analysis_consent: false
api_token: '%env(SENDREPUTE_API_TOKEN)%'
mode: advisory
failure_policy: allow
spam_probability_threshold: 0.8
3. Gunakan dengan sengaja
Tambahkan header opt-in yang persis hanya ke objek Email non-kritis yang telah ditinjau, lalu lanjutkan melalui Mailer normal. Pesan, amplop, transport, dan header tidak ditulis ulang. Untuk pengiriman Messenger, konfigurasikan bundel dalam pekerja: acara klon produsen sengaja tidak diklasifikasikan.
$email->getHeaders()->addTextHeader('X-SendRepute-Classify', 'yes');
$mailer->send($email);
Hasil, kegagalan, dan batasan
Tepat satu bodi teks atau HTML in-memory didukung. Alternatif campuran, DataParts tekstual, aliran atau jalur, kurung kurawal CSS, markah, sintaks quoted-printable, header base64 atau base64 seluruh bodi gagal sebelum pembayaran dan mengikuti kebijakan kegagalan; konten tanpa kurung kurawal yang biasa tidak diubah. Setiap bidang respons bersarang yang diwajibkan dan cabang audit opsional divalidasi dan properti yang tidak dikenal ditolak. Penasihat tidak pernah memblokir skor; pemblokiran menolak pada ambang batas melalui kejadian transport riil.
Adaptor Rails Action Mailer
0.1.0
Memerlukan Ruby 3.2+ dan diverifikasi secara khusus dengan Action Mailer 7.1.6 dan Mail 2.9.1; jalur callback juga diamati pada Action Mailer 7.2.3.2. Ini bukan sertifikasi untuk setiap rilis Rails 7.x yang diizinkan. Instal ZIP sumber lokal melalui Bundler; tidak ada klaim publikasi ke RubyGems.
Kedua gerbang berbayar global defaultnya tidak aktif, dan setiap action mailer harus memanggil sendrepute_paid_preflight! secara eksplisit. Perilaku skor advisory/block dan perilaku kegagalan preserve/block bersifat independen. Rute pengaturan ulang kata sandi, MFA, login, verifikasi, penagihan, dan keamanan harus tetap tidak dipilih. Setiap pesan multipart dan konten CSS ambigu, quoted-printable, atau yang terlihat seperti base64 ditolak sebelum pembayaran; satu bodi teks terdekode atau bodi HTML yang diterima akan dianalisis tanpa mengubah pesan asli atau transport.
Unduh sumber ZIP Rails
Repositori sumber publik
README lengkap dan contoh
Catatan keamanan dan batasan yang diketahui
1. Instal
Ekstrak ZIP persis ke vendor/sendrepute-rails, tambahkan entri jalur lokal ke Gemfile, jalankan Bundler di lingkungan Anda yang terkendali, dan sertakan SendRepute::Rails::Mailer di ApplicationMailer. Ini bukan penginstalan RubyGems.
# Download sendrepute-rails.zip, then extract it into vendor/sendrepute-rails.
gem "sendrepute-rails", path: "vendor/sendrepute-rails"
Alternatif: instal dari sumber publik
Gunakan jalur sumber ini sebagai pengganti instruksi unduhan situs web di atas. README repositori menjelaskan langkah-langkah aktivasi dan konfigurasi yang tersisa; membangun ZIP saja tidak menginstal plugin. Untuk Python, perintah kedua menambahkan dukungan Django opsional. Simpan kredensial di rahasia server dan tinjau catatan keamanan sebelum mengaktifkan fitur berbayar. Hanya Node yang ada di npm; repositori GitHub publik tidak menyiratkan publikasi WordPress.org, n8n Cloud, Packagist, atau PyPI.
git clone https://github.com/sendrepute/sendrepute-rails.git
cd sendrepute-rails
2. Konfigurasikan dengan aman
Biarkan enabled dan paid_consent false hingga harga saat ini dan rute ditinjau. Baca token dari kredensial Rails atau rahasia server lainnya. Konfigurasikan penasihat/pemblokiran, pelestarian/pemblokiran, dan ambang batas secara independen; panggilan balik on_result dan on_error tidak boleh mencatat konten pesan, data otorisasi, atau respons lengkap.
SendRepute::Rails.configure do |config|
config.enabled = false
config.paid_consent = false
config.token = Rails.application.credentials.dig(:sendrepute, :api_token)
config.mode = :advisory
config.failure_policy = :preserve
config.score_threshold = 0.8
end
3. Gunakan dengan sengaja
Panggil sendrepute_paid_preflight! hanya di dalam setiap tindakan mailer non-kritis yang dipilih secara sengaja. Tindakan normal memintas klasifikasi. Hook berbayar menggunakan rute before_deliver dari Action Mailer; tidak ada keikutsertaan (opt-in) otomatis global yang disediakan dan adaptor tidak menulis ulang Mail::Message.
class ApplicationMailer < ActionMailer::Base
include SendRepute::Rails::Mailer
end
def newsletter
sendrepute_paid_preflight!
mail(to: params[:to], subject: "News")
end
Hasil, kegagalan, dan batasan
Satu bodi text/plain atau text/html yang didekode dan ditampilkan didukung. Setiap input penormal multipart atau yang ambigu gagal sebelum pembayaran dan mengikuti kebijakan kegagalan. Respons bersarang bertipe lengkap dapat memblokir hanya dalam mode pemblokiran pada atau di atas ambang batas; penasihat mempertahankan setiap skor. Panggilan balik hasil dan galat menerima data aman tak berubah (immutable), dan pengecualian panggilan balik atau throw(:abort) ditangkap secara lokal sehingga tidak dapat menghentikan penasihat atau mencegah pengiriman. Titik akhir yang tetap menolak pengalihan dan percobaan ulang serta menggunakan tenggat waktu total terbatas. Uji Action Mailer 7.1.6 yang sebenarnya lulus: 19 jalannya pengujian dan 59 asersi; tidak ada permintaan berbayar atau pengiriman aktual yang terjadi.
Adaptor Spring JavaMailSender
0.1.1
Memerlukan Java 17+ dan menargetkan Spring Framework 6.2.x JavaMailSender; verifikasi dependensi yang tepat menggunakan Spring Framework 6.2.19. Tidak ada klaim untuk Spring Boot 4 atau versi framework secara luas. Bangun sumber ZIP lokal dengan Maven; ini tidak dipublikasikan ke Maven Central atau registry lainnya.
Default untuk dekorator, persetujuan berbayar, mode penasihat, dan izinkan-saat-gagal bersifat eksplisit. Hanya sendWithSendRepute(...) yang melakukan analisis pra-pengiriman berbayar; setiap overload send(...) biasa akan melewati klasifikasi dan mendelegasikan tanpa perubahan. Gunakan send biasa untuk email kritis kecuali pengiriman individual tersebut sengaja dipilih. Alternatif MIME yang ditampilkan dan didukung dibingkai bersama secara inert; konten yang tidak didukung, bersarang, bertanda tangan, terenkripsi, atau ambigu akan gagal sebelum pembayaran.
Unduh ZIP sumber Spring Java
Repositori sumber publik
README lengkap dan contoh
Catatan keamanan dan batasan yang diketahui
1. Instal
Ekstrak ZIP sumber 0.1.1, jalankan mvn verify, dan pasang itu hanya ke repositori Maven lokal Anda yang terkendali. Aplikasi yang mengonsumsinya memasok JavaMailSender dan implementasi surel saat-jalan (runtime) yang sudah ada. Verifikasi dependensi secara persis menggunakan bytecode Java 17, Spring Framework 6.2.19, dan versi-versi yang didokumentasikan di dalam README yang disertakan.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-spring-mail.zip
unzip sendrepute-spring-mail.zip
cd sendrepute-spring-mail-0.1.1
mvn verify
mvn install
Alternatif: instal dari sumber publik
Gunakan jalur sumber ini sebagai pengganti instruksi unduhan situs web di atas. README repositori menjelaskan langkah-langkah aktivasi dan konfigurasi yang tersisa; membangun ZIP saja tidak menginstal plugin. Untuk Python, perintah kedua menambahkan dukungan Django opsional. Simpan kredensial di rahasia server dan tinjau catatan keamanan sebelum mengaktifkan fitur berbayar. Hanya Node yang ada di npm; repositori GitHub publik tidak menyiratkan publikasi WordPress.org, n8n Cloud, Packagist, atau PyPI.
git clone https://github.com/sendrepute/sendrepute-java.git
cd sendrepute-java
2. Konfigurasikan dengan aman
Bangun SendReputeConfiguration dari token sisi-server dan sakelar eksplisit. Biarkan enabled dan paidAnalysisConsent false hingga penetapan harga dan pemanggilan yang dipilih ditinjau. Penasihat/pemblokiran, ambang batas, dan kebijakan kegagalan izinkan/blokir adalah independen. Titik akhir (endpoint) ditetapkan secara paten ke HTTPS terverifikasi tanpa ada pengalihan (redirect) atau percobaan ulang.
var settings = new SendReputeConfiguration(
token, false, false,
SendReputeConfiguration.Mode.ADVISORY,
SendReputeConfiguration.FailurePolicy.ALLOW,
0.80, Duration.ofSeconds(3), Duration.ofSeconds(10));
var reviewedSender = new SendReputeJavaMailSender(existingSender, settings);
3. Gunakan dengan sengaja
Panggil sendWithSendRepute(...) hanya untuk SimpleMailMessage, MimeMessage atau MimeMessagePreparator individual yang harus dikenai analisis. Kelebihan beban (overload) tunggal dan varargs didukung. Setiap overload send(...) biasa memintas klasifikasi. Preparator dirender sekali dan MIME yang telah dipersiapkan aslinya didelegasikan setelah diizinkan oleh kebijakan.
// Paid classification is possible only on this explicit method.
reviewedSender.sendWithSendRepute(reviewedMessage);
// Every ordinary JavaMailSender send overload bypasses classification.
reviewedSender.send(criticalMessage);
Hasil, kegagalan, dan batasan
Semua bagian plain dan HTML yang ditampilkan dan didukung dianalisis; penerima dan lampiran dikecualikan. Penelusuran dibatasi hingga 16 tingkat, 256 bagian, dan 524.288 byte UTF-8 yang ditampilkan. Biner inline yang diabaikan tidak pernah dimaterialisasikan; sumber tampilan malas (lazy) yang tidak dikenal atau tidak terbatas gagal sebelum aliran dibuka atau permintaan berbayar dibuat, dan pembacaan sumber yang didukung dibatasi. Pembingkaian entitas-numerik menjaga fragmen tetap inert melalui urutan normalizer server yang diperiksa. Seluruh batch varargs disiapkan dan dinormalisasi sebelum permintaan berbayar pertama, dan inspeksi tidak menghasilkan header Jakarta Mail. Diperlukan respons bersarang yang tepat secara rekursif.
Adapter email Magento Open Source
0.1.1
Hanya mendukung Magento Open Source 2.4.7-p5 dan 2.4.7-p6 dengan sumber mail-interface tetap yang telah ditinjau secara tepat. Fixture bertipe luring telah lulus uji, tetapi instalasi Magento secara penuh belum dilakukan; tidak ada rilis Magento atau Adobe Commerce lain yang tersertifikasi. Instal ZIP lokal melalui repositori jalur Composer; ini bukan paket Adobe Marketplace.
Modul, persetujuan berbayar, dan daftar rute semuanya dinonaktifkan secara default. Setiap pengidentifikasi templat memerlukan dua persetujuan tepat yang independen; tingkat kritikalitas tidak pernah disimpulkan dari namanya. Plugin aroundSendMessage menganalisis pada batas transportasi akhir tanpa membangun ulang pesan. Kebijakan ambang batas penasihat/pemblokiran dan kebijakan pertahankan/blokir saat gagal bersifat independen; pemblokiran akan memicu Magento MailException yang terlihat. Beberapa bagian MIME yang ditampilkan dan konten yang ambigu akan gagal sebelum pembayaran.
Unduh ZIP sumber Magento
Repositori sumber publik
README lengkap dan contoh
Catatan keamanan dan batasan yang diketahui
1. Instal
Ekstrak ZIP ke direktori paket yang disimpan, daftarkan root SendRepute_MailAdapter sebagai repositori jalur Composer, wajibkan versi 0.1.1, lalu gunakan proses module enable dan setup upgrade normal dari Magento. Jangan merepresentasikan arsip lokal ini sebagai paket Adobe Marketplace.
mkdir -p packages/sendrepute-magento
curl -fLO https://www.sendrepute.com/downloads/sendrepute-magento.zip
unzip sendrepute-magento.zip -d packages/sendrepute-magento
composer config repositories.sendrepute path ./packages/sendrepute-magento/SendRepute_MailAdapter
composer require sendrepute/magento-mail-adapter:0.1.1
bin/magento module:enable SendRepute_MailAdapter
bin/magento setup:upgrade
Alternatif: instal dari sumber publik
Gunakan jalur sumber ini sebagai pengganti instruksi unduhan situs web di atas. README repositori menjelaskan langkah-langkah aktivasi dan konfigurasi yang tersisa; membangun ZIP saja tidak menginstal plugin. Untuk Python, perintah kedua menambahkan dukungan Django opsional. Simpan kredensial di rahasia server dan tinjau catatan keamanan sebelum mengaktifkan fitur berbayar. Hanya Node yang ada di npm; repositori GitHub publik tidak menyiratkan publikasi WordPress.org, n8n Cloud, Packagist, atau PyPI.
git clone https://github.com/sendrepute/sendrepute-magento.git
cd sendrepute-magento
2. Konfigurasikan dengan aman
Atur SENDREPUTE_API_TOKEN hanya di lingkungan server PHP-FPM dan CLI. Di Stores > Configuration > Services > SendRepute, biarkan modul dan persetujuan berbayar dalam keadaan nonaktif pada awalnya. Tambahkan setiap pengidentifikasi templat yang tepat ke kedua daftar persetujuan rute yang independen; nama, termasuk nama numerik, tidak pernah menyiratkan tingkat kekritisan. Konfigurasikan penasihat/blokir, ambang batas, dan perilaku kegagalan pertahankan/blokir secara terpisah.
export SENDREPUTE_API_TOKEN="replace-with-a-scoped-server-token"
# Then configure Stores > Configuration > Services > SendRepute.
3. Gunakan dengan sengaja
Lanjutkan menggunakan templat normal dan alur transport Magento. Korelasi rute mencatat pengenal dan toko yang tepat yang dipilih melalui TransportBuilder, sementara plugin aroundSendMessage terakhir membaca antarmuka email dan MIME bertipe resmi sebelum memanggil transport yang sama. Status builder dibersihkan dalam finally, dan korelasi builder/message menggunakan entri WeakMap dengan kunci objek sehingga transport yang dibangun dan ditinggalkan tidak dapat meninggalkan otorisasi ID-objek numerik yang dapat digunakan kembali. Adaptor tidak menyediakan metode send baru atau mengubah pesan.
Hasil, kegagalan, dan batasan
Hanya satu bagian MIME yang ditampilkan yang didukung yang dapat diterima; lampiran dipertahankan tetapi dikecualikan dari analisis. Beberapa bagian yang ditampilkan, transfer encodings atau charset yang tidak didukung, stream, MIME bertingkat, atau teks normalizer yang ambigu akan gagal sebelum pembayaran. Satu permintaan HTTPS terverifikasi memiliki tenggat waktu terbatas dan ukuran respons dengan tanpa retry atau redirect. Hasil bertingkat yang valid dapat memblokir pada threshold; fail-block yang dikonfigurasi akan memunculkan Magento MailException.
Adapter MailKit .NET
0.1.0
Memerlukan .NET 8 dan bukti dependensi tepat untuk MailKit/MimeKit 4.18.0. Ini adalah pembungkus eksplisit untuk IMailTransport milik aplikasi, bukan hook global, klien SMTP, atau transportasi pengganti. Bangun atau referensikan ZIP sumber lokal; tidak ada publikasi NuGet yang diklaim.
Adaptor dan persetujuan berbayar dinonaktifkan secara default; mode penasihat dan pertahankan pengiriman adalah pengaturan default yang independen. Panggilan ke AnalyzeAsync, AnalyzeThenSend, atau AnalyzeThenSendAsync bersifat eksplisit. Email keamanan/akun yang kritis memerlukan kategori dan persetujuan per-panggilan yang terpisah. Setiap alternatif text/plain atau text/html yang ditampilkan dan didukung dibingkai secara inert ke dalam satu permintaan terikat; konten yang tidak didukung, bersarang, bertanda tangan, atau terenkripsi akan gagal sebelum pembayaran. MimeMessage asli dan cancellation token mencapai transportasi yang ada hanya setelah kebijakan mengizinkan.
Unduh ZIP sumber .NET MailKit
Repositori sumber publik
README lengkap dan contoh
Catatan keamanan dan batasan yang diketahui
1. Instal
Ekstrak ZIP sumber dan referensikan src/SendRepute.MailKit/SendRepute.MailKit.csproj dari proyek .NET 8 yang menggunakannya. Restore akan mendapatkan MailKit/MimeKit 4.18.0. Paket sumber ini bersifat lokal dan tidak dipublikasikan; ini bukan instalasi NuGet.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-mailkit.zip
unzip sendrepute-mailkit.zip
dotnet add reference ./sendrepute-mailkit-0.1.0/src/SendRepute.MailKit/SendRepute.MailKit.csproj
Alternatif: instal dari sumber publik
Gunakan jalur sumber ini sebagai pengganti instruksi unduhan situs web di atas. README repositori menjelaskan langkah-langkah aktivasi dan konfigurasi yang tersisa; membangun ZIP saja tidak menginstal plugin. Untuk Python, perintah kedua menambahkan dukungan Django opsional. Simpan kredensial di rahasia server dan tinjau catatan keamanan sebelum mengaktifkan fitur berbayar. Hanya Node yang ada di npm; repositori GitHub publik tidak menyiratkan publikasi WordPress.org, n8n Cloud, Packagist, atau PyPI.
git clone https://github.com/sendrepute/sendrepute-dotnet.git
cd sendrepute-dotnet
2. Konfigurasikan dengan aman
Bungkus IMailTransport milik aplikasi yang sudah ada dengan SendReputeMailAdapter. Baca API token dari konfigurasi server dan biarkan Enabled serta PaidAnalysisConsent tetap false sampai ditinjau. Ambang batas saran/blokir serta pengaturan simpan/blokir kegagalan bersifat independen. Endpoint, batas minimum TLS, perilaku satu kali percobaan, tenggat waktu, dan batas 1 MiB bersifat tetap.
var options = new SendReputeOptions {
Enabled = false,
PaidAnalysisConsent = false,
ApiToken = configuration["SENDREPUTE_API_KEY"]!,
Enforcement = EnforcementPolicy.Advisory,
OnFailure = FailurePolicy.PreserveSend,
SpamProbabilityThreshold = 0.80
};
var adapter = new SendReputeMailAdapter(existingTransport, new SendReputeClient(options), options);
3. Gunakan dengan sengaja
Panggil AnalyzeAsync hanya untuk analisis, atau AnalyzeThenSend dan AnalyzeThenSendAsync untuk perilaku eksplisit sebelum pengiriman. Tidak ada jalur email biasa atau global yang dicegat. Berikan persetujuan berbayar dan kategori pesan pada setiap operasi yang dipilih; email keamanan/akun kritis memerlukan pengaturan persetujuan kritis terpisah.
await adapter.AnalyzeThenSendAsync(message, new AnalysisConsent {
PaidAnalysisConsent = true,
Category = MessageCategory.Ordinary
}, cancellationToken);
Hasil, kegagalan, dan batasan
Dekoding MimeKit yang sebenarnya mengumpulkan setiap alternatif teks polos dan HTML yang didukung ke dalam pembingkaian inert sambil mengecualikan penerima dan lampiran. Pembingkaian luar non-base64 dan entitas yang didekodekan terlambat menetralkan kurung kurawal CSS, teks quoted-printable, header base64, base64 seluruh isi dan markup sebelum normalisasi layanan. Konten yang ditampilkan yang tidak didukung, bertingkat, ditandatangani, atau terenkripsi akan gagal sebelum pembayaran. Setiap field respons yang diperlukan memiliki tipe data; flaggedTermCount opsional harus berupa integer non-negatif dan contentAudit opsional divalidasi secara penuh dan rekursif terhadap kontrak publik. MimeMessage asli yang tepat dan token pembatalan mencapai transport yang disediakan hanya jika skor independen dan kebijakan kegagalan mengizinkan.
Analisis draf manual Zapier
0.2.0
Resep Zapier manual untuk menampilkan analisis berbayar dari tepat tiga string draf yang dipilih pemilik. Ini bukan aplikasi Zapier SendRepute, daftar marketplace, artefak impor, adaptor pra-pengiriman, pengirim, rute izin/blokir, atau pengklasifikasi pesan utuh. Zapier Webhooks menggunakan proksi HTTPS terikat yang dioperasikan pemilik karena token SendRepute tidak boleh masuk ke Zap.
Dua konstanta waktu kompilasi secara default bernilai false sebelum HTTP. Zap memetakan nama tampilan pengirim, subjek, dan badan pesan saja, mengirimkan JSON ke desain proksi pemilik yang disertakan, memvalidasi respons bersarang sepenuhnya, lalu menampilkan bidang penasihat dan penagihan dalam langkah peninjauan pribadi. Zap ini tidak boleh menambahkan pengirim, penegakan Paths, Autoreplay, atau rute pertahankan kegagalan; langkah Code atau Webhook yang gagal akan berhenti.
Unduh ZIP resep Zapier dan Make
Repositori sumber publik
README lengkap dan contoh
Catatan keamanan dan batasan yang diketahui
1. Instal
Unduh dan ekstrak sumber resep 0.2.0 yang dibagikan. Baca panduan Zapier yang disertakan dan terapkan proxy Node loopback yang disertakan hanya di belakang proxy terbalik HTTPS yang dikelola pemilik. Paket ini tidak menerapkannya. Tidak ada aplikasi SendRepute Zapier atau artefak Zap yang dapat diimpor.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-automation-recipes.zip
unzip sendrepute-automation-recipes.zip
cd sendrepute-automation-recipes
Alternatif: instal dari sumber publik
Gunakan jalur sumber ini sebagai pengganti instruksi unduhan situs web di atas. README repositori menjelaskan langkah-langkah aktivasi dan konfigurasi yang tersisa; membangun ZIP saja tidak menginstal plugin. Untuk Python, perintah kedua menambahkan dukungan Django opsional. Simpan kredensial di rahasia server dan tinjau catatan keamanan sebelum mengaktifkan fitur berbayar. Hanya Node yang ada di npm; repositori GitHub publik tidak menyiratkan publikasi WordPress.org, n8n Cloud, Packagist, atau PyPI.
git clone https://github.com/sendrepute/sendrepute-automation.git
cd sendrepute-automation
2. Konfigurasikan dengan aman
Biarkan Zap dalam keadaan mati. Dalam sumber Code preflight yang tepat, ENABLED dan PAID_CONSENT keduanya tetap false sampai penggunaan berbayar ditinjau. Proksi pemilik menyimpan SENDREPUTE_API_TOKEN; Zap hanya menerima satu kredensial yang dapat dicabut secara terpisah dari SENDREPUTE_PROXY_CREDENTIALS. Editor dan riwayat tugas mungkin mengeksposnya, jadi batasi, rotasi, dan cabut kredensial tersebut. Konfigurasikan batas token-bucket dan konkurensi per-kredensial, batas koneksi/konkurensi global, anggaran panggilan berbayar harian yang ditetapkan pemilik secara persisten, batas pengeluaran hulu yang restriktif, dan kontrol ukuran/laju/tenggat TLS-terminator yang sesuai. Jangan aktifkan Autoreplay.
// In zapier/preflight.js; review charges before changing either literal.
const ENABLED = false;
const PAID_CONSENT = false;
3. Gunakan dengan sengaja
Bangun langkah-langkah secara manual: draf pemicu; pemetaan Code preflight hanya untuk pengirim, subjek, dan badan; Webhooks POST dengan baris JSON ke proxy pemilik; Code validasi-respons; tampilan tinjauan privat. Jangan pernah menginterpolasi raw JSON secara manual. Tampilkan requestId, model, label, spamProbability dan penagihan saja; jangan tambahkan tindakan surat atau keputusan Paths.
{
"sender": "Mapped draft sender display name",
"subject": "Mapped draft subject",
"body": "Mapped draft body"
}
Hasil, kegagalan, dan batasan
Resep ini hanya menganalisis tiga string yang dipetakan; MIME yang tidak dipetakan, alternatif HTML, lampiran, dan konten keluar akhirnya tetap tidak dianalisis. Preflight konservatif menolak pemicu normalizer yang diketahui tetapi tidak membuktikan cakupan seluruh pesan. Batas laju proksi, konkurensi, dan anggaran harian menolak sebelum hulu, dan reservasi anggaran bertahan sebelum upaya berbayar; jalankan satu proses proksi per file anggaran. Proksi melakukan satu upaya HTTPS tetap yang terikat. Setiap respons yang tidak tepat 200 atau tidak lengkap akan memicu throw dan berhenti; tidak ada hasil yang dipertahankan, Resume atau pengganti.
Buat analisis draf manual Make
0.2.0
Instruksi skenario Make manual untuk menampilkan analisis berbayar dari tepat tiga string draf yang dipilih. Ini bukan merupakan blueprint, aplikasi SendRepute yang disetujui, pengirim email, rute penegakan hukum, atau klaim tentang MIME, HTML, lampiran yang tidak dipetakan, atau konten keluar di masa mendatang. Bearer token hanya boleh ditempatkan di dalam keychain aman Make HTTP.
Boolean enabled dan paidConsent yang tersimpan secara default bernilai false dan filter AND berhenti sebelum HTTP. JSON diproduksi oleh modul JSON Make dan dikirim sekali oleh modul HTTP dengan pengalihan serta upaya ulang dinonaktifkan. Filter respons hanya berfungsi sebagai penjaga tampilan, bukan validasi penuh atau izin untuk mengirim. Kegagalan HTTP menggunakan Break, jangan pernah menggunakan Resume atau mengganti output.
Unduh ZIP resep Zapier dan Make
Repositori sumber publik
README lengkap dan contoh
Catatan keamanan dan batasan yang diketahui
1. Instal
Unduh dan ekstrak sumber resep 0.2.0 bersama, lalu ikuti panduan Make yang disertakan untuk membangun modul native saat ini secara manual. Tidak ada blueprint, aplikasi marketplace, atau format impor yang diklaim. Tetapkan penjadwalan skenario tetap nonaktif saat pengujian terhadap titik akhir mock.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-automation-recipes.zip
unzip sendrepute-automation-recipes.zip
cat sendrepute-automation-recipes/make/README.md
Alternatif: instal dari sumber publik
Gunakan jalur sumber ini sebagai pengganti instruksi unduhan situs web di atas. README repositori menjelaskan langkah-langkah aktivasi dan konfigurasi yang tersisa; membangun ZIP saja tidak menginstal plugin. Untuk Python, perintah kedua menambahkan dukungan Django opsional. Simpan kredensial di rahasia server dan tinjau catatan keamanan sebelum mengaktifkan fitur berbayar. Hanya Node yang ada di npm; repositori GitHub publik tidak menyiratkan publikasi WordPress.org, n8n Cloud, Packagist, atau PyPI.
git clone https://github.com/sendrepute/sendrepute-automation.git
cd sendrepute-automation
2. Konfigurasikan dengan aman
Buat variabel Tools boolean persisten enabled=false dan paidConsent=false, diikuti oleh filter AND yang mewajibkan keduanya bernilai true. Gunakan JSON > Create JSON untuk tepat sender, subject, dan body. Simpan token bearer SendRepute hanya di keychain aman aplikasi HTTP; skenario yang diekspor tidak boleh berisi kredensial apa pun.
Tools variables: enabled = false; paidConsent = false
Filter: enabled = true AND paidConsent = true
HTTP credential: secure keychain; Authorization header
Body type: Raw; Content type: application/json; map serialized JSON
Follow redirect: No; Timeout: 10 seconds; no retry
Response filter: Minimal display guard
3. Gunakan dengan sengaja
Konfigurasikan satu HTTP POST ke URL classify yang tetap. Pilih tipe Body Raw dan kontrol application/json content-type tanpa menambahkan header teks bebas yang konflik, lalu petakan output yang diserialisasi dari JSON > Create JSON. Aktifkan parsed response, nonaktifkan pengalihan (redirects), atur timeout 10 detik, dan jangan tambahkan pengulang (repeater) atau percobaan ulang otomatis. Wajibkan batas respons modul sebesar 1 MiB; jika tidak tersedia, gunakan proxy terbatas yang dikendalikan pemilik sebagai gantinya. Tambahkan hanya tampilan tinjauan pribadi setelah Minimal display guard—jangan pernah menambahkan pengirim atau router allow/block.
{
"sender": "Mapped draft sender display name",
"subject": "Mapped draft subject",
"body": "Mapped draft body"
}
Hasil, kegagalan, dan batasan
Hanya string yang dipetakan yang dianalisis; normalisasi bukanlah identitas dengan email asli atau outbound. Filter respons memeriksa status dan kehadiran hasil inti/penagihan saja dan secara eksplisit bukan validasi atau penegakan skema penuh. Kesalahan HTTP menggunakan Break sehingga tindakan selanjutnya tidak berjalan; jangan pernah menggunakan Resume, output buatan, atau rute failure-preserve.
SDK Node.js
0.1.1
SDK khusus server untuk Node.js 18.17+. Instal @sendrepute/node dari npm atau gunakan tarball yang dapat diunduh. Adaptor Nodemailer opsional mempertahankan transport Anda yang sudah ada. Tetapkan kunci API ter-scope dan URL dasar API eksplisit di lingkungan server Anda, jangan pernah di kode browser.
Daftarkan createSendReputePlugin pada tahap stream hanya setelah meninjau harga dan secara sengaja mengaktifkan persetujuan analisis berbayar. Mode penasihat melaporkan temuan tanpa memblokir pengiriman. Mode pemblokiran memberlakukan spamProbabilityThreshold; onApiFailure memilih allow atau block, sedangkan penolakan akibat perubahan harga selalu memblokir pengiriman. Klasifikasi adalah operasi API berbayar.
Unduh tarball Node.js
Repositori sumber publik
README lengkap dan contoh
Catatan keamanan dan batasan yang diketahui
Lihat paket npm terverifikasi
1. Instal
Paket npm yang terverifikasi adalah @sendrepute/node versi 0.1.1; sematkan instalasi registri ke @sendrepute/node@0.1.1. Tarball situs web dan repositori publik yang disematkan menyediakan sumber rilis 0.1.1 dan build. Nodemailer bersifat opsional dan hanya diperlukan untuk adaptor transport. SDK mendukung permintaan customer API bertipe untuk akun, katalog, klasifikasi, AI, dan builder. Gunakan di server Node.js, jangan pernah di bundel browser.
npm install @sendrepute/node nodemailer
Alternatif: instal dari sumber publik
Gunakan jalur sumber ini sebagai pengganti instruksi unduhan situs web di atas. README repositori menjelaskan langkah-langkah aktivasi dan konfigurasi yang tersisa; membangun ZIP saja tidak menginstal plugin. Untuk Python, perintah kedua menambahkan dukungan Django opsional. Simpan kredensial di rahasia server dan tinjau catatan keamanan sebelum mengaktifkan fitur berbayar. Hanya Node yang ada di npm; repositori GitHub publik tidak menyiratkan publikasi WordPress.org, n8n Cloud, Packagist, atau PyPI.
npm install @sendrepute/node@0.1.1
npm install nodemailer
2. Konfigurasikan dengan aman
Injeksikan SENDREPUTE_API_KEY dari penyimpanan rahasia server Anda dan atur URL dasar eksplisit di bawah ini untuk customer API yang dihosting. Jangan tempel rahasia ke dalam perintah, file sumber, atau log. Berikan hanya scope yang diperlukan operasi Anda. Penyiapan menggunakan transport rendering lokal, bukan SMTP; maxRetries disetel ke nol di sini untuk membuat upaya berbayar dilakukan secara sengaja.
export SENDREPUTE_API_BASE_URL=https://www.sendrepute.com/api
Pengaturan Nodemailer
Contoh ini mengonfigurasi transportasi rendering lokal dan tidak memanggil sendMail. Pengiriman melalui plugin yang dikonfigurasi melakukan analisis berbayar. Ganti transportasi lokal dengan transportasi SMTP Anda yang ada hanya jika sudah siap.
import nodemailer from "nodemailer";
import { SendReputeClient } from "@sendrepute/node";
import { createSendReputePlugin } from "@sendrepute/node/nodemailer";
const apiKey = process.env.SENDREPUTE_API_KEY;
const baseUrl = process.env.SENDREPUTE_API_BASE_URL;
if (!apiKey || !baseUrl) {
throw new Error("SENDREPUTE_API_KEY and SENDREPUTE_API_BASE_URL are required");
}
const client = new SendReputeClient({ apiKey, baseUrl, maxRetries: 0 });
const transporter = nodemailer.createTransport({
streamTransport: true,
buffer: true,
newline: "unix",
});
transporter.use("stream", createSendReputePlugin({
client,
policy: {
paidAnalysisConsent: true,
mode: "blocking",
spamProbabilityThreshold: 0.85,
onApiFailure: "block",
},
}));
3. Gunakan dengan sengaja
Gunakan klien dari penyiapan di atas. Baca akun dan harga saat ini sebelum menampilkan tindakan persetujuan. Panggil classifyAfterConsent hanya dari server action terautentikasi setelah konfirmasi; ini mengembalikan klasifikasi bertipe dan respons penagihan. Pengiriman melalui plugin Nodemailer yang dikonfigurasi juga merupakan tindakan klasifikasi berbayar. Adapter memerlukan paidAnalysisConsent: true dan menolak nilai lain sebelum pendaftaran; tetapkan hanya setelah otorisasi.
// Uses client from the setup above; nothing calls this function automatically.
async function classifyAfterConsent({ sender, subject, body, confirmed }) {
if (confirmed !== true) throw new Error("Paid consent required");
return client.request("classifyCustomerEmail", { body: { sender, subject, body } });
}
async function readAccountAndPricing() {
return Promise.all([
client.request("customerGetAccount", {}),
client.request("customerGetPricingSettings", {}),
]);
}
Builder Standard dan VIP native
Builder standar gratis mengimpor, memvalidasi, menyusun, dan mengekspor MJML sebagai HTML, MJML, atau ZIP keduanya. Builder VIP asli yang terpisah menggunakan format dokumennya sendiri, bukan MJML: operasi impor, validasi, penyusunan, dan ekspornya memerlukan keanggotaan aktif dan hak akses terbuka yang dimiliki, dan ZIP-nya berisi tiga varian CSS HTML. Pembuatan AI opsional dibayar secara terpisah, menghasilkan desain MJML standar atau VIP asli yang dapat diedit; tampilkan harga efektif saat ini dan teruskan expectedPriceMillicents yang telah dikonfirmasi, jangan pernah gunakan harga yang ditulis secara manual (hard-coded). Respons ZIP berisi archiveBase64, bukan bidang html: decodeExportBytes mengembalikan byte untuk disimpan oleh aplikasi Anda. Titik akhir pemrosesan ini tidak mengambil aset, menyimpan desain, atau mengirim email.
import { decodeExportBytes } from "@sendrepute/node";
async function exportStandardZip(mjml) {
const exported = await client.request("customerStandardBuilderExport", {
body: { mjml, format: "zip", filename: "newsletter.zip" },
});
return decodeExportBytes(exported);
}
async function generateNativeAfterConsent(prompt, expectedPriceMillicents, confirmed) {
if (confirmed !== true) throw new Error("Paid consent required");
return client.request("customerCreateVipEmailTemplate", {
body: { prompt, expectedPriceMillicents },
});
}
Apa lagi yang bisa dilakukannya?
ID operasi yang dihasilkan mencakup pembacaan akun dan harga, klasifikasi dan pengeditan manual, AI rewrite/pembuatan templat, paket/status/pembelian VIP, templat/hak akses native, dan impor/ekspor standar/native stateless. Konsultasikan contoh sumber dan referensi customer API untuk setiap jenis permintaan, scope yang diperlukan, dan harga saat ini. Pembacaan katalog tidak membeli akses. Kapabilitas berbayar baru memerlukan token dengan scope yang disengaja dan konfirmasi UI eksplisit.
Hasil, kegagalan, dan batasan
SendReputeError mengekspos status, code dan requestId; simpan hanya metadata operasional yang aman tersebut. Jangan pernah mencatat bodies, prompts, headers atau respons lengkap. AbortSignal membatalkan pekerjaan; timeoutMs berlaku per percobaan. Upaya ulang terbatas bersifat sadar-operasi dan perlindungan tanda terima dibatasi waktu, bukan penagihan exactly-once tak terbatas. Mode advisory Nodemailer melaporkan tanpa memblokir; pemblokiran menggunakan spamProbabilityThreshold dan onApiFailure secara independen. Simpan dan uji transport asli Anda secara terpisah.
import { SendReputeError } from "@sendrepute/node";
async function readAccountSafely() {
try {
return await client.request("customerGetAccount", {});
} catch (error) {
if (error instanceof SendReputeError) {
console.error({
status: error.status, code: error.code, requestId: error.requestId,
});
}
throw error;
}
}
Referensi API dan metode
SendReputeClient memerlukan apiKey dan baseUrl; timeoutMs opsional memiliki bawaan 30000 (maksimal 300000), maxRetries memiliki bawaan 2 (rentang 0–10), dan fetch menerima implementasi server yang kompatibel. request(operationId, input, { signal }) mengembalikan respons bertipe dari operasi tersebut; input berisi kolom body, path dan/atau query. Konfigurasi yang tidak valid akan memicu TypeError; kegagalan API menggunakan SendReputeError dengan status, code, requestId dan retryAfterMs. decodeExportBytes mengonversi ekspor ZIP ke Uint8Array dan menolak masukan non-ZIP atau base64 yang tidak valid. OperationInput, OperationResponse dan tipe skema yang dihasilkan diekspor untuk pemanggil TypeScript.
Alternatif: bungkus transport Nodemailer tingkat rendah
createSendReputeTransport(existingTransport, options) membungkus objek transport yang ada dengan metode send, serta opsional close dan verify; ini bukan transporter sendMail. Pilih ini atau createSendReputePlugin, bukan keduanya, untuk menghindari analisis ganda. Keduanya menerima client dan policy ditambah opsional model, sender string/resolver, signal dan onDiagnostic. Callback diagnostik tidak dapat mengubah pengiriman. Kode SendReputeNodemailerError membedakan policy/message yang tidak valid, konten yang tidak didukung, blokir spam, dan blokir API-failure. Paket npm 0.1.1 yang diterbitkan dan unduhan situs web 0.1.1 menggabungkan semua alternatif text/plain dan text/html dalam memori yang ditampilkan menjadi satu permintaan klasifikasi terbatas; dalam mode pemblokiran, mereka menolak alternatif tampilan yang tidak didukung. Pesan Raw, stream, path, dan URL tetap tidak didukung.
import { createSendReputeTransport } from "@sendrepute/node/nodemailer";
function wrapExistingTransport(existingTransport) {
return createSendReputeTransport(existingTransport, {
client,
policy: {
paidAnalysisConsent: true,
mode: "advisory",
spamProbabilityThreshold: 0.85,
onApiFailure: "block",
},
onDiagnostic(diagnostic) {
console.info(diagnostic.kind, diagnostic.action);
},
});
}
Semua 49 operasi API pelanggan
Perluas operasi untuk melihat tipe input SDK, tipe kembalian, cakupan, dan status HTTP yang didokumentasikan. Tautan skema akan membuka parameter lengkap, bidang respons, dan contoh di referensi API pelanggan. Wrapper ini menggunakan klien yang dikonfigurasi di atas; konfirmasi diperlukan dan tidak ada yang dieksekusi secara otomatis. Operasi baca tidak mengizinkan pembelian. Mutasi, pembayaran, penutupan akses, dan AI berbayar memerlukan tindakan akun yang disengaja dan sesuai.
Kutip satu analisis insight kampanye agregat
POST /v1/campaign-insights/quote
Cakupan yang diperlukan: ai:generate
Input: { body: CustomerCampaignInsightsQuoteInput; }
Kembalian: CustomerCampaignInsightsQuote
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 429, 503
Parameter, skema, dan contoh HTTP
// The configured server-side client needs ai:generate scope.
// A quote is free; it does not authorize or start paid analysis.
const quote = await client.request("customerQuoteCampaignInsights", { body: {} });
// quote.priceMillicents: 10000 (USD 0.10) regular, 5000 (USD 0.05) active VIP.
// The quoted rate can change; obtain fresh consent before analysis.
Analisis metrik pengiriman kampanye agregat dengan AI
POST /v1/campaign-insights/analyze
Cakupan yang diperlukan: ai:generate
Input: { body: CustomerCampaignInsightsAnalyzeInput; }
Kembalian: CustomerCampaignInsightsAnalysis
Status HTTP yang didokumentasikan: 200, 400, 401, 402, 403, 409, 413, 429, 502, 503
Parameter, skema, dan contoh HTTP
import { randomUUID } from "node:crypto";
import type { CustomerCampaignInsightsMetrics } from "@sendrepute/node";
async function analyzeReviewedAggregate(
metrics: CustomerCampaignInsightsMetrics,
paidConsent: boolean,
) {
if (paidConsent !== true) throw new Error("Explicit price consent required");
// Aggregate counts/rates only: never include campaign IDs, contacts,
// message bodies or individual events. Requires ai:generate scope.
const quote = await client.request("customerQuoteCampaignInsights", { body: {} });
const body = {
analysisId: randomUUID(), // Persist this opaque ID and exact body for safe replay.
expectedPriceMillicents: quote.priceMillicents,
consent: true as const,
metrics,
};
// USD 0.10 regular or USD 0.05 active VIP; no automatic retry on a paid request.
// 409 PRICE_CHANGED requires a new quote and fresh consent, not blind retry.
// Aggregate input and result expire after 30 days.
return client.request("customerAnalyzeCampaignInsights", { body });
}
Daftar model pengklasifikasi API pelanggan
GET /v1/models
Cakupan yang diperlukan: models:read
Input: Record<string, never>
Kembalian: CustomerApiModelsResponse
Status HTTP yang didokumentasikan: 200, 401, 403, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function getCustomerApiModels(
input: OperationInput<"getCustomerApiModels">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"getCustomerApiModels">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("getCustomerApiModels", input, { signal });
}
Dapatkan penggunaan dan batas API pelanggan
GET /v1/usage
Cakupan yang diperlukan: usage:read
Input: Record<string, never>
Kembalian: CustomerApiUsageResponse
Status HTTP yang didokumentasikan: 200, 401, 403, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function getCustomerApiUsage(
input: OperationInput<"getCustomerApiUsage">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"getCustomerApiUsage">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("getCustomerApiUsage", input, { signal });
}
Klasifikasi satu email pelanggan
POST /v1/classify
Cakupan yang diperlukan: classify
Input: { body: CustomerClassificationInput; }
Kembalian: CustomerClassificationResponse
Status HTTP yang didokumentasikan: 200, 400, 401, 402, 403, 409, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function classifyCustomerEmail(
input: OperationInput<"classifyCustomerEmail">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"classifyCustomerEmail">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("classifyCustomerEmail", input, { signal });
}
Dapatkan akun saat ini dan saldo
GET /v1/account
Cakupan yang diperlukan: account:read
Input: Record<string, never>
Kembalian: Account
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetAccount(
input: OperationInput<"customerGetAccount">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetAccount">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetAccount", input, { signal });
}
Dapatkan tautan rujukan dan aktivitas reward dari akun saat ini
GET /v1/account/referrals
Cakupan yang diperlukan: account:read
Input: { query?: { page?: number; pageSize?: number; }; }
Kembalian: ReferralDashboard
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetAccountReferrals(
input: OperationInput<"customerGetAccountReferrals">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetAccountReferrals">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetAccountReferrals", input, { signal });
}
Daftar buku besar kredit akun saat ini
GET /v1/account/ledger
Cakupan yang diperlukan: billing:read
Input: { query?: { kind?: "usage" | "payments"; limit?: number; offset?: number; }; }
Kembalian: Array<CreditLedgerEntry>
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetCreditLedger(
input: OperationInput<"customerGetCreditLedger">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetCreditLedger">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetCreditLedger", input, { signal });
}
Daftar invoice Bitcoin akun saat ini
GET /v1/payments/invoices
Cakupan yang diperlukan: billing:read
Input: { query?: { limit?: number; offset?: number; }; }
Kembalian: Array<BitcoinInvoice>
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerListPaymentInvoices(
input: OperationInput<"customerListPaymentInvoices">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerListPaymentInvoices">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerListPaymentInvoices", input, { signal });
}
Buat invoice deposit Bitcoin dalam denominasi USD
POST /v1/payments/invoices
Cakupan yang diperlukan: billing:write
Input: { body: InvoiceInput; }
Kembalian: BitcoinInvoice
Status HTTP yang didokumentasikan: 201, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerCreatePaymentInvoice(
input: OperationInput<"customerCreatePaymentInvoice">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerCreatePaymentInvoice">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerCreatePaymentInvoice", input, { signal });
}
Sembunyikan invoice Bitcoin yang belum dibayar
DELETE /v1/payments/invoices/{invoiceId}
Cakupan yang diperlukan: billing:write
Input: { path: { invoiceId: string; }; }
Kembalian: undefined
Status HTTP yang didokumentasikan: 204, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerDeletePaymentInvoice(
input: OperationInput<"customerDeletePaymentInvoice">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerDeletePaymentInvoice">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerDeletePaymentInvoice", input, { signal });
}
GET /payments/methods
GET /v1/payments/methods
Cakupan yang diperlukan: billing:read
Input: Record<string, never>
Kembalian: Array<PaymentMethod>
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerListPaymentMethods(
input: OperationInput<"customerListPaymentMethods">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerListPaymentMethods">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerListPaymentMethods", input, { signal });
}
Dapatkan penawaran bonus deposit Bitcoin yang sedang aktif
GET /v1/payments/deposit-offer
Cakupan yang diperlukan: billing:read
Input: Record<string, never>
Kembalian: DepositBonusOffer | null
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetActiveDepositOffer(
input: OperationInput<"customerGetActiveDepositOffer">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetActiveDepositOffer">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetActiveDepositOffer", input, { signal });
}
Segarkan konfirmasi untuk invoice akun saat ini
POST /v1/payments/refresh
Cakupan yang diperlukan: billing:write
Input: Record<string, never>
Kembalian: Array<BitcoinInvoice>
Status HTTP yang didokumentasikan: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerRefreshMyPayments(
input: OperationInput<"customerRefreshMyPayments">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerRefreshMyPayments">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerRefreshMyPayments", input, { signal });
}
Dapatkan harga analisis dan pengeditan publik saat ini
GET /v1/pricing
Cakupan yang diperlukan: catalog:read
Input: Record<string, never>
Kembalian: PricingSettings
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetPricingSettings(
input: OperationInput<"customerGetPricingSettings">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetPricingSettings">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetPricingSettings", input, { signal });
}
Dapatkan penawaran VIP publik saat ini dan perbandingan harga
GET /v1/vip/plans
Cakupan yang diperlukan: catalog:read
Input: Record<string, never>
Kembalian: VipPlanQuote
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetVipPlans(
input: OperationInput<"customerGetVipPlans">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetVipPlans">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetVipPlans", input, { signal });
}
GET /vip
GET /v1/vip
Cakupan yang diperlukan: vip:read
Input: Record<string, never>
Kembalian: VipState
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetVip(
input: OperationInput<"customerGetVip">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetVip">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetVip", input, { signal });
}
POST /vip/purchase
POST /v1/vip/purchase
Cakupan yang diperlukan: vip:purchase
Input: { body: CustomerVipPurchaseInput; }
Kembalian: VipPurchaseResult
Status HTTP yang didokumentasikan: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerPurchaseVip(
input: OperationInput<"customerPurchaseVip">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerPurchaseVip">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerPurchaseVip", input, { signal });
}
Kutip harga pengeditan dan periksa ulang terhadap klasifikasi yang disimpan
POST /v1/rewrite/quote
Cakupan yang diperlukan: rewrite
Input: { body: EditQuoteInput; }
Kembalian: EditQuote
Status HTTP yang didokumentasikan: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerQuoteClassificationEdit(
input: OperationInput<"customerQuoteClassificationEdit">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerQuoteClassificationEdit">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerQuoteClassificationEdit", input, { signal });
}
Kutip harga pengeditan dan periksa ulang terhadap klasifikasi yang disimpan
POST /v1/classify/edit/quote
Cakupan yang diperlukan: classify
Input: { body: EditQuoteInput; }
Kembalian: EditQuote
Status HTTP yang didokumentasikan: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerQuoteManualClassificationEdit(
input: OperationInput<"customerQuoteManualClassificationEdit">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerQuoteManualClassificationEdit">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerQuoteManualClassificationEdit", input, { signal });
}
Klasifikasikan email menggunakan nama pengirim, subjek, dan isi
POST /v1/classify/edit
Cakupan yang diperlukan: classify
Input: { body: CustomerManualEditInput; }
Kembalian: CustomerManualEditResult
Status HTTP yang didokumentasikan: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerClassifyEmail(
input: OperationInput<"customerClassifyEmail">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerClassifyEmail">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerClassifyEmail", input, { signal });
}
Minta penulisan ulang AI berbayar terpisah untuk istilah yang ditandai dan klasifikasi ulang hasilnya
POST /v1/rewrite
Cakupan yang diperlukan: rewrite
Input: { body: CustomerAiRewriteInput; }
Kembalian: AiRewriteResult
Status HTTP yang didokumentasikan: 200, 400, 401, 402, 403, 404, 409, 413, 429, 502, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerRewriteFlaggedTermsWithAi(
input: OperationInput<"customerRewriteFlaggedTermsWithAi">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerRewriteFlaggedTermsWithAi">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerRewriteFlaggedTermsWithAi", input, { signal });
}
Verifikasi satu draf final tepat yang dirender terhadap tanda terima Rewrite All berbayar milik sendiri tanpa debet lain
POST /v1/rewrite/finalize
Cakupan yang diperlukan: rewrite
Input: { body: { requestId: string; sender: string; subject: string; body: string; }; }
Kembalian: { requestId: string; input: RewrittenClassificationInput; classification: ClassificationResult; }
Status HTTP yang didokumentasikan: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerFinalizeAiRewrite(
input: OperationInput<"customerFinalizeAiRewrite">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerFinalizeAiRewrite">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerFinalizeAiRewrite", input, { signal });
}
Pulihkan tanda terima penulisan ulang AI berbayar yang sudah selesai dan dimiliki
GET /v1/rewrite/result/{requestId}
Cakupan yang diperlukan: rewrite
Input: { path: { requestId: string; }; }
Kembalian: AiRewriteResult
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetAiRewriteResult(
input: OperationInput<"customerGetAiRewriteResult">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetAiRewriteResult">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetAiRewriteResult", input, { signal });
}
Kutip harga maksimum resmi dari penulisan ulang AI berbayar terpisah
POST /v1/rewrite/ai-quote
Cakupan yang diperlukan: rewrite
Input: { body: AiRewriteQuoteInput; }
Kembalian: AiRewriteQuote
Status HTTP yang didokumentasikan: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerQuoteAiRewrite(
input: OperationInput<"customerQuoteAiRewrite">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerQuoteAiRewrite">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerQuoteAiRewrite", input, { signal });
}
Buat desain email MJML standar yang dapat diedit dengan AI sesuai harga akun yang dikonfirmasi
POST /v1/email-builder/ai-template
Cakupan yang diperlukan: ai:generate
Input: { body: CustomerAiEmailTemplateInput; }
Kembalian: AiEmailTemplateResult
Status HTTP yang didokumentasikan: 200, 400, 401, 402, 403, 404, 409, 413, 429, 502, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerCreateAiEmailTemplate(
input: OperationInput<"customerCreateAiEmailTemplate">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerCreateAiEmailTemplate">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerCreateAiEmailTemplate", input, { signal });
}
Buat desain email VIP asli yang dapat diedit dengan AI sesuai harga anggota yang dikonfirmasi
POST /v1/vip/email-template
Cakupan yang diperlukan: ai:generate
Input: { body: CustomerVipEmailTemplateInput; }
Kembalian: CustomerVipEmailTemplateResult
Status HTTP yang didokumentasikan: 200, 400, 401, 402, 403, 404, 409, 413, 429, 502, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerCreateVipEmailTemplate(
input: OperationInput<"customerCreateVipEmailTemplate">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerCreateVipEmailTemplate">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerCreateVipEmailTemplate", input, { signal });
}
Buka sesi editor desain email standar secara gratis
POST /v1/email-builder/access
Cakupan yang diperlukan: builder:write
Input: { body: CustomerEmailBuilderAccessInput; }
Kembalian: EmailBuilderAccess
Status HTTP yang didokumentasikan: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerAccessEmailBuilder(
input: OperationInput<"customerAccessEmailBuilder">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerAccessEmailBuilder">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerAccessEmailBuilder", input, { signal });
}
GET /email-builder/access/{accessId}
GET /v1/email-builder/access/{accessId}
Cakupan yang diperlukan: builder:read
Input: { query?: { designId?: string; }; path: { accessId: string; }; }
Kembalian: EmailBuilderActiveAccess
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetEmailBuilderAccess(
input: OperationInput<"customerGetEmailBuilderAccess">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetEmailBuilderAccess">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetEmailBuilderAccess", input, { signal });
}
DELETE /email-builder/access/{accessId}
DELETE /v1/email-builder/access/{accessId}
Cakupan yang diperlukan: builder:write
Input: { path: { accessId: string; }; }
Kembalian: undefined
Status HTTP yang didokumentasikan: 204, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerCloseEmailBuilderAccess(
input: OperationInput<"customerCloseEmailBuilderAccess">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerCloseEmailBuilderAccess">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerCloseEmailBuilderAccess", input, { signal });
}
POST /vip/email-builder/access
POST /v1/vip/email-builder/access
Cakupan yang diperlukan: vip:builder
Input: { body: CustomerVipBuilderAccessInput; }
Kembalian: VipBuilderAccess
Status HTTP yang didokumentasikan: 201, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerCreateVipEmailBuilderAccess(
input: OperationInput<"customerCreateVipEmailBuilderAccess">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerCreateVipEmailBuilderAccess">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerCreateVipEmailBuilderAccess", input, { signal });
}
GET /vip/email-builder/access/{accessId}
GET /v1/vip/email-builder/access/{accessId}
Cakupan yang diperlukan: builder:read
Input: { path: { accessId: string; }; }
Kembalian: VipBuilderAccess
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetVipEmailBuilderAccess(
input: OperationInput<"customerGetVipEmailBuilderAccess">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetVipEmailBuilderAccess">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetVipEmailBuilderAccess", input, { signal });
}
DELETE /vip/email-builder/access/{accessId}
DELETE /v1/vip/email-builder/access/{accessId}
Cakupan yang diperlukan: vip:builder
Input: { path: { accessId: string; }; }
Kembalian: undefined
Status HTTP yang didokumentasikan: 204, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerDeleteVipEmailBuilderAccess(
input: OperationInput<"customerDeleteVipEmailBuilderAccess">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerDeleteVipEmailBuilderAccess">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerDeleteVipEmailBuilderAccess", input, { signal });
}
Read permanent paid-result evidence with the original account and credential
GET /customer/paid-results/{recoveryId}
Cakupan yang diperlukan: authenticated original credential
Input: { path: { recoveryId: string; }; }
Kembalian: { status: "pending" | "succeeded" | "failed"; operation: "customerStandardAiGenerate" | "customerVipAiGenerate" | "customerVipBuilderAccess"; settlement: { kind: "paid_result" | "no_charge" | "confirmed_refund" | "unresolved"; accountId: string; credentialId: string | null; recoveryId: string; receiptId: string; chargeMillicents?: number; refundMillicents?: number; deletedAt?: string; }; result?: { [key: string]: unknown; }; error?: { [key: string]: unknown; }; }
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetPaidResult(
input: OperationInput<"customerGetPaidResult">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetPaidResult">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetPaidResult", input, { signal });
}
Read the authenticated account and credential identity before paid dispatch
GET /customer/paid-results/identity
Cakupan yang diperlukan: authenticated credential
Input: Record<string, never>
Kembalian: { accountId: string; credentialId: string; }
Status HTTP yang didokumentasikan: 200, 401, 403, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerPaidResultIdentity(
input: OperationInput<"customerPaidResultIdentity">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerPaidResultIdentity">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerPaidResultIdentity", input, { signal });
}
Explicitly resolve an owned paid result with the original credential and service scope
POST /customer/paid-results/{recoveryId}/resolve
Cakupan yang diperlukan: original ai:generate or vip:builder service scope
Input: { body: { action: "resolve"; reason: string; }; path: { recoveryId: string; }; }
Kembalian: { status: "pending" | "succeeded" | "failed"; operation: "customerStandardAiGenerate" | "customerVipAiGenerate" | "customerVipBuilderAccess"; settlement: { kind: "paid_result" | "no_charge" | "confirmed_refund" | "unresolved"; accountId: string; credentialId: string | null; recoveryId: string; receiptId: string; chargeMillicents?: number; refundMillicents?: number; deletedAt?: string; }; result?: { [key: string]: unknown; }; error?: { [key: string]: unknown; }; }
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerResolvePaidResult(
input: OperationInput<"customerResolvePaidResult">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerResolvePaidResult">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerResolvePaidResult", input, { signal });
}
Impor dan kompilasi desain MJML standar tanpa menyimpan atau mengirim
POST /v1/email-builder/import
Cakupan yang diperlukan: builder:write
Input: { body: CustomerStandardBuilderInput; }
Kembalian: CustomerStandardBuilderImportResult
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerStandardBuilderImport(
input: OperationInput<"customerStandardBuilderImport">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerStandardBuilderImport">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerStandardBuilderImport", input, { signal });
}
Validasi dan kompilasi desain MJML standar tanpa menyimpan atau mengirim
POST /v1/email-builder/validate
Cakupan yang diperlukan: builder:write
Input: { body: CustomerStandardBuilderInput; }
Kembalian: CustomerStandardBuilderValidateResult
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerStandardBuilderValidate(
input: OperationInput<"customerStandardBuilderValidate">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerStandardBuilderValidate">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerStandardBuilderValidate", input, { signal });
}
Kompilasi desain MJML standar ke HTML tanpa menyimpan atau mengirim
POST /v1/email-builder/compile
Cakupan yang diperlukan: builder:write
Input: { body: CustomerStandardBuilderInput; }
Kembalian: CustomerStandardBuilderCompileResult
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerStandardBuilderCompile(
input: OperationInput<"customerStandardBuilderCompile">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerStandardBuilderCompile">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerStandardBuilderCompile", input, { signal });
}
Ekspor desain MJML standar sebagai HTML, MJML, atau ZIP tanpa pengiriman
POST /v1/email-builder/export
Cakupan yang diperlukan: builder:write
Input: { body: CustomerStandardBuilderInput; }
Kembalian: CustomerStandardBuilderExportResult
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerStandardBuilderExport(
input: OperationInput<"customerStandardBuilderExport">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerStandardBuilderExport">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerStandardBuilderExport", input, { signal });
}
Impor dan kompilasi desain VIP asli dengan keanggotaan aktif dan akses terbuka yang dimiliki
POST /v1/vip/email-builder/import
Cakupan yang diperlukan: vip:builder
Input: { body: CustomerNativeBuilderInput; }
Kembalian: CustomerNativeBuilderImportResult
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerNativeBuilderImport(
input: OperationInput<"customerNativeBuilderImport">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerNativeBuilderImport">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerNativeBuilderImport", input, { signal });
}
Validasi dan kompilasi desain VIP asli dengan keanggotaan aktif dan akses terbuka yang dimiliki
POST /v1/vip/email-builder/validate
Cakupan yang diperlukan: vip:builder
Input: { body: CustomerNativeBuilderInput; }
Kembalian: CustomerNativeBuilderValidateResult
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerNativeBuilderValidate(
input: OperationInput<"customerNativeBuilderValidate">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerNativeBuilderValidate">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerNativeBuilderValidate", input, { signal });
}
Kompilasi desain VIP bawaan ke HTML dengan keanggotaan aktif dan akses terbuka yang dimiliki
POST /v1/vip/email-builder/compile
Cakupan yang diperlukan: vip:builder
Input: { body: CustomerNativeBuilderInput; }
Kembalian: CustomerNativeBuilderCompileResult
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerNativeBuilderCompile(
input: OperationInput<"customerNativeBuilderCompile">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerNativeBuilderCompile">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerNativeBuilderCompile", input, { signal });
}
Ekspor desain VIP bawaan sebagai HTML atau ZIP HTML tiga varian tanpa mengirim
POST /v1/vip/email-builder/export
Cakupan yang diperlukan: vip:builder
Input: { body: CustomerNativeBuilderInput; }
Kembalian: CustomerNativeBuilderExportResult
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerNativeBuilderExport(
input: OperationInput<"customerNativeBuilderExport">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerNativeBuilderExport">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerNativeBuilderExport", input, { signal });
}
Luncurkan satu kali handoff editor hos VIP native standar atau berhak
POST /v1/email-builder/hosted-handoffs
Cakupan yang diperlukan: builder:write
Input: { body: CustomerHostedBuilderHandoffInput; }
Kembalian: CustomerHostedBuilderHandoff
Status HTTP yang didokumentasikan: 201, 400, 401, 403, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerCreateHostedBuilderHandoff(
input: OperationInput<"customerCreateHostedBuilderHandoff">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerCreateHostedBuilderHandoff">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerCreateHostedBuilderHandoff", input, { signal });
}
Daftar Templat Vip Builder
GET /v1/vip/email-builder/templates
Cakupan yang diperlukan: vip:read
Input: Record<string, never>
Kembalian: CustomerVipTemplateCatalog
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerListVipBuilderTemplates(
input: OperationInput<"customerListVipBuilderTemplates">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerListVipBuilderTemplates">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerListVipBuilderTemplates", input, { signal });
}
Dapatkan Template VIP Builder
GET /v1/vip/email-builder/templates/{templateId}
Cakupan yang diperlukan: vip:read
Input: { path: { templateId: string; }; }
Kembalian: CustomerVipTemplateDocument
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetVipBuilderTemplate(
input: OperationInput<"customerGetVipBuilderTemplate">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetVipBuilderTemplate">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetVipBuilderTemplate", input, { signal });
}
Daftar Template Builder Standar
GET /v1/email-builder/templates
Cakupan yang diperlukan: catalog:read
Input: Record<string, never>
Kembalian: CustomerStandardTemplateCatalog
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerListStandardBuilderTemplates(
input: OperationInput<"customerListStandardBuilderTemplates">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerListStandardBuilderTemplates">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerListStandardBuilderTemplates", input, { signal });
}
Dapatkan Template Builder Standar
GET /v1/email-builder/templates/{templateId}
Cakupan yang diperlukan: catalog:read
Input: { path: { templateId: string; }; }
Kembalian: CustomerStandardTemplateDetail
Status HTTP yang didokumentasikan: 200, 400, 401, 403, 404, 413, 429, 503
Parameter, skema, dan contoh HTTP
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetStandardBuilderTemplate(
input: OperationInput<"customerGetStandardBuilderTemplate">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetStandardBuilderTemplate">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetStandardBuilderTemplate", input, { signal });
}
Node n8n yang di-host sendiri
0.1.0
Membutuhkan Node.js 20.19+ dan instalasi n8n self-hosted yang telah ditambal dengan menyediakan n8n-workflow >=2.39.3 <3. Jangan paksa instalasi ke dalam host lama yang tidak kompatibel. Instal tarball yang diunduh di direktori custom-node Anda dan muat ulang n8n. Node yang belum diterbitkan ini tidak tersedia melalui n8n Cloud atau instalasi komunitas npm-name.
Persetujuan berbayar dinonaktifkan secara default. Setiap item yang disetujui melakukan satu permintaan klasifikasi tanpa percobaan ulang otomatis. Hasil dimasukkan ke dalam namespace sendrepute. Gunakan gerbang IF pada sendrepute.allowed sebelum mengirim, dan periksa status kegagalan secara terpisah. Mode penasihat dan pemblokiran mengembalikan keputusan eksplisit. Node itu sendiri tidak mengirimkan email.
Unduh tarball n8n
Repositori sumber publik
README lengkap dan contoh
Catatan keamanan dan batasan yang diketahui
1. Instal
Jalankan pada host n8n self-hosted, lalu mulai ulang layanan n8n menggunakan manajer proses normal Anda. Pastikan SendRepute muncul di pemilih node. Impor package/examples/classify-email.workflow.json yang diekstrak dari editor n8n. Instalasi npm-name Community nodes dan n8n Cloud tidak didukung oleh paket yang belum dipublikasikan ini.
mkdir -p ~/.n8n/nodes
cd ~/.n8n/nodes
curl -fLO https://www.sendrepute.com/downloads/sendrepute-n8n.tgz
npm install ./sendrepute-n8n.tgz
tar -xzf sendrepute-n8n.tgz package/examples/classify-email.workflow.json
Alternatif: instal dari sumber publik
Gunakan jalur sumber ini sebagai pengganti instruksi unduhan situs web di atas. README repositori menjelaskan langkah-langkah aktivasi dan konfigurasi yang tersisa; membangun ZIP saja tidak menginstal plugin. Untuk Python, perintah kedua menambahkan dukungan Django opsional. Simpan kredensial di rahasia server dan tinjau catatan keamanan sebelum mengaktifkan fitur berbayar. Hanya Node yang ada di npm; repositori GitHub publik tidak menyiratkan publikasi WordPress.org, n8n Cloud, Packagist, atau PyPI.
git clone https://github.com/sendrepute/n8n-nodes-sendrepute.git
cd n8n-nodes-sendrepute
npm ci
npm run pack:check
npm pack --ignore-scripts
archive="$PWD/n8n-nodes-sendrepute-0.1.0.tgz"
mkdir -p ~/.n8n/nodes
cd ~/.n8n/nodes
npm install "$archive"
2. Konfigurasikan dengan aman
Buat kredensial SendRepute API dengan customer key berscope classify di penyimpanan kredensial n8n. Jangan pernah menempatkannya di workflow JSON atau ekspresi. JSON di bawah menunjukkan parameter node, bukan alur kerja yang dapat diimpor secara lengkap. Petakan nama tampilan pengirim, subjek, dan badan email; pilih advisory/blocking, threshold, dan kebijakan kegagalan open/closed. Tinjau harga sebelum mengubah paidConsent menjadi true. Setiap item yang menyetujui melakukan maksimal satu permintaan.
{
"operation": "classify",
"paidConsent": false,
"sender": "={{ $json.sender }}",
"subject": "={{ $json.subject }}",
"body": "={{ $json.body }}",
"decisionMode": "blocking",
"threshold": 0.8,
"failurePolicy": "closed"
}
3. Gunakan dengan sengaja
Tempatkan node IF segera setelah SendRepute dan gunakan kondisi boolean ini. Hubungkan hanya output true ke node email Anda yang sudah ada; rute false ke peninjauan atau hentikan. Periksa analysisStatus secara terpisah bahkan ketika allowed adalah true. Alur kerja yang disertakan dimulai dengan persetujuan berbayar dinonaktifkan dan tidak berisi kredensial. SendRepute sendiri tidak pernah mengirim email.
{{ $json.sendrepute.allowed === true }}
Hasil, kegagalan, dan batasan
Hasil yang berhasil mengganti namespace sendrepute dengan bidang analysisStatus, decision, allowed, recommendation, skor yang divalidasi, dan penagihan. Kegagalan akan menghilangkan skor spam dan mengembalikan failureCategory/errorCode yang telah dibersihkan. Kegagalan tertutup akan memblokir; kegagalan terbuka akan mengizinkan namun menandai analysisStatus sebagai failed. Keberhasilan advisory akan selalu mengizinkan terlepas dari recommendation. Consent-off mengembalikan not_run. Tidak ada upaya ulang, penerima, lampiran, penulisan ulang, pemilih model, atau endpoint khusus. Audit dependensi sumber yang diperbarui melaporkan temuan nol; ini adalah hasil titik waktu tertentu, bukan sertifikasi keamanan. Jaga runtime self-hosted tetap ditambal dan tinjau SECURITY.md sebelum instalasi.
Integrasi Laravel
0.1.0
Menargetkan PHP 8.2+ dan Laravel 12–13. Instal ZIP menggunakan repositori artefak Composer lokal, atau ekstrak dan konfigurasikan repositori path Composer seperti yang dijelaskan dalam README yang disertakan. Tidak ada klaim publikasi Packagist.
Persetujuan berbayar dan hook email dinonaktifkan secara default. Bahkan saat diaktifkan, setiap pesan harus secara eksplisit ikut serta dengan X-SendRepute-Classify: yes. Header tersebut dihapus sebelum pengiriman. Mode penasihat dan pemblokiran memiliki kebijakan kegagalan yang independen; pengaturan ulang kata sandi dan email transaksional tetap tidak tersentuh kecuali jika dipilih secara sengaja untuk ikut serta.
Unduh ZIP Laravel
Repositori sumber publik
README lengkap dan contoh
Catatan keamanan dan batasan yang diketahui
1. Instal
Jalankan di dalam aplikasi Laravel Anda. Perintah-perintah ini mengekstrak unduhan dan mendaftarkan repositori jalur Composer; ini bukan instalasi Packagist. Penemuan paket mendaftarkan penyedia, dan vendor:publish membuat config/sendrepute.php. Pastikan direktori paket yang diekstrak tetap tersedia untuk Composer. Repositori artifak adalah opsi lain yang didokumentasikan di README.
mkdir -p packages
curl -fL https://www.sendrepute.com/downloads/sendrepute-laravel.zip -o packages/sendrepute-laravel.zip
unzip packages/sendrepute-laravel.zip -d packages
composer config repositories.sendrepute path ./packages/sendrepute-laravel
composer require sendrepute/laravel:@dev
php artisan vendor:publish --tag=sendrepute-config
Alternatif: instal dari sumber publik
Gunakan jalur sumber ini sebagai pengganti instruksi unduhan situs web di atas. README repositori menjelaskan langkah-langkah aktivasi dan konfigurasi yang tersisa; membangun ZIP saja tidak menginstal plugin. Untuk Python, perintah kedua menambahkan dukungan Django opsional. Simpan kredensial di rahasia server dan tinjau catatan keamanan sebelum mengaktifkan fitur berbayar. Hanya Node yang ada di npm; repositori GitHub publik tidak menyiratkan publikasi WordPress.org, n8n Cloud, Packagist, atau PyPI.
composer config repositories.sendrepute vcs https://github.com/sendrepute/sendrepute-laravel
composer require sendrepute/laravel:dev-main
php artisan vendor:publish --tag=sendrepute-config
2. Konfigurasikan dengan aman
Simpan SENDREPUTE_API_KEY di server secrets. URL dasar berakhir di /api; klien menambahkan /v1/classify. Pencocokan host tepercaya yang tepat dan HTTPS terverifikasi diperlukan. Kedua sakelar yang ditampilkan tetap nonaktif hingga Anda meninjau harga dan secara eksplisit menyetelnya ke true. Di config/sendrepute.php pilih mail.mode, mail.spam_probability_threshold, dan mail.failure_policy secara independen. Default-nya adalah advisory dengan izin saat gagal.
SENDREPUTE_API_BASE_URL=https://www.sendrepute.com/api
SENDREPUTE_TRUSTED_HOSTS=www.sendrepute.com
SENDREPUTE_PAID_ANALYSIS_CONSENT=false
SENDREPUTE_MAIL_ENABLED=false
3. Gunakan dengan sengaja
Tambahkan header opt-in yang tepat hanya ke kelas Mailable yang dipilih secara sengaja, jangan pernah pada callback email global. Baik sakelar global maupun header per-pesan diperlukan untuk hook otomatis. Header dihapus sebelum pengiriman. Jauhkan pengaturan ulang kata sandi dan pemberitahuan kritis dari pemblokiran otomatis kecuali diuji secara eksplisit. Klasifikasi manual dapat malah menyelesaikan kontrak Classifier dan memberikan persetujuan per panggilan, seperti yang ditunjukkan.
// Inside your deliberately opted-in Mailable:
public function headers(): \Illuminate\Mail\Mailables\Headers
{
return new \Illuminate\Mail\Mailables\Headers(text: [
'X-SendRepute-Classify' => 'yes',
]);
}
// Or classify manually inside an authenticated, explicitly confirmed action:
function classifyAfterConsent(bool $confirmed, string $subject, string $body): \SendRepute\Laravel\ClassificationResult
{
if (!$confirmed) {
throw new \RuntimeException('Paid consent required');
}
return app(\SendRepute\Laravel\Contracts\Classifier::class)->classify(
sender: 'Example Company',
subject: $subject,
body: $body,
paidAnalysisConsent: true,
);
}
Referensi API dan metode
Resolve interface Classifier dari container Laravel. classify(string sender, string subject, string body, ?string model = null, bool paidAnalysisConsent = false) mengembalikan ClassificationResult. Bidang publiknya adalah requestId, model, label, spamProbability, confidence, replayed, dan chargedMillicents. SendReputeException menyediakan kategori yang difilter, status HTTP, kode API, dan ID permintaan. Hook otomatisnya adalah AnalyzeOutgoingMessage pada MessageSending dan diagnostik amannya adalah ClassificationOutcome. Integrasi ini hanya mendukung klasifikasi, bukan administrasi akun, pembayaran, builder, atau AI rewrite.
Hasil, kegagalan, dan batasan
ClassificationResult berisi hasil yang divalidasi dan data penagihan. Hook MessageSending mengembalikan false untuk membatalkan pesan yang diblokir; pembatalan bukan merupakan kesalahan SMTP atau acara MessageSent. ClassificationOutcome hanya melaporkan tindakan, skor, dan metadata kegagalan yang dibersihkan, bukan konten pesan. Kebijakan kegagalan mencakup input/respons yang cacat, autentikasi, saldo, batas kecepatan, dan masalah transport. Tidak ada upaya ulang atau antrean yang ditambahkan. Pengirim bernama dan badan text atau HTML dalam memori diperlukan.
Preflight draf Mautic
0.1.0
Menargetkan instalasi Mautic 5.x single-web-node dengan PHP 8.1+ dan ext-curl. Mautic 4, Mautic 6, dan klaster multi-node tidak didukung. Ekstrak SendReputeBundle ke dalam direktori plugin Anda, muat ulang plugin, dan hapus cache sesuai dengan README yang disertakan. Konfigurasikan kredensial dan konfirmasikan mode penguncian local-flock secara eksplisit di lingkungan server.
Analisis penasihat berbayar yang diinisiasi administrator hanya untuk draf yang disimpan. Keikutsertaan global, pemeriksaan akses entitas, validasi CSRF, dan konfirmasi satu kali penggunaan melindungi setiap permintaan. Ini tidak mengirim, menulis ulang, atau memblokir email dan tidak memiliki penegakan waktu pengiriman. Substitusi penerima tetap tidak diperluas; simpan perubahan editor terlebih dahulu.
Unduh ZIP Mautic
Repositori sumber publik
README lengkap dan contoh
Catatan keamanan dan batasan yang diketahui
1. Instal
Jalankan dari root Mautic Anda dengan pengguna PHP dan lingkungan yang sama dengan aplikasi web, atau ekstrak ZIP melalui proses deployment Anda sebelum memuat ulang plugin. Membutuhkan Mautic 5.x, PHP 8.1+, ext-curl dan satu node web Linux/POSIX. Mautic 4/6 dan cluster multi-node tidak didukung; tidak ada klaim sertifikasi instalasi patch-demi-patch langsung.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-mautic.zip
unzip sendrepute-mautic.zip -d plugins
php bin/console mautic:plugins:reload
php bin/console cache:clear
Alternatif: instal dari sumber publik
Gunakan jalur sumber ini sebagai pengganti instruksi unduhan situs web di atas. README repositori menjelaskan langkah-langkah aktivasi dan konfigurasi yang tersisa; membangun ZIP saja tidak menginstal plugin. Untuk Python, perintah kedua menambahkan dukungan Django opsional. Simpan kredensial di rahasia server dan tinjau catatan keamanan sebelum mengaktifkan fitur berbayar. Hanya Node yang ada di npm; repositori GitHub publik tidak menyiratkan publikasi WordPress.org, n8n Cloud, Packagist, atau PyPI.
git clone https://github.com/sendrepute/sendrepute-mautic.git
cd sendrepute-mautic
python3 package.py
2. Konfigurasikan dengan aman
Buat direktori buku besar persisten yang ditunjukkan di luar root web, dimiliki oleh pengguna PHP dengan mode 0700. Jangan gunakan /tmp, kontainer fana, symlink, atau penyimpanan jaringan yang tidak pasti. Simpan SENDREPUTE_API_KEY di sisi server. Konfirmasikan local-flock hanya ketika satu node web menyediakan penguncian proses bersama. Analisis berbayar global tetap dinonaktifkan pada 0; setel ke 1 hanya setelah meninjau harga dan batasan. Tidak ada bidang browser yang boleh memberikan kredensial atau endpoint.
SENDREPUTE_MAUTIC_PAID_ANALYSIS_ENABLED=0
SENDREPUTE_MAUTIC_ATOMIC_LOCK_MODE=local-flock
SENDREPUTE_MAUTIC_LEDGER_DIR=/var/lib/mautic/sendrepute-ledger
3. Gunakan dengan sengaja
Simpan perubahan editor terlebih dahulu. Sebagai administrator Mautic asli dengan akses ke email tersebut, buka draf yang disimpan dan pilih preflight SendRepute. Tinjau konfirmasi dan setujui operasi berbayar secara eksplisit. Permintaan memerlukan validasi CSRF dan maksud satu kali pakai selama sepuluh menit yang terikat pada konten yang disimpan. Penguncian persisten dan buku besar bebas konten mencegah pengeluaran ganda secara bersamaan pada node tunggal yang didukung.
Hasil, kegagalan, dan batasan
Menampilkan probabilitas tervalidasi, label, kepercayaan, dan jumlah tagihan aktual atau pemutaran ulang tanda terima. Kegagalan tidak menampilkan keputusan spam dan tidak dicoba ulang secara otomatis. Hanya nama tampilan pengirim, subjek, dan badan pesan yang disimpan yang dianalisis; substitusi kontak tetap tidak diperluas. Plugin tidak menulis ulang draf, mengirim email, memblokir kampanye, atau memberlakukan kebijakan waktu pengiriman. Peninjauan draf tersimpan tidak dapat mensertifikasi pesan akhir yang ditampilkan kepada penerima.
Klien Python dan backend Django
0.1.0
Memerlukan Python 3.9+. Ekstrak sumber ZIP dan instal direktorinya dengan pip. Klien server generik menggunakan pustaka standar; Django adalah dependensi opsional untuk backend email eksplisit. Paket ini tidak dipublikasikan di PyPI.
Persetujuan berbayar diatur secara default ke nonaktif. Wrapper Django mempertahankan objek transport dan pesan asli. Ia menganalisis satu string berbatas yang menggabungkan body utama dan alternatif inline text/plain serta text/html, bukan lampiran. Mode pemblokiran menolak konten yang ditampilkan yang tidak didukung atau ukurannya melebihi batas. Kegagalan autentikasi akan memblokir secara default meskipun dengan kebijakan allow; pilih perilaku email kritis secara sengaja.
Unduh ZIP sumber Python
Repositori sumber publik
README lengkap dan contoh
Catatan keamanan dan batasan yang diketahui
1. Instal
Gunakan virtual environment. Klien generik hanya menggunakan library standar; perintah terakhir menambahkan dependensi opsional Django dan tidak diperlukan untuk Flask, FastAPI, atau penggunaan server generik lainnya. Paket diinstal dari direktori sumber yang diunduh, bukan PyPI. Python 3.9+ adalah minimum paket; pilih versi Python/Django yang didukung bersama.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-python.zip
unzip sendrepute-python.zip
python -m venv .venv
. .venv/bin/activate
python -m pip install ./sendrepute-python
python -m pip install './sendrepute-python[django]'
Alternatif: instal dari sumber publik
Gunakan jalur sumber ini sebagai pengganti instruksi unduhan situs web di atas. README repositori menjelaskan langkah-langkah aktivasi dan konfigurasi yang tersisa; membangun ZIP saja tidak menginstal plugin. Untuk Python, perintah kedua menambahkan dukungan Django opsional. Simpan kredensial di rahasia server dan tinjau catatan keamanan sebelum mengaktifkan fitur berbayar. Hanya Node yang ada di npm; repositori GitHub publik tidak menyiratkan publikasi WordPress.org, n8n Cloud, Packagist, atau PyPI.
python -m pip install "sendrepute @ git+https://github.com/sendrepute/sendrepute-python.git@7d54935c4ae2db136800231136e4ea28d63118db"
python -m pip install "sendrepute[django] @ git+https://github.com/sendrepute/sendrepute-python.git@7d54935c4ae2db136800231136e4ea28d63118db"
2. Konfigurasikan dengan aman
Injeksikan SENDREPUTE_API_KEY melalui rahasia server. Klien generik default ke endpoint host kanonik, HTTPS terverifikasi, tanpa pengalihan, dan tanpa percobaan ulang. Persetujuan klien default nonaktif; contoh tersebut memberikan persetujuan per panggilan hanya setelah diperiksa dan dikonfirmasi. Penggantian endpoint memerlukan daftar izin asal HTTPS yang eksplisit. Dictionary yang dikembalikan berisi hasil yang divalidasi dan data penagihan, bukan keputusan pengiriman.
import os
from sendrepute import SendReputeClient, SendReputeError
client = SendReputeClient(api_key=os.environ["SENDREPUTE_API_KEY"])
def classify_after_consent(sender, subject, body, confirmed=False):
if confirmed is not True:
raise ValueError("Paid consent required")
try:
return client.classify(
sender=sender, subject=subject, body=body,
paid_analysis_consent=True,
)
except SendReputeError as error:
# Safe metadata only; do not log message content or response bodies.
print(error.code, error.status, error.request_id)
raise
Backend email Django
Pertahankan backend yang ada di SENDREPUTE_ORIGINAL_EMAIL_BACKEND dan simpan pengaturan SMTP normalnya. Contoh ini mematikan persetujuan berbayar; atur ke True hanya setelah peninjauan harga. Penasihat mengizinkan analisis yang berhasil; pemblokiran membandingkan dengan SENDREPUTE_SPAM_THRESHOLD. Pilih kebijakan kegagalan independen secara sengaja. Kesalahan autentikasi memblokir secara default bahkan di bawah izin. Contoh ini mengikuti default README dan bukan merupakan rekomendasi untuk gagal terbuka bagi email kritis.
# Django settings.py
import os
EMAIL_BACKEND = "sendrepute.django.SendReputeEmailBackend"
SENDREPUTE_ORIGINAL_EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
SENDREPUTE_API_KEY = os.environ["SENDREPUTE_API_KEY"]
SENDREPUTE_PAID_ANALYSIS_CONSENT = False
SENDREPUTE_POLICY_MODE = "advisory"
SENDREPUTE_SPAM_THRESHOLD = 0.90
SENDREPUTE_FAILURE_POLICY = "allow"
SENDREPUTE_ALLOW_AUTH_FAILURE = False
SENDREPUTE_TIMEOUT = 10
3. Gunakan dengan sengaja
Fungsi ini hanya mengirim saat dipanggil. Dengan pembungkus Django yang dikonfigurasi dan persetujuan berbayar diaktifkan, backend asli menerima objek pesan asli tanpa perubahan. Pengklasifikasi menerima satu string terbatas yang menggabungkan badan utama dengan alternatif inline text/plain dan text/html; lampiran dan penerima bukan merupakan input terpisah. Render templat sebelum memanggil. Gunakan backend pengujian lokal terlebih dahulu, lalu transport asli Anda yang dikonfigurasi secara sengaja.
from django.core.mail import EmailMultiAlternatives
def send_reviewed_message(recipient):
message = EmailMultiAlternatives(
subject="Your requested summary",
body="Here is the summary you requested.",
from_email="Example Team <team@example.com>",
to=[recipient],
)
message.attach_alternative(
"<p>Here is the summary you requested.</p>", "text/html"
)
return message.send()
Referensi API dan metode
Konstruktor publiknya adalah SendReputeClient(api_key, endpoint, allowed_origins, timeout, paid_analysis_consent), dengan semua parameter kecuali api_key dilewatkan melalui kata kunci. timeout harus lebih besar dari nol dan maksimal 30 detik. classify memerlukan kata kunci sender, subject, dan body; model dan per-call paid_analysis_consent bersifat opsional. Sender berisi 1–320 karakter, subject 1–998, dan body 1–524.288, dengan batasan request terenkode yang terpisah. Dict yang dikembalikan berisi requestId, model, result, dan billing; result mencakup label, spamProbability, confidence, reasons, dan contentAudit opsional. billing berisi chargedMillicents dan replayed. Kesalahan mencakup ConsentRequiredError, AuthenticationError, BalanceError, RateLimitError, TransportError, dan InvalidResponseError, semuanya di bawah SendReputeError. Konfigurasi yang tidak valid dapat memicu ValueError. Backend Django mengekspos open(), close(), dan send_messages(email_messages), mengembalikan jumlah terkirim backend asli; backend ini tidak menambahkan API generik, builder, rewrite, atau metode pembayaran.
Hasil, kegagalan, dan batasan
Pemblokiran menolak konten yang ditampilkan yang tidak didukung atau berukuran besar daripada hanya menganalisis subset yang lebih aman. Kegagalan autentikasi memerlukan penggantian eksplisit terpisah untuk mengizinkan. Kesalahan lain mengikuti kebijakan izin/blokir yang dipilih; fail_silently mengontrol apakah kegagalan yang diblokir dimunculkan atau dilewati. Pembungkus tidak mengantre, mencoba ulang, menukar transport, memeriksa lampiran, atau merender templat. Klien generik memunculkan subkelas SendReputeError yang dibersihkan dengan kode/status/request_id; jangan mencatat badan pesan.
Klien klasifikasi Go
0.1.0
Memerlukan Go 1.22+. Klien yang hanya menggunakan pustaka standar ini mendukung klasifikasi, bukan transportasi email. Pilih sumber ZIP yang dapat diunduh dengan penggantian modul lokal, atau instalasi modul publik terverifikasi yang ditunjukkan di bawah alternatif sumber.
Klasifikasi sisi server hanya dengan pustaka standar dengan persetujuan berbayar eksplisit, permintaan terbatas, HTTPS terverifikasi, pengalihan ditolak, dan tanpa percobaan ulang. Ia tidak mengirim email atau membuat keputusan kirim/blokir. Aplikasi Anda harus secara sengaja memilih ambang batas dan perilaku kegagalan, terutama untuk email transaksional kritis.
Unduh ZIP sumber Go
Repositori sumber publik
README lengkap dan contoh
Catatan keamanan dan batasan yang diketahui
1. Instal
Ekstrak sumber ke dalam direktori aplikasi Go Anda yang sudah ada dan jalankan perintah modul di sana. Penggantian lokal mengarah pada modul yang diunduh; pindahkan atau sesuaikan jalur tersebut jika tata letak proyek Anda berbeda. Jalankan go mod init dengan nama modul Anda sendiri terlebih dahulu hanya saat membuat aplikasi baru. Tidak ada modul runtime eksternal yang diperlukan oleh klien ini.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-go.zip
unzip sendrepute-go.zip
# Run inside your existing application's module:
go mod edit -require=github.com/sendrepute/sendrepute-go@v0.0.0
go mod edit -replace=github.com/sendrepute/sendrepute-go=./sendrepute-go-v0.1.0
go mod tidy
Alternatif: instal dari sumber publik
Gunakan jalur sumber ini sebagai pengganti instruksi unduhan situs web di atas. README repositori menjelaskan langkah-langkah aktivasi dan konfigurasi yang tersisa; membangun ZIP saja tidak menginstal plugin. Untuk Python, perintah kedua menambahkan dukungan Django opsional. Simpan kredensial di rahasia server dan tinjau catatan keamanan sebelum mengaktifkan fitur berbayar. Hanya Node yang ada di npm; repositori GitHub publik tidak menyiratkan publikasi WordPress.org, n8n Cloud, Packagist, atau PyPI.
go get github.com/sendrepute/sendrepute-go@bfd656f829618348232da506225a5d92587d48e2
2. Konfigurasikan dengan aman
Injeksikan SENDREPUTE_API_KEY dari rahasia server. Fungsi yang ditampilkan tidak melakukan pekerjaan apa pun sampai dipanggil dengan confirmed=true; panggilan tersebut dapat menimbulkan klasifikasi berbayar. Ini menetapkan konteks sepuluh detik dan menggunakan endpoint HTTPS kanonik. Persetujuan klien default nonaktif; argumen true terakhir memberikan persetujuan untuk satu permintaan ini. Penggantian endpoint memerlukan entri AllowedOrigins yang eksplisit; pengalihan ditolak.
package integration
import (
"context"
"errors"
"os"
"time"
sendrepute "github.com/sendrepute/sendrepute-go"
)
func Analyze(subject, body string, confirmed bool) error {
if !confirmed {
return errors.New("paid consent required")
}
client, err := sendrepute.NewClient(sendrepute.Config{
APIKey: os.Getenv("SENDREPUTE_API_KEY"),
})
if err != nil {
return err
}
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
result, err := client.Classify(ctx, sendrepute.ClassificationInput{
Sender: "Example Team", Subject: subject, Body: body,
}, true)
if err != nil {
return err
}
if result.Result.SpamProbability >= 0.90 {
return errors.New("review required")
}
return nil
}
3. Gunakan dengan sengaja
Panggil Analyze dari aplikasi terautentikasi Anda hanya setelah peninjauan harga dan persetujuan eksplisit. Ambang batas 0.90 dan kesalahan peninjauan adalah contoh kebijakan aplikasi, bukan default SDK. Tentukan apakah kesalahan berarti penangguhan, izin, atau gagal tertutup sebelum menghubungkan kode pengiriman apa pun. Klien mengembalikan hasil bertipe dengan Result.SpamProbability dan bidang penagihan; ia tidak pernah mengirim email atau membuat keputusan pengiriman sendiri.
Referensi API dan metode
NewClient(Config) mengembalikan (*Client, error). Config menerima APIKey, Endpoint, AllowedOrigins, Timeout dan PaidAnalysisConsent. Classify(ctx, ClassificationInput, consent) mengembalikan (*ClassificationResponse, error). Bidang Input adalah Sender, Subject, Body dan Model opsional. Sender adalah 1–320 rune, subject 1–998 rune dan body maksimal 524,288 UTF-8 bytes. Respons bertipe berisi RequestID, Model, Result dan Billing; Billing mengekspos ChargedMillicents dan Replayed. Result mencakup Label, SpamProbability, Confidence, Reasons, FlaggedTerms dan ContentAudit opsional. Gunakan errors.As untuk memeriksa *Error dengan aman; kegagalan konfigurasi dan API tetap berupa error, bukan skor spam. Tidak ada metode akun, pembayaran, builder, atau penulisan ulang.
Hasil, kegagalan, dan batasan
Satu pemanggilan melakukan maksimal satu upaya HTTP berbayar tanpa percobaan ulang. Kesalahan mengekspos kategori yang aman, kode/request ID dan status yang dibatasi, tidak pernah kredensial, badan pesan, atau detail jaringan. Durasi konteks, ukuran permintaan dan respons dibatasi; respons yang cacat ditolak daripada dikonversi menjadi skor. Klien tidak memiliki kemampuan penguraian MIME, rendering, penerima, lampiran, antrean, pembangun, penulisan ulang, atau SMTP. Pilih model secara eksplisit hanya jika diperlukan; jika tidak, default akun akan berlaku.
listmonk HTTP Messenger
0.1.0
Paket sumber lokal yang tidak dipublikasikan untuk Node.js 20+ yang menargetkan antarmuka Custom HTTP Messenger milik listmonk 6.2.0. Layanan eksternal ini memiliki pengiriman SMTP hilir setelah klasifikasi; ini bukan plugin dalam-proses atau proksi preflight SMTP. Verifikasi bersifat terisolasi dan luring, bukan instalasi listmonk yang terpasang atau pengujian penyedia SMTP nyata.
Kedua sakelar berbayar diatur default ke nonaktif. Messenger menerima satu bodi yang dirender sepenuhnya, menolak lampiran, memeriksa harga terbaru, dan mewajibkan hasil Inbox yang ketat: label inbox, probabilitas spam maksimal 0.12, dan nol istilah yang ditandai. Kemudian ia membangun dan mengirimkan bodi yang diperiksa tersebut melalui koneksi SMTP yang dikonfigurasi. Resi yang tahan lama mencegah pengulangan otomatis setelah hasil yang diblokir, gagal, sedang berlangsung, atau tidak pasti.
Unduh ZIP sumber listmonk yang belum dipublikasikan
1. Instal
Ekstrak ZIP sumber situs web yang tidak dipublikasikan ini pada host messenger khusus. Tinjau README.md dan SECURITY.md, salin contoh environment, dan lakukan pengecekan sintaks pada entry point server sebelum konfigurasi. Artefak yang diizinkan untuk diunduh ini secara sengaja tidak menyertakan test suite repositori. Tidak ada paket runtime pihak ketiga. Ini bukan instalasi marketplace listmonk atau instalasi in-process.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-listmonk.zip
unzip sendrepute-listmonk.zip
cd sendrepute-listmonk
cp config.example.env .env
node --check src/server.mjs
2. Konfigurasikan dengan aman
Gunakan akun khusus tanpa hak istimewa dan direktori status lokal yang tahan lama dengan mode 0700. Biarkan ketiga sakelar keselamatan yang ditampilkan tetap false hingga harga dan batasan harga non-atomik diterima. Simpan kredensial SendRepute, Basic Auth messenger, dan SMTP downstream hanya dalam rahasia server. Hentikan HTTPS pada proxy terbalik yang tepercaya.
SENDREPUTE_ENABLED=false
SENDREPUTE_PAID_CONSENT=false
SENDREPUTE_ALLOW_NONATOMIC_PRICE_CONFIRMATION=false
SENDREPUTE_CONFIRMED_MAX_PRICE_MILLICENTS=
STATE_DIRECTORY=/var/lib/sendrepute-listmonk
SMTP_HOST=smtp.example.com
SMTP_PORT=465
SMTP_SECURE=true
3. Gunakan dengan sengaja
Hanya ekspos POST /v1/listmonk di balik HTTPS dan Basic Auth khusus. Pada Pengaturan listmonk > Messengers, tambahkan URL-nya sebagai Custom HTTP Messenger, pilih nol retries, dan pilih messenger tersebut hanya untuk kampanye yang harus diperiksa dan dikirimkan. Jangan memilih listmonk SMTP secara bersamaan: layanan ini melakukan pengiriman SMTP hilir secara mandiri.
Custom HTTP Messenger URL: https://messenger.example.com/v1/listmonk
Authentication: dedicated Basic Auth username and password
Retries: 0
Select this messenger only. Do not also select SMTP for the campaign.
Hasil, kegagalan, dan batasan
Duplikat yang terkirim mengembalikan sukses tanpa klasifikasi atau pengiriman ulang. Setiap tanda terima yang diblokir, gagal, diperiksa, dikirim, atau tidak pasti akan menolak pengiriman ulang. Setelah hasil SMTP yang tidak pasti, rekonsiliasi log penyedia dan konteks listmonk secara manual; jangan pernah menghapus tanda terima hanya untuk memaksa pengulangan. Pemeriksaan harga saat ini bersifat segar namun tidak atomik karena klasifikasi tidak menerima bidang expectedPriceMillicents.
Adaptor Mailcoach Self-Hosted
0.1.0
Paket Composer lokal yang belum dipublikasikan menargetkan Mailcoach Self-Hosted v10 pada Laravel 12. Inti spatie/laravel-mailcoach v10 berlisensi tidak tersedia di ruang kerja ini, sehingga paket ini tidak mengklaim uji end-to-end Mailcoach v10 yang terpasang. Pengujian Laravel 12 Mailer yang asli mencakup event MessageSending yang dapat dibatalkan sebagaimana didokumentasikan; pemegang lisensi harus memverifikasi setiap jalur pengiriman Mailcoach yang tepat sebelum produksi.
Sakelar enabled, paid-consent, dan pengakuan current-pricing semuanya diatur default ke nonaktif. Setelah diaktifkan, hook berlaku untuk setiap pesan melalui mailer Laravel tersebut, bukan hanya rute bernama Mailcoach. Ia menganalisis alternatif Symfony Email yang sudah dirender dan dapat membatalkan transportasi. Fail-closed adalah default; mengizinkan kegagalan analisis merupakan kebijakan terpisah yang disengaja.
Unduh ZIP sumber Mailcoach eksperimental
1. Instal
Tempatkan ZIP yang belum diterbitkan dan telah diunduh ke dalam direktori artefak Composer privat yang dapat diakses oleh aplikasi Mailcoach berlisensi. Daftarkan repositori artefak lokal tersebut, wajibkan versi 0.1, commit lockfile yang digunakan, dan secara opsional publikasikan konfigurasi. Ini bukan instalasi Packagist. Pemegang lisensi harus menjalankan verifikasi terhadap rilis Mailcoach Self-Hosted v10 yang tepat.
mkdir -p packages
curl -fL https://www.sendrepute.com/downloads/sendrepute-mailcoach.zip -o packages/sendrepute-mailcoach.zip
composer config repositories.sendrepute artifact packages
composer require sendrepute/mailcoach:^0.1
php artisan vendor:publish --tag=sendrepute-mailcoach-config
2. Konfigurasikan dengan aman
Awalnya, biarkan ketiga sakelar tetap false. Simpan API key dalam rahasia server dan konfigurasikan batas pengeluaran di sisi akun. Operasi classify saat ini tidak memiliki pelindung expectedPriceMillicents atomik, sehingga sakelar ketiga secara eksplisit menerima harga API saat ini alih-alih menjanjikan kuotasi terkunci. Konfigurasikan threshold dan kebijakan kegagalan allow/block secara independen.
SENDREPUTE_MAILCOACH_ENABLED=false
SENDREPUTE_MAILCOACH_PAID_CONSENT=false
SENDREPUTE_MAILCOACH_ACCEPT_CURRENT_API_PRICING=false
SENDREPUTE_API_BASE_URL=https://www.sendrepute.com/api
3. Gunakan dengan sengaja
Penemuan paket mendaftarkan listener Laravel MessageSending. Tidak ada pemanggilan per-kampanye dalam kode aplikasi: saat sengaja diaktifkan dalam instalasi Mailcoach khusus, ini memeriksa setiap Symfony Email yang dikirim melalui Laravel mailer tersebut segera sebelum transport. Dalam aplikasi Laravel campuran, email aplikasi host juga tercakup.
Hasil, kegagalan, dan batasan
Adapter mengirimkan nama tampilan pengirim, subjek, dan setiap alternatif text/plain atau text/html di memori yang tidak kosong, sambil mengecualikan penerima, alamat, lampiran, data amplop, dan raw MIME. Konten yang hilang atau tidak didukung, respons yang cacat, dan kegagalan API akan memblokir secara default. Pengujian inti offline melatih pembatalan Laravel Mailer yang sebenarnya, tetapi rute kampanye, otomatisasi, transaksional, dan pesan uji Mailcoach berlisensi tetap tidak diverifikasi.
Alur pengiriman terkontrol Brevo
0.1.0
Sebuah paket sumber Node.js 20+ lokal yang belum dipublikasikan yang mengimplementasikan API kirim sisi server eksplisit di sekitar operasi POST /v3/smtp/email transaksional Brevo. Ini tidak mencegat pengiriman dasbor Brevo, kampanye, otomatisasi, relai SMTP, atau panggilan melalui SDK lain. Pengujian dikontrol dan offline; pengujian tersebut tidak mensertifikasi akun Brevo langsung.
Persetujuan berbayar diatur default ke nonaktif. Hanya pesan teks dan HTML inline tetap yang diterima; templat jarak jauh, parameter, pengiriman terjadwal, versi pesan, dan konten berbasis URL ditolak. Snapshot terinspeksi yang tepat dan tidak dapat diubah dikirim ke Brevo. Buku besar sendKey yang tahan lama memblokir percobaan ulang yang duplikat dan ambigu, dan hasil penyedia yang tidak pasti memerlukan rekonsiliasi operator.
Unduh ZIP sumber Brevo yang belum dipublikasikan
1. Instal
Ekstrak ZIP sumber yang tidak dipublikasikan ke dalam aplikasi server, tinjau catatan README dan keamanannya, serta lakukan pengecekan sintaks pada src/index.mjs. Artefak yang diizinkan untuk diunduh ini secara sengaja tidak menyertakan test suite repositori. Impor SendReputeBrevo dari src/index.mjs; ini bukan instalasi npm atau marketplace Brevo. Node.js 20+ diperlukan dan tidak ada dependensi runtime.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-brevo.zip
unzip sendrepute-brevo.zip
cd sendrepute-brevo
node --check src/index.mjs
2. Konfigurasikan dengan aman
Tetapkan paidConsent false sampai harga saat ini dan batasan harga non-atomik diterima. Simpan kedua API keys di rahasia server dan gunakan direktori ledger persisten pribadi pada penyimpanan host tunggal yang tahan lama. expectedPriceMillicents harus sama dengan nilai maksimum yang baru saja diambil, tetapi debit classify belum dapat memberlakukan nilai tersebut secara atomik.
const integration = new SendReputeBrevo({
sendreputeApiKey: process.env.SENDREPUTE_API_KEY,
brevoApiKey: process.env.BREVO_API_KEY,
paidConsent: false,
expectedPriceMillicents: approvedMaximum,
ledgerDirectory: "/var/lib/my-app/sendrepute-brevo",
});
3. Gunakan dengan sengaja
Panggil send hanya dari jalur server terkendali yang harus melakukan klasifikasi sekaligus pengiriman. Gunakan kembali satu sendKey yang stabil untuk setiap upaya email yang sama. Sediakan konten inline tetap; jangan berikan ID template Brevo, parameter yang dapat berubah, penjadwalan, atau versi pesan. Pengiriman yang dilakukan di tempat lain akan melewati wrapper ini sepenuhnya.
await integration.send({
sendKey: durableBusinessEventId,
message: {
sender: { name: "Example Shop", email: "orders@example.com" },
to: [{ email: recipient }],
subject,
textContent,
htmlContent,
},
});
Hasil, kegagalan, dan batasan
Hasil Inbox dalam ambang batas mengizinkan satu permintaan API transaksional Brevo untuk snapshot yang sama. Ledger berubah menjadi delivery-unknown sebelum pengiriman penyedia. Batas waktu, pemutusan koneksi, keberhasilan yang cacat, kerusakan, dan penolakan penyedia tidak pernah diulang secara otomatis; rekonsiliasi terhadap catatan Brevo sebelum keputusan manual apa pun.
Alur pengiriman terkontrol BigMailer
0.1.0
Wrapper Node.js 24+ lokal yang tidak dipublikasikan untuk panggilan API transaksional BigMailer secara eksplisit. Ini tidak terinstal ke dalam BigMailer atau mencegat pengiriman dasbor dan API yang tidak terkait. Karena BigMailer memiliki konten kampanye yang dapat diedit dari jarak jauh, wrapper tidak dapat membuktikan bahwa kampanye tetap sama dengan snapshot render yang disediakan pemanggil antara peninjauan dan pengiriman.
Enabled, persetujuan berbayar, dan pengakuan batasan templat jarak jauh semuanya diatur default ke nonaktif. Pemanggil harus menyediakan dan melakukan hash pada snapshot render lengkap, membekukan kampanye jarak jauh yang cocok secara operasional, dan memberikan kunci pengiriman yang tahan lama. Harga diperiksa ulang sebelum klasifikasi, tetapi API klasifikasi saat ini tidak memiliki bidang expected-price atomik. Status pengiriman yang duplikat, diblokir, ditolak, dan ambigu tidak pernah dikirim ulang secara otomatis.
Unduh ZIP sumber eksperimental BigMailer
1. Instal
Ekstrak ZIP sumber yang tidak dipublikasikan ini ke dalam aplikasi server Node.js 24+ yang dikontrol dan tinjau README.md serta SECURITY.md. Impor wrapper dan file delivery store langsung dari src. Ini bukan instalasi npm atau marketplace BigMailer dan tidak memiliki dependensi runtime pihak ketiga.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-bigmailer.zip
unzip sendrepute-bigmailer.zip
cd sendrepute-bigmailer
node --check src/index.mjs
node --check src/file-delivery-store.mjs
2. Konfigurasikan dengan aman
Biarkan enabled, paidConsent, dan remoteTemplateSnapshotLimitationAcknowledged tetap false hingga ditinjau. Simpan API keys, brand dan UUID kampanye hanya di sisi server. Letakkan FileDeliveryStore pada penyimpanan tahan lama pribadi. Salin harga yang baru ditinjau ke dalam expectedPricing, dengan pemahaman bahwa API klasifikasi saat ini tidak dapat menguncinya secara atomik.
const integration = createBigMailerIntegration({
enabled: false,
paidConsent: false,
remoteTemplateSnapshotLimitationAcknowledged: false,
sendReputeApiKey: process.env.SENDREPUTE_API_KEY,
bigMailerApiKey: process.env.BIGMAILER_API_KEY,
brandId,
campaignId,
expectedPricing,
deliveryStore: new FileDeliveryStore("/var/lib/my-app/bigmailer-deliveries.json"),
});
3. Gunakan dengan sengaja
Untuk setiap pengiriman API yang dikontrol, sediakan satu deliveryKey yang stabil, semua alternatif text/plain dan text/html yang ditampilkan, render snapshot yang tepat, dan snapshotDigest(snapshot). Akui batasan remote-template hanya ketika kontrol operasional membekukan revisi kampanye BigMailer yang sesuai dengan snapshot tersebut. Dasbor dan pengiriman API yang tidak terkait akan melewati wrapper ini.
await integration.send({
deliveryKey: durableBusinessEventId,
snapshot,
snapshotSha256: snapshotDigest(snapshot),
email: recipient,
variables,
});
Hasil, kegagalan, dan batasan
Penyimpanan file mencadangkan delivery key sebelum klasifikasi. Hasil pengiriman yang duplikat, konflik, blokir, penolakan, dan ambigu tidak dapat dikirim ulang secara otomatis. Endpoint pengiriman BigMailer menerima data penggabungan alih-alih isi pesan yang diperiksa, sehingga klasifikasi yang berhasil bukanlah bukti bahwa konten kampanye jarak jauh yang dapat berubah masih sesuai; gunakan penyedia lain jika diperlukan keterkaitan yang tepat.
Privasi dan operasi berbayar
Analisis mengirimkan nama tampilan pengirim, subjek, dan badan pesan ke SendRepute. Penerima dan lampiran tidak dikirimkan secara terpisah, namun konten yang disertakan dalam badan pesan akan dikirimkan. Jaga kerahasiaan kredensial dan nonaktifkan pencatatan request/body. Tidak ada jaminan penempatan kotak masuk atau pengiriman.
Klasifikasi adalah berbayar. Baca harga saat ini dan batas pengeluaran akun Anda sebelum memberikan persetujuan. Permintaan akun/konten/model yang identik dapat memutar ulang tanda terima dalam waktu 24 jam; perubahan konten atau model dapat menimbulkan biaya baru. Jangan berasumsi bahwa percobaan ulang itu gratis. Penulisan ulang AI memerlukan kuota biaya maksimum untuk tanda terima induk, mode, dan ketentuan yang dipilih sebelum pengiriman berbayar; lakukan poll untuk tanda terima yang sedang berlangsung dan pulihkan hasil yang telah selesai dengan ID permintaan asli alih-alih memulai permintaan lain. Rewrite All dapat memverifikasi satu draf render akhir yang tepat tanpa debit lain. Pembuatan templat AI dan akses VIP asli dikenakan harga secara terpisah; pemrosesan builder standar tidak dipungut biaya. Tidak ada hasil analisis, penulisan ulang, atau builder yang menjamin pengiriman, penempatan kotak masuk, atau kepatuhan.
Validasi luring bukanlah sertifikasi untuk setiap versi framework, plugin, atau transport. Baca instruksi instalasi dan keamanan yang disertakan, biarkan analisis berbayar nonaktif hingga dikonfigurasi secara sengaja, dan uji kebijakan kegagalan pilihan Anda sebelum mengaktifkannya untuk email kritis.
Tinjau harga
Referensi API Pelanggan
Minta dukungan integrasi