ईमेल वर्कफ़्लो इंटीग्रेशन और SDKs
SendRepute API और ईमेल विश्लेषण, अलग से भुगतान किए गए AI रीराइट और डिज़ाइन टूल्स के एकीकरण का अन्वेषण करें। केंद्रीय विश्लेषण, रीराइट और बिल्डर एंडपॉइंट ईमेल नहीं भेजते हैं; जानबूझकर सक्षम किए गए Campaigns वितरण और कुछ प्रोवाइडर एडेप्टर आपके कॉन्फ़िगर किए गए प्रोवाइडर का उपयोग करके भेज सकते हैं। कोई भी परिणाम इनबॉक्स प्लेसमेंट की गारंटी नहीं देता है।
Node.js पैकेज npm पर उपलब्ध है। अन्य इंटीग्रेशन यहाँ से डाउनलोड किए जा सकते हैं या किसी सत्यापित सार्वजनिक GitHub रिपॉजिटरी से इंस्टॉल किए जा सकते हैं। एक इंटीग्रेशन चुनें, उसके गाइड का पालन करें, और इसे सक्षम करने से पहले परमिशन, वर्तमान प्राइसिंग और फेलियर सेटिंग की समीक्षा करें।
अपना वर्तमान ईमेल वर्कफ़्लो बनाए रखें। ये केंद्रीय API उदाहरण केवल सामग्री का विश्लेषण, पुनर्लेखन या निर्माण करते हैं; वे कभी ईमेल नहीं भेजते हैं। अलग से, जानबूझकर सक्षम किए गए कैंपेन वितरण और कुछ प्रदाता एडेप्टर आपके कॉन्फ़िगर किए गए प्रदाता के माध्यम से भेज सकते हैं। इसके इंस्टॉलेशन, कॉन्फ़िगरेशन, उदाहरणों और ऑपरेटिंग सीमाओं के लिए एक टूल चुनें। उदाहरण इस पृष्ठ पर नहीं चलते हैं; सशुल्क संचालन और भेजने की कार्रवाइयों की अलग से समीक्षा करें।
WordPress प्लगिन
0.2.0
WordPress 5.7+, PHP 7.4+ और OpenSSL की आवश्यकता है। Plugins > Add New > Upload Plugin के माध्यम से ZIP अपलोड करें, फिर Settings > SendRepute खोलें। प्रत्येक साइट के टोकन और सशुल्क-विश्लेषण सहमति को अलग-अलग कॉन्फ़िगर करें। इंस्टॉल किए गए जीवनचक्र प्रमाण में WordPress 6.8.3 के साथ WooCommerce 10.4.3 शामिल है; अलग SMTP-प्लगइन प्रमाण में WordPress 7.1.2 के साथ WP Mail SMTP 4.9.0 और FluentSMTP 2.4.0 शामिल हैं।
यह SMTP को बदले बिना या संदेशों को फिर से लिखे बिना pre_wp_mail के माध्यम से संदेशों की जाँच करता है। सलाहकार मोड डिलीवरी की अनुमति देता है; अवरोधन मोड एक प्रायिकता सीमा लागू करता है। API विफलता नीति अलग से कॉन्फ़िगर की गई है। wp_mail को बायपास करने वाले प्लगइन्स इसमें शामिल नहीं हैं; बाद के ट्रांसपोर्ट बदलावों का विश्लेषण नहीं किया जाता है। अवरोधन संदेशों को कतार में नहीं रखता है।
विश्लेषण डिफ़ॉल्ट रूप से अक्षम है। एक सीमित ग्राहक टोकन कॉन्फ़िगर करें, गैर-सशुल्क कनेक्शन जांच चलाएं, मूल्य निर्धारण की समीक्षा करें और सशुल्क विश्लेषण सक्षम करने से पहले स्पष्ट रूप से सहमति दें। मैन्युअल AI क्रियाओं के लिए अलग से पुष्टि की आवश्यकता होती है।
WordPress ZIP डाउनलोड करें
पब्लिक सोर्स रिपॉजिटरी
पूर्ण README और उदाहरण
सुरक्षा नोट्स और ज्ञात सीमाएँ
1. इंस्टॉल करें
इन कमांड्स को WP-CLI उपलब्ध होने पर वर्डप्रेस डायरेक्टरी से चलाएं, या डाउनलोड की गई ZIP फ़ाइल को Plugins > Add New > Upload Plugin के माध्यम से अपलोड करें और इसे सक्रिय करें। Settings > SendRepute खोलें। मल्टीसाइट पर प्रत्येक साइट को अलग से कॉन्फ़िगर और सक्रिय करें। समर्थित WordPress/PHP संयोजन रखें; न्यूनतम वर्शन एंड-ऑफ़-लाइफ़ सॉफ़्टवेयर चलाने की सिफारिश नहीं है।
curl -fLO https://www.sendrepute.com/downloads/sendrepute-wp.zip
wp plugin install ./sendrepute-wp.zip --activate
विकल्प: सार्वजनिक स्रोत से इंस्टॉल करें
ऊपर दिए गए वेबसाइट डाउनलोड निर्देशों के बजाय इस स्रोत मार्ग का उपयोग करें। रिपॉजिटरी README शेष सक्रियण और कॉन्फ़िगरेशन चरणों की व्याख्या करता है; केवल ZIP बनाने से प्लगइन इंस्टॉल नहीं होता है। Python के लिए, दूसरा कमांड वैकल्पिक Django सपोर्ट जोड़ता है। क्रेडेंशियल को सर्वर सीक्रेट्स में रखें और सशुल्क सुविधाओं को सक्षम करने से पहले सुरक्षा नोटों की समीक्षा करें। केवल Node ही npm पर उपलब्ध है; सार्वजनिक GitHub रिपॉजिटरी का अर्थ WordPress.org, n8n Cloud, Packagist या PyPI प्रकाशन नहीं है।
git clone https://github.com/sendrepute/sendrepute-wordpress.git
cd sendrepute-wordpress
python3 package.py
2. सुरक्षित रूप से कॉन्फ़िगर करें
classify, account:read और catalog:read स्कोप, एक्सपायरी और स्पेंड कैप के साथ एक सर्वर-साइड कस्टमर टोकन बनाएं। इसे सेटिंग्स में दर्ज करें या दिखाए गए अनुसार अपने सर्वर सीक्रेट स्टोर से SENDREPUTE_API_TOKEN लोड करें। स्टोर किए गए टोकन WordPress साल्ट और OpenSSL के साथ ऑथेंटिकेटेड एन्क्रिप्शन का उपयोग करते हैं; साल्ट रोटेशन के बाद उन्हें फिर से दर्ज करें। गैर-भुगतान कनेक्शन चेक चलाएं, classification मूल्य निर्धारण की समीक्षा करें, फिर स्पष्ट रूप से स्वचालित विश्लेषण सक्षम करें। एडवाइजरी/ब्लॉकिंग मोड, थ्रेशोल्ड और स्वतंत्र fail-open/fail-closed पॉलिसी सेट करें।
// 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. सोच-समझकर उपयोग करें
नीचे दिया गया फ़ंक्शन सामान्य wp_mail का उपयोग करता है और केवल तभी भेजता है जब आपका एप्लिकेशन इसे कॉल करता है। सशुल्क विश्लेषण सक्षम होने पर, प्लगइन pre_wp_mail पर विश्लेषण करता है और फिर मौजूदा ट्रांसपोर्ट को अनुमति देता है या ब्लॉक करता है। अपना स्वयं का अधिकृत प्राप्तकर्ता प्रदान करें; पहले नॉन-रिलेइंग लोकल मेल सिंक के विरुद्ध परीक्षण करें। एक गलत परिणाम का मतलब है कि कॉलर को अस्वीकृत सेंड को संभालना होगा—यह कतार में नहीं लगाया जाता है।
// 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.'
);
}
यह और क्या कर सकता है?
सेटिंग्स अलग सशुल्क पुष्टि के साथ मैन्युअल AI रीराइट और टेम्प्लेट-जनरेशन क्रियाएं भी प्रदान करती है। मूल्य प्रदर्शन के लिए vip:read की आवश्यकता है; रीराइट के लिए rewrite की आवश्यकता है; जनरेशन के लिए ai:generate की आवश्यकता है, और VIP जनरेशन के लिए सक्रिय VIP सदस्यता की आवश्यकता है। परिणाम एस्केप किए गए, केवल-कॉपी टेक्स्ट हैं: इन्हें कभी भी स्वचालित रूप से लागू या भेजा नहीं जाता है। मौजूदा टोकन स्वचालित रूप से स्कोप प्राप्त नहीं करते हैं।
परिणाम, विफलताएं और सीमाएं
एडवाइजरी डिलीवरी की अनुमति देता है; ब्लॉकिंग आपके द्वारा निर्धारित सीमा के साथ परिमित स्पैम प्रायिकता की तुलना करता है। API टाइमआउट और विफलताएं अलग विफलता नीति का पालन करती हैं, न कि स्पैम लेबल का। अपारदर्शी स्थानीय लॉक 24 घंटों के लिए दोहराए गए विश्लेषण को रोकते हैं; अज्ञात नेटवर्क परिणामों को स्वचालित रूप से पुनः प्रयास नहीं किया जाता है। स्वयं भेजे गए संदेशों को डुप्लिकेट नहीं किया जाता है। इंस्टॉल किए गए अपडेट परीक्षणों में ट्रैक किए गए 0.1.0 ZIP से 0.2.0 में अपग्रेड, एडमिनिस्ट्रेटर nonce अस्वीकृति/सेव और चयनित WooCommerce पथ शामिल हैं। एक अलग 40-परिदृश्य मैट्रिक्स ने WP Mail SMTP और FluentSMTP दोनों के साथ प्लगइन लोड ऑर्डर को कवर किया, जिसमें To/Cc/Bcc, Reply-To, हेडर, अटैचमेंट, SMTP अस्वीकृति और नीति परिणाम शामिल थे। ये सटीक टुपल्स अन्य CMS, SMTP प्लगइन या प्रदाता संस्करणों को प्रमाणित नहीं करते हैं। हुक जो wp_mail को बायपास करते हैं और बाद के ट्रांसपोर्ट परिवर्तन कवरेज से बाहर रहते हैं। निष्क्रिय करने पर सेटिंग्स सुरक्षित रहती हैं; अनइंस्टॉल करने पर क्रेडेंशियल हटा दिए जाते हैं, भले ही अक्षम सेटिंग्स बरकरार रखी गई हों। wp-config टोकन स्वयं निकालें।
WooCommerce ईमेल एडॉप्टर
0.2.0
WordPress प्लगइन के समान ही SendRepute 0.2.0 ZIP में शामिल है; कोई अलग WooCommerce ऐड-ऑन या डाउनलोड उपलब्ध नहीं है। इसके लिए प्लगइन की WordPress 5.7+, PHP 7.4+ और OpenSSL बेसलाइन आवश्यक है। एडॉप्टर की WooCommerce 10.4.3 के विरुद्ध सोर्स-समीक्षा की गई थी, इसे हर WooCommerce या मेल-एक्सटेंशन वर्ज़न के लिए प्रमाणित नहीं किया गया है।
WooCommerce विश्लेषण का अपना व्यवस्थापक स्विच और सटीक अंतर्निहित ईमेल-प्रकार चयन है, जो डिफ़ॉल्ट रूप से बंद रहते हैं। ग्लोबल विश्लेषण और paid-consent नियंत्रण भी चालू होने चाहिए। अनचयनित और एक्सटेंशन-परिभाषित प्रकार विश्लेषण को बायपास कर देते हैं। प्रत्येक चयनित अंतर्निहित customer_* प्रकार सुरक्षित और advisory-only है: इसका विश्लेषण किया जा सकता है लेकिन इसे कभी ब्लॉक नहीं किया जाता है। चयनित मल्टीपार्ट मेल किसी भी भुगतान किए गए अनुरोध से पहले क्लासिफिकेशन में विफल हो जाता है; advisory या fail-open डिलीवरी सुरक्षित रखता है, जबकि fail-closed केवल गैर-सुरक्षित मेल को ब्लॉक करता है।
साझा WordPress और WooCommerce ZIP डाउनलोड करें
पब्लिक सोर्स रिपॉजिटरी
पूर्ण README और उदाहरण
सुरक्षा नोट्स और ज्ञात सीमाएँ
1. इंस्टॉल करें
यह वही इंस्टॉल करने योग्य ZIP है जिसका उपयोग WordPress गाइड द्वारा किया जाता है। इसे एक बार इंस्टॉल करें; दूसरा WooCommerce ऐड-ऑन इंस्टॉल न करें। SendRepute को सक्रिय करें, फिर Settings > SendRepute खोलें। WordPress, WooCommerce, PHP और वास्तविक मेल ट्रांसपोर्ट को समर्थित और अपडेट रखें।
curl -fLO https://www.sendrepute.com/downloads/sendrepute-wp.zip
wp plugin install ./sendrepute-wp.zip --activate
विकल्प: सार्वजनिक स्रोत से इंस्टॉल करें
ऊपर दिए गए वेबसाइट डाउनलोड निर्देशों के बजाय इस स्रोत मार्ग का उपयोग करें। रिपॉजिटरी README शेष सक्रियण और कॉन्फ़िगरेशन चरणों की व्याख्या करता है; केवल ZIP बनाने से प्लगइन इंस्टॉल नहीं होता है। Python के लिए, दूसरा कमांड वैकल्पिक Django सपोर्ट जोड़ता है। क्रेडेंशियल को सर्वर सीक्रेट्स में रखें और सशुल्क सुविधाओं को सक्षम करने से पहले सुरक्षा नोटों की समीक्षा करें। केवल Node ही npm पर उपलब्ध है; सार्वजनिक GitHub रिपॉजिटरी का अर्थ WordPress.org, n8n Cloud, Packagist या PyPI प्रकाशन नहीं है।
git clone https://github.com/sendrepute/sendrepute-wordpress.git
cd sendrepute-wordpress
python3 package.py
2. सुरक्षित रूप से कॉन्फ़िगर करें
सर्वर सीक्रेट्स या एन्क्रिप्टेड WordPress सेटिंग से एक स्कोप्ड कस्टमर टोकन का उपयोग करें। पहले साझा किए गए गैर-सशुल्क कनेक्शन चेक, वर्तमान-मूल्य समीक्षा, वैश्विक सशुल्क सहमति, जोखिम मोड, थ्रेशोल्ड और विफलता नीति को कॉन्फ़िगर करें। फिर अलग से WooCommerce विश्लेषण सक्षम करें और केवल उन्हीं अंतर्निहित ईमेल प्रकारों का चयन करें जिनकी आपने समीक्षा की है। एक्सटेंशन-परिभाषित प्रकार कभी भी स्वचालित रूप से नहीं चुने जाते हैं।
// 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. सोच-समझकर उपयोग करें
WooCommerce के माध्यम से सामान्य रूप से भेजना जारी रखें। एडॉप्टर WooCommerce द्वारा पहले से चुने गए कॉलबैक को लपेटता है और इसके मूल तर्कों और ट्रांसपोर्ट को सुरक्षित रखता है; यह कोई नया सेंड मेथड प्रदान नहीं करता है। यदि कोई अन्य फ़िल्टर कॉलबैक तर्कों को बदलता है, उस कॉलबैक के दौरान सामान्य मेल नेस्टेड होता है, या कोई कस्टम कॉलबैक कभी wp_mail को कॉल नहीं करता है, तो विश्लेषण को सामान्य सशुल्क पथ में डालने के बजाय रूढ़िवादी रूप से बायपास कर दिया जाता है। गैर-रिलेइंग मेल सिंक के साथ चयनित गैर-क्रिटिकल प्रकारों का परीक्षण करें।
परिणाम, विफलताएं और सीमाएं
चयनित सिंगल-पार्ट मेल साझा WordPress एडवाइजरी, थ्रेशोल्ड और विफलता नीतियों का पालन करते हैं, सिवाय इसके कि प्रत्येक customer_* प्रकार सुरक्षित और केवल एडवाइजरी है। सुरक्षित कस्टमर मेल हमेशा उच्च-जोखिम वाले परिणाम, API विफलता या असमर्थित सामग्री के बाद भी जारी रहता है। WooCommerce pre_wp_mail के बाद मल्टीपार्ट विकल्प बनाता है, इसलिए चयनित मल्टीपार्ट मेल आंशिक रूप से क्लासिफाई होने के बजाय किसी भी सशुल्क अनुरोध से पहले विफल हो जाते हैं; फेल-क्लोज्ड द्वारा केवल चयनित गैर-सुरक्षित मेल ही अस्वीकार किए जा सकते हैं। सफलता, विफलता और नेस्टेड सेंड के बाद कॉलबैक संदर्भ हटा दिया जाता है।
Drupal मेल बैकएंड
0.1.0
Drupal 10.3+ या 11.x और PHP 8.1+ की आवश्यकता है। ZIP को एक मॉड्यूल के रूप में इंस्टॉल करें, administer sendrepute की अनुमति केवल विश्वसनीय प्रशासकों को दें, एक bounded non-address sender display name कॉन्फ़िगर करें, और सटीक मॉड्यूल/कुंजी मेल रूट चुनें। संस्करण 0.1.0 केवल Drupal कोर php_mail का समर्थन करता है; यह एक Mail बैकएंड है, कोई प्रदाता या ट्रांसपोर्ट रिप्लेसमेंट नहीं। Installed-site evidence में PHP 8.4.10 के साथ सटीक Drupal 10.6.17 और 11.4.7 रिलीज़ शामिल हैं।
सशुल्क सहमति और प्रत्येक रूट डिफ़ॉल्ट रूप से बंद हैं। प्रत्येक सटीक रूट फिक्स्ड कोर php_mail डेलिगेट, सलाहकार या अवरोधन मोड, एक स्वतंत्र संरक्षण या अवरोधन विफलता नीति, थ्रेशोल्ड, और जानबूझकर किए गए महत्वपूर्ण-मेल चयन का उपयोग करता है। अकाउंट और सुरक्षा मेल डिलीवर होने योग्य रहते हैं जब तक कि वह सटीक रूट स्पष्ट रूप से महत्वपूर्ण अवरोधन की अनुमति न दे। वही php_mail इंस्टेंस एक स्केलर फाइनल बॉडी को प्रारूपित और भेजता है; मल्टीपार्ट और अटैचमेंट वाले आउटपुट असमर्थित हैं।
Drupal ZIP डाउनलोड करें
पब्लिक सोर्स रिपॉजिटरी
पूर्ण README और उदाहरण
सुरक्षा नोट्स और ज्ञात सीमाएँ
1. इंस्टॉल करें
Drupal प्रोजेक्ट रूट से चलाएं, या Drupal के मॉड्यूल इंस्टॉलर के साथ ZIP अपलोड करें। आर्काइव में modules/contrib के लिए उपयुक्त एक sendrepute मॉड्यूल रूट है। इसे सक्षम करें, केवल विश्वसनीय प्रशासकों को administer sendrepute प्रदान करें, और Configuration > System > SendRepute खोलें।
curl -fLO https://www.sendrepute.com/downloads/sendrepute-drupal.zip
unzip sendrepute-drupal.zip -d modules/contrib
drush en sendrepute -y
विकल्प: सार्वजनिक स्रोत से इंस्टॉल करें
ऊपर दिए गए वेबसाइट डाउनलोड निर्देशों के बजाय इस स्रोत मार्ग का उपयोग करें। रिपॉजिटरी README शेष सक्रियण और कॉन्फ़िगरेशन चरणों की व्याख्या करता है; केवल ZIP बनाने से प्लगइन इंस्टॉल नहीं होता है। Python के लिए, दूसरा कमांड वैकल्पिक Django सपोर्ट जोड़ता है। क्रेडेंशियल को सर्वर सीक्रेट्स में रखें और सशुल्क सुविधाओं को सक्षम करने से पहले सुरक्षा नोटों की समीक्षा करें। केवल Node ही npm पर उपलब्ध है; सार्वजनिक GitHub रिपॉजिटरी का अर्थ WordPress.org, n8n Cloud, Packagist या PyPI प्रकाशन नहीं है।
git clone https://github.com/sendrepute/sendrepute-drupal.git
cd sendrepute-drupal
2. सुरक्षित रूप से कॉन्फ़िगर करें
classify-स्कोप वाले SENDREPUTE_API_TOKEN को केवल वेब/PHP प्रोसेस एनवायरमेंट में स्टोर करें। इसे कभी भी फॉर्म द्वारा स्वीकार नहीं किया जाता है या Drupal कॉन्फ़िगरेशन में एक्सपोर्ट नहीं किया जाता है। फॉर्म में, अधिकतम 320 बाइट्स का एक आवश्यक सेंडर डिस्प्ले नाम दर्ज करें जिसमें कोई एड्रेस, एंगल ब्रैकेट या कंट्रोल न हो। दिखाए गए अनुसार प्रति सटीक रूट एक सात-फ़ील्ड लाइन जोड़ें; डेलिगेट php_mail होना चाहिए। एडवाइजरी/ब्लॉक मोड, प्रिजर्व/ब्लॉक विफलता नीति, थ्रेशोल्ड और क्रिटिकल yes/no चुनें। एडवाइजरी, प्रिजर्व और no से शुरुआत करें।
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. सोच-समझकर उपयोग करें
Drupal के सामान्य मेल मैनेजर को कॉल करना जारी रखें। ऑप्ट-इन किए गए रूट के लिए, sendrepute_mail कोर php_mail के format() को कॉल करता है, उस फाइनल स्केलर बॉडी का विश्लेषण करता है, पॉलिसी लागू करता है, और फिर उसी कैश्ड php_mail इंस्टेंस के mail() को कॉल करता है। अन्य डेलिगेट आईडी अस्वीकार कर दिए जाते हैं। यह hook_mail_alter का उपयोग नहीं करता है और संदेश को दोबारा नहीं लिखता है।
परिणाम, विफलताएं और सीमाएं
एक मान्य सफलता केवल ब्लॉक मोड में कॉन्फ़िगर की गई सीमा पर या उससे ऊपर ही ब्लॉक करती है। spamProbability डिलीवरी को प्रभावित करने से पहले पूर्ण नेस्टेड वर्गीकरण परिणाम और बिलिंग प्रतिक्रिया को मान्य किया जाता है। API, प्रमाणीकरण, बैलेंस, रेट-लिमिट, विकृत, मल्टीपार्ट, अटैचमेंट-इंडिकेटर और साइज की विफलताएं स्वतंत्र मार्ग विफलता नीति का पालन करती हैं, सिवाय इसके कि सुरक्षित महत्वपूर्ण मेल जारी रहते हैं। इंस्टॉल किए गए 10.6.17/11.4.7 मैट्रिक्स ने सक्षम होने के दौरान इंस्टॉलेशन और इन-प्लेस ZIP रिप्लेसमेंट, वास्तविक एडमिनिस्ट्रेटर लॉगिन, Form API CSRF अस्वीकृति/सेव, प्लगइन डिस्कवरी, रूट ऑप्ट-इन, सिंथेटिक वर्गीकरण, महत्वपूर्ण-मेल संरक्षण और स्थानीय सिंक के माध्यम से कोर php_mail को कवर किया। बेसलाइन स्रोत जांच अपरिवर्तनीय 10.3.0 और 11.0.0 अभिलेखागार को भी कवर करती है; कोई भी परिणाम हर बाद के पैच या योगदान किए गए मेलर को प्रमाणित नहीं करता है। कॉन्फ़िगर किया गया प्रदर्शन नाम, गैर-रिक्त विषय और लंबाई-फ़्रेमयुक्त बॉडी भेजी जाती है; पते, प्राप्तकर्ता, हेडर, पैरामीटर और अटैचमेंट शामिल नहीं हैं। विषय 998 बाइट्स और बॉडी 256 KiB तक सीमित है। इसमें एक सत्यापित-HTTPS प्रयास होता है, कोई रीडायरेक्ट, पुनः प्रयास या कतार नहीं होती है।
PrestaShop मेल मॉड्यूल
0.1.1
संस्करण 0.1.1 विशेष रूप से PHP 8.1–8.4 के साथ PrestaShop 9.0.0, 9.0.1, 9.0.2 और 9.0.3 का समर्थन करता है। Modules > Module Manager में ZIP अपलोड करें, फिर SendRepute मेल वर्गीकरण कॉन्फ़िगर करें। सभी चार आधिकारिक प्रीबिल्ट क्लासिक रिलीज़ ने पृथक इंस्टॉलेशन, प्रमाणित व्यवस्थापक कॉन्फ़िगरेशन और ZIP-update जांच पास की है; उनके अपरिवर्तित Mail::send() कार्यान्वयन ने भी ऑफ़लाइन रियल-मेल मैट्रिक्स पास किया है। PrestaShop 8, 9.1+ और बाद के असूचीबद्ध 9.0 पैच समर्थित नहीं हैं।
यह मॉड्यूल, सशुल्क/सामग्री सहमति और सटीक टेम्पलेट चयन सभी डिफ़ॉल्ट रूप से बंद हैं। यह Symfony संदेश को दोबारा बनाए बिना अंतिम रेंडर किए गए विषय और हर समर्थित प्रदर्शित बॉडी का विश्लेषण करता है। एक संदेश जिसमें text/plain और text/html दोनों शामिल हैं, एक ही सीमित वर्गीकरण अनुरोध में भेजा जाता है: सादे विकल्प को निष्क्रिय कर दिया जाता है, मूल HTML को संरक्षित किया जाता है, और सेवा बिना किसी जुड़ाव के प्रत्येक टाइप किए गए विकल्प का स्वतंत्र रूप से विश्लेषण करती है। परिणाम पूर्ण सामग्री ऑडिट के साथ उच्चतम जोखिम का उपयोग करता है, एक सशुल्क वर्गीकरण उत्पन्न करता है, और कभी भी आंशिक सुरक्षा स्कोर नहीं लौटाता है। सलाहकार मोड कभी भी भेजने में बाधा नहीं डालता है। थ्रेशोल्ड अवरोधन और फेल-क्लोज़्ड एक Exception थ्रो करते हैं जो Symfony Mailer के ExceptionInterface और PrestaShop के ModuleErrorInterface दोनों को लागू करता है; हर समर्थित रिलीज पर स्थापित परीक्षण में देखा गया कि Mail::send() बिना किसी SMTP डिलीवरी के false लौटाता है। विफलता नीति जोखिम सीमा से स्वतंत्र है।
PrestaShop ZIP डाउनलोड करें
पब्लिक सोर्स रिपॉजिटरी
पूर्ण README और उदाहरण
सुरक्षा नोट्स और ज्ञात सीमाएँ
1. इंस्टॉल करें
0.1.1 ZIP डाउनलोड करें, फिर Modules > Module Manager > Upload a module का उपयोग करें और इसे चुनें। SendRepute मेल क्लासिफिकेशन के लिए Configure खोलें। सटीक PrestaShop 9.0.0–9.0.3 के बाहर जबरन इंस्टालेशन न करें: निरस्तीकरण और साइनिंग व्यवहार ऑडिट किए गए Mail::send() पाथ पर निर्भर करते हैं।
curl -fLO https://www.sendrepute.com/downloads/sendrepute-prestashop.zip
विकल्प: सार्वजनिक स्रोत से इंस्टॉल करें
ऊपर दिए गए वेबसाइट डाउनलोड निर्देशों के बजाय इस स्रोत मार्ग का उपयोग करें। रिपॉजिटरी README शेष सक्रियण और कॉन्फ़िगरेशन चरणों की व्याख्या करता है; केवल ZIP बनाने से प्लगइन इंस्टॉल नहीं होता है। Python के लिए, दूसरा कमांड वैकल्पिक Django सपोर्ट जोड़ता है। क्रेडेंशियल को सर्वर सीक्रेट्स में रखें और सशुल्क सुविधाओं को सक्षम करने से पहले सुरक्षा नोटों की समीक्षा करें। केवल Node ही npm पर उपलब्ध है; सार्वजनिक GitHub रिपॉजिटरी का अर्थ WordPress.org, n8n Cloud, Packagist या PyPI प्रकाशन नहीं है।
git clone https://github.com/sendrepute/sendrepute-prestashop.git
cd sendrepute-prestashop
2. सुरक्षित रूप से कॉन्फ़िगर करें
SENDREPUTE_API_BASE को इस मॉड्यूल के लिए प्रदान किए गए कैनोनिकल प्रोडक्शन SendRepute HTTPS ओरिजिन पर और SENDREPUTE_API_TOKEN को PHP-FPM/सर्वर वातावरण में एक स्कोप्ड सर्वर टोकन पर सेट करें। बेस एक पाथ-फ्री सार्वजनिक DNS HTTPS ओरिजिन होना चाहिए; लिटरल्स, क्रेडेंशियल्स, रीडायरेक्ट और निजी DNS जवाबों को अस्वीकार कर दिया जाता है। गैर-सशुल्क अकाउंट/प्राइसिंग कनेक्शन चेक चलाएं, फिर स्पष्ट रूप से मॉड्यूल, सशुल्क/सामग्री सहमति और सटीक टेम्पलेट नाम सक्षम करें। एडवाइजरी/ब्लॉक, थ्रेशोल्ड और ओपन/क्लोज्ड विफलता नीति स्वतंत्र रूप से चुनें।
export SENDREPUTE_API_BASE="replace-with-the-canonical-sendrepute-https-origin"
export SENDREPUTE_API_TOKEN="replace-with-a-scoped-server-token"
3. सोच-समझकर उपयोग करें
PrestaShop के सामान्य Mail::send फ़्लो का उपयोग जारी रखें। शुरुआती हुक केवल एक ऑप्ट-इन (opted-in) सटीक टेम्पलेट को याद रखता है। अंतिम हुक प्राप्तकर्ताओं, हेडर, अटैचमेंट या ट्रांसपोर्ट को बदले बिना पहले से रेंडर किए गए Symfony Email विषय, टेक्स्ट बॉडी और HTML बॉडी को पढ़ता है। डुअल बॉडी के लिए, यह एक ही अनुरोध में निष्क्रिय सादे टेक्स्ट और मूल HTML को टाइप किए गए विकल्पों के रूप में सबमिट करता है; स्वतंत्र सेवा सामान्यीकरण एक खंड को दूसरे द्वारा उपभोग करने से रोकता है जबकि ऑडिट के लिए दृश्यमान HTML लिंक और इमेज गंतव्यों को बनाए रखता है। एक एकल सादी बॉडी संकीर्ण निष्क्रिय-टेक्स्ट पाथ पर रहती है, और एक एकल HTML बॉडी संकीर्ण DOM-extraction पाथ पर रहती है। वर्गीकरण, PrestaShop द्वारा एक अलग DKIM-signed संदेश बनाने से पहले पूरा हो जाता है। समर्थित-रिलीज़ मैट्रिक्स ने वर्गीकरण के बाद उत्सर्जित मल्टीपार्ट संरचना के साथ-साथ DKIM बॉडी हैश और RSA हस्ताक्षर को सत्यापित किया है। PrestaShop का पिन किया गया साइनिंग पाथ तैयार किए गए हस्ताक्षरित हेडर्स से Bcc को हटा देता है और उस ब्लाइंड SMTP प्राप्तकर्ता को खो देता है; इसलिए वैध हस्ताक्षर साक्ष्य Bcc वितरण अनुकूलता स्थापित नहीं करते हैं। इस समर्थित पाथ पर DKIM और Bcc को न मिलाएं। असमर्थित डिस्प्ले स्रोत, सक्रिय सिमेंटिक्स, अस्पष्ट quoted-printable या base64 HTML, और बड़े आकार की कुल सामग्री भुगतान से पहले कॉन्फ़िगर की गई विफलता नीति का पालन करती है। जब तक जानबूझकर अनुमोदित न हो, महत्वपूर्ण टेम्पलेट्स को अनसलेक्टेड रहने दें।
परिणाम, विफलताएं और सीमाएं
क्लासिफायर एक text/plain बॉडी, एक text/html बॉडी या दोनों को स्वतंत्र रूप से विश्लेषित प्रदर्शित विकल्पों के रूप में स्वीकार करता है। एक स्वीकृत विकल्प में शाब्दिक टेक्स्ट, एंटिटी, छिपी हुई और स्टाइल सामग्री बाद के विकल्प का उपभोग या उसे छिपा नहीं सकती है; इसके बजाय भुगतान से पहले अस्पष्ट quoted-printable या base64 HTML को अस्वीकार कर दिया जाता है। कोई भी स्वीकृत विकल्प उच्चतम-जोखिम परिणाम निर्धारित कर सकता है, जबकि सामग्री ऑडिट प्रत्येक विकल्प को कवर करते हैं; संपूर्ण बाउंडेड इनपुट स्वीकार किए जाने के बाद ही वर्गीकरण के लिए एक बार शुल्क लिया जाता है। आवश्यक लीगेसी बॉडी एक डुअल मैसेज के लिए निष्क्रिय सादे विकल्प की सटीक नकल करती है, और वह डुप्लिकेट प्लस दोनों टाइप किए गए विकल्प सटीक 524288-byte अनुरोध बजट साझा करते हैं। प्राप्तकर्ताओं, अटैचमेंट और एम्बेडेड संसाधनों को बाहर रखा गया है, और मूल प्री-साइनिंग ट्रांसपोर्ट संदेश सुरक्षित है। रियल-मेल फिक्स्चर अलग से MIME/हस्ताक्षर अखंडता और वास्तविक SMTP प्राप्तकर्ताओं की जांच करता है: वर्गीकरण के बाद DKIM हस्ताक्षर मान्य रहते हैं, लेकिन ऑडिट किया गया अपस्ट्रीम हस्ताक्षरित पाथ Bcc प्राप्तकर्ताओं को सुरक्षित नहीं रखता है। एक सत्यापित वर्गीकरण एक सीमित नवीनतम सलाहकार सारांश संग्रहीत करता है। ब्लॉक मोड केवल सीमा पर या उससे ऊपर थ्रो करता है; डुअल-इंटरफ़ेस अपवाद हुक डिस्पैच के बाद भी बना रहता है और सभी चार इंस्टॉल की गई रिलीज़ पर ट्रांसपोर्ट से पहले false उत्पन्न करता है। असमर्थित सामग्री, API और सत्यापन त्रुटियां स्वतंत्र रूप से open/closed का पालन करती हैं। एक HTTPS प्रयास पिन किए गए सार्वजनिक DNS, सत्यापित TLS, परिमित टाइमआउट, 256 KiB प्रतिक्रिया सीमा, कोई रीडायरेक्ट नहीं और कोई पुनः प्रयास नहीं का उपयोग करता है। ब्लॉकिंग ऑडिट किए गए PrestaShop Mail::send() अपवाद कैच पर निर्भर करती है, न कि अंतिम हुक रिटर्न वैल्यू पर।
Symfony Mailer एडॉप्टर
0.1.1
इसके लिए PHP 8.1+ आवश्यक है और यह केवल Symfony Mailer 6.4 या 7.4 को लक्षित करता है; सटीक सत्यापित रिलीज़ 6.4.46 और 7.4.19 हैं। किसी भी Symfony 8.1 या बिना परीक्षण वाले संस्करण के साथ संगतता का दावा नहीं किया गया है। स्थानीय स्रोत ZIP को Composer पाथ रिपॉजिटरी के माध्यम से इंस्टॉल करें; यह पैकेज Packagist पर प्रकाशित नहीं है।
यह बंडल और सशुल्क सहमति डिफ़ॉल्ट रूप से बंद हैं, और केवल वही संदेश पात्र है जिसमें सटीक कॉन्फ़िगर किया गया ऑप्ट-इन हेडर मौजूद हो। सलाहकार या अवरोधन स्कोर नीति, अनुमति या अवरोधन विफलता नीति से स्वतंत्र है। वर्गीकरण आधिकारिक प्री-सेंड MessageEvent पर चलता है; अस्वीकृति के लिए MessageEvent::reject() का उपयोग किया जाता है। कतारबद्ध क्लोन इवेंट्स को छोड़ दिया जाता है ताकि वर्कर ट्रांसपोर्ट इवेंट ही एकमात्र सशुल्क वर्गीकरण बिंदु बना रहे।
Symfony स्रोत ZIP डाउनलोड करें
पब्लिक सोर्स रिपॉजिटरी
पूर्ण README और उदाहरण
सुरक्षा नोट्स और ज्ञात सीमाएँ
1. इंस्टॉल करें
डाउनलोड किए गए ZIP को एक रिटेंड पैकेज डायरेक्टरी में निकालें, उस डायरेक्टरी को Composer पाथ रिपॉजिटरी के रूप में पंजीकृत करें, सटीक 0.1.1 पैकेज की आवश्यकता रखें, और यदि Flex नहीं करता है तो SendRepute\Symfony\SendReputeBundle को पंजीकृत करें। सोर्स आर्काइव स्थानीय और अप्रकाशित है।
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
विकल्प: सार्वजनिक स्रोत से इंस्टॉल करें
ऊपर दिए गए वेबसाइट डाउनलोड निर्देशों के बजाय इस स्रोत मार्ग का उपयोग करें। रिपॉजिटरी README शेष सक्रियण और कॉन्फ़िगरेशन चरणों की व्याख्या करता है; केवल ZIP बनाने से प्लगइन इंस्टॉल नहीं होता है। Python के लिए, दूसरा कमांड वैकल्पिक Django सपोर्ट जोड़ता है। क्रेडेंशियल को सर्वर सीक्रेट्स में रखें और सशुल्क सुविधाओं को सक्षम करने से पहले सुरक्षा नोटों की समीक्षा करें। केवल Node ही npm पर उपलब्ध है; सार्वजनिक GitHub रिपॉजिटरी का अर्थ WordPress.org, n8n Cloud, Packagist या PyPI प्रकाशन नहीं है।
git clone https://github.com/sendrepute/sendrepute-symfony.git
cd sendrepute-symfony
2. सुरक्षित रूप से कॉन्फ़िगर करें
सर्वर सीक्रेट से SENDREPUTE_API_TOKEN को रिज़ॉल्व करें। मौजूदा कीमतों की समीक्षा करते समय enabled और paid_analysis_consent को false रखें। मोड, थ्रेशोल्ड और विफलता नीति स्वतंत्र हैं। एंडपॉइंट सत्यापित HTTPS के लिए निश्चित है जिसमें बाउंडेड डेडलाइन, कोई रीडायरेक्ट या रिट्राइ नहीं, और 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. सोच-समझकर उपयोग करें
समीक्षा किए गए गैर-महत्वपूर्ण Email ऑब्जेक्ट्स में केवल सटीक opt-in हेडर जोड़ें, फिर सामान्य Mailer के माध्यम से जारी रखें। संदेश, envelope, transport और header को फिर से नहीं लिखा जाता है। Messenger वितरण के लिए, वर्कर्स में बंडल कॉन्फ़िगर करें: producer clone events को जानबूझकर वर्गीकृत नहीं किया जाता है।
$email->getHeaders()->addTextHeader('X-SendRepute-Classify', 'yes');
$mailer->send($email);
परिणाम, विफलताएं और सीमाएं
सटीक रूप से एक इन-मेमोरी टेक्स्ट या HTML बॉडी समर्थित है। मिश्रित विकल्प, टेक्स्टुअल DataParts, स्ट्रीम्स या पाथ्स, CSS ब्रेसेज़, मार्कअप, कोटेड-प्रिंटेबल सिंटैक्स, base64 हेडर्स या व्होल-बॉडी base64 भुगतान से पहले विफल हो जाते हैं और विफलता नीति का पालन करते हैं; सामान्य ब्रेसेज़-मुक्त सामग्री अपरिवर्तित रहती है। प्रत्येक आवश्यक नेस्टेड रिस्पॉन्स फ़ील्ड और वैकल्पिक ऑडिट शाखा को मान्य किया जाता है और अज्ञात प्रॉपर्टीज़ को अस्वीकार कर दिया जाता है। सलाहकार मोड कभी भी स्कोर-ब्लॉक नहीं करता है; अवरोधन मोड वास्तविक ट्रांसपोर्ट इवेंट के माध्यम से थ्रेशोल्ड पर अस्वीकार कर देता है।
Rails Action Mailer एडॉप्टर
0.1.0
इसके लिए Ruby 3.2+ आवश्यक है और यह विशेष रूप से वास्तविक Action Mailer 7.1.6 और Mail 2.9.1 के साथ सत्यापित है; कॉलबैक पाथ Action Mailer 7.2.3.2 पर भी देखा गया था। यह हर अनुमत Rails 7.x रिलीज़ का प्रमाणन नहीं है। स्थानीय स्रोत ZIP को Bundler के माध्यम से इंस्टॉल करें; किसी RubyGems प्रकाशन का दावा नहीं किया गया है।
दोनों वैश्विक paid gates डिफ़ॉल्ट रूप से बंद हैं, और प्रत्येक mailer action को स्पष्ट रूप से sendrepute_paid_preflight! कॉल करना चाहिए। Advisory/block score व्यवहार और preserve/block failure व्यवहार स्वतंत्र हैं। Password resets, MFA, login, verification, billing और security routes को अनचयनित रहना चाहिए। भुगतान से पहले हर multipart message और संदिग्ध CSS, quoted-printable या base64-looking कंटेंट को अस्वीकार कर दिया जाता है; मूल मैसेज या transport को बदले बिना एक स्वीकार्य decoded text या HTML body का विश्लेषण किया जाता है।
Rails सोर्स ZIP डाउनलोड करें
पब्लिक सोर्स रिपॉजिटरी
पूर्ण README और उदाहरण
सुरक्षा नोट्स और ज्ञात सीमाएँ
1. इंस्टॉल करें
ZIP को सटीक रूप से vendor/sendrepute-rails में एक्सट्रैक्ट करें, Gemfile में स्थानीय पाथ प्रविष्टि जोड़ें, अपने नियंत्रित वातावरण में Bundler चलाएँ, और ApplicationMailer में SendRepute::Rails::Mailer शामिल करें। यह RubyGems इंस्टॉलेशन नहीं है।
# Download sendrepute-rails.zip, then extract it into vendor/sendrepute-rails.
gem "sendrepute-rails", path: "vendor/sendrepute-rails"
विकल्प: सार्वजनिक स्रोत से इंस्टॉल करें
ऊपर दिए गए वेबसाइट डाउनलोड निर्देशों के बजाय इस स्रोत मार्ग का उपयोग करें। रिपॉजिटरी README शेष सक्रियण और कॉन्फ़िगरेशन चरणों की व्याख्या करता है; केवल ZIP बनाने से प्लगइन इंस्टॉल नहीं होता है। Python के लिए, दूसरा कमांड वैकल्पिक Django सपोर्ट जोड़ता है। क्रेडेंशियल को सर्वर सीक्रेट्स में रखें और सशुल्क सुविधाओं को सक्षम करने से पहले सुरक्षा नोटों की समीक्षा करें। केवल Node ही npm पर उपलब्ध है; सार्वजनिक GitHub रिपॉजिटरी का अर्थ WordPress.org, n8n Cloud, Packagist या PyPI प्रकाशन नहीं है।
git clone https://github.com/sendrepute/sendrepute-rails.git
cd sendrepute-rails
2. सुरक्षित रूप से कॉन्फ़िगर करें
वर्तमान मूल्य निर्धारण और रूट्स की समीक्षा होने तक enabled और paid_consent को false रखें। Rails credentials या किसी अन्य सर्वर सीक्रेट से टोकन पढ़ें। advisory/block, preserve/block और threshold को स्वतंत्र रूप से कॉन्फ़िगर करें; on_result और on_error कॉल बैक में संदेश सामग्री, प्राधिकरण डेटा या पूर्ण प्रतिक्रियाओं को लॉग नहीं किया जाना चाहिए।
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. सोच-समझकर उपयोग करें
केवल प्रत्येक जानबूझकर चुने गए गैर-महत्वपूर्ण mailer action के अंदर ही sendrepute_paid_preflight! को कॉल करें। सामान्य actions वर्गीकरण को बायपास करते हैं। paid hook Action Mailer के before_deliver रूट का उपयोग करता है; कोई ग्लोबल auto-opt-in प्रदान नहीं किया गया है और एडॉप्टर Mail::Message को फिर से नहीं लिखता है।
class ApplicationMailer < ActionMailer::Base
include SendRepute::Rails::Mailer
end
def newsletter
sendrepute_paid_preflight!
mail(to: params[:to], subject: "News")
end
परिणाम, विफलताएं और सीमाएं
एक डिकोड किया गया text/plain या text/html प्रदर्शित बॉडी समर्थित है। भुगतान से पहले हर multipart या अस्पष्ट नॉर्मलाइज़र इनपुट विफल हो जाता है और विफलता नीति का पालन करता है। एक पूर्ण टाइप किया गया नेस्टेड रिस्पॉन्स केवल threshold पर या उससे ऊपर ब्लॉक मोड में ही ब्लॉक कर सकता है; एडवाइजरी हर स्कोर को सुरक्षित रखती है। परिणाम और त्रुटि कॉलबैक को अपरिवर्तनीय सुरक्षित डेटा प्राप्त होता है, और कॉलबैक अपवाद या throw(:abort) स्थानीय स्तर पर पकड़े जाते हैं ताकि वे एडवाइजरी को समाप्त न कर सकें या डिलीवरी को सुरक्षित न कर सकें। निश्चित एंडपॉइंट रीडायरेक्ट और रिट्राइज़ को अस्वीकार करता है और एक बाउंडेड कुल डेडलाइन का उपयोग करता है। वास्तविक Action Mailer 7.1.6 परीक्षण सफल रहे: 19 रन और 59 एसेर्शन्स; कोई सशुल्क अनुरोध या वास्तविक डिलीवरी नहीं हुई।
Spring JavaMailSender एडॉप्टर
0.1.1
इसके लिए Java 17+ की आवश्यकता है और यह Spring Framework 6.2.x JavaMailSender को लक्षित करता है; सटीक डिपेंडेंसी सत्यापन के लिए Spring Framework 6.2.19 का उपयोग किया गया था। Spring Boot 4 या व्यापक फ्रेमवर्क-वर्जन का कोई दावा नहीं है। स्थानीय सोर्स ZIP को Maven के साथ बिल्ड करें; इसे Maven Central या किसी अन्य रजिस्ट्री में प्रकाशित नहीं किया गया है।
डेकोरेटर, सशुल्क सहमति, सलाहकार मोड और विफलता-पर-अनुमति डिफ़ॉल्ट स्पष्ट हैं। केवल sendWithSendRepute(...) ही सशुल्क प्री-सेंड विश्लेषण करता है; प्रत्येक सामान्य send(...) ओवरलोड वर्गीकरण को बायपास करता है और बिना किसी बदलाव के डेलिगेट करता है। महत्वपूर्ण मेल के लिए सामान्य send का उपयोग करें जब तक कि उस व्यक्तिगत send को जानबूझकर चुना न गया हो। समर्थित प्रदर्शित MIME विकल्पों को निष्क्रिय रूप से एक साथ फ्रेम किया गया है; असमर्थित, नेस्टेड, हस्ताक्षरित, एन्क्रिप्टेड या संदिग्ध सामग्री भुगतान से पहले विफल हो जाती हैं।
Spring Java सोर्स ZIP डाउनलोड करें
पब्लिक सोर्स रिपॉजिटरी
पूर्ण README और उदाहरण
सुरक्षा नोट्स और ज्ञात सीमाएँ
1. इंस्टॉल करें
0.1.1 स्रोत ZIP को एक्सट्रैक्ट करें, mvn verify चलाएँ, और इसे केवल अपने नियंत्रित लोकल Maven रिपॉजिटरी में इंस्टॉल करें। उपयोग करने वाला एप्लिकेशन अपना मौजूदा JavaMailSender और रनटाइम मेल इम्प्लीमेंटेशन प्रदान करता है। सटीक डिपेंडेंसी वेरिफिकेशन के लिए Java 17 बाइटकोड, Spring Framework 6.2.19 और शामिल README में प्रलेखित वर्ज़न का उपयोग किया गया था।
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
विकल्प: सार्वजनिक स्रोत से इंस्टॉल करें
ऊपर दिए गए वेबसाइट डाउनलोड निर्देशों के बजाय इस स्रोत मार्ग का उपयोग करें। रिपॉजिटरी README शेष सक्रियण और कॉन्फ़िगरेशन चरणों की व्याख्या करता है; केवल ZIP बनाने से प्लगइन इंस्टॉल नहीं होता है। Python के लिए, दूसरा कमांड वैकल्पिक Django सपोर्ट जोड़ता है। क्रेडेंशियल को सर्वर सीक्रेट्स में रखें और सशुल्क सुविधाओं को सक्षम करने से पहले सुरक्षा नोटों की समीक्षा करें। केवल Node ही npm पर उपलब्ध है; सार्वजनिक GitHub रिपॉजिटरी का अर्थ WordPress.org, n8n Cloud, Packagist या PyPI प्रकाशन नहीं है।
git clone https://github.com/sendrepute/sendrepute-java.git
cd sendrepute-java
2. सुरक्षित रूप से कॉन्फ़िगर करें
सर्वर-साइड टोकन और स्पष्ट स्विच के माध्यम से SendReputeConfiguration का निर्माण करें। जब तक प्राइसिंग और चयनित कॉल्स की समीक्षा न हो जाए, तब तक enabled और paidAnalysisConsent को false रखें। Advisory/blocking, threshold, और allow/block विफलता नीति स्वतंत्र हैं। एंडपॉइंट को बिना किसी रिडायरेक्ट या रिट्राय के वेरिफाइड HTTPS पर फिक्स किया गया है।
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. सोच-समझकर उपयोग करें
sendWithSendRepute(...) को केवल उसी व्यक्तिगत SimpleMailMessage, MimeMessage या MimeMessagePreparator के लिए कॉल करें जिसका विश्लेषण किया जाना चाहिए। सिंगल और varargs ओवरलोड समर्थित हैं। प्रत्येक सामान्य send(...) ओवरलोड वर्गीकरण को बायपास करता है। Preparators एक बार रेंडर होते हैं और पॉलिसी अनुमति देने के बाद मूल तैयार MIME को डेलीगेट किया जाता है।
// Paid classification is possible only on this explicit method.
reviewedSender.sendWithSendRepute(reviewedMessage);
// Every ordinary JavaMailSender send overload bypasses classification.
reviewedSender.send(criticalMessage);
परिणाम, विफलताएं और सीमाएं
सभी समर्थित प्रदर्शित plain और HTML भागों का विश्लेषण किया जाता है; प्राप्तकर्ताओं और अटैचमेंट को बाहर रखा गया है। ट्रैवर्सल की सीमा 16 स्तरों, 256 भागों और 524,288 प्रदर्शित UTF-8 बाइट्स पर तय है। इग्नोर किए गए इनलाइन बाइनरी को कभी मैटेरियलाइज नहीं किया जाता है; अज्ञात या अनबाउंडेड लेज़ी प्रदर्शित स्रोत स्ट्रीम खुलने या paid request होने से पहले विफल हो जाते हैं, और समर्थित स्रोत रीड्स बाउंडेड होते हैं। Numeric-entity framing अंशों को चेक किए गए सर्वर नॉर्मलाइज़र क्रम के माध्यम से निष्क्रिय रखती है। पूरे varargs बैच पहले paid request से पहले तैयार और नॉर्मलाइज़ होते हैं, और निरीक्षण Jakarta Mail हेडर उत्पन्न नहीं करता है। एक रिकर्सिवली सटीक नेस्टेड रिस्पॉन्स आवश्यक है।
Magento Open Source mail adapter
0.1.1
केवल Magento Open Source 2.4.7-p5 और 2.4.7-p6 का समर्थन करता है, जिसमें सटीक अपरिवर्तनीय mail-interface स्रोतों की समीक्षा की गई है। ऑफ़लाइन टाइप्ड फिक्स्चर पास हो गए हैं, लेकिन कोई पूर्ण Magento इंस्टॉलेशन नहीं किया गया था; कोई अन्य Magento या Adobe Commerce रिलीज़ प्रमाणित नहीं है। स्थानीय ZIP को Composer पाथ रिपॉजिटरी के माध्यम से इंस्टॉल करें; यह Adobe Marketplace पैकेज नहीं है।
मॉड्यूल, सशुल्क सहमति और रूट सूचियाँ सभी डिफ़ॉल्ट रूप से बंद हैं। प्रत्येक टेम्पलेट पहचानकर्ता को दो स्वतंत्र सटीक अनुमोदनों की आवश्यकता होती है; इसकी क्रिटिकलिटी का अनुमान कभी भी इसके नाम से नहीं लगाया जाता है। aroundSendMessage प्लगइन संदेश को पुनर्गठित किए बिना अंतिम ट्रांसपोर्ट बाउंड्री पर विश्लेषण करता है। सलाहकार/अवरोधन थ्रेशोल्ड नीति और संरक्षण/अवरोधन विफलता नीति स्वतंत्र हैं; अवरोधन एक दृश्यमान Magento MailException उत्पन्न करता है। भुगतान से पहले एकाधिक प्रदर्शित MIME भाग और संदिग्ध सामग्री विफल हो जाती है।
Magento स्रोत ZIP डाउनलोड करें
पब्लिक सोर्स रिपॉजिटरी
पूर्ण README और उदाहरण
सुरक्षा नोट्स और ज्ञात सीमाएँ
1. इंस्टॉल करें
ZIP को एक सुरक्षित रखे गए (retained) पैकेज डायरेक्टरी में निकालें, इसके SendRepute_MailAdapter रूट को Composer path repository के रूप में पंजीकृत करें, संस्करण 0.1.1 की आवश्यकता (require) करें, फिर Magento की सामान्य मॉड्यूल इनेबल (module enable) और सेटअप अपग्रेड प्रक्रिया का उपयोग करें। इस स्थानीय संग्रह (local archive) को 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
विकल्प: सार्वजनिक स्रोत से इंस्टॉल करें
ऊपर दिए गए वेबसाइट डाउनलोड निर्देशों के बजाय इस स्रोत मार्ग का उपयोग करें। रिपॉजिटरी README शेष सक्रियण और कॉन्फ़िगरेशन चरणों की व्याख्या करता है; केवल ZIP बनाने से प्लगइन इंस्टॉल नहीं होता है। Python के लिए, दूसरा कमांड वैकल्पिक Django सपोर्ट जोड़ता है। क्रेडेंशियल को सर्वर सीक्रेट्स में रखें और सशुल्क सुविधाओं को सक्षम करने से पहले सुरक्षा नोटों की समीक्षा करें। केवल Node ही npm पर उपलब्ध है; सार्वजनिक GitHub रिपॉजिटरी का अर्थ WordPress.org, n8n Cloud, Packagist या PyPI प्रकाशन नहीं है।
git clone https://github.com/sendrepute/sendrepute-magento.git
cd sendrepute-magento
2. सुरक्षित रूप से कॉन्फ़िगर करें
SENDREPUTE_API_TOKEN को केवल PHP-FPM और CLI सर्वर वातावरण में सेट करें। Stores > Configuration > Services > SendRepute में, शुरू में मॉड्यूल और सशुल्क सहमति को बंद रखें। प्रत्येक सटीक टेम्पलेट पहचानकर्ता को दोनों स्वतंत्र मार्ग-अनुमोदन सूचियों में जोड़ें; नाम, जिनमें संख्यात्मक नाम भी शामिल हैं, कभी भी गंभीरता का संकेत नहीं देते हैं। सलाह/ब्लॉक, थ्रेशोल्ड और संरक्षित/ब्लॉक विफलता व्यवहार को अलग-अलग कॉन्फ़िगर करें।
export SENDREPUTE_API_TOKEN="replace-with-a-scoped-server-token"
# Then configure Stores > Configuration > Services > SendRepute.
3. सोच-समझकर उपयोग करें
Magento के सामान्य टेम्पलेट और ट्रांसपोर्ट फ्लो का उपयोग जारी रखें। रूट सहसंबंध (Route correlation), TransportBuilder के माध्यम से चुने गए सटीक पहचानकर्ता और स्टोर को रिकॉर्ड करता है, जबकि अंतिम aroundSendMessage प्लगइन उसी ट्रांसपोर्ट को कॉल करने से पहले आधिकारिक टाइप किए गए ईमेल और MIME इंटरफेस को पढ़ता है। बिल्डर की स्थिति finally में साफ़ हो जाती है, और बिल्डर/संदेश सहसंबंध object-keyed WeakMap प्रविष्टियों का उपयोग करते हैं ताकि एक परित्यक्त निर्मित (built) ट्रांसपोर्ट पुन: प्रयोज्य संख्यात्मक ऑब्जेक्ट-ID प्राधिकरण नहीं छोड़ सके। एडॉप्टर नया send तरीका (method) प्रदान नहीं करता है या संदेश को परिवर्तित (mutate) नहीं करता है।
परिणाम, विफलताएं और सीमाएं
केवल एक समर्थित प्रदर्शित MIME भाग स्वीकार किया जाता है; अटैचमेंट सुरक्षित रखे जाते हैं लेकिन विश्लेषण से बाहर रखे जाते हैं। कई प्रदर्शित भाग, असमर्थित ट्रांसफर एन्कोडिंग या चारसेट, स्ट्रीम, नेस्टेड MIME और अस्पष्ट नॉर्मलाइज़र टेक्स्ट भुगतान से पहले विफल हो जाते हैं। एक सत्यापित-HTTPS अनुरोध की समय सीमा और रिस्पॉन्स आकार सीमित होता है जिसमें कोई पुनः प्रयास (retry) या रीडायरेक्ट नहीं होता है। एक वैध नेस्टेड परिणाम थ्रेशोल्ड पर ब्लॉक हो सकता है; कॉन्फ़िगर किया गया fail-block Magento MailException उत्पन्न करता है।
.NET MailKit adapter
0.1.0
.NET 8 और MailKit/MimeKit 4.18.0 के लिए सटीक डिपेंडेंसी साक्ष्य की आवश्यकता है। यह एक एप्लिकेशन-स्वामित्व वाले IMailTransport के चारों ओर एक स्पष्ट रैपर है, न कि कोई ग्लोबल हुक, SMTP क्लाइंट या रिप्लेसमेंट ट्रांसपोर्ट। स्थानीय स्रोत ZIP को बिल्ड या रेफरेंस करें; किसी NuGet प्रकाशन का दावा नहीं किया गया है।
अडैप्टर और सशुल्क सहमति डिफ़ॉल्ट रूप से बंद हैं; सलाहकार और संरक्षण-सेंड स्वतंत्र डिफ़ॉल्ट हैं। AnalyzeAsync, AnalyzeThenSend या AnalyzeThenSendAsync के कॉल स्पष्ट हैं। महत्वपूर्ण सुरक्षा/अकाउंट मेल के लिए एक अलग प्रति-कॉल श्रेणी और सहमति की आवश्यकता होती है। प्रत्येक समर्थित प्रदर्शित plain/HTML विकल्प को एक ही सीमित अनुरोध में निष्क्रिय रूप से फ्रेम किया जाता है; असमर्थित, नेस्टेड, हस्ताक्षरित या एन्क्रिप्टेड सामग्री भुगतान से पहले विफल हो जाती है। मूल MimeMessage और रद्दीकरण टोकन मौजूदा ट्रांसपोर्ट तक केवल नीति की अनुमति के बाद ही पहुँचते हैं।
डाउनलोड करें .NET MailKit सोर्स ZIP
पब्लिक सोर्स रिपॉजिटरी
पूर्ण README और उदाहरण
सुरक्षा नोट्स और ज्ञात सीमाएँ
1. इंस्टॉल करें
स्रोत (source) ZIP को निकालें (extract) और उपयोग करने वाले .NET 8 प्रोजेक्ट से src/SendRepute.MailKit/SendRepute.MailKit.csproj को संदर्भित करें। रिस्टोर करने पर MailKit/MimeKit 4.18.0 प्राप्त होता है। यह स्रोत पैकेज स्थानीय और अप्रकाशित है; यह कोई 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
विकल्प: सार्वजनिक स्रोत से इंस्टॉल करें
ऊपर दिए गए वेबसाइट डाउनलोड निर्देशों के बजाय इस स्रोत मार्ग का उपयोग करें। रिपॉजिटरी README शेष सक्रियण और कॉन्फ़िगरेशन चरणों की व्याख्या करता है; केवल ZIP बनाने से प्लगइन इंस्टॉल नहीं होता है। Python के लिए, दूसरा कमांड वैकल्पिक Django सपोर्ट जोड़ता है। क्रेडेंशियल को सर्वर सीक्रेट्स में रखें और सशुल्क सुविधाओं को सक्षम करने से पहले सुरक्षा नोटों की समीक्षा करें। केवल Node ही npm पर उपलब्ध है; सार्वजनिक GitHub रिपॉजिटरी का अर्थ WordPress.org, n8n Cloud, Packagist या PyPI प्रकाशन नहीं है।
git clone https://github.com/sendrepute/sendrepute-dotnet.git
cd sendrepute-dotnet
2. सुरक्षित रूप से कॉन्फ़िगर करें
मौजूदा एप्लिकेशन के स्वामित्व वाले IMailTransport को SendReputeMailAdapter के साथ लपेटें (wrap)। सर्वर कॉन्फ़िगरेशन से API टोकन पढ़ें और समीक्षा किए जाने तक Enabled और PaidAnalysisConsent को false रखें। Advisory/block थ्रेशोल्ड और preserve/block विफलता सेटिंग्स स्वतंत्र हैं। एंडपॉइंट, TLS फ्लोर, एक-प्रयास (one-attempt) व्यवहार, समय सीमाएं और 1 MiB की सीमाएं स्थिर हैं।
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. सोच-समझकर उपयोग करें
केवल विश्लेषण के लिए AnalyzeAsync का उपयोग करें, या स्पष्ट भेजने से पहले के व्यवहार के लिए AnalyzeThenSend और AnalyzeThenSendAsync का उपयोग करें। कोई भी सामान्य या वैश्विक मेल पाथ इंटरसेप्ट नहीं किया जाता है। प्रत्येक चयनित ऑपरेशन पर सशुल्क सहमति और संदेश श्रेणी पास करें; महत्वपूर्ण सुरक्षा/खाता मेल के लिए अलग महत्वपूर्ण-सहमति सेटिंग आवश्यक है।
await adapter.AnalyzeThenSendAsync(message, new AnalysisConsent {
PaidAnalysisConsent = true,
Category = MessageCategory.Ordinary
}, cancellationToken);
परिणाम, विफलताएं और सीमाएं
वास्तविक MimeKit डिकोडिंग हर समर्थित प्रदर्शित प्लेन (plain) और HTML विकल्प (alternative) को निष्क्रिय फ्रेमिंग (inert framing) में इकट्ठा करता है जबकि प्राप्तकर्ताओं और अटैचमेंट्स को बाहर रखता है। Non-base64 बाहरी फ्रेमिंग और देर से डिकोड की गई इकाइयाँ (entities) सर्विस नॉर्मलाइज़ेशन (service normalization) से पहले CSS ब्रेसिज़, quoted-printable टेक्स्ट, base64 हेडर्स, पूर्ण-बॉडी base64 और मार्कअप को बेअसर कर देती हैं। असमर्थित, नेस्टेड (nested), हस्ताक्षरित (signed) या एन्क्रिप्टेड प्रदर्शित सामग्री भुगतान से पहले विफल हो जाती है। प्रत्येक आवश्यक रिस्पॉन्स फ़ील्ड टाइप्ड (typed) है; वैकल्पिक flaggedTermCount एक गैर-नकारात्मक पूर्णांक होना चाहिए और वैकल्पिक contentAudit को सार्वजनिक अनुबंध के विरुद्ध पूर्ण और पुनरावर्ती रूप से मान्य किया जाता है। सटीक मूल MimeMessage और cancellation token आपूर्ति किए गए ट्रांसपोर्ट तक तभी पहुँचते हैं जब स्वतंत्र स्कोर और विफलता नीतियाँ (failure policies) अनुमति देती हैं।
Zapier मैनुअल ड्राफ्ट विश्लेषण
0.2.0
मालिक द्वारा चुने गए ठीक तीन ड्राफ्ट स्ट्रिंग्स के भुगतान किए गए विश्लेषण को प्रदर्शित करने के लिए मैनुअल Zapier रेसिपी। यह कोई SendRepute Zapier ऐप, मार्केटप्लेस लिस्टिंग, इम्पोर्ट आर्टिफ़ैक्ट, pre-send adapter, प्रेषक, अनुमति/ब्लॉक रूट या संपूर्ण-संदेश क्लासिफायर नहीं है। Zapier Webhooks एक मालिक द्वारा संचालित सीमित HTTPS प्रॉक्सी का उपयोग करता है क्योंकि SendRepute टोकन Zap में प्रवेश नहीं करना चाहिए।
दो कंपाइल-टाइम स्थिरांक (constants) HTTP से पहले डिफ़ॉल्ट रूप से फ़ॉल्स होते हैं। Zap केवल प्रेषक का नाम (display name), विषय और बॉडी को मैप करता है, शामिल मालिक-प्रॉक्सी डिज़ाइन पर JSON पोस्ट करता है, नेस्टेड प्रतिक्रिया को पूरी तरह से मान्य करता है, फिर एक निजी समीक्षा चरण में advisory और बिलिंग फ़ील्ड प्रदर्शित करता है। इसमें प्रेषक, Paths एन्फोर्समेंट, Autoreplay या failure-preserve रूट नहीं जोड़ा जाना चाहिए; विफल Code या Webhook चरण रुक जाते हैं।
डाउनलोड करें Zapier और Make रेसिपी ZIP
पब्लिक सोर्स रिपॉजिटरी
पूर्ण README और उदाहरण
सुरक्षा नोट्स और ज्ञात सीमाएँ
1. इंस्टॉल करें
साझा किया गया 0.2.0 रेसिपी स्रोत डाउनलोड करें और निकालें। शामिल ज़ैपियर (Zapier) गाइड पढ़ें और शामिल लूपबैक Node प्रॉक्सी को केवल स्वामी-प्रबंधित (owner-managed) HTTPS रिवर्स प्रॉक्सी के पीछे तैनात करें। यह पैकेज इसे तैनात नहीं करता है। कोई SendRepute Zapier ऐप या आयात करने योग्य Zap आर्टिफैक्ट नहीं है।
curl -fLO https://www.sendrepute.com/downloads/sendrepute-automation-recipes.zip
unzip sendrepute-automation-recipes.zip
cd sendrepute-automation-recipes
विकल्प: सार्वजनिक स्रोत से इंस्टॉल करें
ऊपर दिए गए वेबसाइट डाउनलोड निर्देशों के बजाय इस स्रोत मार्ग का उपयोग करें। रिपॉजिटरी README शेष सक्रियण और कॉन्फ़िगरेशन चरणों की व्याख्या करता है; केवल ZIP बनाने से प्लगइन इंस्टॉल नहीं होता है। Python के लिए, दूसरा कमांड वैकल्पिक Django सपोर्ट जोड़ता है। क्रेडेंशियल को सर्वर सीक्रेट्स में रखें और सशुल्क सुविधाओं को सक्षम करने से पहले सुरक्षा नोटों की समीक्षा करें। केवल Node ही npm पर उपलब्ध है; सार्वजनिक GitHub रिपॉजिटरी का अर्थ WordPress.org, n8n Cloud, Packagist या PyPI प्रकाशन नहीं है।
git clone https://github.com/sendrepute/sendrepute-automation.git
cd sendrepute-automation
2. सुरक्षित रूप से कॉन्फ़िगर करें
Zap को बंद रखें। सटीक preflight Code स्रोत में, ENABLED और PAID_CONSENT दोनों तब तक false रहते हैं जब तक सशुल्क उपयोग (paid use) की समीक्षा नहीं हो जाती। स्वामी (owner) प्रॉक्सी, SENDREPUTE_API_TOKEN को स्टोर करता है; Zap को SENDREPUTE_PROXY_CREDENTIALS से केवल एक अलग से रद्द करने योग्य (revocable) क्रेडेंशियल प्राप्त होता है। एडिटर्स और टास्क हिस्ट्री इसे उजागर कर सकते हैं, इसलिए इसे प्रतिबंधित, रोटेट (rotate) और रद्द (revoke) करें। प्रति-क्रेडेंशियल (per-credential) टोकन-बकेट और समवर्ती सीमाएं (concurrency limits), वैश्विक कनेक्शन/समवर्ती कैप्स, एक स्थायी स्वामी-निर्धारित दैनिक सशुल्क-कॉल बजट, प्रतिबंधात्मक अपस्ट्रीम खर्च सीमाएं, और मेल खाने वाले TLS-टर्मिनेटर आकार/दर/समय सीमा नियंत्रण कॉन्फ़िगर करें। Autoreplay सक्षम न करें।
// In zapier/preflight.js; review charges before changing either literal.
const ENABLED = false;
const PAID_CONSENT = false;
3. सोच-समझकर उपयोग करें
स्टेप्स को मैन्युअल रूप से बनाएँ: ड्राफ्ट ट्रिगर; केवल प्रेषक (sender), विषय (subject) और मुख्य भाग (body) की मैपिंग करने वाला preflight Code; स्वामी के प्रॉक्सी को JSON पंक्तियों के साथ Webhooks POST; रिस्पॉन्स-सत्यापन Code; निजी समीक्षा प्रदर्शन। कभी भी कच्चे (raw) JSON को मैन्युअल रूप से इंटरपोलेट न करें। केवल requestId, model, label, spamProbability और बिलिंग प्रदर्शित करें; कोई मेल क्रिया (mail action) या Paths निर्णय न जोड़ें।
{
"sender": "Mapped draft sender display name",
"subject": "Mapped draft subject",
"body": "Mapped draft body"
}
परिणाम, विफलताएं और सीमाएं
रेसिपी केवल तीन मैप की गई स्ट्रिंग्स का विश्लेषण करती है; मैप न किए गए MIME, HTML विकल्प, अटैचमेंट और संभावित आउटबाउंड सामग्री विश्लेषण रहित रहते हैं। रूढ़िवादी प्रीफ्लाइट (conservative preflight) ज्ञात नॉर्मलाइज़र ट्रिगर्स को अस्वीकार करता है लेकिन संपूर्ण-संदेश कवरेज (whole-message coverage) को सिद्ध नहीं करता है। प्रॉक्सी दर, समवर्ती (concurrency) और दैनिक-बजट सीमाएं अपस्ट्रीम से पहले अस्वीकार कर देती हैं, और बजट आरक्षण सशुल्क प्रयास (paid attempt) से पहले बना रहता है; प्रति बजट फ़ाइल एक प्रॉक्सी प्रक्रिया चलाएँ। प्रॉक्सी एक सीमित निश्चित-HTTPS प्रयास करता है। कोई भी non-200 या अधूरा सटीक रिस्पॉन्स थ्रो (throw) करता है और रुक जाता है; कोई सुरक्षित (preserve), Resume या स्थानापन्न (substitute) परिणाम नहीं है।
Make मैनुअल ड्राफ्ट विश्लेषण
0.2.0
ठीक तीन चुनिंदा ड्राफ्ट स्ट्रिंग्स के paid analysis को प्रदर्शित करने के लिए मैनुअल Make परिदृश्य निर्देश। यह कोई ब्लूप्रिंट, स्वीकृत SendRepute ऐप, मेल सेंडर, प्रवर्तन मार्ग या अनमैप्ड MIME, HTML, अटैचमेंट या संभावित आउटबाउंड सामग्री के बारे में दावा नहीं है। बियरर टोकन केवल Make HTTP के सुरक्षित कीचेन में रहता है।
Persisted ENABLED और paidConsent बूलियन डिफ़ॉल्ट रूप से फ़ॉल्स (false) होते हैं और एक AND फ़िल्टर HTTP से पहले रुक जाता है। JSON, Make के JSON मॉड्यूल द्वारा निर्मित होता है और HTTP मॉड्यूल द्वारा एक बार भेजा जाता है जिसमें रीडायरेक्ट और रिट्राइ अक्षम होते हैं। एक रिस्पॉन्स फ़िल्टर केवल एक डिस्प्ले गार्ड है, पूर्ण सत्यापन या भेजने की अनुमति नहीं। HTTP विफलताओं में Break का उपयोग होता है, कभी भी Resume या वैकल्पिक आउटपुट का नहीं।
Zapier और Make रेसिपी ZIP डाउनलोड करें
पब्लिक सोर्स रिपॉजिटरी
पूर्ण README और उदाहरण
सुरक्षा नोट्स और ज्ञात सीमाएँ
1. इंस्टॉल करें
साझा 0.2.0 रेसिपी स्रोत डाउनलोड करें और निकालें, फिर शामिल Make गाइड का पालन करके वर्तमान नेटिव मॉड्यूल मैन्युअल रूप से तैयार करें। किसी ब्लूप्रिंट, मार्केटप्लेस ऐप या आयात (import) फॉर्मेट का दावा नहीं किया गया है। मॉक एंडपॉइंट के विरुद्ध परीक्षण करते समय परिदृश्य शेड्यूलिंग (scenario scheduling) को बंद रखें।
curl -fLO https://www.sendrepute.com/downloads/sendrepute-automation-recipes.zip
unzip sendrepute-automation-recipes.zip
cat sendrepute-automation-recipes/make/README.md
विकल्प: सार्वजनिक स्रोत से इंस्टॉल करें
ऊपर दिए गए वेबसाइट डाउनलोड निर्देशों के बजाय इस स्रोत मार्ग का उपयोग करें। रिपॉजिटरी README शेष सक्रियण और कॉन्फ़िगरेशन चरणों की व्याख्या करता है; केवल ZIP बनाने से प्लगइन इंस्टॉल नहीं होता है। Python के लिए, दूसरा कमांड वैकल्पिक Django सपोर्ट जोड़ता है। क्रेडेंशियल को सर्वर सीक्रेट्स में रखें और सशुल्क सुविधाओं को सक्षम करने से पहले सुरक्षा नोटों की समीक्षा करें। केवल Node ही npm पर उपलब्ध है; सार्वजनिक GitHub रिपॉजिटरी का अर्थ WordPress.org, n8n Cloud, Packagist या PyPI प्रकाशन नहीं है।
git clone https://github.com/sendrepute/sendrepute-automation.git
cd sendrepute-automation
2. सुरक्षित रूप से कॉन्फ़िगर करें
स्थिर बुलियन Tools वेरिएबल्स enabled=false और paidConsent=false बनाएं, और इसके बाद एक AND फिल्टर लगाएं जिसमें दोनों का true होना आवश्यक हो। ठीक प्रेषक, विषय और मुख्य भाग के लिए JSON > Create JSON का उपयोग करें। SendRepute बियरर टोकन को केवल HTTP ऐप सुरक्षित कीचेन (secure keychain) में स्टोर करें; एक्सपोर्ट किए गए परिदृश्यों (scenarios) में कोई क्रेडेंशियल नहीं होना चाहिए।
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. सोच-समझकर उपयोग करें
फिक्स्ड classify URL के लिए एक HTTP POST कॉन्फ़िगर करें। Body प्रकार Raw और application/json content-type कंट्रोल चुनें, बिना किसी विरोधाभासी फ्री-टेक्स्ट हेडर को जोड़े, फिर JSON > Create JSON से सीरियलाइज्ड आउटपुट को मैप करें। पार्स किए गए रिस्पॉन्स को सक्षम करें, रीडायरेक्ट्स को अक्षम करें, 10-सेकंड का टाइमआउट सेट करें, और कोई रिपीटर या स्वचालित पुनः प्रयास न जोड़ें। मॉड्यूल की 1 MiB रिस्पॉन्स सीमा की आवश्यकता है; यदि उपलब्ध न हो, तो इसके बजाय स्वामी-नियंत्रित (owner-controlled) बाउंडेड प्रॉक्सी का उपयोग करें। Minimal display guard के बाद केवल एक निजी समीक्षा डिस्प्ले जोड़ें—कभी भी सेंडर या allow/block राउटर नहीं।
{
"sender": "Mapped draft sender display name",
"subject": "Mapped draft subject",
"body": "Mapped draft body"
}
परिणाम, विफलताएं और सीमाएं
केवल मैप की गई स्ट्रिंग्स का विश्लेषण किया जाता है; सामान्यीकरण (normalization) किसी मूल या आउटबाउंड ईमेल के साथ पहचान (identity) नहीं है। रिस्पॉन्स फ़िल्टर केवल स्टेटस और मुख्य रिज़ल्ट/बिलिंग की उपस्थिति की जांच करता है और यह स्पष्ट रूप से पूर्ण स्कीमा सत्यापन या प्रवर्तन नहीं है। HTTP त्रुटियाँ Break का उपयोग करती हैं ताकि बाद के एक्शन न चलें; कभी भी Resume, मनगढ़ंत आउटपुट या विफलता-बचाव (failure-preserve) रूट का उपयोग न करें।
Node.js SDK
0.1.1
Node.js 18.17+ के लिए केवल सर्वर-साइड SDK। npm से @sendrepute/node इंस्टॉल करें या डाउनलोड करने योग्य tarball का उपयोग करें। वैकल्पिक Nodemailer एडॉप्टर आपके मौजूदा ट्रांसपोर्ट को सुरक्षित रखता है। अपने सर्वर वातावरण में एक scoped API key और एक स्पष्ट API base URL सेट करें, ब्राउज़र कोड में कभी नहीं।
स्ट्रीम स्टेज पर createSendReputePlugin रजिस्टर करें, मूल्य निर्धारण की समीक्षा करने और सशुल्क विश्लेषण सहमति को जानबूझकर सक्षम करने के बाद ही। सलाहकार मोड डिलीवरी को रोके बिना निष्कर्षों की रिपोर्ट करता है। अवरोधन मोड spamProbabilityThreshold लागू करता है; onApiFailure विकल्प allow या block चुनता है, जबकि बदला हुआ मूल्य अस्वीकरण हमेशा डिलीवरी को रोकता है। वर्गीकरण एक सशुल्क API ऑपरेशन है।
Node.js tarball डाउनलोड करें
पब्लिक सोर्स रिपॉजिटरी
पूर्ण README और उदाहरण
सुरक्षा नोट्स और ज्ञात सीमाएँ
सत्यापित npm पैकेज देखें
1. इंस्टॉल करें
सत्यापित npm पैकेज @sendrepute/node संस्करण 0.1.1 है; रजिस्ट्री इंस्टॉल को @sendrepute/node@0.1.1 पर पिन करें। वेबसाइट टारबॉल और पिन की गई सार्वजनिक रिपॉजिटरी 0.1.1 रिलीज़ स्रोत और बिल्ड प्रदान करती है। Nodemailer वैकल्पिक है और केवल ट्रांसपोर्ट एडॉप्टर के लिए आवश्यक है। SDK खाते, कैटलॉग, वर्गीकरण, AI और बिल्डर्स के लिए टाइप्ड ग्राहक API अनुरोधों का समर्थन करता है। इसका उपयोग Node.js सर्वर में करें, ब्राउज़र बंडल में कभी नहीं।
npm install @sendrepute/node nodemailer
विकल्प: सार्वजनिक स्रोत से इंस्टॉल करें
ऊपर दिए गए वेबसाइट डाउनलोड निर्देशों के बजाय इस स्रोत मार्ग का उपयोग करें। रिपॉजिटरी README शेष सक्रियण और कॉन्फ़िगरेशन चरणों की व्याख्या करता है; केवल ZIP बनाने से प्लगइन इंस्टॉल नहीं होता है। Python के लिए, दूसरा कमांड वैकल्पिक Django सपोर्ट जोड़ता है। क्रेडेंशियल को सर्वर सीक्रेट्स में रखें और सशुल्क सुविधाओं को सक्षम करने से पहले सुरक्षा नोटों की समीक्षा करें। केवल Node ही npm पर उपलब्ध है; सार्वजनिक GitHub रिपॉजिटरी का अर्थ WordPress.org, n8n Cloud, Packagist या PyPI प्रकाशन नहीं है।
npm install @sendrepute/node@0.1.1
npm install nodemailer
2. सुरक्षित रूप से कॉन्फ़िगर करें
अपने सर्वर सीक्रेट स्टोर से SENDREPUTE_API_KEY इंजेक्ट करें और होस्ट किए गए कस्टमर API के लिए नीचे स्पष्ट base URL सेट करें। सीक्रेट्स को कमांड, सोर्स फाइल या लॉग में पेस्ट न करें। केवल उन्हीं स्कोप्स को अनुमति दें जिनकी आपके कार्यों के लिए आवश्यकता है। सेटअप स्थानीय रेंडरिंग ट्रांसपोर्ट का उपयोग करता है, SMTP का नहीं; सशुल्क प्रयासों को सोच-समझकर करने के लिए यहाँ maxRetries को शून्य पर सेट किया गया है।
export SENDREPUTE_API_BASE_URL=https://www.sendrepute.com/api
Nodemailer सेटअप
यह उदाहरण एक स्थानीय रेंडरिंग ट्रांसपोर्ट को कॉन्फ़िगर करता है और sendMail को कॉल नहीं करता है। कॉन्फ़िगर किए गए प्लगिन के माध्यम से भेजना एक पेड विश्लेषण करता है। तैयार होने पर ही स्थानीय ट्रांसपोर्ट को अपने मौजूदा SMTP ट्रांसपोर्ट से बदलें।
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. सोच-समझकर उपयोग करें
ऊपर दिए गए सेटअप से क्लाइंट का उपयोग करें। सहमति क्रिया (consent action) प्रदर्शित करने से पहले खाता और वर्तमान मूल्य निर्धारण पढ़ें। पुष्टि के बाद ही प्रमाणित सर्वर एक्शन से classifyAfterConsent को इनवोक करें; यह टाइप्ड क्लासिफिकेशन और बिलिंग प्रतिक्रिया देता है। कॉन्फ़िगर किए गए Nodemailer प्लगइन के माध्यम से भेजना भी एक सशुल्क क्लासिफिकेशन क्रिया है। एडॉप्टर को paidAnalysisConsent: true चाहिए और पंजीकरण से पहले किसी अन्य मान को अस्वीकार करता है; इसे प्राधिकरण के बाद ही सेट करें।
// 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", {}),
]);
}
Standard और native VIP builders
निःशुल्क मानक बिल्डर MJML को HTML, MJML या दोनों के ZIP के रूप में आयात, मान्य, संकलित और निर्यात करता है। अलग नेटिव VIP बिल्डर अपने स्वयं के दस्तावेज़ प्रारूप का उपयोग करता है, MJML का नहीं: इसके आयात, सत्यापन, संकलन और निर्यात संचालन के लिए सक्रिय सदस्यता और स्वामित्व वाले ओपन एक्सेस पात्रता की आवश्यकता होती है, और इसके ZIP में तीन HTML CSS वेरिएंट होते हैं। वैकल्पिक AI जेनरेशन अलग से सशुल्क है, जो एक संपादन योग्य मानक MJML या नेटिव VIP डिज़ाइन तैयार करता है; वर्तमान प्रभावी मूल्य निर्धारण दिखाएं और पुष्टि किए गए expectedPriceMillicents पास करें, कभी भी हार्ड-कोडेड मूल्य नहीं। ZIP प्रतिक्रियाओं में archiveBase64 होता है, html फ़ील्ड नहीं: decodeExportBytes आपके एप्लिकेशन को सहेजने के लिए बाइट्स लौटाता है। ये प्रोसेसिंग एंडपॉइंट एसेट प्राप्त नहीं करते हैं, डिज़ाइन को सुरक्षित नहीं रखते हैं या ईमेल नहीं भेजते हैं।
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 },
});
}
यह और क्या कर सकता है?
जनरेटेड ऑपरेशन आईडी में अकाउंट और प्राइसिंग रीड्स, क्लासिफिकेशन और मैन्युअल एडिट्स, AI रीराइट/टेम्पलेट जनरेशन, VIP प्लान/स्टेटस/खरीदारी, नेटिव टेम्पलेट्स/एक्सेस पात्रता और स्टेटलेस स्टैंडर्ड/नेटिव इम्पोर्ट/एक्सपोर्ट शामिल हैं। प्रत्येक अनुरोध प्रकार, आवश्यक स्कोप और वर्तमान मूल्य के लिए सोर्स उदाहरण और कस्टमर API संदर्भ देखें। कैटलॉग रीड्स एक्सेस नहीं खरीदते हैं। नई सशुल्क क्षमताओं के लिए जानबूझकर स्कोप किए गए टोकन और स्पष्ट UI पुष्टि की आवश्यकता होती है।
परिणाम, विफलताएं और सीमाएं
SendReputeError status, code और requestId को एक्सपोज करता है; केवल उसी सुरक्षित ऑपरेशनल मेटाडेटा को बनाए रखें। बॉडी, प्रॉम्प्ट, हेडर या पूर्ण रिस्पॉन्स को कभी भी लॉग न करें। AbortSignal काम को रद्द करता है; timeoutMs प्रति प्रयास लागू होता है। Bounded retries ऑपरेशन-जागरूक हैं और रसीद सुरक्षा समय-सीमित है, न कि असीमित ठीक-एक-बार बिलिंग। Advisory Nodemailer मोड बिना ब्लॉक किए रिपोर्ट करता है; ब्लॉकिंग spamProbabilityThreshold और onApiFailure का स्वतंत्र रूप से उपयोग करता है। अपने वास्तविक ट्रांसपोर्ट को अलग से सुरक्षित रखें और उसका परीक्षण करें।
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;
}
}
API और मेथड रेफरेंस
SendReputeClient के लिए apiKey और baseUrl आवश्यक हैं; वैकल्पिक timeoutMs का डिफॉल्ट मान 30000 (अधिकतम 300000) है, maxRetries का डिफॉल्ट मान 2 (रेंज 0–10) है, और fetch एक संगत सर्वर कार्यान्वयन स्वीकार करता है। request(operationId, input, { signal }) ऑपरेशन का टाइप्ड रिस्पॉन्स लौटाता है; input में इसकी बॉडी, पाथ और/या क्वेरी फ़ील्ड होते हैं। अमान्य कॉन्फ़िगरेशन TypeError उत्पन्न करता है; API विफलताओं के लिए status, code, requestId और retryAfterMs के साथ SendReputeError का उपयोग किया जाता है। decodeExportBytes एक ZIP एक्सपोर्ट को Uint8Array में बदलता है और गैर-ZIP या अमान्य base64 इनपुट को अस्वीकार करता है। TypeScript कॉलर्स के लिए OperationInput, OperationResponse और जनरेटेड स्कीमा टाइप्स एक्सपोर्ट किए जाते हैं।
विकल्प: एक लो-लेवल Nodemailer ट्रांसपोर्ट को रैप करें
createSendReputeTransport(existingTransport, options) एक मौजूदा ट्रांसपोर्ट ऑब्जेक्ट को send, वैकल्पिक close और verify मेथड्स के साथ रैप करता है; यह sendMail ट्रांसपोर्टर नहीं है। डबल विश्लेषण से बचने के लिए इसे या createSendReputePlugin चुनें, दोनों नहीं। दोनों ही client और policy के साथ वैकल्पिक model, sender string/resolver, signal और onDiagnostic लेते हैं। Diagnostic कॉलबैक डिलीवरी को नहीं बदल सकते। SendReputeNodemailerError कोड अमान्य policy/message, असमर्थित कंटेंट, spam ब्लॉक्स और API-failure ब्लॉक्स में अंतर करते हैं। प्रकाशित npm 0.1.1 पैकेज और वेबसाइट 0.1.1 डाउनलोड सभी प्रदर्शित इन-मेमोरी text/plain और text/html विकल्पों को एक बाउंडेड क्लासिफिकेशन रिक्वेस्ट में संयोजित करते हैं; ब्लॉकिंग मोड में वे असमर्थित प्रदर्शित विकल्पों को रिजेक्ट कर देते हैं। Raw मैसेजेस, स्ट्रीम्स, पाथ और URLs अभी भी असमर्थित हैं।
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);
},
});
}
सभी 49 कस्टमर API ऑपरेशन्स
सटीक SDK इनपुट टाइप, रिटर्न टाइप, स्कोप और डॉक्युमेंटेड HTTP स्टेटस देखने के लिए ऑपरेशन को विस्तार से देखें। schema लिंक कस्टमर API रेफरेंस में इसके पूर्ण पैरामीटर्स, रिस्पांस फील्ड्स और उदाहरण खोलता है। ये रैपर्स ऊपर कॉन्फ़िगर किए गए क्लाइंट का उपयोग करते हैं; पुष्टि आवश्यक है और कुछ भी स्वचालित रूप से निष्पादित नहीं होता है। Read ऑपरेशंस खरीदारी को अधिकृत नहीं करते हैं। Mutations, भुगतान, एक्सेस क्लोजर और सशुल्क AI के लिए संबंधित जानबूझकर किए गए अकाउंट एक्शन की आवश्यकता होती है।
एक एग्रीगेट कैंपेन इनसाइट्स विश्लेषण के लिए कोटेशन दें
POST /v1/campaign-insights/quote
आवश्यक स्कोप: ai:generate
इनपुट: { body: CustomerCampaignInsightsQuoteInput; }
रिटर्न: CustomerCampaignInsightsQuote
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 429, 503
पैरामीटर्स, स्कीमा और 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.
AI के साथ एग्रीगेट कैंपेन डिलीवरी मेट्रिक्स का विश्लेषण करें
POST /v1/campaign-insights/analyze
आवश्यक स्कोप: ai:generate
इनपुट: { body: CustomerCampaignInsightsAnalyzeInput; }
रिटर्न: CustomerCampaignInsightsAnalysis
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 402, 403, 409, 413, 429, 502, 503
पैरामीटर्स, स्कीमा और 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 });
}
कस्टमर API क्लासीफायर मॉडल की सूची बनाएं
GET /v1/models
आवश्यक स्कोप: models:read
इनपुट: Record<string, never>
रिटर्न: CustomerApiModelsResponse
डॉक्युमेंटेड HTTP स्टेटस: 200, 401, 403, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
ग्राहक API उपयोग और सीमाएं प्राप्त करें
GET /v1/usage
आवश्यक स्कोप: usage:read
इनपुट: Record<string, never>
रिटर्न: CustomerApiUsageResponse
डॉक्युमेंटेड HTTP स्टेटस: 200, 401, 403, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
एक ग्राहक ईमेल को वर्गीकृत करें
POST /v1/classify
आवश्यक स्कोप: classify
इनपुट: { body: CustomerClassificationInput; }
रिटर्न: CustomerClassificationResponse
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 402, 403, 409, 413, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
वर्तमान खाता और शेष राशि प्राप्त करें
GET /v1/account
आवश्यक स्कोप: account:read
इनपुट: Record<string, never>
रिटर्न: Account
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
वर्तमान खाते का रेफरल लिंक और रिवॉर्ड गतिविधि प्राप्त करें
GET /v1/account/referrals
आवश्यक स्कोप: account:read
इनपुट: { query?: { page?: number; pageSize?: number; }; }
रिटर्न: ReferralDashboard
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
वर्तमान खाता क्रेडिट लेजर सूचीबद्ध करें
GET /v1/account/ledger
आवश्यक स्कोप: billing:read
इनपुट: { query?: { kind?: "usage" | "payments"; limit?: number; offset?: number; }; }
रिटर्न: Array<CreditLedgerEntry>
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
वर्तमान खाता Bitcoin चालान सूचीबद्ध करें
GET /v1/payments/invoices
आवश्यक स्कोप: billing:read
इनपुट: { query?: { limit?: number; offset?: number; }; }
रिटर्न: Array<BitcoinInvoice>
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
एक USD-मूल्यवर्ग का Bitcoin जमा चालान बनाएं
POST /v1/payments/invoices
आवश्यक स्कोप: billing:write
इनपुट: { body: InvoiceInput; }
रिटर्न: BitcoinInvoice
डॉक्युमेंटेड HTTP स्टेटस: 201, 400, 401, 402, 403, 404, 409, 413, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
एक भुगतान न किए गए Bitcoin चालान को छिपाएं
DELETE /v1/payments/invoices/{invoiceId}
आवश्यक स्कोप: billing:write
इनपुट: { path: { invoiceId: string; }; }
रिटर्न: undefined
डॉक्युमेंटेड HTTP स्टेटस: 204, 400, 401, 402, 403, 404, 409, 413, 429, 503
पैरामीटर्स, स्कीमा और 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
आवश्यक स्कोप: billing:read
इनपुट: Record<string, never>
रिटर्न: Array<PaymentMethod>
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
वर्तमान में सक्रिय Bitcoin जमा बोनस ऑफ़र प्राप्त करें
GET /v1/payments/deposit-offer
आवश्यक स्कोप: billing:read
इनपुट: Record<string, never>
रिटर्न: DepositBonusOffer | null
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
वर्तमान खाता चालान के लिए पुष्टिकरणों को रीफ्रेश करें
POST /v1/payments/refresh
आवश्यक स्कोप: billing:write
इनपुट: Record<string, never>
रिटर्न: Array<BitcoinInvoice>
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
वर्तमान सार्वजनिक विश्लेषण और संपादन कीमतें प्राप्त करें
GET /v1/pricing
आवश्यक स्कोप: catalog:read
इनपुट: Record<string, never>
रिटर्न: PricingSettings
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
वर्तमान सार्वजनिक VIP उद्धरण और तुलनात्मक मूल्य प्राप्त करें
GET /v1/vip/plans
आवश्यक स्कोप: catalog:read
इनपुट: Record<string, never>
रिटर्न: VipPlanQuote
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 429, 503
पैरामीटर्स, स्कीमा और 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
आवश्यक स्कोप: vip:read
इनपुट: Record<string, never>
रिटर्न: VipState
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 429, 503
पैरामीटर्स, स्कीमा और 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
आवश्यक स्कोप: vip:purchase
इनपुट: { body: CustomerVipPurchaseInput; }
रिटर्न: VipPurchaseResult
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
एक संपादन का उद्धरण दें और सहेजे गए वर्गीकरण के विरुद्ध पुन: जाँच करें
POST /v1/rewrite/quote
आवश्यक स्कोप: rewrite
इनपुट: { body: EditQuoteInput; }
रिटर्न: EditQuote
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
एक संपादन का उद्धरण दें और सहेजे गए वर्गीकरण के विरुद्ध पुन: जाँच करें
POST /v1/classify/edit/quote
आवश्यक स्कोप: classify
इनपुट: { body: EditQuoteInput; }
रिटर्न: EditQuote
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
प्रेषक का नाम, विषय और मुख्य भाग (body) का उपयोग करके ईमेल को वर्गीकृत करें
POST /v1/classify/edit
आवश्यक स्कोप: classify
इनपुट: { body: CustomerManualEditInput; }
रिटर्न: CustomerManualEditResult
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
चिह्नित किए गए शब्दों को अलग से भुगतान किए गए AI से दोबारा लिखवाने और परिणाम को पुन: वर्गीकृत करने का अनुरोध करें
POST /v1/rewrite
आवश्यक स्कोप: rewrite
इनपुट: { body: CustomerAiRewriteInput; }
रिटर्न: AiRewriteResult
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 402, 403, 404, 409, 413, 429, 502, 503
पैरामीटर्स, स्कीमा और 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 });
}
बिना किसी अन्य शुल्क के खरीदे गए 'Rewrite All' रसीद के मुकाबले एक सटीक रेंडर किए गए अंतिम ड्राफ्ट को सत्यापित करें
POST /v1/rewrite/finalize
आवश्यक स्कोप: rewrite
इनपुट: { body: { requestId: string; sender: string; subject: string; body: string; }; }
रिटर्न: { requestId: string; input: RewrittenClassificationInput; classification: ClassificationResult; }
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
खरीदी गई पूर्ण AI रीराइट रसीद वापस प्राप्त करें
GET /v1/rewrite/result/{requestId}
आवश्यक स्कोप: rewrite
इनपुट: { path: { requestId: string; }; }
रिटर्न: AiRewriteResult
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
अलग से भुगतान किए गए AI रीराइट की अधिकतम अधिकृत कीमत को कोट करें
POST /v1/rewrite/ai-quote
आवश्यक स्कोप: rewrite
इनपुट: { body: AiRewriteQuoteInput; }
रिटर्न: AiRewriteQuote
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
पुष्टि की गई खाता कीमत पर AI के साथ एक संपादन योग्य मानक MJML ईमेल डिज़ाइन तैयार करें
POST /v1/email-builder/ai-template
आवश्यक स्कोप: ai:generate
इनपुट: { body: CustomerAiEmailTemplateInput; }
रिटर्न: AiEmailTemplateResult
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 402, 403, 404, 409, 413, 429, 502, 503
पैरामीटर्स, स्कीमा और 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 });
}
पुष्टि की गई सदस्य कीमत पर AI के साथ एक संपादन योग्य नेटिव VIP ईमेल डिज़ाइन तैयार करें
POST /v1/vip/email-template
आवश्यक स्कोप: ai:generate
इनपुट: { body: CustomerVipEmailTemplateInput; }
रिटर्न: CustomerVipEmailTemplateResult
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 402, 403, 404, 409, 413, 429, 502, 503
पैरामीटर्स, स्कीमा और 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 });
}
एक मानक ईमेल डिज़ाइन संपादक सत्र मुफ़्त में खोलें
POST /v1/email-builder/access
आवश्यक स्कोप: builder:write
इनपुट: { body: CustomerEmailBuilderAccessInput; }
रिटर्न: EmailBuilderAccess
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
पैरामीटर्स, स्कीमा और 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}
आवश्यक स्कोप: builder:read
इनपुट: { query?: { designId?: string; }; path: { accessId: string; }; }
रिटर्न: EmailBuilderActiveAccess
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 429, 503
पैरामीटर्स, स्कीमा और 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}
आवश्यक स्कोप: builder:write
इनपुट: { path: { accessId: string; }; }
रिटर्न: undefined
डॉक्युमेंटेड HTTP स्टेटस: 204, 400, 401, 402, 403, 404, 409, 413, 429, 503
पैरामीटर्स, स्कीमा और 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
आवश्यक स्कोप: vip:builder
इनपुट: { body: CustomerVipBuilderAccessInput; }
रिटर्न: VipBuilderAccess
डॉक्युमेंटेड HTTP स्टेटस: 201, 400, 401, 402, 403, 404, 409, 413, 429, 503
पैरामीटर्स, स्कीमा और 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}
आवश्यक स्कोप: builder:read
इनपुट: { path: { accessId: string; }; }
रिटर्न: VipBuilderAccess
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 429, 503
पैरामीटर्स, स्कीमा और 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}
आवश्यक स्कोप: vip:builder
इनपुट: { path: { accessId: string; }; }
रिटर्न: undefined
डॉक्युमेंटेड HTTP स्टेटस: 204, 400, 401, 402, 403, 404, 409, 413, 429, 503
पैरामीटर्स, स्कीमा और 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}
आवश्यक स्कोप: authenticated original credential
इनपुट: { path: { recoveryId: string; }; }
रिटर्न: { 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; }; }
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 429, 503
पैरामीटर्स, स्कीमा और 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
आवश्यक स्कोप: authenticated credential
इनपुट: Record<string, never>
रिटर्न: { accountId: string; credentialId: string; }
डॉक्युमेंटेड HTTP स्टेटस: 200, 401, 403, 429, 503
पैरामीटर्स, स्कीमा और 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
आवश्यक स्कोप: original ai:generate or vip:builder service scope
इनपुट: { body: { action: "resolve"; reason: string; }; path: { recoveryId: string; }; }
रिटर्न: { 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; }; }
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
बिना सहेजे या भेजे मानक MJML डिज़ाइन को इम्पोर्ट और कंपाइल करें
POST /v1/email-builder/import
आवश्यक स्कोप: builder:write
इनपुट: { body: CustomerStandardBuilderInput; }
रिटर्न: CustomerStandardBuilderImportResult
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 413, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
बिना सहेजे या भेजे मानक MJML डिज़ाइन को वैलिडेट और कंपाइल करें
POST /v1/email-builder/validate
आवश्यक स्कोप: builder:write
इनपुट: { body: CustomerStandardBuilderInput; }
रिटर्न: CustomerStandardBuilderValidateResult
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 413, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
बिना सहेजे या भेजे मानक MJML डिज़ाइन को HTML में कंपाइल करें
POST /v1/email-builder/compile
आवश्यक स्कोप: builder:write
इनपुट: { body: CustomerStandardBuilderInput; }
रिटर्न: CustomerStandardBuilderCompileResult
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 413, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
सक्रिय रूप से भेजे बिना एक मानक MJML डिज़ाइन को HTML, MJML या ZIP के रूप में एक्सपोर्ट करें
POST /v1/email-builder/export
आवश्यक स्कोप: builder:write
इनपुट: { body: CustomerStandardBuilderInput; }
रिटर्न: CustomerStandardBuilderExportResult
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 413, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
सक्रिय सदस्यता और स्वामित्व वाले ओपन एक्सेस के साथ एक नेटिव VIP डिज़ाइन को इम्पोर्ट और कंपाइल करें
POST /v1/vip/email-builder/import
आवश्यक स्कोप: vip:builder
इनपुट: { body: CustomerNativeBuilderInput; }
रिटर्न: CustomerNativeBuilderImportResult
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 413, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
सक्रिय सदस्यता और स्वामित्व वाले ओपन एक्सेस के साथ एक नेटिव VIP डिज़ाइन को वैलिडेट और कंपाइल करें
POST /v1/vip/email-builder/validate
आवश्यक स्कोप: vip:builder
इनपुट: { body: CustomerNativeBuilderInput; }
रिटर्न: CustomerNativeBuilderValidateResult
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 413, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
सक्रिय सदस्यता और स्वामित्व वाले ओपन एक्सेस के साथ एक नेटिव VIP डिज़ाइन को HTML में कंपाइल करें
POST /v1/vip/email-builder/compile
आवश्यक स्कोप: vip:builder
इनपुट: { body: CustomerNativeBuilderInput; }
रिटर्न: CustomerNativeBuilderCompileResult
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 413, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
बिना भेजे एक नेटिव VIP डिज़ाइन को HTML या तीन-वेरिएंट वाले HTML ZIP के रूप में एक्सपोर्ट करें
POST /v1/vip/email-builder/export
आवश्यक स्कोप: vip:builder
इनपुट: { body: CustomerNativeBuilderInput; }
रिटर्न: CustomerNativeBuilderExportResult
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 413, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
एक-बारगी मानक या अधिकृत नेटिव VIP होस्टेड एडिटर हैंडऑफ़ लॉन्च करें
POST /v1/email-builder/hosted-handoffs
आवश्यक स्कोप: builder:write
इनपुट: { body: CustomerHostedBuilderHandoffInput; }
रिटर्न: CustomerHostedBuilderHandoff
डॉक्युमेंटेड HTTP स्टेटस: 201, 400, 401, 403, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
VIP बिल्डर टेम्पलेट्स सूचीबद्ध करें
GET /v1/vip/email-builder/templates
आवश्यक स्कोप: vip:read
इनपुट: Record<string, never>
रिटर्न: CustomerVipTemplateCatalog
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 413, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
VIP बिल्डर टेम्पलेट प्राप्त करें
GET /v1/vip/email-builder/templates/{templateId}
आवश्यक स्कोप: vip:read
इनपुट: { path: { templateId: string; }; }
रिटर्न: CustomerVipTemplateDocument
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 413, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
Standard बिल्डर टेम्पलेट्स सूचीबद्ध करें
GET /v1/email-builder/templates
आवश्यक स्कोप: catalog:read
इनपुट: Record<string, never>
रिटर्न: CustomerStandardTemplateCatalog
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 413, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
Standard बिल्डर टेम्पलेट प्राप्त करें
GET /v1/email-builder/templates/{templateId}
आवश्यक स्कोप: catalog:read
इनपुट: { path: { templateId: string; }; }
रिटर्न: CustomerStandardTemplateDetail
डॉक्युमेंटेड HTTP स्टेटस: 200, 400, 401, 403, 404, 413, 429, 503
पैरामीटर्स, स्कीमा और 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 });
}
सेल्फ-होस्टेड n8n नोड
0.1.0
इसके लिए Node.js 20.19+ और एक पैच किए गए self-hosted n8n इंस्टॉलेशन की आवश्यकता है जो n8n-workflow >=2.39.3 <3 प्रदान करता हो। इसे पुराने असंगत होस्ट में बलपूर्वक इंस्टॉल (force-install) न करें। डाउनलोड की गई tarball को अपनी custom-node डायरेक्टरी में इंस्टॉल करें और n8n को रीस्टार्ट करें। यह unpublished नोड n8n Cloud या npm-name कम्युनिटी इंस्टॉलेशन के माध्यम से उपलब्ध नहीं है।
सशुल्क सहमति डिफ़ॉल्ट रूप से बंद है। प्रत्येक सहमति वाली वस्तु बिना किसी स्वचालित पुनः प्रयास के एक वर्गीकरण अनुरोध करती है। परिणाम sendrepute के अंतर्गत नेमस्पेस किए गए हैं। भेजने से पहले sendrepute.allowed पर IF gate का उपयोग करें, और विफलता की स्थिति की अलग से जाँच करें। सलाहकार और अवरोधन मोड स्पष्ट निर्णय देते हैं। यह नोड स्वयं मेल नहीं भेजता है।
n8n tarball डाउनलोड करें
पब्लिक सोर्स रिपॉजिटरी
पूर्ण README और उदाहरण
सुरक्षा नोट्स और ज्ञात सीमाएँ
1. इंस्टॉल करें
इसे सेल्फ-होस्टेड n8n होस्ट पर चलाएं, फिर अपने सामान्य प्रोसेस मैनेजर का उपयोग करके इसकी n8n सेवा को पुनरारंभ करें। पुष्टि करें कि SendRepute नोड पिकर में दिखाई दे रहा है। n8n एडिटर से एक्सट्रैक्ट किए गए package/examples/classify-email.workflow.json को इम्पोर्ट करें। npm-name कम्युनिटी नोड्स इंस्टॉलेशन और n8n Cloud इस अप्रकाशित पैकेज द्वारा समर्थित नहीं हैं।
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
विकल्प: सार्वजनिक स्रोत से इंस्टॉल करें
ऊपर दिए गए वेबसाइट डाउनलोड निर्देशों के बजाय इस स्रोत मार्ग का उपयोग करें। रिपॉजिटरी README शेष सक्रियण और कॉन्फ़िगरेशन चरणों की व्याख्या करता है; केवल ZIP बनाने से प्लगइन इंस्टॉल नहीं होता है। Python के लिए, दूसरा कमांड वैकल्पिक Django सपोर्ट जोड़ता है। क्रेडेंशियल को सर्वर सीक्रेट्स में रखें और सशुल्क सुविधाओं को सक्षम करने से पहले सुरक्षा नोटों की समीक्षा करें। केवल Node ही npm पर उपलब्ध है; सार्वजनिक GitHub रिपॉजिटरी का अर्थ WordPress.org, n8n Cloud, Packagist या 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. सुरक्षित रूप से कॉन्फ़िगर करें
n8n क्रेडेंशियल स्टोरेज में classify-scoped कस्टम की (key) के साथ एक SendRepute API क्रेडेंशियल बनाएं। इसे कभी भी वर्कफ़्लो JSON या एक्सप्रेशन में न रखें। नीचे दिया गया JSON नोड पैरामीटर्स दिखाता है, न कि एक पूर्ण इम्पोर्टेबल वर्कफ़्लो। प्रेषक का नाम (display name), विषय और बॉडी को मैप करें; advisory/blocking, थ्रेशोल्ड और open/closed फेलियर पॉलिसी चुनें। paidConsent को true पर स्विच करने से पहले कीमतों की समीक्षा करें। प्रत्येक सहमति वाली आइटम अधिकतम एक अनुरोध करती है।
{
"operation": "classify",
"paidConsent": false,
"sender": "={{ $json.sender }}",
"subject": "={{ $json.subject }}",
"body": "={{ $json.body }}",
"decisionMode": "blocking",
"threshold": 0.8,
"failurePolicy": "closed"
}
3. सोच-समझकर उपयोग करें
SendRepute के ठीक बाद एक IF नोड रखें और इस बुलियन कंडीशन का उपयोग करें। केवल true आउटपुट को अपने मौजूदा ईमेल नोड से जोड़ें; false को समीक्षा या रोकने के लिए रूट करें। allowed के true होने पर भी analysisStatus का अलग से निरीक्षण करें। शामिल वर्कफ़्लो सशुल्क सहमति के अक्षम होने के साथ शुरू होता है और इसमें कोई क्रेडेंशियल नहीं होता है। SendRepute स्वयं कभी मेल नहीं भेजता है।
{{ $json.sendrepute.allowed === true }}
परिणाम, विफलताएं और सीमाएं
सफल परिणाम sendrepute नेमस्पेस को analysisStatus, decision, allowed, recommendation, validated score और बिलिंग फ़ील्ड से बदल देते हैं। विफलताएं स्पैम स्कोर को हटा देती हैं और सैनिटाइज्ड failureCategory/errorCode वापस करती हैं। क्लोज्ड विफलताएं ब्लॉक करती हैं; ओपन विफलताएं अनुमति देती हैं लेकिन analysisStatus को failed के रूप में चिह्नित करती हैं। एडवायज़री सफलताएं हमेशा अनुमति देती हैं चाहे recommendation कुछ भी हो। सहमति बंद (Consent-off) होने पर not_run वापस मिलता है। इसमें कोई रिट्राई, प्राप्तकर्ता, अटैचमेंट, रीराइट्स, मॉडल सिलेक्टर या कस्टम एंडपॉइंट्स नहीं हैं। अपडेटेड सोर्स डिपेंडेंसी ऑडिट में शून्य निष्कर्ष मिले हैं; यह एक निश्चित समय का परिणाम है, सुरक्षा प्रमाणन नहीं। सेल्फ-होस्टेड रनटाइम को पैच रखें और इंस्टॉलेशन से पहले SECURITY.md की समीक्षा करें।
Laravel इंटीग्रेशन
0.1.0
PHP 8.2+ और Laravel 12–13 को लक्षित करता है। स्थानीय Composer artifact repository का उपयोग करके ZIP इंस्टॉल करें, या इसे एक्सट्रैक्ट करें और शामिल README में वर्णित अनुसार Composer path repository कॉन्फ़िगर करें। किसी Packagist publication का दावा नहीं किया गया है।
सशुल्क सहमति और मेल हुक डिफ़ॉल्ट रूप से अक्षम हैं। सक्षम होने पर भी, प्रत्येक संदेश को स्पष्ट रूप से X-SendRepute-Classify: yes के साथ ऑप्ट-इन करना होगा। डिलीवरी से पहले हेडर को हटा दिया जाता है। सलाहकार और अवरोधन मोड की स्वतंत्र विफलता नीतियां हैं; पासवर्ड रीसेट और ट्रांजेक्शनल मेल तब तक अछूते रहते हैं जब तक कि जानबूझकर ऑप्ट-इन न किया जाए।
Laravel ZIP डाउनलोड करें
पब्लिक सोर्स रिपॉजिटरी
पूर्ण README और उदाहरण
सुरक्षा नोट्स और ज्ञात सीमाएँ
1. इंस्टॉल करें
अपने Laravel एप्लिकेशन के अंदर चलाएं। ये कमांड डाउनलोड को एक्सट्रैक्ट करते हैं और एक Composer पाथ रिपॉजिटरी रजिस्टर करते हैं; यह Packagist इंस्टॉलेशन नहीं है। पैकेज डिस्कवरी प्रोवाइडर को रजिस्टर करती है, और vendor:publish config/sendrepute.php बनाती है। एक्सट्रैक्ट किए गए पैकेज डायरेक्टरी को Composer के लिए उपलब्ध रखें। एक आर्टिफ़ैक्ट रिपॉजिटरी एक अन्य विकल्प है जो 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
विकल्प: सार्वजनिक स्रोत से इंस्टॉल करें
ऊपर दिए गए वेबसाइट डाउनलोड निर्देशों के बजाय इस स्रोत मार्ग का उपयोग करें। रिपॉजिटरी README शेष सक्रियण और कॉन्फ़िगरेशन चरणों की व्याख्या करता है; केवल ZIP बनाने से प्लगइन इंस्टॉल नहीं होता है। Python के लिए, दूसरा कमांड वैकल्पिक Django सपोर्ट जोड़ता है। क्रेडेंशियल को सर्वर सीक्रेट्स में रखें और सशुल्क सुविधाओं को सक्षम करने से पहले सुरक्षा नोटों की समीक्षा करें। केवल Node ही npm पर उपलब्ध है; सार्वजनिक GitHub रिपॉजिटरी का अर्थ WordPress.org, n8n Cloud, Packagist या 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. सुरक्षित रूप से कॉन्फ़िगर करें
SENDREPUTE_API_KEY को सर्वर सीक्रेट्स में स्टोर करें। बेस URL /api पर समाप्त होता है; क्लाइंट /v1/classify जोड़ता है। सटीक विश्वसनीय-होस्ट मिलान और सत्यापित HTTPS आवश्यक हैं। दिखाए गए दोनों स्विच तब तक बंद रहते हैं जब तक आप कीमतों की समीक्षा नहीं करते और उन्हें स्पष्ट रूप से true पर सेट नहीं करते। config/sendrepute.php में mail.mode, mail.spam_probability_threshold और mail.failure_policy को स्वतंत्र रूप से चुनें। डिफ़ॉल्ट विफलता पर अनुमति के साथ advisory है।
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. सोच-समझकर उपयोग करें
सटीक ऑप्ट-इन हेडर को केवल जानबूझकर चुने गए Mailable क्लासेस में जोड़ें, कभी भी ग्लोबल मेल कॉलबैक में नहीं। ऑटोमैटिक हुक के लिए ग्लोबल स्विच और प्रति-संदेश हेडर दोनों की आवश्यकता होती है। डिलीवरी से पहले हेडर को हटा दिया जाता है। पासवर्ड रीसेट और महत्वपूर्ण नोटिफिकेशन को ऑटोमैटिक ब्लॉकिंग से बाहर रखें जब तक कि स्पष्ट रूप से परीक्षण न किया गया हो। जैसा कि दिखाया गया है, मैन्युअल क्लासिफिकेशन के बजाय Classifier कॉन्ट्रैक्ट को हल किया जा सकता है और प्रति कॉल सहमति दी जा सकती है।
// 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,
);
}
API और मेथड रेफरेंस
Laravel के कंटेनर से Classifier इंटरफ़ेस को हल करें। classify(string sender, string subject, string body, ?string model = null, bool paidAnalysisConsent = false) ClassificationResult लौटाता है। इसके पब्लिक फील्ड requestId, model, label, spamProbability, confidence, replayed और chargedMillicents हैं। SendReputeException सैनिटाइज्ड कैटेगरी, HTTP स्टेटस, API कोड और रिक्वेस्ट ID की आपूर्ति करता है। ऑटोमैटिक हुक MessageSending पर AnalyzeOutgoingMessage है और इसका सुरक्षित डायग्नोस्टिक ClassificationOutcome है। यह एकीकरण केवल क्लासिफिकेशन का समर्थन करता है, अकाउंट एडमिनिस्ट्रेशन, भुगतान, बिल्डर्स या AI रीराइट का नहीं।
परिणाम, विफलताएं और सीमाएं
ClassificationResult में वैलिडेटेड परिणाम और बिलिंग डेटा होता है। MessageSending हुक एक ब्लॉक किए गए संदेश को रद्द करने के लिए false लौटाता है; रद्दीकरण कोई SMTP त्रुटि या MessageSent इवेंट नहीं है। ClassificationOutcome केवल कार्रवाई, स्कोर और सैनिटाइज्ड विफलता मेटाडेटा की रिपोर्ट करता है, संदेश सामग्री की कभी नहीं। विफलता नीति खराब इनपुट/रिस्पॉन्स, प्रमाणीकरण, बैलेंस, रेट लिमिट और ट्रांसपोर्ट समस्याओं को कवर करती है। कोई retries या क्यु (queue) नहीं जोड़ा गया है। एक नामी प्रेषक और इन-मेमोरी text/plain या text/html बॉडी आवश्यक है।
Mautic ड्राफ्ट प्रीफ़्लाइट
0.1.0
यह एकल-वेब-नोड Mautic 5.x इंस्टॉलेशन को PHP 8.1+ और ext-curl के साथ लक्षित करता है। Mautic 4, Mautic 6 और मल्टी-नोड क्लस्टर समर्थित नहीं हैं। SendReputeBundle को अपनी प्लगइन्स डायरेक्टरी में एक्सट्रैक्ट करें, प्लगइन्स को रीलोड करें और शामिल README के अनुसार कैश साफ़ करें। क्रेडेंशियल कॉन्फ़िगर करें और सर्वर एनवायरनमेंट में स्पष्ट रूप से local-flock लॉक मोड की पुष्टि करें।
केवल सहेजे गए ड्राफ्ट का व्यवस्थापक द्वारा शुरू किया गया, सशुल्क सलाहकार (paid advisory) विश्लेषण। ग्लोबल ऑप्ट-इन, एंटिटी एक्सेस चेक, CSRF वैलिडेशन और एक बार इस्तेमाल होने वाली पुष्टि प्रत्येक अनुरोध की सुरक्षा करती है। यह ईमेल नहीं भेजता, दोबारा नहीं लिखता या ब्लॉक नहीं करता है और इसमें कोई भेजने के समय का प्रवर्तन (send-time enforcement) नहीं है। प्राप्तकर्ता प्रतिस्थापन (substitutions) अनएक्सपेंडेड रहते हैं; पहले एडिटर परिवर्तनों को सहेजें।
Mautic ZIP डाउनलोड करें
पब्लिक सोर्स रिपॉजिटरी
पूर्ण README और उदाहरण
सुरक्षा नोट्स और ज्ञात सीमाएँ
1. इंस्टॉल करें
अपने Mautic रूट से उसी PHP यूजर और एनवायरनमेंट के साथ चलाएं जैसा वेब एप्लिकेशन है, या प्लगइन्स को रिलोड करने से पहले अपनी परिनियोजन प्रक्रिया के माध्यम से ZIP को एक्सट्रैक्ट करें। इसके लिए Mautic 5.x, PHP 8.1+, ext-curl और एक एकल Linux/POSIX वेब नोड की आवश्यकता है। Mautic 4/6 और मल्टी-नोड क्लस्टर असमर्थित हैं; किसी भी लाइव पैच-दर-पैच इंस्टॉलेशन प्रमाणन का दावा नहीं किया गया है।
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
विकल्प: सार्वजनिक स्रोत से इंस्टॉल करें
ऊपर दिए गए वेबसाइट डाउनलोड निर्देशों के बजाय इस स्रोत मार्ग का उपयोग करें। रिपॉजिटरी README शेष सक्रियण और कॉन्फ़िगरेशन चरणों की व्याख्या करता है; केवल ZIP बनाने से प्लगइन इंस्टॉल नहीं होता है। Python के लिए, दूसरा कमांड वैकल्पिक Django सपोर्ट जोड़ता है। क्रेडेंशियल को सर्वर सीक्रेट्स में रखें और सशुल्क सुविधाओं को सक्षम करने से पहले सुरक्षा नोटों की समीक्षा करें। केवल Node ही npm पर उपलब्ध है; सार्वजनिक GitHub रिपॉजिटरी का अर्थ WordPress.org, n8n Cloud, Packagist या PyPI प्रकाशन नहीं है।
git clone https://github.com/sendrepute/sendrepute-mautic.git
cd sendrepute-mautic
python3 package.py
2. सुरक्षित रूप से कॉन्फ़िगर करें
दिखाई गई परसिस्टेंट लेजर डायरेक्टरी वेब रूट के बाहर बनाएं, जिसका स्वामित्व PHP यूजर के पास हो और मोड 0700 हो। /tmp, अल्पकालिक कंटेनर, सिमलिंक या अनिश्चित नेटवर्क स्टोरेज का उपयोग न करें। SENDREPUTE_API_KEY को सर्वर-साइड स्टोर करें। local-flock की पुष्टि केवल तभी करें जब एक वेब नोड साझा प्रोसेस लॉकिंग प्रदान करता हो। ग्लोबल पेड एनालिसिस 0 पर अक्षम रहता है; कीमतों और सीमाओं की समीक्षा करने के बाद ही इसे 1 पर सेट करें। कोई भी ब्राउज़र फ़ील्ड क्रेडेंशियल या एंडपॉइंट प्रदान नहीं कर सकता है।
SENDREPUTE_MAUTIC_PAID_ANALYSIS_ENABLED=0
SENDREPUTE_MAUTIC_ATOMIC_LOCK_MODE=local-flock
SENDREPUTE_MAUTIC_LEDGER_DIR=/var/lib/mautic/sendrepute-ledger
3. सोच-समझकर उपयोग करें
सबसे पहले एडिटर परिवर्तनों को सहेजें। उस ईमेल तक पहुंच रखने वाले एक वास्तविक Mautic एडमिनिस्ट्रेटर के रूप में, सहेजे गए ड्राफ्ट को खोलें और SendRepute preflight चुनें। पुष्टिकरण की समीक्षा करें और स्पष्ट रूप से भुगतान किए गए ऑपरेशन को स्वीकार करें। अनुरोध के लिए CSRF सत्यापन और सहेजी गई सामग्री के लिए बाध्य दस मिनट के, एक-बार-उपयोग के आशय की आवश्यकता होती है। परसिस्टेंट लॉकिंग और सामग्री-मुक्त लेजर समर्थित सिंगल नोड पर डुप्लिकेट समवर्ती खर्च को रोकते हैं।
परिणाम, विफलताएं और सीमाएं
सत्यापित probability, label, confidence और वास्तविक billed amount या receipt replay प्रदर्शित करता है। Failures में कोई spam decision नहीं दिखाया जाता है और वे स्वतः retry नहीं होते हैं। केवल सुरक्षित sender display name, subject और body का विश्लेषण किया जाता है; contact substitutions अन-एक्सपेंडेड रहते हैं। यह plugin drafts को दोबारा नहीं लिखता, email नहीं भेजता, campaigns को ब्लॉक नहीं करता, या send-time policy लागू नहीं करता है। Saved-draft समीक्षा अंततः recipient-rendered संदेश को प्रमाणित नहीं कर सकती।
Python क्लाइंट और Django बैकएंड
0.1.0
Python 3.9+ आवश्यक है। स्रोत ZIP को एक्सट्रैक्ट करें और इसकी निर्देशिका को pip के साथ इंस्टॉल करें। जेनेरिक सर्वर क्लाइंट मानक लाइब्रेरी का उपयोग करता है; स्पष्ट ईमेल बैकएंड के लिए Django एक वैकल्पिक निर्भरता है। यह पैकेज PyPI पर प्रकाशित नहीं है।
सशुल्क सहमति डिफ़ॉल्ट रूप से बंद रहती है। Django रैपर मूल ट्रांसपोर्ट और मैसेज ऑब्जेक्ट्स को सुरक्षित रखता है। यह प्राथमिक बॉडी और इनलाइन text/plain और text/html विकल्पों को मिलाकर एक बाउंडेड स्ट्रिंग का विश्लेषण करता है, अटैचमेंट्स का नहीं। अवरोधन मोड असमर्थित या बड़े आकार की प्रदर्शित सामग्री को अस्वीकार कर देता है। प्रमाणीकरण विफलताएं अनुमति नीति होने पर भी डिफ़ॉल्ट रूप से ब्लॉक होती हैं; महत्वपूर्ण-मेल व्यवहार का चयन जानबूझकर करें।
Python स्रोत ZIP डाउनलोड करें
पब्लिक सोर्स रिपॉजिटरी
पूर्ण README और उदाहरण
सुरक्षा नोट्स और ज्ञात सीमाएँ
1. इंस्टॉल करें
वर्चुअल एनवायरनमेंट का उपयोग करें। जेनेरिक क्लाइंट standard-library-only है; अंतिम कमांड वैकल्पिक Django dependency जोड़ता है और Flask, FastAPI या अन्य जेनेरिक सर्वर उपयोग के लिए आवश्यक नहीं है। package को डाउनलोड की गई source directory से इंस्टॉल किया जाता है, न कि PyPI से। Python 3.9+ इस पैकेज की न्यूनतम आवश्यकता है; एक साथ समर्थित Python/Django वर्ज़न चुनें।
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]'
विकल्प: सार्वजनिक स्रोत से इंस्टॉल करें
ऊपर दिए गए वेबसाइट डाउनलोड निर्देशों के बजाय इस स्रोत मार्ग का उपयोग करें। रिपॉजिटरी README शेष सक्रियण और कॉन्फ़िगरेशन चरणों की व्याख्या करता है; केवल ZIP बनाने से प्लगइन इंस्टॉल नहीं होता है। Python के लिए, दूसरा कमांड वैकल्पिक Django सपोर्ट जोड़ता है। क्रेडेंशियल को सर्वर सीक्रेट्स में रखें और सशुल्क सुविधाओं को सक्षम करने से पहले सुरक्षा नोटों की समीक्षा करें। केवल Node ही npm पर उपलब्ध है; सार्वजनिक GitHub रिपॉजिटरी का अर्थ WordPress.org, n8n Cloud, Packagist या 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. सुरक्षित रूप से कॉन्फ़िगर करें
सर्वर सीक्रेट्स के माध्यम से SENDREPUTE_API_KEY इंजेक्ट करें। जेनेरिक क्लाइंट कैनोनिकल होस्टेड एंडपॉइंट, सत्यापित HTTPS, कोई redirects नहीं और कोई retries नहीं पर डिफॉल्ट है। Client consent डिफॉल्ट रूप से बंद है; उदाहरण केवल confirmed की जांच के बाद प्रति-कॉल सहमति देता है। Endpoint overrides के लिए एक स्पष्ट HTTPS origin allowlist की आवश्यकता होती है। रिटर्न की गई dictionary में सत्यापित result और billing डेटा होता है, न कि send decision।
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
Django ईमेल बैकएंड
अपने मौजूदा बैकएंड को SENDREPUTE_ORIGINAL_EMAIL_BACKEND में सुरक्षित रखें और इसकी सामान्य SMTP सेटिंग्स बनाए रखें। उदाहरण सशुल्क सहमति को बंद रखता है; मूल्य निर्धारण की समीक्षा के बाद ही इसे True पर सेट करें। सलाह मोड सफल विश्लेषणों की अनुमति देता है; ब्लॉकिंग की तुलना SENDREPUTE_SPAM_THRESHOLD से की जाती है। स्वतंत्र विफलता नीति को सोच-समझकर चुनें। प्रमाणीकरण त्रुटियां allow होने पर भी डिफ़ॉल्ट रूप से ब्लॉक करती हैं। उदाहरण README डिफ़ॉल्ट का पालन करता है और महत्वपूर्ण मेल के लिए विफलता पर खुला रखने (fail open) की सिफारिश नहीं है।
# 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. सोच-समझकर उपयोग करें
यह फ़ंक्शन केवल कॉल किए जाने पर भेजता है। Django रैपर कॉन्फ़िगर होने और सशुल्क सहमति सक्षम होने पर, मूल बैकएंड को मूल संदेश ऑब्जेक्ट अपरिवर्तित प्राप्त होते हैं। क्लासिफायरियर को एक बाउंडेड स्ट्रिंग प्राप्त होती है जो प्राथमिक बॉडी को इनलाइन text/plain और text/html विकल्पों के साथ जोड़ती है; अटैचमेंट और प्राप्तकर्ता अलग इनपुट नहीं हैं। कॉल करने से पहले टेम्पलेट रेंडर करें। पहले एक स्थानीय परीक्षण बैकएंड का उपयोग करें, फिर अपने जानबूझकर कॉन्फ़िगर किए गए वास्तविक ट्रांसपोर्ट का।
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()
API और मेथड रेफरेंस
पब्लिक कंस्ट्रक्टर SendReputeClient(api_key, endpoint, allowed_origins, timeout, paid_analysis_consent) है, जिसमें api_key के अलावा सभी कीवर्ड द्वारा पास किए जाते हैं। timeout शून्य से अधिक और अधिकतम 30 सेकंड होना चाहिए। classify के लिए कीवर्ड sender, subject और body आवश्यक हैं; model और प्रति-कॉल paid_analysis_consent वैकल्पिक हैं। Sender 1–320 वर्ण, subject 1–998 और body 1–524,288 है, जिसकी एक अलग एन्कोडेड अनुरोध सीमा है। लौटाए गए dict में requestId, model, result और billing होते हैं; result में label, spamProbability, confidence, reasons और वैकल्पिक contentAudit शामिल हैं। billing में chargedMillicents और replayed शामिल हैं। त्रुटियों में ConsentRequiredError, AuthenticationError, BalanceError, RateLimitError, TransportError और InvalidResponseError शामिल हैं, जो सभी SendReputeError के अंतर्गत हैं। अमान्य कॉन्फ़िगरेशन ValueError उत्पन्न कर सकता है। Django बैकएंड open(), close() और send_messages(email_messages) को प्रदर्शित करता है, जो मूल बैकएंड की भेजी गई संख्या लौटाता है; यह कोई जेनेरिक API, बिल्डर, रीराइट या भुगतान मेथड नहीं जोड़ता है।
परिणाम, विफलताएं और सीमाएं
Blocking केवल सुरक्षित सबसेट का विश्लेषण करने के बजाय असमर्थित या बड़े आकार की प्रदर्शित सामग्री को अस्वीकार कर देता है। Authentication failures को अनुमति देने के लिए एक अलग स्पष्ट ओवरराइड की आवश्यकता होती है। अन्य त्रुटियां चुनी गई allow/block policy का पालन करती हैं; fail_silently नियंत्रित करता है कि ब्लॉक की गई विफलताओं को रेज़ किया जाए या छोड़ दिया जाए। Wrapper क्यू नहीं लगाता, retry नहीं करता, transports नहीं बदलता, attachments का निरीक्षण नहीं करता या templates रेंडर नहीं करता। जेनेरिक क्लाइंट code/status/request_id के साथ सैनिटाइज्ड SendReputeError सबक्लासेस रेज़ करता है; संदेश की बॉडी को लॉग न करें।
Go वर्गीकरण क्लाइंट
0.1.0
Go 1.22+ की आवश्यकता है। केवल-मानक-लाइब्रेरी (standard-library-only) क्लाइंट वर्गीकरण का समर्थन करता है, ईमेल ट्रांसपोर्ट का नहीं। स्थानीय मॉड्यूल रिप्लेसमेंट के साथ डाउनलोड करने योग्य स्रोत ZIP चुनें, या स्रोत विकल्प के तहत दिखाए गए सत्यापित सार्वजनिक मॉड्यूल इंस्टॉलेशन को चुनें।
स्पष्ट सशुल्क सहमति, सीमित अनुरोध, सत्यापित HTTPS, अस्वीकृत रीडायरेक्ट और बिना किसी पुनर्प्रयास के केवल-मानक-लाइब्रेरी, सर्वर-साइड वर्गीकरण। यह ईमेल नहीं भेजता है या भेजने/रोकने के निर्णय नहीं लेता है। आपके एप्लिकेशन को जानबूझकर थ्रेशोल्ड और विफलता व्यवहार चुनना होगा, खासकर महत्वपूर्ण ट्रांजेक्शनल मेल के लिए।
Go स्रोत ZIP डाउनलोड करें
पब्लिक सोर्स रिपॉजिटरी
पूर्ण README और उदाहरण
सुरक्षा नोट्स और ज्ञात सीमाएँ
1. इंस्टॉल करें
सोर्स को अपने मौजूदा Go एप्लिकेशन की डायरेक्टरी में निकालें और वहां मॉड्यूल कमांड चलाएं। local replacement डाउनलोड किए गए मॉड्यूल की ओर इशारा करता है; यदि आपका प्रोजेक्ट लेआउट अलग है तो उस पाथ को बदलें या एडजस्ट करें। नया एप्लिकेशन बनाते समय ही पहले अपने स्वयं के मॉड्यूल नाम के साथ go mod init चलाएं। इस क्लाइंट के लिए किसी बाहरी रनटाइम मॉड्यूल की आवश्यकता नहीं है।
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
विकल्प: सार्वजनिक स्रोत से इंस्टॉल करें
ऊपर दिए गए वेबसाइट डाउनलोड निर्देशों के बजाय इस स्रोत मार्ग का उपयोग करें। रिपॉजिटरी README शेष सक्रियण और कॉन्फ़िगरेशन चरणों की व्याख्या करता है; केवल ZIP बनाने से प्लगइन इंस्टॉल नहीं होता है। Python के लिए, दूसरा कमांड वैकल्पिक Django सपोर्ट जोड़ता है। क्रेडेंशियल को सर्वर सीक्रेट्स में रखें और सशुल्क सुविधाओं को सक्षम करने से पहले सुरक्षा नोटों की समीक्षा करें। केवल Node ही npm पर उपलब्ध है; सार्वजनिक GitHub रिपॉजिटरी का अर्थ WordPress.org, n8n Cloud, Packagist या PyPI प्रकाशन नहीं है।
go get github.com/sendrepute/sendrepute-go@bfd656f829618348232da506225a5d92587d48e2
2. सुरक्षित रूप से कॉन्फ़िगर करें
सर्वर सीक्रेट्स से SENDREPUTE_API_KEY इंजेक्ट करें। दिखाया गया फ़ंक्शन तब तक कोई काम नहीं करता जब तक उसे confirmed=true के साथ कॉल न किया जाए; वह कॉल एक सशुल्क वर्गीकरण हो सकती है। यह दस-सेकंड का कॉन्टेक्स्ट सेट करता है और कैनोनिकल HTTPS एंडपॉइंट का उपयोग करता है। क्लाइंट सहमति डिफ़ॉल्ट रूप से बंद है; अंतिम true तर्क इस एक अनुरोध के लिए सहमति देता है। एंडपॉइंट ओवरराइड के लिए एक स्पष्ट AllowedOrigins प्रविष्टि की आवश्यकता होती है; रीडायरेक्ट अस्वीकार कर दिए जाते हैं।
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. सोच-समझकर उपयोग करें
मूल्य निर्धारण की समीक्षा और स्पष्ट सहमति के बाद ही अपने प्रमाणित एप्लिकेशन से Analyze को कॉल करें। 0.90 threshold और review error उदाहरण एप्लिकेशन पॉलिसी हैं, न कि SDK डिफॉल्ट्स। किसी भी भेजने वाले कोड को जोड़ने से पहले यह तय करें कि त्रुटियों का अर्थ defer, allow या fail closed है। क्लाइंट Result.SpamProbability और billing फ़ील्ड के साथ एक टाइप्ड रिजल्ट देता है; यह स्वयं कभी ईमेल नहीं भेजता या डिलीवरी का निर्णय नहीं लेता है।
API और मेथड रेफरेंस
NewClient(Config) (*Client, error) लौटाता है। Config में APIKey, Endpoint, AllowedOrigins, Timeout और PaidAnalysisConsent स्वीकार किए जाते हैं। Classify(ctx, ClassificationInput, consent) (*ClassificationResponse, error) लौटाता है। इनपुट फील्ड Sender, Subject, Body और वैकल्पिक Model हैं। Sender 1–320 runes, subject 1–998 runes और body अधिकतम 524,288 UTF-8 bytes है। टाइप्ड रिस्पांस में RequestID, Model, Result और Billing होते हैं; Billing में ChargedMillicents और Replayed प्रदर्शित होते हैं। Result में Label, SpamProbability, Confidence, Reasons, FlaggedTerms और वैकल्पिक ContentAudit शामिल हैं। *Error को सुरक्षित रूप से जांचने के लिए errors.As का उपयोग करें; कॉन्फ़िगरेशन और API विफलताएं त्रुटियां बनी रहती हैं, स्पैम स्कोर नहीं। कोई अकाउंट, भुगतान, बिल्डर या रीराइट मेथड मौजूद नहीं हैं।
परिणाम, विफलताएं और सीमाएं
एक इन्वोकेशन बिना किसी retries के अधिकतम एक सशुल्क (paid) HTTP प्रयास करता है। त्रुटियां एक सुरक्षित श्रेणी, प्रतिबंधित code/request ID और स्टेटस को उजागर करती हैं, क्रेडेंशियल, बॉडी या नेटवर्क विवरण को कभी नहीं। कॉन्टेक्स्ट की अवधि, अनुरोध और प्रतिक्रिया के आकार सीमित हैं; खराब प्रतिक्रियाओं को स्कोर में बदलने के बजाय अस्वीकार कर दिया जाता है। क्लाइंट में कोई MIME parsing, rendering, recipients, attachments, queue, builder, rewrite या SMTP क्षमताएं नहीं हैं। मॉडल को स्पष्ट रूप से केवल तभी चुनें जब आवश्यक हो; अन्यथा अकाउंट डिफॉल्ट लागू होता है।
listmonk HTTP Messenger
0.1.0
Node.js 20+ के लिए एक अप्रकाशित स्थानीय स्रोत पैकेज जो listmonk 6.2.0 के Custom HTTP Messenger इंटरफ़ेस को लक्षित करता है। यह बाहरी सेवा वर्गीकरण के बाद डाउनस्ट्रीम SMTP डिलीवरी का स्वामित्व लेती है; यह इन-प्रोसेस प्लगइन या SMTP प्रीफ़्लाइट प्रॉक्सी नहीं है। सत्यापन पृथक और ऑफलाइन है, न कि कोई इंस्टॉल किया गया listmonk परिनियोजन या वास्तविक SMTP-प्रदाता परीक्षण।
दोनों सशुल्क स्विच (paid switches) डिफ़ॉल्ट रूप से बंद रहते हैं। मैसेंजर एक पूर्णतः रेंडर की गई बॉडी स्वीकार करता है, अटैचमेंट को अस्वीकार करता है, ताज़ा मूल्य निर्धारण की जाँच करता है, और सख्त Inbox परिणाम की आवश्यकता रखता है: label inbox, spam probability अधिकतम 0.12, और शून्य फ़्लैग किए गए शब्द (zero flagged terms)। इसके बाद यह उसी निरीक्षण की गई बॉडी को अपने कॉन्फ़िगर किए गए SMTP कनेक्शन पर बनाता और भेजता है। ड्यूरेबल रसीदें अवरुद्ध, विफल, प्रगति पर या अनिश्चित परिणामों के बाद स्वचालित दोहराव को रोकती हैं।
अप्रकाशित listmonk स्रोत ZIP डाउनलोड करें
1. इंस्टॉल करें
इस अप्रकाशित वेबसाइट स्रोत ZIP को समर्पित मैसेंजर होस्ट पर निकालें। README.md और SECURITY.md की समीक्षा करें, उदाहरण एनवायरनमेंट को कॉपी करें, और कॉन्फ़िगरेशन से पहले सर्वर एंट्री पॉइंट की सिंटैक्स-जांच करें। डाउनलोड करने योग्य अनुमत (allowlisted) आर्टिफैक्ट जानबूझकर रिपॉजिटरी टेस्ट सुइट को बाहर रखता है। इसमें कोई थर्ड-पार्टी रनटाइम पैकेज नहीं हैं। यह कोई listmonk marketplace या इन-प्रोसेस इंस्टॉलेशन नहीं है।
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. सुरक्षित रूप से कॉन्फ़िगर करें
एक समर्पित विशेषाधिकार रहित (unprivileged) अकाउंट और 0700 मोड वाली टिकाऊ स्थानीय स्टेट डायरेक्टरी का उपयोग करें। जब तक प्राइसिंग और नॉन-एटॉमिक प्राइस लिमिटेशन को स्वीकार नहीं किया जाता, तब तक दिखाए गए तीनों सेफ्टी स्विच को false रखें। SendRepute, मैसेंजर Basic Auth, और डाउनस्ट्रीम SMTP क्रेडेंशियल्स को केवल सर्वर सीक्रेट्स में स्टोर करें। एक विश्वसनीय रिवर्स प्रॉक्सी पर HTTPS समाप्त करें।
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. सोच-समझकर उपयोग करें
केवल POST /v1/listmonk को HTTPS और समर्पित Basic Auth के पीछे सुरक्षित रखें। listmonk Settings > Messengers में, इसके URL को एक Custom HTTP Messenger के रूप में जोड़ें, शून्य retries चुनें, और इसे केवल उन कैंपेन के लिए चुनें जिन्हें जांचा और डिलीवर किया जाना चाहिए। साथ ही listmonk SMTP का चयन न करें: यह सेवा स्वयं डाउनस्ट्रीम SMTP send निष्पादित करती है।
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.
परिणाम, विफलताएं और सीमाएं
एक डिलीवर की गई डुप्लिकेट बिना किसी अन्य वर्गीकरण या भेजें के सफलता दर्शाती है। प्रत्येक blocked, failed, inspecting, sending, या अनिश्चित रसीद एक अन्य भेजने को अस्वीकार करती है। एक अनिश्चित SMTP परिणाम के बाद, प्रदाता लॉग और listmonk संदर्भ को मैन्युअल रूप से मिलान करें; केवल पुनः प्रयास करने के लिए कभी भी रसीद न हटाएं। वर्तमान मूल्य निर्धारण जांच ताज़ा है लेकिन non-atomic है क्योंकि वर्गीकरण कोई expectedPriceMillicents फ़ील्ड स्वीकार नहीं करता है।
Mailcoach Self-Hosted अडैप्टर
0.1.0
Laravel 12 पर Mailcoach Self-Hosted v10 को लक्षित करने वाला एक अप्रकाशित स्थानीय Composer पैकेज। लाइसेंस प्राप्त spatie/laravel-mailcoach v10 कोर इस वर्कस्पेस में उपलब्ध नहीं है, इसलिए यह पैकेज स्थापित Mailcoach v10 एंड-टू-एंड टेस्ट का दावा नहीं करता है। वास्तविक Laravel 12 Mailer परीक्षण प्रलेखित रद्द करने योग्य (cancellable) MessageSending इवेंट को कवर करते हैं; लाइसेंस धारक को उत्पादन से पहले हर सटीक Mailcoach सेंडिंग पाथ को सत्यापित करना होगा।
enabled, paid-consent, और current-pricing acknowledgement स्विच डिफ़ॉल्ट रूप से बंद रहते हैं। एक बार चालू होने पर, यह हुक उस Laravel मेलर के माध्यम से हर मैसेज पर लागू होता है, न कि केवल Mailcoach-नाम वाले रूट्स पर। यह पहले से रेंडर किए गए Symfony Email विकल्पों का विश्लेषण करता है और ट्रांसपोर्ट को रद्द कर सकता है। Fail-closed डिफ़ॉल्ट है; विश्लेषण विफलताओं की अनुमति देना एक अलग जानबूझकर बनाई गई नीति है।
प्रायोगिक Mailcoach सोर्स ZIP डाउनलोड करें
1. इंस्टॉल करें
डाउनलोड की गई अप्रकाशित ZIP को लाइसेंस प्राप्त Mailcoach एप्लिकेशन के लिए सुलभ एक निजी Composer artifact निर्देशिका में रखें। उस स्थानीय artifact रिपॉजिटरी को रजिस्टर करें, 0.1 लाइन की आवश्यकता रखें, उपभोक्ता lockfile को कमिट करें, और वैकल्पिक रूप से कॉन्फ़िगरेशन प्रकाशित करें। यह कोई Packagist इंस्टॉलेशन नहीं है। एक लाइसेंस धारक को सटीक Mailcoach Self-Hosted v10 रिलीज के विरुद्ध सत्यापन चलाना होगा।
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. सुरक्षित रूप से कॉन्फ़िगर करें
शुरू में तीनों स्विच बंद रखें। API key को सर्वर सीक्रेट्स में स्टोर करें और अकाउंट-साइड स्पेंड कैप कॉन्फ़िगर करें। वर्तमान classify ऑपरेशन में कोई एटॉमिक expectedPriceMillicents गार्ड नहीं है, इसलिए तीसरा स्विच लॉक किए गए कोट का वादा करने के बजाय स्पष्ट रूप से वर्तमान API प्राइसिंग को स्वीकार करता है। थ्रेशोल्ड और allow/block फेलियर पॉलिसी को स्वतंत्र रूप से कॉन्फ़िगर करें।
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. सोच-समझकर उपयोग करें
पैकेज डिस्कवरी एक Laravel MessageSending लिसनर को रजिस्टर करती है। एप्लिकेशन कोड में कोई प्रति-कैंपेन कॉल नहीं है: जब एक समर्पित Mailcoach इंस्टॉलेशन में इसे जानबूझकर सक्षम किया जाता है, तो यह ट्रांसपोर्ट से ठीक पहले उस Laravel mailer के माध्यम से भेजे गए प्रत्येक Symfony Email का निरीक्षण करता है। एक मिश्रित Laravel एप्लिकेशन में, होस्ट-एप्लिकेशन मेल भी कवर किया जाता है।
परिणाम, विफलताएं और सीमाएं
अडैप्टर प्रेषक का डिस्प्ले नाम, विषय, और प्रत्येक गैर-रिक्त इन-मेमोरी text/plain या text/html विकल्प सबमिट करता है, जबकि प्राप्तकर्ताओं, पते, अटैचमेंट्स, एनवेलप डेटा और raw MIME को बाहर रखता है। अनुपलब्ध या असमर्थित सामग्री, विकृत प्रतिक्रियाएं और API विफलताएं डिफ़ॉल्ट रूप से ब्लॉक हो जाती हैं। ऑफलाइन कोर टेस्ट वास्तविक Laravel Mailer रद्दीकरण का अभ्यास करते हैं, लेकिन लाइसेंस प्राप्त Mailcoach कैंपेन, ऑटोमेशन, ट्रांजेक्शनल और टेस्ट-मैसेज रूट अभी सत्यापित नहीं हैं।
Brevo नियंत्रित सेंड फ्लो
0.1.0
एक अप्रकाशित स्थानीय Node.js 20+ सोर्स पैकेज जो Brevo के ट्रांजेक्शनल POST /v3/smtp/email ऑपरेशन के आसपास एक स्पष्ट सर्वर-साइड send API लागू करता है। यह Brevo डैशबोर्ड सेंड, कैंपेन, ऑटोमेशन, SMTP रिले, या अन्य SDKs के माध्यम से होने वाली कॉल को इंटरसेप्ट नहीं करता है। टेस्ट नियंत्रित और ऑफलाइन हैं; वे लाइव Brevo अकाउंट को प्रमाणित नहीं करते हैं।
सशुल्क सहमति डिफ़ॉल्ट रूप से बंद रहती है। केवल फिक्स्ड इनलाइन टेक्स्ट और HTML संदेश स्वीकार किए जाते हैं; दूरस्थ टेम्प्लेट, पैरामीटर, निर्धारित सेंड्स, संदेश संस्करण, और URL-समर्थित सामग्री अस्वीकार कर दी जाती है। सटीक अपरिवर्तनीय निरीक्षित स्नैपशॉट को Brevo पर भेजा जाता है। एक ड्यूरेबल sendKey लेज़र डुप्लिकेट और संदिग्ध प्रयासों को रोकता है, और अनिश्चित प्रोवाइडर परिणामों के लिए ऑपरेटर समाधान की आवश्यकता होती है।
अप्रकाशित Brevo सोर्स ZIP डाउनलोड करें
1. इंस्टॉल करें
अप्रकाशित स्रोत ZIP को सर्वर एप्लिकेशन में निकालें, इसके README और सुरक्षा नोटों की समीक्षा करें, और src/index.mjs की सिंटैक्स-जांच करें। डाउनलोड करने योग्य अनुमत आर्टिफैक्ट जानबूझकर रिपॉजिटरी टेस्ट सुइट को बाहर रखता है। src/index.mjs से SendReputeBrevo को इंपोर्ट करें; यह npm या Brevo मार्केटप्लेस इंस्टॉलेशन नहीं है। Node.js 20+ की आवश्यकता है और इसमें कोई रनटाइम डिपेंडेंसी नहीं है।
curl -fLO https://www.sendrepute.com/downloads/sendrepute-brevo.zip
unzip sendrepute-brevo.zip
cd sendrepute-brevo
node --check src/index.mjs
2. सुरक्षित रूप से कॉन्फ़िगर करें
जब तक वर्तमान मूल्य निर्धारण और गैर-परमाणु मूल्य सीमा स्वीकार न कर ली जाए, तब तक paidConsent को false रखें। दोनों API keys को सर्वर सीक्रेट्स में रखें और ड्यूरेबल सिंगल-होस्ट स्टोरेज पर एक प्राइवेट परसिस्टेंट लेजर डायरेक्टरी का उपयोग करें। expectedPriceMillicents ताज़ा प्राप्त अधिकतम मूल्य के बराबर होना चाहिए, लेकिन classify डेबिट अभी तक उस मान को परमाणु रूप से लागू नहीं कर सकता है।
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. सोच-समझकर उपयोग करें
send को केवल नियंत्रित सर्वर पाथ से कॉल करें जिसे क्लासिफाई और डिलीवर दोनों करना चाहिए। एक ही इच्छित ईमेल के प्रत्येक प्रयास के लिए एक स्टेबल sendKey का पुन: उपयोग करें। फिक्स्ड इनलाइन कंटेंट प्रदान करें; Brevo टेम्पलेट IDs, परिवर्तनशील पैरामीटर्स, शेड्यूलिंग, या मैसेज वर्ज़न प्रदान न करें। अन्य जगहों से किए गए सेंड इस रैपर को पूरी तरह से बायपास कर देते हैं।
await integration.send({
sendKey: durableBusinessEventId,
message: {
sender: { name: "Example Shop", email: "orders@example.com" },
to: [{ email: recipient }],
subject,
textContent,
htmlContent,
},
});
परिणाम, विफलताएं और सीमाएं
थ्रेशोल्ड के भीतर Inbox परिणाम मिलने पर समान अपरिवर्तनीय snapshot के लिए एक Brevo ट्रांजेक्शनल API अनुरोध की अनुमति दी जाती है। प्रदाता प्रेषण से पहले लेज़र delivery-unknown में बदल जाता है। टाइमआउट, डिस्कनेक्ट, विकृत सफलताओं, क्रैश, और प्रदाता अस्वीकृतियों को कभी भी स्वचालित रूप से पुनः प्रयास नहीं किया जाता है; किसी भी मैन्युअल निर्णय से पहले उन्हें Brevo रिकॉर्ड के साथ मिलान करें।
BigMailer नियंत्रित सेंड फ्लो
0.1.0
स्पष्ट BigMailer ट्रांजेक्शनल API कॉल के लिए एक अप्रकाशित स्थानीय Node.js 24+ रैपर। यह BigMailer में इंस्टॉल नहीं होता है या डैशबोर्ड और असंबंधित API सेंड्स को इंटरसेप्ट नहीं करता है। चूँकि BigMailer रिमोट रूप से संपादन योग्य अभियान सामग्री का स्वामी है, इसलिए रैपर यह सिद्ध नहीं कर सकता कि समीक्षा और वितरण के बीच अभियान कॉलर द्वारा प्रदान किए गए रेंडर snapshot के समान ही रहा।
enabled, सशुल्क सहमति, और remote-template limitation acknowledgement सभी डिफ़ॉल्ट रूप से बंद हैं। कॉलर को एक पूर्ण रेंडर snapshot प्रदान और हैश करना होगा, मिलान करने वाले रिमोट अभियान को ऑपरेशनल रूप से फ्रीज करना होगा, और एक टिकाऊ deliveryKey प्रदान करनी होगी। वर्गीकरण से पहले मूल्य निर्धारण की पुन: जाँच की जाती है, लेकिन वर्तमान वर्गीकरण API में कोई एटॉमिक expected-price फ़ील्ड नहीं है। डुप्लिकेट, अवरुद्ध, अस्वीकृत, और अस्पष्ट वितरण स्थितियाँ कभी भी स्वचालित रूप से पुनः नहीं भेजी जाती हैं।
प्रायोगिक BigMailer स्रोत ZIP डाउनलोड करें
1. इंस्टॉल करें
इस अप्रकाशित स्रोत ZIP को नियंत्रित Node.js 24+ सर्वर एप्लिकेशन में एक्सट्रैक्ट करें और README.md और SECURITY.md की समीक्षा करें। src से सीधे रैपर और FileDeliveryStore इम्पोर्ट करें। यह npm या BigMailer मार्केटप्लेस इंस्टॉलेशन नहीं है और इसकी कोई थर्ड-पार्टी रनटाइम डिपेंडेंसी नहीं है।
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. सुरक्षित रूप से कॉन्फ़िगर करें
समीक्षा होने तक enabled, paidConsent, और remoteTemplateSnapshotLimitationAcknowledged को false रखें। API keys, ब्रांड और कैंपेन UUIDs को केवल सर्वर-साइड पर स्टोर करें। FileDeliveryStore को प्राइवेट ड्यूरेबल स्टोरेज पर रखें। ताज़ा समीक्षा की गई मूल्य निर्धारण जानकारी को expectedPricing में कॉपी करें, यह समझते हुए कि वर्तमान classify API इसे एटॉमिक रूप से लॉक नहीं कर सकता है।
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. सोच-समझकर उपयोग करें
प्रत्येक नियंत्रित API send के लिए, एक स्थिर deliveryKey, सभी प्रदर्शित text/plain और text/html विकल्प, सटीक render snapshot और snapshotDigest(snapshot) प्रदान करें। remote-template सीमा को केवल तब स्वीकार करें जब एक ऑपरेशनल कंट्रोल उस snapshot से मेल खाने वाले BigMailer कैंपेन रिवीजन को फ्रीज कर दे। डैशबोर्ड और असंबंधित API सेंड्स इस रैपर को बाईपास करते हैं।
await integration.send({
deliveryKey: durableBusinessEventId,
snapshot,
snapshotSha256: snapshotDigest(snapshot),
email: recipient,
variables,
});
परिणाम, विफलताएं और सीमाएं
FileDeliveryStore वर्गीकरण से पहले delivery key को सुरक्षित रखता है। डुप्लीकेट, विरोध, ब्लॉक, अस्वीकृति, और अस्पष्ट डिलीवरी परिणाम स्वचालित रूप से दोबारा send नहीं हो सकते। BigMailer का send एंडपॉइंट निरीक्षण किए गए मुख्य भाग के बजाय मर्ज डेटा स्वीकार करता है, इसलिए सफल वर्गीकरण इस बात का प्रमाण नहीं है कि परिवर्तनशील रिमोट कैंपेन सामग्री अभी भी मेल खाती है; जब सटीक कपलिंग की आवश्यकता हो तो दूसरे प्रदाता का उपयोग करें।
गोपनीयता और सशुल्क संचालन
विश्लेषण सेंडर का डिस्प्ले नेम, विषय और संदेश बॉडी SendRepute को भेजता है। प्राप्तकर्ताओं और अटैचमेंट को अलग से प्रसारित नहीं किया जाता है, लेकिन बॉडी में शामिल कंटेंट प्रसारित किया जाता है। क्रेडेंशियल को गुप्त रखें और रिक्वेस्ट/बॉडी लॉगिंग को अक्षम करें। इनबॉक्स-प्लेसमेंट या डिलीवरी की कोई गारंटी नहीं है।
वर्गीकरण सशुल्क है। सहमति देने से पहले वर्तमान मूल्य निर्धारण और अपने खाते की खर्च सीमाएं पढ़ें। एक समान खाता/सामग्री/मॉडल अनुरोध 24 घंटों के भीतर रसीद को फिर से चला (replay) सकता है; बदली हुई सामग्री या मॉडल पर नया शुल्क लग सकता है। यह न मान लें कि पुनः प्रयास निःशुल्क है। AI पुनर्लेखन के लिए सशुल्क सबमिशन से पहले चयनित मूल रसीद, मोड और शर्तों के लिए अधिकतम-शुल्क उद्धरण की आवश्यकता होती है; प्रगतिरत रसीद के लिए पोल करें और किसी अन्य अनुरोध को शुरू करने के बजाय मूल अनुरोध ID के साथ पूर्ण परिणामों को रिकवर करें। 'Rewrite All' बिना किसी अन्य डेबिट के एक सटीक अंतिम रेंडर किए गए ड्राफ्ट को सत्यापित कर सकता है। AI टेम्प्लेट जेनरेशन और नेटिव VIP एक्सेस की कीमतें अलग-अलग हैं; मानक बिल्डर प्रोसेसिंग निःशुल्क है। कोई भी विश्लेषण, पुनर्लेखन या बिल्डर परिणाम वितरण, इनबॉक्स प्लेसमेंट या अनुपालन की गारंटी नहीं देता है।
ऑफ़लाइन सत्यापन हर फ्रेमवर्क, प्लगइन या ट्रांसपोर्ट वर्ज़न का सर्टिफिकेशन नहीं है। शामिल किए गए इंस्टॉलेशन और सुरक्षा निर्देशों को पढ़ें, जानबूझकर कॉन्फ़िगर किए जाने तक सशुल्क विश्लेषण को अक्षम रखें, और महत्वपूर्ण मेल के लिए इसे सक्षम करने से पहले अपनी चुनी हुई विफलता नीति का परीक्षण करें।
कीमतों की समीक्षा करें
कस्टमर API संदर्भ
इंटीग्रेशन सपोर्ट से पूछें