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などのコンテストにも参加してみてください。


