Stripe Webhooks నుండి బహుభాషా ఈమెయిల్స్
ఒక SaaSని ప్రపంచవ్యాప్తంగా విస్తరించడంలో కొన్ని దాగి ఉన్న ఇబ్బందులు ఉంటాయి. మా Stripe webhooksలో మేము అటువంటి ఒక సమస్యను గుర్తించాము.
మా సిస్టమ్ ఇంగ్లీష్ మాట్లాడే వినియోగదారులకు కొనుగోలు నిర్ధారణలు (purchase confirmations), పునరుద్ధరణలు (renewals), మరియు వైఫల్య నోటీసులను (failure notices) జపనీస్ భాషలో పంపింది. ఈ బగ్ ఎటువంటి శబ్దం చేయలేదు కాబట్టి నెలల తరబడి అలాగే ఉంది.
మేము కరెన్సీ ఆధారంగా భాషను అంచనా వేయడం ద్వారా దీనిని పరిష్కరించాము.
మేము మూడు డిజైన్ ఆప్షన్లను పరిశీలించాము:
- ఆప్షన్ A: డేటాబేస్లో భాషను నిల్వ చేయడం. దీనికి పాత వినియోగదారుల కోసం మైగ్రేషన్లు (migrations) మరియు బ్యాక్ఫిల్స్ (backfills) అవసరమవుతాయి.
- ఆప్షన్ B: Stripe API నుండి పొందడం. ఇది అదనపు API కాల్స్ను పెంచుతుంది మరియు చాలా మంది కస్టమర్లు తమకు నచ్చిన లోకేల్ను (preferred locale) సెట్ చేయరు.
- ఆప్షన్ C: webhook payloadలోని కరెన్సీని ఉపయోగించడం. ఇది ఉచితం, డేటాబేస్ మార్పులు అవసరం లేదు మరియు ఇప్పటికే ఉన్న వినియోగదారులకు వెంటనే పనిచేస్తుంది.
మేము ఆప్షన్ Cని ఎంచుకున్నాము. కొనుగోలు చేసే సమయంలో కరెన్సీ అనేది ఒక స్థిరమైన సంకేతం. ఒక వినియోగదారు USDలో చెల్లిస్తే, వారికి ఇంగ్లీష్ వస్తుంది. వారు JPYలో చెల్లిస్తే, వారికి జపనీస్ వస్తుంది.
లాజిక్ చాలా సరళమైనది:
function lang_from_currency(string $currency): string {
$en_currencies = ['usd'];
return in_array(strtolower($currency), $en_currencies, true) ? 'en' : 'ja';
}
ఇది నాలుగు ప్రధాన Stripe ఈవెంట్లకు పనిచేస్తుంది:
- checkout.session.completed
- invoice.payment_succeeded
- invoice.payment_failed
- customer.subscription.updated
PHPలో మేము ఒక సాంకేతిక ఇబ్బందిని కూడా గుర్తించాము.
mb_language('Japanese') ఉపయోగించడం వల్ల సబ్జెక్ట్లు ISO-2022-JPలో ఎన్కోడ్ చేయబడతాయి. మీరు ఈ సెట్టింగ్తో ఇంగ్లీష్ సబ్జెక్ట్ లైన్ను పంపితే, Gmail మరియు Outlook దానిని వింత ఎన్కోడింగ్గా భావిస్తాయి. ఇది మీ స్పామ్ స్కోర్ను (spam score) పెంచుతుంది.
దీనికి పరిష్కారం భాష ఆధారంగా ఎన్కోడింగ్ను మార్చడం:
mb_language($lang === 'en' ? 'uni' : 'Japanese');
'uni'ని ఉపయోగించడం వల్ల UTF-8 Base64 ఉపయోగించబడుతుంది. ఇది మీ ఈమెయిల్స్ స్పామ్ ఫోల్డర్లోకి వెళ్లకుండా చూస్తుంది.
ఈ పరిష్కారం నుండి మూడు పాఠాలు:
- ఈవెంట్ payloadని ఉపయోగించండి. డేటా ఇప్పటికే webhookలో ఉంటే, మీ డేటాబేస్ను తాకవద్దు. ఇది రిస్క్ మరియు మెయింటెనెన్స్ను తగ్గిస్తుంది.
- మీ ఎన్కోడింగ్పై దృష్టి పెట్టండి. మీరు బహుళ భాషలను సపోర్ట్ చేస్తుంటే, స్పామ్ ఫిల్టర్లను నివారించడానికి మీ సబ్జెక్ట్ లైన్ ఎన్కోడింగ్ కంటెంట్తో సరిపోలేలా చూసుకోండి.
- హార్డ్కోడ్ చేసిన విలువలను (hardcoded values) తనిఖీ చేయండి. మీరు అంతర్జాతీయ స్థాయికి వెళ్ళినప్పుడు, మీ నోటిఫికేషన్ ఫంక్షన్లలో హార్డ్కోడ్ చేసిన భాషా సెట్టింగ్లు ఉన్నాయేమో తనిఖీ చేయండి.
స్టేట్లెస్ డిజైన్ (stateless design) మీ సిస్టమ్ను నిర్వహించడం సులభతరం చేస్తుంది మరియు దెబ్బతినకుండా కాపాడుతుంది.
