Twilioのアリスに電話でメールを読みあげてもらう方法
- 2015年10月30日
- by SendGrid
- Category: 技術ネタ 機能・使い方
料理やストレッチなど手が離せないことをしている時、受信したメールの中身が気になってしまうことはありませんか?
SendGridのParse WebhookとTwilioの音声通話APIを組みあわせて、電話経由でメールを読みあげてもらうサンプルコードをご紹介します。
準備
- SendGridのアカウント
- お持ちでない方は新規会員登録をしましょう。
- 今回はParse Webhookによって、受信メールの内容をWebアプリケーションにPOSTするために使います。
- Webアプリケーション
- HerokuなどのPaaSを利用すると簡単です。
- SendGridからPOSTされた内容をTwilioに橋渡しします。
- Twilioのアカウント
- お持ちでない方はトライアルに登録しましょう。
- 今回は音声通話APIによって、自動で電話をかけて文章を読みあげるために使います。
- 電話
- ハンズフリーの着信設定をしておくといいでしょう。
ステップ1
Twilioの電話番号を取得します。
ステップ2
次のPython 3のサンプルコードをデプロイします。FlaskというWebアプリケーションフレームワークを使っています。
import os import urllib.parse from flask import Flask, request from twilio.rest import TwilioRestClient app = Flask(__name__) def voice_address(text_address): # 山括弧は読ませない return text_address. replace('<',' '). replace('>',' ') @app.route ('/') def index(): return 'Hello!' @app.route ('/incoming', methods =['POST']) def forward_to_twilio(): # POSTメソッドのパラメータを参照 sender = voice_address(request.form['from']) subject = request.form['subject'] body = request.form['text'] # TwiMLの組み立て twiml = '<Response><Say voice="alice" language="ja-jp">' + 'メールを受信しました。送信者は、' + sender + '、です。件名は、' + subject + '、です。本文は、' + body + '、です。</Say></Response>' # Twimletsのecho機能を使ってTwiMLのURL生成 # GETメソッドのパラメータには文字数制限があるためテスト用 echo_url = "http://twimlets.com/echo?Twiml=" + urllib.parse.quote(twiml) print(echo_url) try: # 環境変数を参照 account_sid = os.environ['TWILIO_ACCOUNT_SID'] auth_token = os.environ['TWILIO_AUTH_TOKEN'] from_number = os.environ['TWILIO_PHONE_NUMBER'] to_number = os.environ['YOUR_PHONE_NUMBER'] # Twilioの認証 client = TwilioRestClient(account_sid, auth_token) # Twilioに発信通話をリクエスト call = client.calls.create( from_ = from_number, to = to_number, url = echo_url) print(call.sid) return 'OK' except Exception as e: print(e) return 'NG' if __name__=='__main__': app.run()
次の環境変数を前提としています。
TWILIO_ACCOUNT_SID | TwilioのACCOUNT SID |
---|---|
TWILIO_AUTH_TOKEN | TwilioのAUTH TOKEN |
TWILIO_PHONE_NUMBER | Twilioの国際電話番号 |
YOUR_PHONE_NUMBER | お手持ちの電話の国際電話番号(日本は81始まり) |
詳しい動作環境などは、GitHubの「sendgrid-twilio-python-example」をご覧ください。Herokuボタンも用意したので、すぐにデプロイできます。
ステップ3
SendGridのParse Webhookを「SETTINGS > Inbound Parse」にて設定します。Parse Webhookは、指定HOSTのメールアドレスへ送信されたメールをパースして、その内容を指定URLにPOSTする機能です。
- HOST
- 受信メールアドレスのドメインを指定します。
- 今回は、SendGridが開発用に用意している「bymail.in」ドメインにサブドメインを付加したものを入力します。ここで付加するサブドメインは、一意なものであればなんでも構いませんが、ユーザ名の@より前の部分を利用して「sgxxxxxx.bymail.in」のようにすることを推奨しています。
- URL
- 受信したメールの内容をPOSTする先のWebアプリケーションのURL「(デプロイ先URL)/incoming」を指定します。
- POST内容の詳細は、APIリファレンスをご覧ください。
ステップ4
設定したHOSTのメールアドレス(例 test@sgxxxxxx.bymail.in)に、テストメールを送信してみてください。メールアドレスのローカルパートは何でも構いません。うまく設定できていれば、Twilioボイスエンジンのアリスから電話が掛かってきます。
あとは、必要な時に普段お使いのメールアドレスから自動転送するようにすればOKです。これで手を止めずに、メールの内容を音声で確認することができるようになりました!
おわりに
SendGridやTwilioに限らず、様々なクラウドサービスのAPIを組みあわせると、お手軽に面白いサービスを作ることができます。ぜひ色々と挑戦して、Mashup Awardsなどのコンテストにも参加してみてください。