Python で SMS(ショートメッセージサービス)送信 - Twilio
最近はログインの 2 段階認証などで、SMS のテキストメッセージがよく使われますね。
ここでは Python で Twilio を使って SMS(ショートメッセージサービス)を送信する送信する方法についてご説明します。
Twilio とは?
Twilio とは、テキストメッセージや音声通話などのクラウドAPIサービスを提供している大手の会社です。
日本では、KDDI ウェブコミュニケーションズが代理店となっています。
初期費用やアカウントの維持費などもなく、料金は今のところ日本の番号の場合、SMS を 1 通送るのに 8 セント程度、新しい電話番号を持ちたければ月々 4.5 ドル〜程度です。
アカウントの登録は無料で、登録すると 15 ドルくらいお試し用の残高がもらえるので、今回はそれを使います。
「KDDI Twilio アカウント作成」で検索すると、KDDI の「Twilioアカウント作成-無料サインアップ」のページが出てきますので、ご参考に Twilio のアカウントを作成しておいてください。
Twilio で SMS 送信の準備をする
Twilio に登録してログインすると、次のようなダッシュボードが表示されます。
[Get a Trial Number] ボタンをクリックして、トライアル用の電話番号を取得してください。
表示されるアメリカの電話番号は無料で取得できます。
今回、Python から SMS のメッセージを送信するのに必要な情報は以下の 3 つです。
- Twilio の電話番号
- ACCOUNT SID
- AUTH TOKEN
twilio ライブラリを使って SMS 送信する
それでは、Python で SMS のメッセージを送信してみましょう。
Twilio で Python 用のヘルパーライブラリが提供されているので、pip を使ってインストールしてください。
pip install twilio
Python で twilio ライブラリを使って SMS 送信するコードはこちらです。
from twilio.rest import Client
account_sid = "先ほど取得した ACCOUNT SID"
auth_token = "先ほど取得した AUTH TOKEN"
to_number = "+1XXXXXXXXXX" # 送信先の電話番号
from_number = "+1410305XXXX" # 先ほど取得した Twilio 電話番号
body = "SMSメッセージのテストです。"
client = Client(account_sid, auth_token)
message = client.messages.create(to=to_number, from_=from_number, body=body)
print(message.sid)
まず、1 行目で twilio パッケージから必要な Client クラスをインポートています。
3 ~ 8 行目は必要な変数を定義しています。注意しないといけないのは、電話番号は国際電話をかける時のように、+ と国番号が必要です。
日本の電話番号の場合は +81 の後に市外局番のゼロをとった電話番号を続けます。
body が送られるメッセージの内容になります。
10 行目で Client オブジェクトを作り、11 行目で Twilio に SMS メッセージを送信するリクエストを生成しています。
上のコードを実行すると SMS のメッセージが送信され、sid が出力されました。
requests パッケージを使って SMS 送信する
ご参考までに、twilio ライブラリを使わなくても、普通に POST メソッドの HTTP リクエストで、Twilio を使って SMS のメッセージを送信することができます。
pip を使ってパッケージを Requests パッケージをインストールしてください。
pip install requests
twilio ライブラリも裏側では requests パッケージを使っています。
Python で requests パッケージを使って SMS 送信するコードはこちらです。
import requests
from requests.auth import HTTPBasicAuth
account_sid = "先ほど取得した ACCOUNT SID"
auth_token = "先ほど取得した AUTH TOKEN"
url = f"https://api.twilio.com/2010-04-01/Accounts/{account_sid}/Messages.json"
to_number = "+1XXXXXXXXXX" # 送信先の電話番号
from_number = "+1410305XXXX" # 先ほど取得した Twilio 電話番号
body = "SMSメッセージのテストです!"
auth = HTTPBasicAuth(account_sid, auth_token)
data = {"To": to_number, "From": from_number, "Body": message}
r = requests.post(url, auth=auth, data=data)
print(f"statusCode: {r.status_code}")
resp_dict = r.json()
for key in resp_dict:
print(f"{key}: {resp_dict[key]}")
Python で requests パッケージを使って、Basic 認証をともなう POST メソッドの HTTPリクエストを送信する方法は「Python で HTTP リクエスト - GET, POST, Basic 認証」をご覧ください。
自前で http リクエストを送信するので、リクエスト先の url が必要になります。
バージョン番号はずっと変わっておらず 2010-04-01 ですが、Twilio ドキュメントの Sending Messages ページなどに書かれていますので、確認してみてください。
URL の account_sid の後の Messages は SMS のメッセージ送信で、続けて.json を指定するとレスポンスを json 形式で返してくれます。
上のコードを実行すると SMS のメッセージが送信され、以下のような情報が出力されました。
以上、Python で Twilio を使って SMS(ショートメッセージサービス)を送信する送信する方法についてご説明しました。