jinseokoh/aligo

Laravel notification channel for Aligo


Keywords
sms, notifications, laravel, lms, kakao, Aligo, ๋ฌธ์ž
License
MIT

Documentation

Laravel notification channel for Aligo

Total Downloads License

์ด ํŒจํ‚ค์ง€๋Š” Aligo ๋ฌธ์ž๋ฐœ์†ก API ๋ฅผ ์ด์šฉํ•˜์—ฌ SMS/LMS ๋ฐ ์นด์นด์˜ค์•Œ๋ฆผํ†ก ๋ฌธ์ž ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐœ์†กํ•˜๊ธฐ ์œ„ํ•œ PHP Laravel ํŒจํ‚ค์ง€์ด๋‹ค. v2 ์—์„œ๋Š” Laravel ์ปค์Šคํ…€ Notification ๋”œ๋ฆฌ๋ฒ„๋ฆฌ ์ฑ„๋„๋กœ ๋ณ€๊ฒฝํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, Notification ํด๋ž˜์Šค์˜ via ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด ๋ฌธ์ž๋ฐœ์†ก์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.

Among a handful of Text messaging API providers in Korea as of April, 2020 Aligo is the hands down winner in terms of price. (KRW 8.4 / message) Since the price was the only factor that matters when I choose the company it's subject to change anytime. (meaning that I have no business relationship with it whatsoever.)

๋ฌธ์ž๋ฅผ ๋ฐœ์†กํ•˜๊ฑฐ๋‚˜ ์นด์นด์˜ค์•Œ๋ฆผํ†ก์„ ๋ฐœ์†กํ•˜๋Š” API ์ œ๊ณต ์—…์ฒด๋Š” 2020๋…„ ๊ธฐ์ค€ ์–ด๋ฆผ์žก์•„ 10์—ฌ๊ตฐ๋ฐ๊ฐ€ ๋„˜๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ, ๊ฐ€๊ฒฉ์„ ๋น„๊ตํ•ด๋ณธ ๊ฒฐ๊ณผ ์•Œ๋ฆฌ๊ณ  (Aligo) ๋ผ๋Š” ์—…์ฒด์˜ ๋น„์šฉ์ด ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฒƒ์œผ๋กœ ํŒŒ์•…๋˜์–ด, ์ด ์—…์ฒด์˜ ๋ฌธ์ž๋ฐœ์†ก ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•œ ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ์ข€ ๋” ์ €๋ ดํ•œ ์„œ๋น„์Šค ์—…์ฒด๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ์ด ํŒจํ‚ค์ง€ ์‚ฌ์šฉ์ƒ ๋ฌธ์ œ๊ฐ€ ๋ฐœ๊ฒฌ๋œ๋‹ค๋ฉด, ์ด์Šˆ ํŠธ๋ž˜์ปค๋ฅผ ์ด์šฉํ•ด ๊ธ€์„ ๋‚จ๊ฒจ์ฃผ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ๋‹ค.

Warning

์•Œ๋ฆฌ๊ณ  ์„œ๋น„์Šค๋Š” ๊ณ ์ • IPv4 ์ฃผ์†Œ๋ฅผ ๋ฏธ๋ฆฌ ๋“ฑ๋กํ•œ ๋’ค ํ•ด๋‹น ์„œ๋ฒ„ ์ธ์Šคํ„ด์Šค์—์„œ๋งŒ ๋ฌธ์ž๋ฐœ์†ก์ด ๊ฐ€๋Šฅํ•œ ์ œ์•ฝ์‚ฌํ•ญ์ด ์žˆ๋‹ค. IP ์ฃผ์†Œ๊ฐ€ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ Horizontal Scaling ์ด ๋˜๋Š” ํด๋ผ์šฐ๋“œ ์„œ๋ฒ„ํ™˜๊ฒฝ์—์„œ๋Š” ์›์ฒœ์ ์œผ๋กœ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค. ๋Œ€์•ˆ์œผ๋กœ
NCloud ๋‚˜ AWS SNS ๋“ฑ์˜ ์„œ๋น„์Šค๋ฅผ ๊ณ ๋ คํ•˜๊ธฐ ๋ฐ”๋ž€๋‹ค.

Contents

Use-case

์ด ํŒจํ‚ค์ง€๋Š” 1๋ช…์˜ ์ˆ˜์‹ ์ž์—๊ฒŒ SMS/LMS ๋ฐ ์นด์นด์˜ค์•Œ๋ฆผํ†ก ๋ฌธ์ž๋ฅผ ๋ฐœ์†กํ•˜๊ธฐ ์œ„ํ•œ use-case ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, MMS ๋ฐœ์†ก๊ธฐ๋Šฅ, ์˜ˆ์•ฝ๋ฐœ์†ก, ๋‹ค์ˆ˜์˜ ์ˆ˜์‹ ์ž์—๊ฒŒ ๋ฌธ์ž๋ฐœ์†ก ๋“ฑ์˜ ๊ธฐ๋Šฅ๋“ค์€ ํ˜„์žฌ ๊ตฌํ˜„๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค.

Install

composer require jinseokoh/aligo

Setting Up

config/services.php ์— ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ

    'aligo' => [
        'app_id' => env('ALIGO_APP_ID'),
        'app_key' => env('ALIGO_APP_KEY'),
        'sms_from' => env('ALIGO_REGISTERED_PHONE'),
        'kakao_key' => env('ALIGO_KAKAO_CHANNEL_KEY'),
    ],

.env ์— ์ž์‹ ์˜ ๊ณ„์ • ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

ALIGO_APP_ID=socrates
ALIGO_APP_KEY=00000000000000000000000000000000
ALIGO_REGISTERED_PHONE=02-123-0000
ALIGO_KAKAO_CHANNEL_KEY=0000000000000000000000000000000000000000

๋ณด๋‹ค ์ž์„ธํ•œ ์ •๋ณด๋Š” https://smartsms.aligo.in/admin/api/info.html ์—์„œ ์ฐพ์•„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

SMS/LMS ๋ฌธ์ž ๋ณด๋‚ด๊ธฐ ์‚ฌ์šฉ๋ฒ•

AligoTextChannel ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, Notification ํด๋ž˜์Šค์— ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. AligoTextMessage ๋ฅผ ๋งŒ๋“ค๋•Œ content() ์— ์ง€์ •ํ•œ ๋ฌธ์ž์—ด ๊ธธ์ด์— ๋”ฐ๋ผ SMS ์„ค์ • ๋˜๋Š” LMS ์„ค์ •์ด ์ž๋™์œผ๋กœ ๋œ๋‹ค. ๋งŒ์ผ ์ง€์ •ํ•œ ๋ฌธ์ž์—ด์˜ ์ •ํ™•ํ•œ ๊ธธ์ด์™€ ์ƒ๊ด€์—†์ด 90 ๋ฐ”์ดํŠธ ์ด์ƒ๋˜๋Š” ๋ถ€๋ถ„์ด ์งค๋ ค๋‚˜๊ฐ€๋”๋ผ๋„ ์ €๋ ดํ•œ ๋น„์šฉ์˜ SMS ๋ฌธ์ž๋กœ ๋ณด๋‚ด๊ฒ ๋‹ค๋ฉด, short() ๋ฉ”์„œ๋“œ๋ฅผ ์•„๋ž˜์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ chaining ํ•œ๋‹ค:

    public function via($notifiable)
    {
        return [AligoTextChannel::class];
    }
 
    public function toAligoText($notifiable)
    {
        return (new AligoTextMessage())
            ->content('์ด ํŒจ๊ฐ€ ๋‹จํ’์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฑฐ์— ๋‚ด ๋ˆ ๋ชจ๋‘ํ•˜๊ณ  ๋‚ด ์†๋ชจ๊ฐ€์งˆ ๊ฑด๋‹ค. ์ซ„๋ฆฌ๋ฉด ๋’ˆ์ง€์‹œ๋˜์ง€.')
            ->short()
            ->debug();
    }

AligoTextMessage ๋Š” chaining ์ด ๊ฐ€๋Šฅํ•œ ์•„๋ž˜์˜ ๋ฉ”์„œ๋“œ๋“ค์„ ๊ฐ–๋Š”๋‹ค.

SMS/LMS ๋ฌธ์ž ์„ค์ •์‹œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋ฉ”์„œ๋“œ๋“ค (๋ชจ๋‘ fluent call chain ์ด ๊ฐ€๋Šฅ)

content($string). ๋ณด๋‚ผ ๋ฉ”์‹œ์ง€๋ฅผ ์ง€์ •ํ•œ๋‹ค.

short(). ๋ฉ”์‹œ์ง€ ๊ธธ์ด๊ฐ€ 90 ๋ฐ”์ดํŠธ ์ด์ƒ๋˜๋Š” ๊ฒฝ์šฐ, SMS ์œผ๋กœ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด์„œ 90 ๋ฐ”์ดํŠธ ์ด์ƒ๋˜๋Š” ๋ถ€๋ถ„์„ ์งค๋ผ๋ฒ„๋ฆฐ๋‹ค.

debug(). ํ…Œ์ŠคํŠธ ๋ชจ๋“œ๋กœ ์„ค์ •ํ•œ๋‹ค.

์นด์นด์˜ค์•Œ๋ฆผํ†ก ๋ณด๋‚ด๊ธฐ ์‚ฌ์šฉ๋ฒ•

์นด์นด์˜ค์•Œ๋ฆผํ†ก์€ SMS/LMS ๋ณด๋‹ค ์ €๋ ดํ•˜๊ฒŒ ์นด์นด์˜คํ†ก์œผ๋กœ ๋ฌธ์ž๋ฅผ ๋ณด๋‚ด๋Š” ์„œ๋น„์Šค์ด๋ฉฐ, ๋ณด๋‹ค ์ž์„ธํ•œ ์ •๋ณด๋Š” https://smartsms.aligo.in/admin/api/info.html ์—์„œ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค.

AligoKakaoChannel ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, Notification ํด๋ž˜์Šค์— ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค:

    public function via($notifiable)
    {
        return [AligoKakaoChannel::class];
    }
 
    public function toAligoKakao($notifiable)
    {
        return (new AligoKakaoMessage())
            ->code('TB_0824')
            ->replacements(['์˜ค์ง„์„', '๋Œ€ํ•œํ†ต์šด', '์˜ค์ „11์‹œ', '123-456-7890'])
            ->debug();
    }

AligoKakaoMessage ๋Š” chaining ์ด ๊ฐ€๋Šฅํ•œ ์•„๋ž˜์˜ ๋ฉ”์„œ๋“œ๋“ค์„ ๊ฐ–๋Š”๋‹ค.

์นด์นด์˜ค์•Œ๋ฆผํ†ก ๋ฌธ์ž ์„ค์ •์‹œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋ฉ”์„œ๋“œ๋“ค (๋ชจ๋‘ fluent call chain ์ด ๊ฐ€๋Šฅ)

code($string). ์•Œ๋ฆฌ๊ณ ์— ๋“ฑ๋ก๋˜์–ด ์žˆ๋Š” ์นด์นด์˜ค์•Œ๋ฆผํ†ก ํ…œํ”Œ๋ฆฟ ์ฝ”๋“œ๋ฅผ ์ง€์ •ํ•œ๋‹ค.

replacements(). ์นด์นด์˜ค์•Œ๋ฆผํ†ก ๋ฉ”์‹œ์ง€์˜ #{์ด๋ฆ„} ๋ถ€๋ถ„๊ณผ ๋Œ€์ฒด์‹œํ‚ฌ ๊ฐ’์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋ฐฐ์—ด์„ ์ง€์ •ํ•œ๋‹ค.

fallback(). ์นด์นด์˜ค์•Œ๋ฆผํ†ก ๋ฐœ์†ก์ด ์‹คํŒจํ•œ ๊ฒฝ์šฐ, ๋ฌธ์ž๋กœ ์ „ํ™˜ํ•˜์—ฌ ์ „์†กํ•œ๋‹ค.

debug(). ํ…Œ์ŠคํŠธ ๋ชจ๋“œ๋กœ ์„ค์ •ํ•œ๋‹ค.

์นด์นด์˜ค์•Œ๋ฆผํ†ก ํ…œํ”Œ๋ฆฟ

์นด์นด์˜ค์•Œ๋ฆผํ†ก ๋ฌธ์ž๋ฉ”์‹œ์ง€๋Š” ํ…œํ”Œ๋ฆฟ ํ˜•ํƒœ๋กœ ๋ฏธ๋ฆฌ ๋“ฑ๋กํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋ฉฐ ์ŠคํŒธ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ์‚ฌ์ „ ์Šน์ธ๋„ ํ•„์š”ํ•˜๋‹ค. ํ…œํ”Œ๋ฆฟ์— ๋“ฑ๋กํ•œ ์นด์นด์˜ค์•Œ๋ฆผํ†ก ๋ฉ”์‹œ์ง€๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค๋ฉด,

#{๊ณ ๊ฐ๋ช…} ๊ณ ๊ฐ๋‹˜! #{ํƒ๋ฐฐํšŒ์‚ฌ๋ช…}์ž…๋‹ˆ๋‹ค. #{ํƒ๋ฐฐ๋ฐฐ์†ก์‹œ๊ฐ„} ํƒ๋ฐฐ๋ฅผ ๋ฐฐ๋‹ฌํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ์šด์†ก์žฅ๋ฒˆํ˜ธ : #{์†ก์žฅ๋ฒˆํ˜ธ}

์ด ์˜ˆ์ œ ๋ฉ”์‹œ์ง€์˜ ๊ฒฝ์šฐ, #{์ด๋ฆ„} ํ˜•ํƒœ์˜ ์Šฌ๋กฏ์ด ๋ชจ๋‘ 4๊ฐœ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ฒด์ด๋‹ ๋ฉ”์„œ๋“œ replacements() ์˜ ์ธ์ž๊ฐ’์œผ๋กœ ['์˜ค์ง„์„', '๋Œ€ํ•œํ†ต์šด', '์˜ค์ „11์‹œ', '123-456-7890'] ์™€ ๊ฐ™์ด 4๊ฐœ์˜ String ์œผ๋กœ ์ด๋ค„์ง„ ๋ฐฐ์—ด์ด ํ•„์š”ํ•˜๋‹ค. ๋ชจ๋“  ์Šฌ๋กฏ์€ ์ˆœ์ฐจ์ ์œผ๋กœ ๋Œ€์ฒด๊ฐ€ ์ด๋ค„์ง€๋ฉฐ, ์ตœ์ข…์ ์œผ๋กœ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์นด์นด์˜ค์•Œ๋ฆผํ†ก ๋ฌธ์ž๊ฐ€ ๋ฐœ์†ก๋œ๋‹ค.

์˜ค์ง„์„ ๊ณ ๊ฐ๋‹˜! ๋Œ€ํ•œํ†ต์šด์ž…๋‹ˆ๋‹ค. ์˜ค์ „11์‹œ ํƒ๋ฐฐ๋ฅผ ๋ฐฐ๋‹ฌํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ์šด์†ก์žฅ๋ฒˆํ˜ธ : 123-456-7890

๋งŒ์ผ, ์Šฌ๋กฏ์˜ ๊ฐฏ์ˆ˜์™€ replacements() ์ธ์ž๋กœ ์ „๋‹ฌ๋œ ๋ฐฐ์—ด์˜ ๊ฐฏ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ, Exception ์ด ๋ฐœ์ƒํ•˜๋ฉฐ, ๋ฌธ์ž๊ฐ€ ๋ฐœ์†ก๋˜์ง€ ์•Š๋Š”๋‹ค.

Contributing

Please see CONTRIBUTING for details.

Credits

License

The MIT License (MIT). Please see License File for more information.