Vlastní SMS brána
· 3 minuty čtení
Pokud se rozhodnete více či méně logiky držet u sebe v aplikaci, přinášíme pár tipů po více než 10 letech provozování SMS brány
Pokud můžete, použijte existující knihovny
Zdá se to často jako triviální věc (odeslání 1 HTTP requestu), ale ve skutečnosti budete řešit několik scénářů, které dříve nebo později přijdou. Ukázka některých z nich:
- Co když odesílání zprávy trvá déle než 30-60 sekund a spojení vytimeoutuje?
- Co když se nám nepodařilo uložit výsledek odesílání?
- Jak reagovat na nedokumentované odpovědi SMS serveru?
- Jakou zvolit strategii pro opakování požadavku z důvodu chyby nebo překročení limitu počtu požadavků?
- Co když bude potřeba najednou poslat 10x nebo 100x více zpráv?
- Bude u vás vše funkční pokud bude odesílání nedostupné 5min, 20min nebo 2 hodiny?
Obecně platným doporučením pak jsou následující postupy
- Používejte frontu na odeslání zpráv - pokud např. odesíláte zprávy po stisknutí tlačítka, může uživatel snadno kliknutí opakovat pokud se zpráva odesílá déle než obvykle. Přidání zprávy do fronty je obvykle velmi rychlé - obecně by odesilání zpráv nemělo být blokující akcí (nemělo by zamezit dokončit objednávku apod.).
- Fronty je obvykle vhodné mít dvě (pro transakční zprávy a pro marketingové) nebo tři (navíc pro prioritní)
- Pokud odesílání z fronty není možné, implementujte dočasnou cache na poslední odeslané zprávy (např. hash otisk textu zprávy a tel. čísla) a nedovolte odeslat stejnou zprávu pro stejného příjemce více než jednou
- Vždy ukládejte odpověď při neodeslání zprávy (ideálně i celý požadavek pro možnost jej opakovat) aby bylo možné zjistit příčinu
- U odeslaných zpráv ukládejte alespoň identifikátor pro možnost sledovat úspěšnost doručení
- V logu se vyvarujte ukládání citlivých informací. Např. maskujte jména nebo čísla.
Co za vás vyřeší SmsManager?
- Služby jsou umístěny v AWS a provozujeme je v 2 lokalitách (Frankfurt a Ireland). Více o dostupnosti služeb najdete na našem blogovém příspěvku o poskytování služeb s vysokou dostupností.
- API (AWS Gateway) je navrženo tak, aby směrovalo přímo do služby AWS SQS. To znamená, že jsme minimalizovali systémy, které jsou nutné pro příjem požadavku na odeslání zprávy. Můžete se tedy spolehnout, že pokud k nám zprávu odešlete, tak bude u nás přijata do fronty.
- Automaticky do logů neukládáme citlivé informace. Všechny logy jsou anonymizované (odstraňujeme známá jména a všechny čísla nahrazujeme za hvězdičky).
- Duplicitní zprávy u nás automaticky kontrolujeme a nejsou povoleny. V případě timeoutu tedy můžete zprávu klidně odeslat vícekrát a nebude duplicitně zpracována.