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も有効にしました。
誰も私がこの欠落している許可を追加する場所を知っていますか?
すべてのIAMステップを適切に実行しましたが、detectIntentに間違ったプロジェクトIDを渡していました。確認すべきことがいくつかあります...
次のことを確認する必要があります。
IAMユーザーを追加するための参照(管理者としてルールを選択することを忘れないでください): https://dialogflow.com/docs/reference/v2-auth-setup
チャットボットを作成しているときに同じ問題が発生しました。これを解決するには、Dialogflow APIクライアントロールを使用します。また、Rubyバージョンを2.6から2.5.1に変更する必要がありました。
GOOGLE_APPLICATION_CREDENTIALS
はキーの.jasonファイルを指す必要があることを覚えておくことが重要です。問題を回避するには、.bashrcファイルにjasonファイルへのパスを設定します。したがって、マシンを再起動するたびにexport GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
を実行する必要はありません。
私の場合、GOOGLE_CLOUD_PROJECTがプロジェクト名(大文字と小文字が混在するWord)で設定されていたためエラーが発生しましたが、ProjectID(Wordの小文字)である必要があります。 ProjectIDに変更した後、機能し始めました。 HTH