Dialogflowでテキストからワードを取得する(プログラム編)
前回はコンソール画面にてDialogflowを使いました。
今度はプログラムからDialogflowを呼び出してみましょう。
※この記事は 「Dialogflowでテキストからワードを取得する(コンソール編)」 を実装された方を対象しています。
※Dialogflow および Googleのサービス利用による如何なる料金の発生も、弊社は責任を負いかねます、自己責任にてご利用ください。
目次
はじめに
今回は、PHPで認識するプログラムを作成します。
また、Google Cloud Consoleにて認証ファイルを作成しますので、各自ご用意ください。
【環境情報】
PHP(7.1.11)、Composer
Google Cloud Consoleで認証ファイルを取得
まずはGoogle Cloud Consoleへアクセスしましょう。
ここでプロジェクトを作成します。
今回はDialogflowのAgent Nameと同じ 「OfficeMeeting」 としました。
この管理画面で 「Dialogflow API」 というAPIを有効にします。
その後、サービスアカウントを作成します。
「APIとサービス」 > 「認証情報」 をクリック
「認証情報を作成」 > 「サービス アカウント キー」 をクリック
サービスアカウントキーの作成画面では赤枠の部分を入力していきます。
入力後 「作成」 ボタンを押すとJSONファイルがダウンロードされます。
これが認証ファイルです。
Composerでライブラリを取得 / 認証ファイルを配置
続いてWebブラウザからPHPでDialogflowにアクセスしてみます。
ライブラリは Composer でインストールしていきます。
※Composerのインストール方法や使い方については割愛。
composer.jsonファイルを作成し、下記を記載後、インストールを実行。
1 2 3 4 5 6 7 |
{ "require": { "google/cloud-dialogflow": "^0.5.4", } } |
実行後はcomposer.jsonと同じディレクトリにvendorディレクトリが作成され、その中にはDialogflowをPHPで実行するためのライブラリが入っています。
composer.jsonと同じディレクトリに、先ほど取得した認証ファイルを入れます。
※本来はセキュリティを考慮し、Webアクセスが不可能な場所に配置します
PHPでアクセスする
では、PHPでDialogflowへアクセスしていきましょう。
まずは index.php を作成し、ライブラリを参照してきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php require 'vendor/autoload.php'; use Google\Cloud\Dialogflow\V2\AgentsClient; use Google\Cloud\Dialogflow\V2\EntityTypesClient; use Google\Cloud\Dialogflow\V2\IntentsClient; use Google\Cloud\Dialogflow\V2\SessionEntityTypesClient; use Google\Cloud\Dialogflow\V2\SessionsClient; use Google\Cloud\Dialogflow\V2\QueryInput; use Google\Cloud\Dialogflow\V2\QueryParameters; use Google\Cloud\Dialogflow\V2\TextInput; use Google\Cloud\Dialogflow\V2\QueryResult; use Google\Protobuf\Internal\RepeatedField; use Google\Rpc\Status; use Google\Protobuf\Struct; use Google\Protobuf\Internal\MapField; use Google\Protobuf\Value; use Google\Cloud\Dialogflow\V2\DetectIntentResponse; use Google\Cloud\Dialogflow\V2\Context; use Google\Cloud\Dialogflow\V2\Intent; use Google\ApiCore\PagedListResponse; |
次に認証ファイルを指定し、セッションクライアントを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 |
// サービスアカウントパスとプロジェクトIDを設定 $serviceAccountPath = [認証ファイルのパス]; $projectId = [認証ファイル内に記載されているproject_id]; $config = [ 'credentialsConfig' => [ 'keyFile' => $serviceAccountPath, ], 'projectId' => $projectId, ]; // TODO:ここに処理を記載 |
ここまで来れば、あとは各APIをコールするだけとなります。
一部ですが、取得方法をご紹介します。
Intent一覧を取得
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$intentsClient = new IntentsClient($config); try { $formattedParent = $intentsClient->projectAgentName($projectId); $pagedResponse = $intentsClient->listIntents($formattedParent); echo '<ul>'; echo '<li>Intent List</li><ul>'; foreach ($pagedResponse->iteratePages() as $page) { foreach ($page as $element) { echo '<li>'; echo $element->getDisplayName(); echo ' ('.$element->getName().')'; echo '</li>'; } } echo '</ul>'; echo '</ul>'; } finally { $intentsClient->close(); } |
AgentsのTraingingを促す
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$agentsClient = new AgentsClient($config); try { $formattedParent = $agentsClient->projectName($projectId); $operationResponse = $agentsClient->trainAgent($formattedParent); $operationResponse->pollUntilComplete(); if ($operationResponse->operationSucceeded()) { echo 'Traing is successed.'; } else { $error = $operationResponse->getError(); echo 'Traing is error.'; echo '<br />'; print_r($error); } } finally { $agentsClient->close(); } |
Entity一覧を取得
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$entityTypesClient = new EntityTypesClient($config); try { $formattedParent = $entityTypesClient->projectAgentName($projectId); $pagedResponse = $entityTypesClient->listEntityTypes($formattedParent); foreach ($pagedResponse->iterateAllElements() as $entityType) { $entityTypeJsonString = $entityType->serializeToJsonString(); echo $entityTypeJsonString; } } finally { $entityTypesClient->close(); } |
テキスト解析する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
// 利用する言語コードを設定 $languageCode = 'ja'; // セッションIDを生成 $sessionId = uniqid("", true); // 解析するテキストを設定 $speachText = '明日の10時、社内打ち合わせをしたい'; $sessionsClient = new SessionsClient($config); try { // セッションクライアントを設定 $formattedSession = $sessionsClient->sessionName($projectId, $sessionId); // テキストを設定 $textInput = new TextInput(); $textInput->setText($speachText); $textInput->setLanguageCode($languageCode); // パラメータを設定 $queryParameters = new QueryParameters(); $queryParameters->setTimeZone('Asia/Tokyo'); // クエリインプットを作成 $queryInput = new QueryInput(); $queryInput->setText($textInput); $optionalArgs = [ 'queryParams' => $queryParameters, ]; // テキストを検証 $response = $sessionsClient->detectIntent($formattedSession, $queryInput, $optionalArgs); $queryResult = $response->getQueryResult(); // レスポンス結果を取得 $responseJsonString = $response->serializeToJsonString() echo $responseJsonString; } catch(Exception $e) { header('HTTP', true, 400); } finally { $sessionsClient->close(); } |
さいごに
これでプログラムからDialogflowを呼び出せました。
ここまでくると、様々なシステムに導入ができると思います。
是非、様々なシステムに導入してみてください。
- おすすめ記事
-
-
のえる2019.04.10
-
POPULAR
のえる
Full-stack Developer