Alexaの緊急連絡スキルを作る(1)
今回は、自分のためではなく、家族のためのスキルです
1. はじめに
今回は、音声で自分宛にメールや電話をかけてメッセージを送るスキルを作っています。つまり自分のためではなく、自分の不在中に自宅にいる家族に何かあったとき、音声だけで自分に連絡できるようにするスキルです。
例えば、こんな経験はないでしょうか?自分が外出してたり仕事に行っている間に、(高齢の)親や嫁さんが自宅で転倒。打ち所が悪く、痛みで動けず(どこか骨折したかもしれない)、電話の所に辿り着くこともできなくて連絡とろうにもできない。でも自分が帰宅するのは何時間も後。こんな時、Amazon Echoを使って声だけでメールや電話で緊急メッセージを送ることができれば・・・
経験ない?実はワタシにはあります(^^;)。と言うことで、今回作ろうとしているのは、音声でメールまたは電話で緊急連絡メッセージを送る「緊急連絡」スキルです。
Echoに話しかけた内容をそのままメッセージとして送るのは難しいのですが、緊急連絡なので、送ることができるメッセージをある程度絞って予め用意しておくことができる事がポイントです。今回は、
- 連絡して
- 電話して
- メールして
- 帰ってきて
- 助けて
の5つのメッセージに絞りました。
(まぁ「緊急連絡」する必要ない人であれば、「帰りに卵買ってきて」、とか「子供を迎えに行って」とかの「用事言いつけ」スキルに作り替えてもいいかも。でも気軽に使われると用事を言いつけられるコチラ側はたまったもんじゃないですが。^^;)
と言うことで「緊急連絡」スキルを作っていきましょう。
2. 今回は先ずLambdaから
いつものようにamazon開発者コンソールでスキル(フロントエンド)から作り始めます。しかし、今回はメールを送信したり、TwilioのAPIを使って電話をかけると言った処理を行う必要を行う必要があります。これらはスキルのバックエンド(Lambda)で行う必要があるため、技術的な課題はLambdaの方にあると言って良いでしょう。
と言うことで、先ずはアプリケーションIDさえ取得できれば良いので、amazon開発者コンソールではスキルの皮(スキル情報)を作っておくに留めます。「緊急連絡」スキルの「スキル情報」は以下のような感じ。
カスタムスキルとして作成し、スキル名、呼び出し名ともに「緊急連絡」としています(*1)。
これでスキルのアプリケーションIDが得られましたので、AWSコンソールでの作業に移ります。AWSコンソールにサインインしてLambdaを作成します。地域的リージョンは、カスタムスキルなので「アジアパシフィック(東京)」でOK。Lambdaは"alexa-skill-kit-sdk-factskill"設計図を用いて作ります。
Lambda関数の名前は適当に、今回は「緊急連絡」スキルなので"MyEmergency" とでもしましょうか。
ロールはDynamoDBが使えるロールにしておきます。以前に作成したように専用のカスタムロールを作成しても良いですね。この辺りは必要に応じて行ってください。
3. Lambda関数をダウンロードする
"MyEmergency"関数が作成されたら、いきなりですが作成されたたばかりの"MyEmergency"関数を自分のマシンにダウンロードします。
ダウンロードには「アクション」メニューから「関数のエクスポート」を選択し、
ポップアップした「関数のエクスポート」画面で「デプロイパッケージのダウンロード」をクリックします。
何故こんな事をするかと言うと、メール送信に使用するパッケージ"nodemailer"を"MyEmergency"関数に追加したいからです。と言うのも、当初はAWSのSES(Amazon Simple Email Service)を使ってメールを送信させようと思っていたのですが、これが日本の携帯キャリアの電子メールと相性が悪いらしく、ワタシのiPhoneには全然メールを送ることができなかったのです。迷惑メールフィルターではじかれているかと思って迷惑メールフィルターを無効化しても全然ダメ。そこで AWSのSESは諦め、別の電子メール送受信用のパッケージを探して"nodemailer"を見つけ出しました。
しかし、残念ながら"nodemailer"はAWSのNode.jsにはインストールされていないので、自分のLambda関数に内包させることになります。そのため、Lambda関数をAWSからダウンロードし、"nodemailer"パッケージを追加した後、AWSにデプロイ(アップロード)することになるのです。
AWSからダウンロードした"MyEmergency"関数(zipファイルを展開した物)は、以下のような感じになっています。
"MyEmergency" の後に長ったらしい英数字記号がくっついたフォルダ名になっていますが、これらは邪魔くさいので、スッパリ削除して関数名"MyEmergency" だけにしてしまっても構いません(以後、フォルダ名は"MyEmergency" とします)。次のステップでは、これに"nodemailer"パッケージを追加します。
[続く]
(*1):「緊急連絡」という呼び出し名では一般的すぎて誤動作が多いことから、後日「ウチの緊急連絡」に変更しました。
|