Python で SMS(ショートメッセージサービス)送信 - Twilio

最近はログインの 2 段階認証などで、SMS のテキストメッセージがよく使われますね。

ここでは Python で Twilio を使って SMS(ショートメッセージサービス)を送信する送信する方法についてご説明します。

Twilio とは?

Twilio とは、テキストメッセージや音声通話などのクラウドAPIサービスを提供している大手の会社です。

日本では、KDDI ウェブコミュニケーションズが代理店となっています。

初期費用やアカウントの維持費などもなく、料金は今のところ日本の番号の場合、SMS を 1 通送るのに 8 セント程度、新しい電話番号を持ちたければ月々 4.5 ドル〜程度です。

アカウントの登録は無料で、登録すると 15 ドルくらいお試し用の残高がもらえるので、今回はそれを使います。


「KDDI Twilio アカウント作成」で検索すると、KDDI の「Twilioアカウント作成-無料サインアップ」のページが出てきますので、ご参考に Twilio のアカウントを作成しておいてください。

Python で SMS 送信 1


Twilio で SMS 送信の準備をする

Twilio に登録してログインすると、次のようなダッシュボードが表示されます。

Python で SMS 送信 2

[Get a Trial Number] ボタンをクリックして、トライアル用の電話番号を取得してください。

Python で SMS 送信 3

表示されるアメリカの電話番号は無料で取得できます。


今回、Python から SMS のメッセージを送信するのに必要な情報は以下の 3 つです。

  • Twilio の電話番号
  • ACCOUNT SID
  • AUTH TOKEN

Python で SMS 送信 4

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 が出力されました。

Python で SMS 送信 5

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 ページなどに書かれていますので、確認してみてください。

Python で SMS 送信 6

URL の account_sid の後の Messages は SMS のメッセージ送信で、続けて.json を指定するとレスポンスを json 形式で返してくれます。


上のコードを実行すると SMS のメッセージが送信され、以下のような情報が出力されました。

Python で SMS 送信 7

Python で SMS 送信 8


以上、Python で Twilio を使って SMS(ショートメッセージサービス)を送信する送信する方法についてご説明しました。

© 2024 やさしい Python 入門