[日本語Alexa] iPhoneとスキルを連携して、プッシュ通知やE-Mailを送ってみた
1 はじめに
音声でやり取りするだけのスキルでは、表現に限界がありますが、他のデバイスと連携したりすると色々できることが広がります。
下記は、Echoから話しかけてスマホを探すことを実現した例です。
このようなスキルを作成するには、スキルとiPhoneのアプリの連携(同期)が必要ですが、本記事では、その要領について考えてみました。
例によって、最初に動作している様子をご覧ください。
2 DynamoDBによる連携(同期)
「特定のスキル」と「特定のiPhoneアプリ」が連携(同期)するためには、相互に通信できる必要があります。色々な方法が考えられますが、その一例として、今回はDynamoDBを利用してみました。
連携する為の場所ををDynamoDBに確保し、双方で共通のKeyを認識できれば、そこに必要な情報を書き込む事で通信が可能になります。
共通のKeyは、スキルとiPhoneアプリでそれぞれ生成した乱数をつなぎ合わせ、その値のハッシュ値としました。
スキル側では、ハッシュ値をユーザーと紐付けておきユーザー情報に書き込んでおきます。また、iPhoneアプリは、ハッシュ値をキーとしたデータを連携データのDBに書き込みます。なお、連携(同期)解除のタイミングでは、連携データのDBは削除されるようになっています。
スキルが呼び出された際に、ユーザー情報に書かれているハッシュ値をKeyにして連携データのDBをスキャンし、データが存在すれば連携(同期)中、無ければ、連携(同期)されていない判断しています。
3 連携(同期)の手順
それでは、連携(同期)の手順について、もう少し詳しく紹介させていただきます。
連携(同期)されていない状態でスキルを起動すると、「アプリを起動して、表示された数値を話してください」と促されます。ユーザーが指示どおり数値を話すと、スキルからは、別の数値が告げられ、ユーザーは、これをアプリに入力します。
アプリが生成した乱数とスキルが生成した乱数からHash値が計算され、これをお互いにキーとして認識し、必要な情報をデータベースに保存します。
スキルからは、ユーザーIDをキーとしてとHash値をユーザ情報に保存します。
変わって、アプリからは、Hash値をキーとして、メールアドレスなどの端末情報を連携データに保存します。
同期をやめた場合、連携データの当該データをアプリ側で削除し、スキルもそのことを知ることになります。
4 プッシュ通知
プッシュ通知は、Amazon SNS(以下、SNS)を使用して送っています。SNSでは、作成したアプリケーションのエンドポイントを指定して、Lambdaからプッシュ通知を送ることができます。また、エンドポイントに合わせて、端末のデバイストークンが分かれば、個別に送ることも可能です。
今回は、生成したデバイストークンも連携データに保存している為、ピンポイントで特定の端末にプッシュ通知を送ることが出来るようになっています。
5 メール送信
メール送信は、Amazon SES(以下、SES)を使用して送っています。SESでは、メールアドレスの検証が必要な為、こちらは、あらかじめ登録を完了しています。
検証ができない場合は、別の方法を検討する必要があるでしょう。
6 最後に
今回は、スキルとiPhoneが連携(同期)できるように、乱数から生成するハッシュ値をキーに使用してみました。共通のキーが確保できれば、データ連携は、DynamoDBにこだわる必要はないでしょう。
スキルと他のデバイスが連携できるようになると、スキルの利用範囲は更に広がるでしょう。新しいアイデアを考えるのが楽しみになります。