web-dev-qa-db-ja.com

GoogleダイアログフローPERMISSION_DENIED例外

Windows JavaアプリケーションからGoogle DialogFlowにアクセスしようとしています。環境変数_GOOGLE_APPLICATION_CREDENTIALS_が適切に設定されており、他のGoogle APIを呼び出すことができます。ただし、 :

DetectIntentResponse response = sessionsClient.detectIntent(session, queryInput);

Grpc例外を受け取ります:

PERMISSION_DENIED:IAM権限「dialogflow.sessions.detectIntent」の「projects/newagent-a0ef5/agent」が拒否されました。セッションパス:projects/NewAgent/agent/sessions/xxxx

「newagent-a0ef5」は、フローのプロジェクトIDです。 「xxxx」はランダムなセッションIDトークンです。

_dialogflow.sessions.detectIntent_アクセスを有効にする必要があることを理解していますが、どこでそれがわかるかわかりません。その値でカスタムロールを作成し、フローに関連付けられた3つのIAMアカウントに追加しました。 DialogFlow APIも有効にしました。

誰も私がこの欠落している許可を追加する場所を知っていますか?

8
Andrew Prokop

すべてのIAMステップを適切に実行しましたが、detectIntentに間違ったプロジェクトIDを渡していました。確認すべきことがいくつかあります...

  • プロジェクトIDが正しいことを確認してください。セッションパスは「projects/<プロジェクトID>/agent/sessions/<セッションID>」である必要があります。
  • Dialogflow APIクライアントロールでサービスアカウントを使用していることを確認してください。
  • API Explorer で動作するようにしてください
5
Keeth

次のことを確認する必要があります。

  1. あなたは正しいプロジェクトIDです:
  2. IAMロールはADMINである必要があります:管理プロジェクト>所有者(すべてのDialogflow(コンソールおよびAPI)およびGCPリソースへのフルアクセス。コンソールを使用してエージェントを作成できます。)

IAMユーザーを追加するための参照(管理者としてルールを選択することを忘れないでください): https://dialogflow.com/docs/reference/v2-auth-setup

1
alok

チャットボットを作成しているときに同じ問題が発生しました。これを解決するには、Dialogflow APIクライアントロールを使用します。また、Rubyバージョンを2.6から2.5.1に変更する必要がありました。

GOOGLE_APPLICATION_CREDENTIALSはキーの.jasonファイルを指す必要があることを覚えておくことが重要です。問題を回避するには、.bashrcファイルにjasonファイルへのパスを設定します。したがって、マシンを再起動するたびにexport GOOGLE_APPLICATION_CREDENTIALS="[PATH]"を実行する必要はありません。

1
Robson Sampaio

私の場合、GOOGLE_CLOUD_PROJECTがプロジェクト名(大文字と小文字が混在するWord)で設定されていたためエラーが発生しましたが、ProjectID(Wordの小文字)である必要があります。 ProjectIDに変更した後、機能し始めました。 HTH

0
Terry