2023年5月1日を持ちまして、株式会社KDDIウェブコミュニケーションズのTwilioリセール事業が終了したため、本記事に記載されている内容は正確ではないことを予めご了承ください。
はじめに
Twilioには、Pythonのヘルプライブラリがあるので、PepperのPython実行環境からRestAPI経由で電話をかけることができます。
コーディング自体は簡単ですが、準備がかなり多いので、忘れないように記事にしておきます。
前提条件
- Twilioのアカウントはすでに取得しているものとします。
- AccountSID、AuthToken、発信用電話番号が必要です。トライアルアカウントでも利用は可能ですが、発信先電話番号は、認証済み電話番号のみとなります。
- Pepperアプリ(Choregraphe)はすでにセットアップされているものとします。
- 今回はMac版のVersion2.4.3を使います。Windowsでも動作します。
- Python2.7.xの環境がセットアップされているものとします。
- 今回は、2.7.12を利用します。
手順
- TwilioのPythonヘルパーライブラリの準備します。
- 上記ライブラリに依存するライブラリの準備します。
- Choregrapheを使って、Pythonスクリプトを作成します。
TwilioのPythonヘルパーライブラリを準備
- TwilioのPythonヘルパーライブラリをダウンロードします。
- Zipファイルを解凍します。
- 解凍されたフォルダの中のTwilioフォルダをどこかにコピーしておきます。
依存するライブラリを準備します。
Twilioのヘルパーライブラリは、いくつか別のライブラリを利用しています。
そのため、予め依存ライブラリをダウンロードしておきましょう。
httplib2
httplib2のサイトから、最新版のzipファイルをダウンロードします。
今回は、httplib2-0.9.2.zipを利用します。
- ダウンロードしたzipファイルを適当な場所に展開します。
- 展開したフォルダに移動し、セットアップを実行します。
$ python setup.py install
インストールが完了すると、build¥libフォルダ内に、httplib2フォルダができるので、それをどこかにコピーしておきます。
pytz
pytzのサイトから、最新版のzipファイルをダウンロードします。
今回は、pytz-2016.7.zipを利用します。
- ダウンロードしたzipファイルを適当な場所に展開します。
- 展開したフォルダに移動し、セットアップを実行します。
$ python setup.py install
インストールが完了すると、build¥libフォルダ内に、pytzフォルダができるので、それをどこかにコピーしておきます。
Choregraphe上でPythonスクリプトを作成
ライブラリフォルダを設定する
Choregrapheのプロジェクトファイルウィンドウの「+」ボタンを押し、「新規フォルダ...」を選択します。
フォルダ名を「lib」にして、「Create」ボタンを押します。
プロジェクトファイルウィンドウの「+」ボタンを押し、「フォルダをインポート...」を選択します。
先程解凍しておいたTwilioフォルダを選択します。
同様の手順で、先程セットアップしておいたhttplib2フォルダとpytzフォルダも追加しておきます。
ライブラリを読み込むスクリプトを作成する
ボックスライブラリのProgramming→Templatesから、「Python Scripts」をパネルにドラッグします。
ドラッグしたボックスをダブルクリックし、スクリプトエディタを開きます。
既存のコードをすべて削除し、以下のコードを貼り付けます。
class MyClass(GeneratedClass):
def __init__(self):
GeneratedClass.__init__(self)
def onLoad(self):
self.pathModified = False
def onUnload(self):
if self.pathModified and self.folderName and self.folderName in sys.path:
sys.path.remove(self.folderName)
self.folderName = None
def onInput_onStart(self):
appFolder = self.behaviorAbsolutePath().replace(self.behaviorRelativePath(), "")
self.folderName = os.path.join(appFolder, "lib")
if self.folderName not in sys.path:
sys.path.append(self.folderName)
self.pathModified = True
self.onStopped()
def onInput_onStop(self):
self.onUnload() #it is recommended to reuse the clean-up as the box is stopped
self.onStopped() #activate the output of the box
これで、起動時にライブラリフォルダ(libフォルダ)が参照されるようになります。
2017/1/4 コードに間違いがあったため、一部修正
電話をかけるスクリプトを作成する
先程と同じようにボックスライブラリから2つ目のPython Scriptsボックスをパネルにドラッグします。
ドラッグしたボックスをダブルクリックして、スクリプトエディタ画面を表示します。
すでに書かれているコードは一度すべて消していただき、以下のコードを上書きします。
class MyClass(GeneratedClass):
def __init__(self):
GeneratedClass.__init__(self)
def onLoad(self):
#put initialization code here
pass
def onUnload(self):
#put clean-up code here
pass
def onInput_onStart(self):
#self.onStopped() #activate the output of the box
from twilio.rest import TwilioRestClient
# put your own credentials here
ACCOUNT_SID = 'ACXXXXXXXXXXX'
AUTH_TOKEN = 'XXXXXXXXXXX'
client = TwilioRestClient(ACCOUNT_SID, AUTH_TOKEN)
client.calls.create(to='+8190XXXXXXXX', from_='+8150XXXXXXXX', url='http://twimlets.com/holdmusic?Bucket=com.twilio.music.ambient')
self.onStopped()
def onInput_onStop(self):
self.onUnload() #it is recommended to reuse the clean-up as the box is stopped
self.onStopped() #activate the output of the box
ACCOUNT_SIDとAUTH_TOKENは、それぞれご自分のTwilioのアカウントSIDとAuthTokenを記載します。
client.calls.create関数の中にある、toは宛先電話番号、fromは発信者番号になります。発信者番号はTwilioで購入した番号を指定します。また、Twilioのトライアルアカウントをご利用の場合は、認証済みの番号にのみ発信が可能です。
urlは、TwiMLを返すためのWebHookになっています。今回は、予め用意してある保留音が流れるようになっています。
以上で準備は終了です。
フローを作成してテストする
フローを作成する
テストする
Pepperと接続を行い、テストをしてみましょう。
しばらくすると電話がかかってくれば成功です。