Alexa スキル サーバーをpythonで作る

はじめに

スキルの使い方などはこの頃増えてきたけど、AWSが主流なので、自前サーバでやろうという目論見

ここでは、linuxにAlexaのレスポンスを返すpython製のサーバーを作ります。前提条件として、アマゾンと自前サーバー間はhttps通信が必須なので、Nginxやhaproxyなどのリバースプロキシなどを置いてなんとかしてください。この環境では、ルーターにリバースプロキシが内蔵されているので、nanopiには一切インストールしません。

pythonがAlexaのレスポンスを返すためにflask-askを利用します。また、サンプルもそれに従っています。

パッケージのインストール

とりあえずpython3のpipをインストールします。

sudo apt install python3-pip 

アマゾンと通信するためのflask-askをpipでインストールします。ちなみに、依存関係があるので、順番に実行してくだい。
githubはこちら

apt install python3-dev libffi-dev
pip3 install setuptools
pip3 install wheel
pip3 install flask-ask
pip3 install -U pyOpenSSL

実行のテスト

次のコードを実行して動けば導入できています。

cat test.py
####
from flask import Flask
from flask_ask import Ask, statement

app = Flask(__name__)
ask = Ask(app, '/')

@ask.intent('HelloIntent')
def hello(firstname):
    speech_text = "Hello %s" % firstname
    return statement(speech_text).simple_card('Hello', speech_text)

if __name__ == '__main__':
    app.run(host="0.0.0.0",port=5000)
python3 test.py 
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

アマゾンで新しいスキルの作成画面を出します。こちらからどうぞ

今回のスキル名はhelloworldとします。カスタムを選択し、スキルを作成します。

呼び出し名をスキルにします

「こんにちは」がAlexaに入力されると、HelloIntentが送信されます。

今回はAWSではなく、HTTPSを選択します。変更後はエンドポイントを保存します。

設定が終わったら、ビルドをしましょう。

ビルド後にテストを行えます。

「スキル」で「こんにちは」を入力するとHelloが帰ってきます。

アマゾンから通信があると、pythonにログが表示されます。

python3 test.py 
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
x.x.x.x - - [07/Nov/2018 14:04:08] "POST / HTTP/1.1" 200 -

まとめ

httpsが実装できれば、比較的簡単にスキルを作ることができました。