[Node.js]DialogflowのIntentをAPIで取得する


DialogflowのIntentのRESTで実装しようとしたとき、
webhook接続の解説記事ばかりで、API接続の解説記事が少なかったので、備忘録として残します。

モジュールのインストール

APIの接続にはモジュール版のdialogflowを使うのでnpmでインストールします。

npm install --save dialogflow

実装

実装する際のソースコードサンプルです。

接続部分

Dialogflowの接続情報を設定してSessionを作成します。

const dialogflow = require('dialogflow');

module.exports = class DialoglowAPI {
    constructor(){
        // Dialogflowの接続情報を設定
        let client_option = {
            project_id: prject_id, // DialogflowのProject ID
        }
        client_option.credentials = {
            client_email: client_email // DialogflowのService Account
            private_key: private_key // GCPで生成したprivate key
        }

        this.sessionClient = new dialogflow.SessionsClient(client_option);
        this.sessionPath = this.sessionClient.sessionPath(prject_id, project_id);
    }
}

Dialogflowgへの接続情報

project_id、client_emailはDialogflow Consoleから歯車マーク押した先に。
private_keyはService AccountからGCPに飛んで、そこから生成します。
※接続情報の取得に関しては、いっぱい記事が転がっているので詳細は割愛します。

注意

client_emailとprivate_keyは、xxxx.credentialsの中に入れてあげないとエラーとなるので注意しましょう。

Intentの取得

    async get_intent() {
        // requestを作成
        const request = {
            session: this.sessionPath,
            queryInput: {
                text: {
                    text: "Intentを特定する為の文言",
                    languageCode: "ja",
                },
            },
        };
        // 呼び出し
        return await this.sessionClient.detectIntent(request);
    }

responseのデータ形式はこちらに記載されています

まとめ

DialogflowとLINE等のメッセンジャーを直接Webhookで繋げるのは簡単ですが、
複雑な実装を行う場合は、サーバーを経由する機会も多いと思います。
APIでの接続は小さく実装できるので、Nluを機能の一部で実装したい等の場合はとても便利に使うことができると思います。