2021/03/14
[Python]NexmoでSMSを送信
概要
とあるWebアプリで、携帯電話番号認証を実装する必要があり、そのために認証コードを携帯電話に送信する必要性が出てきました。
BackendにはPythonを使用しているためPythonで簡単にSMSを送信できるやり方がないか調査して対応しました。
流れ
Twilioを検討
まずは、APIを使ってSMSが日本国内に簡単に送信できるサービスがないかを探しました。
最初に検討したのは、Twilioでした。
私の中で実績を広く聞いていたため、なんとなく業界標準だと思い、こちらを採用しようとしました。
ところが、導入に時間がかかる(承認プロセスが必要)という最大のデメリットがありました。(詳細は以下)
これが原因で、SMSを送信するために必要な電話番号の購入ができませんでした。
とにかくすぐ実装して検証したいニーズがあったためTwilioの導入を断念しました。
Nexmoを検討
次にざっくり調べたところVonage APIというNexmoが提供しているものに目をつけました。
Twilioで必要な電話番号の購入が不要で、アカウントを作成してからものの数秒でSMSを送信できたため、こちらのサービスを導入を即座に決めました。
(SMSの送信を試すのにクレジットカードなどの登録は不要ってのもよかったです。)
以下ではPythonでの実装のメモを残しておきます。
実装
アカウント登録後にSMSの送信メニューにいくとやり方が載っていたので、めちゃくちゃ楽でした。
client install
% poetry add nexmo
# または pipの人は pip install nexmo
送信処理
- 事前にダッシュボードからapi keyとsecretをメモしておきます。
- From名や本文は英語じゃないと文字化けしてしまいました。(もしかしたらStringじゃなくて、日本語バイト列を渡したら日本語もいけるかもしれませんが、時間なくて検証してないです。)
import nexmo
VONAGE_API_KEY = "your-api-key"
VONAGE_API_SECRET = "your-api-secret"
client = nexmo.Client(
key=VONAGE_API_KEY,
secret=VONAGE_API_SECRET,
)
client.send_message({
"from": "From Name",
"to": "8190XXXXXXXX", # 日本の国際電話番号のフォーマット(81から始まるやつ)
"text": "This is test", # 送信したいメッセージ
})
以上になります。
とにかくすぐに導入したいという人はNexmoが良いのではないかと思います。
関連する記事
[Python]ハイフンなし電話番号からハイフン付きに復元
Pythonでハイフンなしの日本の電話番号をハイフン付きのものに変換する
[Python]BeautifulSoup4でhtmlの解析
BeautifulSoup4というPythonのライブラリを使って、特定のURLのコンテンツを取得し、タイトルや説明文を取得できるようにしました。
[Python]銀行コードと支店コードの取扱
Pythonで銀行コード、支店コードデータを取り扱う便利なライブラリzengin-codeを導入しました。
Sendgridを使ってメールの受信を行う
Inbound Email Parse Webhookという機能を利用してメールを受信したらWebhookを呼び出すようにしました