カテゴリー内の他の記事

Amazon Echoでスマートに予定の管理をしよう!

フォローする

(著者:中里 直人)

 [kintone環境をお持ちでない方へ]developer network(当サイト) のメンバー登録をした後、1年間無料の開発者向けライセンスを使えます。

Index

概要

スマートスピーカーの1つである、Amazon Echoを使ってkintoneで予定管理をスマートにしちゃいます。
今回kintoneは、Alexaスキルから予定データを出し入れする先として使います。

kintoneカレンダービューを用いて予定管理している方、

  • 予定が2件までしか表示されない。
  • 予定確認のためだけにkintoneにアクセスするのが億劫。

など、すこしスマートじゃないと思っている部分もあるのではないでしょうか。
今回は、PCやモバイルを用いてkintoneにアクセスすることなく、
Amazon Echoによる音声操作で、一日のスケジュールの把握、追加を実現します。

image1.png

Amazon Echoとは

image4.png

Google Homeなどと同じ、スマートスピーカーの一種です。「Amazon Alexa」を搭載しており、
音声操作だけで、音楽の再生、天気を調べる、ニュースの読み上げなど様々なことをしてくれます。
※ 写真は「Echo Dot」

Amazon Alexaとは

Amazonが開発した、音声認識技術の1つです。Alexa搭載デバイスのEchoだけでなく、
他サービスに組み込めるような音声認識サービスとなっています。詳しくはコチラをご覧ください。

完成イメージ

image2.png

 

事前準備

Amazon開発者コンソールにログイン

Alexaスキル開発のために、Amazon開発者コンソールにログインが必要です。
開発コンソールログインのために、

  1. Amazon.co.jpでアカウントを取得
    ※英語で使用したい方はAmazon開発者コンソールでアカウント取得。
  2. 1で取得したアカウントでAmazon開発者コンソールにログイン

を行ってください。
※Amazon開発者ポータルでアカウントを作成すると、Amazon.comのアカウントになります。

なぜAmazon.co.jpのアカウントで開発者ポータルにログインする必要があるか

Alexaは、一般公開されているAlexaスキルを、スキルストアで追加することができます。
(Amazon.co.jpでスキルストアで公開されているスキル)
スキルストアに表示されるAlexaスキルは、Alexaにログインしているアカウントに依存します。
そのため、Amazon.comアカウントでスキルストアにアクセスすると、米国で公開されているスキルが表示され、日本語のスキルが表示されません。
日本語で一般公開されている他のAlexaスキルを利用したい方は、
Amazon.co.jpアカウントでAlexaスキルを作成し、そのアカウントでEchoと連携する必要があります。
詳しくは下記URLを参照してください。

https://dev.classmethod.jp/voice-assistant/solution-of-a-problem-amazon-com-account-conflict/

 

AWSアカウントの取得

AlexaスキルはAWS Lambda関数を呼び出すことが可能です。
今回はLambda関数を用いて、kintoneのレコード取得、登録を行います。
下記URLを参考にAWSアカウントを取得後、ログインしてください。
http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/setting-up.html#setting-up-signup

kintoneアプリ準備

アプリ作成

「予定登録アプリ」を作成します。

フィールド名 フィールドコード フィールドタイプ
イベント名 eventName 文字列(1行)
開始日時 startDateTime 日時
終了日時 endDateTime 日時

 

予定管理なので見やすいようにカレンダー形式の一覧を作成します。

kintone1.png

kintone2.png

さらに見やすくしたい人は下記のイベントカレンダープラグインを使うと、綺麗に予定を管理することができます。

イベントカレンダープラグイン

https://developer.cybozu.io/hc/ja/articles/212155743

APIトークン発行

「アプリの設定>APIトークン」でAPIトークンを発行します。
今回は、Alexaスキルで予定の確認と追加を実装したいので、閲覧と追加のアクセス権があるAPIトークンを生成します。

kintone3.png

Alexaスキルの作成(その1)

Step1 : Amazon開発者コンソールから、Alexaスキルを作成します。

先ほど作成したアカウントで、Amazon開発者コンソールにログインしましょう。
画像通りに画面を遷移して、Alexaスキルを作成します。

_UI00.png

_UI01.png

言語は日本語に設定します。
スキル名は任意に設定してください。

_UI02.png

モデルは、カスタムを選択し、スキルを作成します。

_UI03.png

スキルを作成したら、ビルドのエンドポイントの設定から、「AWS LambdaのARN」を押下し、表示されるスキルIDをメモしておいてください。

_UI04.png

Step2 : 対話モデルの設定

インテントスキーマ

Alexaが対応できる様々な会話パターンを設定できます。詳しくはコチラをご覧ください。
今回はインテントスキーマを下記のJSONを使用して定義します。

上記のJSONを対話モデルのJSONエディターにコピペし、モデルを保存してください。

_UI05.png

サンプル発話

インテントとインテントを呼び出すためのフレーズをマッピングします。
ビルトインインテントはサンプル発話をマッピングする必要はありません。(ビルトインインテントとは)
※Alexaは、サンプル発話のパターンを網羅すればするほど、インテント判別の精度が上がり、スムーズに会話できるようになります。

_UI07.png

_UI08.png

JSONエディターの14~23行目と、53~72行目の部分でサンプル発話を定義しています。
上の画像のように、サンプル発話が定義されているか確認してください。

カスタムスロットタイプ

スロットには標準スロットタイプとカスタムスロットタイプが存在します。
カスタムスロットタイプは、ユーザー側で値を設定する必要があります。(標準スロットタイプについてはコチラをご覧ください。)
今回は、予定管理アプリの「イベント名」に対応するスロットをカスタムスロットとして用意し、valueにあらかじめイベント名を入れておきます。
先ほどのJSONの75~111行目で定義しているので、下記の画像を参考にカスタムスロットが設定されているか確認してください。

_UI06.png

ここまで来たら一度、Alexaの設定は終了です。次にLambda関数を設定します。

AWS Lambda関数の設定

Step1 : Lambda関数の実行ファイル作成

Node.jsをインストールした環境で作業します。
以下のサンプルコードをファイル名「index.js」で保存します。

上記コードの12~15行目を、ご自身の環境に合わせて設定してください。

以下のコマンドを先ほど保存したコードと同じ階層で実行してpackage.jsonを生成します。

 上記のコマンド実行後にpackage.jsonの設定をしますが、"name"と"description"のみ任意に設定していただき、他はEnterで進んで問題ありません。
次に以下のコマンドでパッケージをインストールします。

さらに以下のコマンドを実行してZipファイルを作成します。実行失敗した場合は、
「index.js」と「node_modules」が同じ階層に存在しているか確認してください。

windows OSをお使いの方

windowsコマンドプロンプトを使用している方は、標準ではzipコマンドが入力できません。
そのため、Cygwinなどのツールが必要です。
下記の記事を参考にCygwinをインストールしてからzipコマンドを入力してください。
https://developer.cybozu.io/hc/ja/articles/217937443
また、Cygwinでファイルを作成すると、作成されたファイルに実行権限(パーミッション)が付与される場合があるので注意してください。

Step2 : Lambda関数作成

AWS Lamnbda関数設定画面から関数を作成します。
(作成するリージョンは「アジアパシフィック(東京)」を選択してください。詳細はコチラをご覧ください。)

Lambda1.png

「一から作成」を選択し、「名前」「ランタイム」「ロール」を設定します。
順番に、「名前」は任意、「ランタイム」は「Node.js 8.10」、「ロール」は「カスタムロールの作成」を設定してください。
「カスタムロールの作成」を選択すると画面が遷移します。

fix-0709.png

「カスタムロールを作成」を選択すると、下図の画面に遷移します。
「IAM ロール」は「新しい IAM ロールの作成」を選択し、「ロール名」は任意に設定してください。
設定後、許可を選択すると一つ前の画面に戻ります。

Lambda3.png

ロール作成を終えたら先ほどの画面に遷移するので、「既存のロールを選択」を選択し、先ほど作成したロールを設定してください。
関数の作成をクリックするとLambda関数が作成できます。

fix-0709-02.png

関数を作成し終えたら、画面右上に表示されるARNをメモしておきましょう。
また、先ほど作成したZIPファイルの実行コードをアップロードします。
「ハンドラ」が先ほど作成したJavascriptファイル「index.js」を指定する「index.handler」になっているか確認してください。

fix.png

次に、Alexa Skills KitをLambda関数のトリガーに設定します。
トリガーの設定のスキルID欄に、Alexaスキルの作成(その1)でメモしたスキルIDを入力してください。

_UI09.png

 これでLambda関数の設定は終了です。

Alexaスキルの作成(その2)

Lambda関数の設定が終了したら、もう一度Amazon開発者コンソールに戻ります。
その1で作成したAlexaスキルの編集画面から、エンドポイントを開き、「AWS Lambda の ARN(Amazonリソースネーム)」にチェックを入れます。
デフォルトの地域に先ほどメモしたLambda関数のARNをペーストし、エンドポイントを保存してください。

_UI10.png

最後に、下記の画面から、モデルをビルドして頂くとAlexaスキルとLambda関数を連携することができます。

_UI11.png

動作確認

先ほどの設定を終えると、作成したAlexaスキルのテストを行えます。

  • 予定の確認(Alexa開発者コンソール上)
  • 予定の追加(Alexa開発者コンソール上)
  • Echoで音声操作して動作確認

をテストしてみましょう。
まずはAlexa開発者コンソール上からテストを有効化してください。

_UI12.png

予定の確認

テスト画面でAlexaに今日の予定を訪ねます。

check1.png

_UI13.png

Alexaがkintoneの情報を取得できているのがわかります。
隠れている2つ分の予定も確認できていますね。

予定の追加

次に明日の予定を訪ねます。
明日は何も予定が入っていません。

check3.png

_UI14.png

明日は予定がないことがわかりました。
そこで、予定を追加してみます。

_UI15.png

check6.png

しっかりと予定が追加することができました!

Echoで動作確認をする場合

Alexaスキルはテスト終了後の設定で作成したスキルの公開設定がありますが、
Echoに紐づけたアカウントでスキルを開発し、テストを有効化することで、スキルを公開せず利用することができます。

_UI16.png

EchoとAmazon開発者アカウントの紐づけは以下のサイトを参考にしてください。

サンプルコード解説

Lambdaに設定したサンプルコード「index.js」について少し解説します。

kintone API SDK(β) for Node.js

kintoneアプリのレコードを操作する際に、2018年5月に公開されたkintone API SDK(β) for Node.js(以下、kintone Node.js SDKとします。)を使用しています。
詳しい導入と使用方法はリンク先の記事かGitHub、またはリファレンスをご覧ください。
ここではサンプルコードで使用しているクラスと関数について簡単に説明していきます。

GitHub

https://github.com/kintone/kintone-nodejs-sdk/

リファレンス

https://kintone.github.io/kintone-nodejs-sdk/

まず、サンプルコードの14~18行目についてです。

上記の3行目で認証に関するクラスを呼び出しています。
今回はAPIトークンによる認証方法でkintoneと通信しているので、4行目の「.setApiToken()」でAPIトークンを使用しています。
kintoneにベーシック認証を設定している方は、下記のコードを追加してベーシック認証をしてください。
5行目では、接続先のドメイン名と先ほど設定した認証方法で接続に関するクラスを呼び、kintoneへ接続をしています。

次にサンプルコードの19行目と、kintoneアプリのレコード取得、登録をしている部分についての説明です。

1行目はレコード操作に関するクラスを呼び出しています。

次に、4行目で「アプリID」と「クエリ条件文」をもとにkintoneアプリからレコードを複数件取得しています。
Promiseオブジェクトで返ってくるのでthenメソッドとcatchメソッドでそれぞれ成功時、エラー時の処理を記述します。

13行目では、「アプリID」と「レコードのJSON」でkintoneアプリにレコードを1件追加しています。
先ほどと同様にPromiseオブジェクトなので、thenとcatchでそれぞれ対応する処理を記述します。

kintone Node.js SDKでは、エラーの取得をする際に、get()を使用します。
9行目と18行目にあるように、エラーを出力する場合はerr.get()として出力してください。

Alexa Skills Kit SDK for Node.js

Alexa Skills Kit SDK for Node.jsは、Lambda上でNode.jsでAlexaスキルを作成する際に非常に便利なSDKです。
サンプルコードで使用しているAlexa Skills Kit SDK for Node.jsはバージョン1を使用しています。
SDKの導入や利用方法などの詳細はGitHubをご確認してください。

GitHub

https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs/tree/master

下記のサンプルをもとに軽く解説します。

3~7行目でAlexaスキルのハンドラを定義します。
4行目にあるように「'インテント名': 関数」と書き、呼び出されたインテントでどのようなプログラムを実行するか記入します。

サンプルでは「'HelloIntent'」が呼び出されたとき、「this.emit(':tell', 'こんにちは')」を実行するようになっています。
この「this.emit()」についてはGitHubをご確認ください。

次に9~14行目ですが、「alexa.appid」でAlexaスキルのスキルIDや、「alexa.registerHandlers()」でalexa-sdkで実際に使用するハンドラを定義します。
最後に「alexa.execute();」で終了します。

終わりに

いかがでしょうか。
声だけでkintoneのレコード登録と取得ができました。
kintoneはほかにも豊富にAPIが用意されているので、音声操作でいろいろな操作ができます。
各サービスのガイドです。お困りの際はご活用ください!

更新履歴

  • 2018/05/18
    • Alexa開発者コンソールの新UIに対応
  • 2018/07/12
    • kintone API SDK(β) for Node.jsを使用したコードに修正

 

このTipsは、2018年6月版 kintoneで確認したものになります。

記事に関するフィードバック

直接的に記事と関連がないご質問はcybozu developer コミュニティをご活用ください。

ログインしてコメントを残してください。