🔰

curl で SMS 送信

2024/12/03に公開

こんにちは。KDDI ウェブコミュニケーションズ(KWC)の小原です。

1992年12月3日に世界ではじめて SMS が送信されました。そのメッセージは Merry Christmas でした。その日、Vodafone のオフィスでクリスマスパーティーをしていたからだそうです。

この12月3日の Vonage Advent Calendar 2024 の記事では curl を使って SMS 送信します。障害通知やリマインダなど、いろいろと活用できると思います。

curl による完全な例は下記です。Windows ユーザは curl の注意点をご参照ください。

curl -X POST https://rest.nexmo.com/sms/json \
  -d "from=KWCPLUS" \
  -d "to=8160XXXXYYYY" \
  -d "text=SMS本文は660文字まで書くことができます" \
  -d "type=unicode" \
  -d "api_key=$VONAGE_API_KEY" \
  -d "api_secret=$VONAGE_API_SECRET"

from と to は見慣れないかもしれません。後ほどご案内します。

api_key と api_secret は Vonage(ボネージ)に契約することで発行されます。

Vonage とは

Vonage は米国ニュージャージー州に本社を置く CPaaS(Communication Platform as a Service)企業です。現在はスウェーデンの大手通信機器会社エリクソンの傘下です。

2024年2月14日より、弊社 KWC が Vonage の再販事業を開始しました。

Vonage アカウントの作成手順はこちらです。

契約が完了すると API Key と API Secret が発行されます。

仕様

従量課金のため送信しなければ 0 円です。

項目 概要
初期費用 0 円
月額費用 0 円
発信料 70 文字あたり 11 円。改行も 1 文字換算
最大文字数 660 文字
秒間送信数 30 通
From Alphanumeric Sender ID(後述)
To E.164/MSISDN(後述)

From

From には 3 ~ 11 文字の大小英数字、スペースが利用できます(Alphanumeric Sender ID より)。

数字のみの利用はできないため、電話番号は指定できません。

  • SMS Test
  • DiskUsage80

To

To は 8180XXXXYYYY の形式(E.164/MSISDN)にします。

電話番号の先頭の 0 を外し、先頭に国番号を追加します。日本の国番号は 81 です。

たとえば電話番号が 080-XXXX-YYYY であれば 8180XXXXYYYY になります。

送信

実際に送信してみましょう。

to と api_key, api_secret を設定すれば送信可能です。届きましたか?

curl -X POST https://rest.nexmo.com/sms/json \
  -d "from=KWCPLUS" \
  -d "to=8160XXXXYYYY" \
  -d "text=送信成功おめでとうございます" \
  -d "type=unicode" \
  -d "api_key=$VONAGE_API_KEY" \
  -d "api_secret=$VONAGE_API_SECRET"

複雑な本文の送信

SMS の本文が複数行あったり、シェルのエスケープが必要な場合はファイルから読み込むと便利です。

送信したい内容を body.txt に保存します。

body.txt
      ★
     ****
    **o**
   ****x**
  **o******
********x***
       {||}
       {||}

curl の --data-urlencode の @filename を利用して body.txt を読み込みます。

curl -X POST https://rest.nexmo.com/sms/json \
  -d "from=KWCPLUS" \
  -d "to=8160XXXXYYYY" \
  --data-urlencode "text@body.txt" \
  -d "type=unicode" \
  -d "api_key=$VONAGE_API_KEY" \
  -d "api_secret=$VONAGE_API_SECRET"

ハッピーホリデー!

さいごに

SMS のより詳細や、プログラムを利用した方法、届かなかった場合のトラブルシューティングは Vonage SMS ガイド をご参照ください。

Windows で curl を使う

Windows ユーザは WSL をインストールすることで、記事にある内容そのままで curl が利用できます。

もし Windows 10 build 17063 以降の cmd.exe で curl を利用する場合は下記の変更が必要になります。

UNIX Windows
行の継続 \ ^
環境変数 $VAR %VAR%

SMS の本文は UTF-8 の必要があるため、--data-urlencode の @filename を利用し、UTF-8 で書かれたファイルを読み込む方法が便利です。

改行も一文字として換算します。70 文字単位で課金されるため、UTF-8/CRLF ではなく、UTF-8/LF をおすすめします。

curl -X POST https://rest.nexmo.com/sms/json ^
  -d "from=KWCPLUS" ^
  -d "to=8160XXXXYYYY" ^
  --data-urlencode "text@body.txt" ^
  -d "type=unicode" ^
  -d "api_key=%VONAGE_API_KEY%" ^
  -d "api_secret=%VONAGE_API_SECRET%"

参考資料

KWCPLUS

Discussion