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 ആണ്. ഇത് നിങ്ങളുടെ ഇമെയിലുകൾ സ്പാം ഫോൾഡറിലേക്ക് പോകാതിരിക്കാൻ സഹായിക്കുന്നു.

ഈ പരിഹാരത്തിൽ നിന്നുള്ള മൂന്ന് പാഠങ്ങൾ:

  • ഇവന്റ് പേലോഡ് (event payload) ഉപയോഗിക്കുക. ഡാറ്റ ഇതിനകം തന്നെ webhook-ൽ ഉണ്ടെങ്കിൽ, ഡാറ്റാബേസിൽ മാറ്റങ്ങൾ വരുത്തേണ്ടതില്ല. ഇത് റിസ്കും മെയിന്റനൻസും കുറയ്ക്കുന്നു.
  • എൻകോഡിംഗ് ശ്രദ്ധിക്കുക. നിങ്ങൾ ഒന്നിലധികം ഭാഷകൾ പിന്തുണയ്ക്കുന്നുണ്ടെങ്കിൽ, സ്പാം ഫിൽട്ടറുകൾ ഒഴിവാക്കാൻ സബ്ജക്റ്റ് ലൈൻ എൻകോഡിംഗ് ഉള്ളടക്കവുമായി (content) പൊരുത്തപ്പെടുന്നുണ്ടെന്ന് ഉറപ്പാക്കുക.
  • ഹാർഡ്കോഡ് ചെയ്ത വാല്യൂകൾ (hardcoded values) പരിശോധിക്കുക. നിങ്ങൾ അന്താരാഷ്ട്ര തലത്തിലേക്ക് വളരുമ്പോൾ, നിങ്ങളുടെ നോട്ടിഫിക്കേഷൻ ഫംഗ്ഷനുകളിൽ ഭാഷാ ക്രമീകരണങ്ങൾ ഹാർഡ്കോഡ് ചെയ്തിട്ടുണ്ടോ എന്ന് പരിശോധിക്കുക.

ഒരു സ്റ്റേറ്റ്‌ലെസ് ഡിസൈൻ (stateless design) നിങ്ങളുടെ സിസ്റ്റം പരിപാലിക്കാൻ എളുപ്പമാക്കുകയും തകരാറുകൾ സംഭവിക്കുന്നത് തടയുകയും ചെയ്യുന്നു.

സ്രോതസ്സ്: https://dev.to/susumun/multilingual-emails-from-a-stripe-webhook-inferring-language-from-currency-i99