公開日:2019-12-17
この記事は kintone Advent Calender 2019 の17日目です。
Amazon Echoとkintoneを連携し、音声でkintoneのデータを操作(取得や登録)する場合、以下の構成を採用する事が多いと思います。

なんとなく手書き
Lambdaからkintoneへのアクセスは、kintoneのREST APIを使うので、認証情報をどこかに保持しておく必要があります。
管理者(Administrator)の権限でアクセスするのであれば、Lambdaの環境変数にでもkintoneのAPIトークンを持たせておけば良いのですが、kintoneの個々のユーザー権限で実行したい場合もあると思います。
(アプリにレコードのアクセス権を設定していて、自分のレコードだけを見えるようにしている場合とか)
そのような時に便利に使える、アカウントリンクという便利機能がAlexaにはあります。(Cookpadのスキルとかでも使われてるやつです)
アカウントリンクを有効にする
以下の手順でアカウントリンクの設定を行うと、Amazon Echo(Amazonアカウント)とkintoneのユーザーを紐付ける事ができます。
- スマホのAlexaアプリで、スキルを有効にする

スキルを有効化する
2. kintoneのログイン画面が表示されるので、自分のログイン名・パスワードでログインする
3. 操作を許可する画面(認可画面)が表示されるので、許可を選択する

認可画面
4. 正常にリンクされました、が表示されたら紐付けが完了

設定完了
cybozu.com共通管理の設定
OAuth 2.0を使うには、「OAuthクライアントの使用」の手順で、cybozu.com共通管理の設定が必要です。
(この場合はAlexaがOAuthクライアントとなります)
設定例を貼っておきます。

cybozu.com共通管理の設定
alexa developer consoleの設定
Alexaにも設定が必要となるので、alexa developer consoleのスキル設定の画面からアカウントリンクのメニューを選び、以下のように設定します。

Lambdaからkintoneへのアクセス
ここまで設定すると、AlexaからLambdaに対して、kintoneのユーザーごとの認証情報(OAuth 2.0のアクセストークン)が送られてくるので、アクセストークンを使ってkintoneのREST APIを実行すれば、ユーザーの権限でAPIが実行されます。
Lambdaでログを出力してみたところ、アクセストークンが取得できている事が分かります。

Alexaのドキュメントに記載がある通り、context.System.user.accessToken でアクセストークンを取得する事ができます。
ここまで設定しておいて残念な事
ただ、非常に残念な事もあり、設定画面を見て分かるように、kintoneの認可エンドポイントとトークンエンドポイントは、サブドメインに依存したURIになっています。
そのURIをAlexaスキルに設定するので、Alexaスキルとkintoneのサブドメインが1:1で紐付いてしまう事になります。
というわけで、アカウントリンクを使ったAlexaスキルは、現時点ではスキルストアへの公開ができないと思われます。(汎用的に使えないので)
実はある取り組みで作成したスキルは、スキルストアへの公開ができないのでベータテスト機能を使っています。。。
日本でもAlexa for Businessが使えるようになるか、cybozu.com共通管理が強化される日まで待ちましょう。
投稿者プロフィール

- kintoneを活用したシステム開発(だけ)をやってます。kintone認定資格5冠。