Dialogflow公式サンプルでPERMISSION_DENIED

202 views
Skip to first unread message

Yatima Kagurazaka

unread,
Jun 7, 2018, 9:39:22 AM6/7/18
to Assistant Developer Community Japan
↑こちらの公式サンプルを試しているのですが,`node detect.js hogehoge` や `node resource.js hogehoge` などおそらく `--help` 以外のすべてで以下のようなエラーが出てしまいます.
Error: 7 PERMISSION_DENIED: Dialogflow API has not been used in project XXXXXXXXXXX before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/dialogflow.googleapis.com/overview?project=XXXXXXXXXXX then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.

指定されたリンクはアクセス権限がありません.
数字なのでGCPのプロジェクト番号かと思うのですが,良くわからないのは該当するプロジェクトが自分の管理下にないことです.
また,-p オプションでプロジェクトを指定しても変わらないのもよくわかりません.

GCPのCloud Shellでだめだったのでローカルで試してみたら,また別の番号になりました.
こちらも自分は管理していません.

元のリポジトリを `project` などで検索しても,間違えてプロジェクトIDが残っちゃってるのがあるのはありますが,testやCI周りなのでおそらく関係ないかと…

何か勘違いしているのでしょうか.
上記関連で情報お持ちの方いらっしゃいましたらお願いいたします.

Yoichiro Tanaka

unread,
Jun 7, 2018, 8:29:14 PM6/7/18
to Assistant Developer Community Japan
こんにちは。洋一郎です。

> Error: 7 PERMISSION_DENIED: Dialogflow API has not been used in project XXXXXXXXXXX before or it is disabled.

結論から言うと、サービスアカウントキーの JSON ファイルを GCP Console より生成して入手し、そのファイルを指定した
状態で実行すると、うまくいきます。

Dialogflow V2 API は、インテントやエンティティなどの追加や削除ができてしまう、結構激し目なAPIです。そのため、
もちろん誰でも実行可能、というわけにはいかず、API を利用するための認証の仕組みが設けられています。
PERMISSION_DENIED エラーは、その認証に失敗していることを示しています。

Dialogflow API は、Google Cloud Platform で共通的に採用されている認証の仕組みに乗っかっています。つまり、
dialogflow-nodejs-client-v2 クライアントライブラリも、その GCP の認証を突破しなければ使えません。

手順としては、以下のようになります。
  1. GCP Console で [サービス アカウント キーの作成] ページに移動します。
  2. 上部のヘッダーにて、サービスアカウントを生成したい対象の GCP Project を選択します。
  3. [サービス アカウント] プルダウン リストから既存のものを選択するか、[新しいサービス アカウント] を選択します。
  4. "JSON" が選択された状態で、[作成] をクリックします。JSONファイルがダウンロードされるはずです。
  5. サンプルを実行する際に、"GOOGLE_APPLICATION_CREDENTIALS" 環境変数にダウンロードしたJSONファイル
    のパスが指定された状態で実行します。
最後の手順は、以下のようにする感じです。

$ GOOGLE_APPLICATION_CREDENTIALS="./your_project_123435.json" node detect.js event GOOGLE_ASSISTANT_WELCOME -p YOUR_PROJECT_ID -l ja-JP

GOOGLE_APPLICATION_CREDENTIALS環境変数の使い方については、以下に記載されています。

環境変数ではなくプログラムの中でJSONファイルを指定する方法もありますので、調べてみてください。

ご参考になれば幸いです。ではでは。

-Yoichiro



2018年6月7日木曜日 22時39分22秒 UTC+9 Yatima Kagurazaka:

Yatima Kagurazaka

unread,
Jun 7, 2018, 10:45:07 PM6/7/18
to Assistant Developer Community Japan
ありがとうございます!
エラーの表現をちょっと変えて欲しいですね…

2018年6月8日金曜日 9時29分14秒 UTC+9 Yoichiro Tanaka:
Reply all
Reply to author
Forward
0 new messages