読者です 読者をやめる 読者になる 読者になる

Dockwilio - Twilioを制御するDockerコンテナ(実験バージョン ) = 簡単手順編 =

更新:ver.2015.12.12リリースに伴い一部変更。

 

Dockwilioは、Twilioを使って簡単に架電&音声合成メッセージ再生をすることができるDockerのコンテナです。

概要編に続き、実行するための簡単手順を説明します。

 

前提:

  • Dockerエンジンがホストにインストールされている。
  • Twilioにアカウントがあり、発信用電話番号を購入してある(Account SID, Auth Token、電話番号の情報が必要)。
  • TwiMLアクセスのためのSSLサーバ証明書を用意してある。
  • Dockwilioへの架電要求はホスト内から行う。

なお、Dockwilioイメージはcentos6がベースとなっており、内部で2つのnginxプロセスが稼働します。

 

1. 準備

TwilioからTwiMLを取得するためのHTTPSアクセスを許可します。

# iptables -A INPUT -p tcp -m tcp -dport 443 -j ACCEPT 

 

Dockwilioの設定ファイルを作成します。

ファイル名は「dwilio.conf」でYAML形式で記述します。

account_sid: ACxxxxxxxxxxxx
auth_token: xxxxxxxxxxxxx
from: +8150xxxxxxxx
twiml_url_base: https://hostname.example/
syslog_facility: local0
twiml_ssl_crt: fullchain.pem
twiml_ssl_key: privkey.pem

twiml_url_base の hostname.example にはDockwilioが稼働するホストのFQDNを指定します。

 2. Dockwilioコンテナの起動

docker run -d -p 443:443 -v /dockwilio_config_dir:/etc/dockwilio:ro -v /etc/localtime:/etc/localtime:ro --name dwilio emerry/dockwilio

 ここで、/dockwilio_config_dir は設定ファイル(dwilio.conf)およびSSL証明書のあるディレクトリです。

コンテナを起動すると、コンテナのIPアドレスがsyslog(local0)に出力されます。

Nov 22 11:32:20 4acb42090932 logger: IP address of Dockwilio: inet 172.17.0.51/16 scope global eth0

 3. 架電と音声メッセージ再生の実行

 ホスト内からDockwilioコンテナに対しHTTP POSTすることで(YAMLまたはJSON形式のいずれか)、架電の要求をします。

URLは「http://DockwilioコンテナのIPアドレス/say.{yaml,json}」で、架電の終了後に結果とともに戻ります。

 

下記はcurlコマンドを使用した例ですが、Content-length を指定する必要があるためlsコマンドで予めサイズを調べています。

YAMLの例:

$ ls -l post_data.yaml
-rw-r--r-- 1 user users 49 Nov 21 12:59 2015 post_data.yaml

$ cat post_data.yaml
to: +8180xxxxxxxx
say: Hello. How are you doing?

$ curl -XPOST http://172.17.0.51/say.yaml -H 'Content-length: 49' --data-binary @post_data.yaml
code: 0
status: completed
message: 

JSONの例:

$ ls -l post_data.json
-rw-r--r-- 1 user users 62 Nov 21 13:06 post_data.json

$ cat post_data.json
{
"to": "+818046684833",
"say": "Hello. How are you doing?"
}

$ curl -XPOST http://172.17.0.51/say.json -H 'Content-length: 62' --data-binary @post_data.json
{“code”:”0”,”status”:”completed”,”message”:””}

 

 仕様についてはコンテナ仕様編を参照してください。