LoginSignup
3
1

More than 3 years have passed since last update.

Node.jsでSMSをバッチで送信

Last updated at Posted at 2021-01-07

このポストで簡単なSMSバッチ送信方法を紹介したいと思います。

最近SMS送信できるAPIが増えてきていると思いますが、大体1通ずつの送信になっています。APIを提供されている会社の中、Vonageという会社があります。VonageのSMS APIも1通ずつの送信になっていますが、バッチ送信のサンプルコードも提供しています。このサンプルを使ってみようと思っています。https://github.com/nexmo-se/simple-sms-blaster

Screen Shot 2021-01-07 at 15.39.17.png

このサンプルはNode.jsで書かれていて、マイクロサービスとしてデプロイするのは簡単にできると思います。このSMSバッチ送信サービスにCSVをPOSTしたら、VonageのSMS APIをコールしてSMSを送信します。

SMSバッチ送信を試しましょう

事前に準備するもの

サンプルの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を設定する必要があります。

.env
# 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というファイルにしています。知らない人にいきなり送信すると良くないので、自分の手元にある電話番号に変えて下さい。

test_20210107.csv(utf8)
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

SMSが届きました。
IMG_2346.PNG

最後にノートと注意

  • 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として入れればいけそうな気がします。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1