アカウントリンクを使ってAlexaとkintoneを連携する方法

この記事は 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のユーザーを紐付ける事ができます。

  1. スマホのAlexaアプリで、スキルを有効にする
スキルを有効化する

スキルを有効化する

2. kintoneのログイン画面が表示されるので、自分のログイン名・パスワードでログインする

3. 操作を許可する画面(認可画面)が表示されるので、許可を選択する

認可画面

認可画面

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

設定完了

設定完了

cybozu.com共通管理の設定

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

設定例を貼っておきます。

cybozu.com共通管理の設定

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エバンジェリストもやってます。祇園祭と仮面ライダーが好きです。