Stripe Webhooks மூலம் பலமொழி மின்னஞ்சல்கள்
ஒரு SaaS-ஐ உலகளவில் விரிவுபடுத்துவதில் மறைமுகமான சிக்கல்கள் உள்ளன. எங்கள் Stripe webhooks-இல் நாங்கள் ஒரு சிக்கலைக் கண்டறிந்தோம்.
எங்கள் அமைப்பு, ஆங்கிலம் பேசும் பயனர்களுக்குக் கூட கொள்முதல் உறுதிப்படுத்தல்கள் (purchase confirmations), புதுப்பிப்புகள் (renewals) மற்றும் தோல்வி அறிவிப்புகளை (failure notices) ஜப்பானிய மொழியில் அனுப்பியது. இந்த பிழை அமைதியாக இருந்ததால் பல மாதங்களாகத் தொடர்ந்தது.
நாணயத்தின் (currency) அடிப்படையில் மொழியைக் கண்டறிவதன் மூலம் இதைத் தீர்த்தோம்.
நாங்கள் மூன்று வடிவமைப்பு விருப்பங்களைக் (design options) கவனித்தோம்:
- விருப்பம் A: தரவுத்தளத்தில் (database) மொழியைச் சேமிப்பது. இதற்கு பழைய பயனர்களுக்காக மைக்ரேஷன்கள் (migrations) மற்றும் பேக்பில்ஸ் (backfills) தேவைப்படும்.
- விருப்பம் B: Stripe API-லிருந்து தகவலைப் பெறுவது. இது கூடுதல் API அழைப்புகளை (API calls) ஏற்படுத்தும், மேலும் பல வாடிக்கையாளர்கள் தங்களுக்குப் பிடித்த மொழியை (preferred locale) அமைப்பதில்லை.
- விருப்பம் C: webhook payload-இல் உள்ள நாணயத்தைப் பயன்படுத்துவது. இது இலவசமானது, தரவுத்தள மாற்றங்கள் தேவையில்லை, மேலும் ஏற்கனவே உள்ள பயனர்களுக்கு உடனடியாகச் செயல்படும்.
நாங்கள் விருப்பம் C-ஐத் தேர்ந்தெடுத்தோம். கொள்முதல் செய்யும் தருணத்தில் நாணயம் என்பது ஒரு நிலையான அறிகுறியாகும் (fixed signal). ஒரு பயனர் USD-இல் பணம் செலுத்தினால், அவர்களுக்கு ஆங்கிலம் கிடைக்கும். அவர்கள் JPY-இல் செலுத்தினால், அவர்களுக்கு ஜப்பானிய மொழி கிடைக்கும்.
இதன் தர்க்கம் (logic) எளிமையானது:
function lang_from_currency(string $currency): string {
$en_currencies = ['usd'];
return in_array(strtolower($currency), $en_currencies, true) ? 'en' : 'ja';
}
இது நான்கு முக்கிய Stripe நிகழ்வுகளுக்கும் (events) பொருந்தும்:
- checkout.session.completed
- invoice.payment_succeeded
- invoice.payment_failed
- customer.subscription.updated
PHP-இல் ஒரு தொழில்நுட்பச் சிக்கலையும் நாங்கள் கண்டறிந்தோம்.
mb_language('Japanese') என்பதைப் பயன்படுத்துவது தலைப்புகளை (subjects) ISO-2022-JP முறையில் குறியீடாக்கம் (encodes) செய்கிறது. இந்த அமைப்பைப் பயன்படுத்தி நீங்கள் ஆங்கிலத் தலைப்பை அனுப்பினால், Gmail மற்றும் Outlook அதை விசித்திரமான குறியீடாகக் கருதும். இது உங்கள் ஸ்பேம் ஸ்கோரை (spam score) அதிகரிக்கும்.
இதற்கான தீர்வு, மொழியின் அடிப்படையில் குறியீடாக்கத்தை மாற்றுவதாகும்:
mb_language($lang === 'en' ? 'uni' : 'Japanese');
'uni' என்பதைப் பயன்படுத்துவது UTF-8 Base64-ஐப் பயன்படுத்துகிறது. இது உங்கள் மின்னஞ்சல்கள் ஸ்பேம் கோப்புறையில் (spam folder) சேருவதைத் தவிர்க்கும்.
இந்தத் தீர்வில் இருந்து மூன்று பாடங்கள்:
- நிகழ்வு payload-ஐப் (event payload) பயன்படுத்துங்கள். தரவு ஏற்கனவே webhook-இல் இருந்தால், உங்கள் தரவுத்தளத்தைத் தொடாதீர்கள். இது அபாயத்தையும் பராமரிப்பையும் குறைக்கிறது.
- உங்கள் குறியீடாக்கத்தைக் (encoding) கவனியுங்கள். நீங்கள் பல மொழிகளை ஆதரித்தால், ஸ்பேம் வடிகட்டிகளைத் (spam filters) தவிர்க்க, உங்கள் தலைப்பு குறியீடாக்கம் உள்ளடக்கத்துடன் ஒத்துப்போவதை உறுதி செய்யவும்.
- ஹார்ட்கோட் செய்யப்பட்ட (hardcoded) மதிப்புகளைச் சரிபார்க்கவும். நீங்கள் சர்வதேச அளவில் செயல்படும்போது, உங்கள் அறிவிப்புச் செயல்பாடுகளில் (notification functions) மொழிகள் ஹார்ட்கோட் செய்யப்பட்டுள்ளதா என்பதைச் சரிபார்க்கவும்.
ஒரு stateless வடிவமைப்பு உங்கள் அமைப்பைப் பராமரிப்பதை எளிதாக்குகிறது மற்றும் அதைச் சிதைப்பதைக் கடினமாக்குகிறது.
