このポストで簡単なSMSバッチ送信方法を紹介したいと思います。
最近SMS送信できるAPIが増えてきていると思いますが、大体1通ずつの送信になっています。APIを提供されている会社の中、Vonageという会社があります。VonageのSMS APIも1通ずつの送信になっていますが、バッチ送信のサンプルコードも提供しています。このサンプルを使ってみようと思っています。https://github.com/nexmo-se/simple-sms-blaster
このサンプルはNode.jsで書かれていて、マイクロサービスとしてデプロイするのは簡単にできると思います。このSMSバッチ送信サービスにCSVをPOSTしたら、VonageのSMS APIをコールしてSMSを送信します。
#SMSバッチ送信を試しましょう
###事前に準備するもの
- Vonage(Nexmo)のAPI Key(ここから作れます)*NexmoがVonageに買収されました。
- git
- npm
- curl
###サンプルのSMSバッチ送信サービスを用意
1)コードをCloneします。
git clone https://github.com/nexmo-se/simple-sms-blaster.git
cd simple-sms-blaster
2)パッケージをインストールします。
npm install
3)コンフィグファイルを作ります。
cp .env.example .env
テキストエディターでパラメーターを設定します。少なくともAPI_KEYとAPI_SECRETを設定する必要があります。
# Nexmo SMS API Endpoint
API_URL=https://rest.nexmo.com/sms/json
# Nexmo API Key
# ここを設定して下さい
API_KEY=key
# Nexmo API Secret
# ここを設定して下さい
API_SECRET=secret
# Sender ID used for sending out SMS
# SMSの送信元 *11文字まで、アルファニューメリック
SENDER_ID=NXSMS
# Text per second. Rate of sending out SMS Request
# マックスの送信レート
TPS=30
# Number of lines to skip when reading CSV. Useful if there are header lines
# ヘッダーがあれば、適切な値にして下さい
CSV_SKIP_LINES=0
4)サーバーをスタートします。
npm start
###SMSを送信
5)CSVファイルを準備します。
SMSバッチ送信サービスにアップするCSVを準備します。utf8エンコーディングが期待されると思います。簡単なフォーマットで、2カラムしかないです。ヘッダーも必要ないです。
No. | カラム | 内容 |
---|---|---|
1 | to | 送信先の電話番号 |
2 | text | SMSの内容 |
test_20210107.csvというファイルにしています。知らない人にいきなり送信すると良くないので、自分の手元にある電話番号に変えて下さい。
819011111111,テストSMSです。
ここでちょっと注意しないといけないのはtoの電話番号がE.164フォーマットで書かないといけないことです。Wikipediaを読んでも分かりにくいと思うので、簡単に言うと、日本の電話番号(090-1111-1111)からスタートして、最初の「0」と「-」を消して、「81」を頭に追加すると、E.164フォーマットになります。電話のプロに聞くと、最初の「0」が国内プレフィックスだからE.164(インターナショナルフォーマット)で使わないです、、、など、、、色々詳しく教えてくれると思いますが、下記の例を見て真似するのは一番早いと思います。
日本の電話番号 | E.164 |
---|---|
090-1111-1111 | 819011111111 |
070-2345-6789 | 817023456789 |
6) バッチサービスにPOSTします。
やっとSMSを送信します。「file」というパラメーターとしてPOSTします。
curl -F 'file=@./test_20210107.csv' http://localhost:8080/upload
#最後にノートと注意
- CSVでは送信先の電話番号をE.164で書く。
- .envの「SENDER_ID」がわりと自由に設定できるが、キャリア(特に海外の場合)のルールがあるので、要注意。
- .envの「TPS」について、デフォルトだと、30を越えられない。https://help.nexmo.com/hc/en-us/articles/203993598-What-is-the-Throughput-Limit-for-Outbound-SMS-
- このポストのスコープ外ですが、エンドユーザーに迷惑かけずスパムしたりしないで下さい。
###追加
コードを見ると、src/server.jsに「POST /blast」というエンドポイントもあります。実は、さっき「POST /upload」をコールしたんですが、バッチ送信サービスはcsvを読んだ後「POST /blast」を使っているそうです。「For Internal Use」と書いてありますが、適切なjsonを/blastにポストしたら、csvがなくてもSMSの送信はできそうです。ざっと見た感じでは送信先番号とSMSの内容を「records」というパラメーターにArrayとして入れればいけそうな気がします。