dialogflow/dialogflow.php (375 lines of code) (raw):

<?php /** * Copyright 2018 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ namespace Google\Cloud\Samples\Dialogflow; use Google\Cloud\Dialogflow\V2\EntityType\Kind; use Google\Cloud\Dialogflow\V2\SessionEntityType\EntityOverrideMode; use Symfony\Component\Console\Application; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputOption; # includes the autoloader for libraries installed with composer require __DIR__ . '/vendor/autoload.php'; $application = new Application('Dialogflow'); // detect text intent command $application->add((new Command('detect-intent-texts')) ->addArgument('project-id', InputArgument::REQUIRED, 'Project/agent id. Required.') ->addOption('session-id', 's', InputOption::VALUE_REQUIRED, 'Identifier of the DetectIntent session. Defaults to random.') ->addOption('language-code', 'l', InputOption::VALUE_REQUIRED, 'Language code of the query. Defaults to "en-US".', 'en-US') ->addArgument('texts', InputArgument::IS_ARRAY | InputArgument::REQUIRED, 'Text inputs.') ->setDescription('Detect intent of text inputs using Dialogflow.') ->setHelp(<<<EOF The <info>%command.name%</info> command detects the intent of provided text using Dialogflow. <info>php %command.full_name% PROJECT_ID [-s SESSION_ID] [-l LANGUAGE-CODE] text [texts ...]</info> EOF ) ->setCode(function ($input, $output) { $projectId = $input->getArgument('project-id'); $sessionId = $input->getOption('session-id'); $languageCode = $input->getOption('language-code'); $texts = $input->getArgument('texts'); detect_intent_texts($projectId, $texts, $sessionId, $languageCode); }) ); // detect audio intent command $application->add((new Command('detect-intent-audio')) ->addArgument('project-id', InputArgument::REQUIRED, 'Project/agent id. Required.') ->addOption('session-id', 's', InputOption::VALUE_REQUIRED, 'Identifier of the DetectIntent session. Defaults to random.') ->addOption('language-code', 'l', InputOption::VALUE_REQUIRED, 'Language code of the query. Defaults to "en-US".', 'en-US') ->addArgument('path', InputArgument::REQUIRED, 'Path to audio file.') ->setDescription('Detect intent of audio file using Dialogflow.') ->setHelp(<<<EOF The <info>%command.name%</info> command detects the intent of provided audio using Dialogflow. <info>php %command.full_name% PROJECT_ID [-s SESSION_ID] [-l LANGUAGE-CODE] AUDIO_FILE_PATH</info> EOF ) ->setCode(function ($input, $output) { $projectId = $input->getArgument('project-id'); $sessionId = $input->getOption('session-id'); $languageCode = $input->getOption('language-code'); $path = $input->getArgument('path'); detect_intent_audio($projectId, $path, $sessionId, $languageCode); }) ); // detect stream intent command $application->add((new Command('detect-intent-stream')) ->addArgument('project-id', InputArgument::REQUIRED, 'Project/agent id. Required.') ->addOption('session-id', 's', InputOption::VALUE_REQUIRED, 'Identifier of the DetectIntent session. Defaults to random.') ->addOption('language-code', 'l', InputOption::VALUE_REQUIRED, 'Language code of the query. Defaults to "en-US".', 'en-US') ->addArgument('path', InputArgument::REQUIRED, 'Path to audio file.') ->setDescription('Detect intent of audio stream using Dialogflow.') ->setHelp(<<<EOF The <info>%command.name%</info> command detects the intent of provided text using Dialogflow. <info>php %command.full_name% PROJECT_ID -s SESSION_ID -l LANGUAGE-CODE AUDIO_FILE_PATH</info> EOF ) ->setCode(function ($input, $output) { $projectId = $input->getArgument('project-id'); $sessionId = $input->getOption('session-id'); $languageCode = $input->getOption('language-code'); $path = $input->getArgument('path'); detect_intent_stream($projectId, $path, $sessionId, $languageCode); }) ); // list intent command $application->add((new Command('intent-list')) ->addArgument('project-id', InputArgument::REQUIRED, 'Project/agent id. Required.') ->setDescription('List intents.') ->setHelp(<<<EOF The <info>%command.name%</info> command lists intents. <info>php %command.full_name% PROJECT_ID</info> EOF ) ->setCode(function ($input, $output) { $projectId = $input->getArgument('project-id'); intent_list($projectId); }) ); // create intent command $application->add((new Command('intent-create')) ->addArgument('project-id', InputArgument::REQUIRED, 'Project/agent id. Required.') ->addArgument('display-name', InputArgument::REQUIRED, 'Display name of intent.') ->addOption('training-phrases-parts', 't', InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Training phrases.') ->addOption('message-texts', 'm', InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Message texts for the agent\'s response when the intent is detected.') ->setDescription('Create intent of provided display name.') ->setHelp(<<<EOF The <info>%command.name%</info> command creates intent of provided display name. <info>php %command.full_name% PROJECT_ID DISPLAY_NAME -t training_phrase_part [-t trainining_phrase_part ...] -m message_text [-m message_text ...] </info> EOF ) ->setCode(function ($input, $output) { $projectId = $input->getArgument('project-id'); $displayName = $input->getArgument('display-name'); $traingPhrases = $input->getOption('training-phrases-parts'); $messageTexts = $input->getOption('message-texts'); intent_create($projectId, $displayName, $traingPhrases, $messageTexts); }) ); // delete intent command $application->add((new Command('intent-delete')) ->addArgument('project-id', InputArgument::REQUIRED, 'Project/agent id. Required.') ->addArgument('intent-id', InputArgument::REQUIRED, 'ID of intent.') ->setDescription('Delete intent of provided intent id.') ->setHelp(<<<EOF The <info>%command.name%</info> command deletes intent of provided intent id. <info>php %command.full_name% PROJECT_ID INTENT_ID</info> EOF ) ->setCode(function ($input, $output) { $projectId = $input->getArgument('project-id'); $intentId = $input->getArgument('intent-id'); intent_delete($projectId, $intentId); }) ); // list entity type command $application->add((new Command('entity-type-list')) ->addArgument('project-id', InputArgument::REQUIRED, 'Project/agent id. Required.') ->setDescription('List entity types.') ->setHelp(<<<EOF The <info>%command.name%</info> command lists entity types. <info>php %command.full_name% PROJECT_ID</info> EOF ) ->setCode(function ($input, $output) { $projectId = $input->getArgument('project-id'); entity_type_list($projectId); }) ); // create entity type command $application->add((new Command('entity-type-create')) ->addArgument('project-id', InputArgument::REQUIRED, 'Project/agent id. Required.') ->addArgument('display-name', InputArgument::REQUIRED, 'Display name of the entity.') ->addOption('kind', 'k', InputOption::VALUE_REQUIRED, 'Kind of entity. KIND_MAP (default) or KIND_LIST', Kind::KIND_MAP) ->setDescription('Create entity types with provided display name.') ->setHelp(<<<EOF The <info>%command.name%</info> command creates entity type with provided name. <info>php %command.full_name% PROJECT_ID DISPLAY_NAME -k KIND</info> EOF ) ->setCode(function ($input, $output) { $projectId = $input->getArgument('project-id'); $displayName = $input->getArgument('display-name'); $kind = $input->getOption('kind'); entity_type_create($projectId, $displayName, $kind); }) ); // delete entity type command $application->add((new Command('entity-type-delete')) ->addArgument('project-id', InputArgument::REQUIRED, 'Project/agent id. Required.') ->addArgument('entity-type-id', InputArgument::REQUIRED, 'ID of entity type.') ->setDescription('Delete entity types of provided entity type id.') ->setHelp(<<<EOF The <info>%command.name%</info> command deletes entity type of provided id. <info>php %command.full_name% PROJECT_ID ENTITY_TYPE_ID</info> EOF ) ->setCode(function ($input, $output) { $projectId = $input->getArgument('project-id'); $entityTypeId = $input->getArgument('entity-type-id'); entity_type_delete($projectId, $entityTypeId); }) ); // list entity command $application->add((new Command('entity-list')) ->addArgument('project-id', InputArgument::REQUIRED, 'Project/agent id. Required.') ->addArgument('entity-type-id', InputArgument::REQUIRED, 'ID of entity type.') ->setDescription('List entities of provided entity type id.') ->setHelp(<<<EOF The <info>%command.name%</info> command lists entities of provided entity type id. <info>php %command.full_name% PROJECT_ID ENTITY_TYPE_ID</info> EOF ) ->setCode(function ($input, $output) { $projectId = $input->getArgument('project-id'); $entityTypeId = $input->getArgument('entity-type-id'); entity_list($projectId, $entityTypeId); }) ); // create entity command $application->add((new Command('entity-create')) ->addArgument('project-id', InputArgument::REQUIRED, 'Project/agent id. Required.') ->addArgument('entity-type-id', InputArgument::REQUIRED, 'ID of entity type.') ->addArgument('entity-value', InputArgument::REQUIRED, 'Value of the entity.') ->addArgument('synonyms', InputArgument::OPTIONAL | InputArgument::IS_ARRAY, 'Synonyms that will map to provided entity value.') ->setDescription('Create entity value for entity type id.') ->setHelp(<<<EOF The <info>%command.name%</info> command creates entity value for entity type id. <info>php %command.full_name% PROJECT_ID ENTITY_TYPE_ID ENTITY_VALUE [synonyms ...]</info> EOF ) ->setCode(function ($input, $output) { $projectId = $input->getArgument('project-id'); $entityTypeId = $input->getArgument('entity-type-id'); $entityValue = $input->getArgument('entity-value'); $synonyms = $input->getArgument('synonyms'); entity_create($projectId, $entityTypeId, $entityValue, $synonyms); }) ); // delete entity command $application->add((new Command('entity-delete')) ->addArgument('project-id', InputArgument::REQUIRED, 'Project/agent id. Required.') ->addArgument('entity-type-id', InputArgument::REQUIRED, 'ID of entity type.') ->addArgument('entity-value', InputArgument::REQUIRED, 'Value of the entity.') ->setDescription('Delete entity value from entity type id.') ->setHelp(<<<EOF The <info>%command.name%</info> command deletes entity value from entity type id. <info>php %command.full_name% PROJECT_ID ENTITY_TYPE_ID ENTITY_VALUE</info> EOF ) ->setCode(function ($input, $output) { $projectId = $input->getArgument('project-id'); $entityTypeId = $input->getArgument('entity-type-id'); $entityValue = $input->getArgument('entity-value'); entity_delete($projectId, $entityTypeId, $entityValue); }) ); // list context command $application->add((new Command('context-list')) ->addArgument('project-id', InputArgument::REQUIRED, 'Project/agent id. Required.') ->addOption('session-id', 's', InputOption::VALUE_REQUIRED, 'Identifier of the DetectIntent session.') ->setDescription('List contexts.') ->setHelp(<<<EOF The <info>%command.name%</info> command lists contexts. <info>php %command.full_name% PROJECT_ID -s SESSION_ID</info> EOF ) ->setCode(function ($input, $output) { $projectId = $input->getArgument('project-id'); $sessionId = $input->getOption('session-id'); context_list($projectId, $sessionId); }) ); // create context command $application->add((new Command('context-create')) ->addArgument('project-id', InputArgument::REQUIRED, 'Project/agent id. Required.') ->addOption('session-id', 's', InputOption::VALUE_REQUIRED, 'Identifier of the DetectIntent session.') ->addArgument('context-id', InputArgument::REQUIRED, 'ID of the context.') ->addOption('lifespan-count', 'c', InputOption::VALUE_REQUIRED, 'Lifespan count of the context. Defaults to 1.', 1) ->setDescription('Create context of provided context id.') ->setHelp(<<<EOF The <info>%command.name%</info> command creates context of provided context id. <info>php %command.full_name% PROJECT_ID -s SESSION_ID CONTEXT_ID -c LIFESPAN_COUNT</info> EOF ) ->setCode(function ($input, $output) { $projectId = $input->getArgument('project-id'); $sessionId = $input->getOption('session-id'); $contextId = $input->getArgument('context-id'); $lifespan = $input->getOption('lifespan-count'); context_create($projectId, $contextId, $sessionId, $lifespan); }) ); // delete context command $application->add((new Command('context-delete')) ->addArgument('project-id', InputArgument::REQUIRED, 'Project/agent id. Required.') ->addOption('session-id', 's', InputOption::VALUE_REQUIRED, 'Identifier of the DetectIntent session.') ->addArgument('context-id', InputArgument::REQUIRED, 'ID of the context.') ->setDescription('Delete context of provided context id.') ->setHelp(<<<EOF The <info>%command.name%</info> command deletes context of provided context id. <info>php %command.full_name% PROJECT_ID -s SESSION_ID CONTEXT_ID</info> EOF ) ->setCode(function ($input, $output) { $projectId = $input->getArgument('project-id'); $sessionId = $input->getOption('session-id'); $contextId = $input->getArgument('context-id'); context_delete($projectId, $contextId, $sessionId); }) ); // list session entity type command $application->add((new Command('session-entity-type-list')) ->addArgument('project-id', InputArgument::REQUIRED, 'Project/agent id. Required.') ->addOption('session-id', 's', InputOption::VALUE_REQUIRED, 'Identifier of the DetectIntent session.') ->setDescription('List session entity types.') ->setHelp(<<<EOF The <info>%command.name%</info> command lists session entity types. <info>php %command.full_name% PROJECT_ID -s SESSION_ID</info> EOF ) ->setCode(function ($input, $output) { $projectId = $input->getArgument('project-id'); $sessionId = $input->getOption('session-id'); session_entity_type_list($projectId, $sessionId); }) ); // create session entity type command $application->add((new Command('session-entity-type-create')) ->addArgument('project-id', InputArgument::REQUIRED, 'Project/agent id. Required.') ->addOption('session-id', 's', InputOption::VALUE_REQUIRED, 'Identifier of the DetectIntent session.') ->addArgument('entity-type-display-name', InputArgument::REQUIRED, 'Display name of the entity type.') ->addArgument('entity-values', InputArgument::IS_ARRAY | InputArgument::REQUIRED, 'Entity values of the session entity type.') ->addOption('entity-override-mode', 'o', InputOption::VALUE_REQUIRED, 'ENTITY_OVERRIDE_MODE_OVERRIDE (default) or ENTITY_OVERRIDE_MODE_SUPPLEMENT', EntityOverrideMode::ENTITY_OVERRIDE_MODE_OVERRIDE) ->setDescription('Create session entity type.') ->setHelp(<<<EOF The <info>%command.name%</info> command creates session entity type with display name and values provided. <info>php %command.full_name% PROJECT_ID -s SESSION_ID ENTITY_TYPE_DISPLAY_NAME entity_value [entity_values ...] -o ENTITY_OVERRIDE_MODE</info> EOF ) ->setCode(function ($input, $output) { $projectId = $input->getArgument('project-id'); $sessionId = $input->getOption('session-id'); $displayName = $input->getArgument('entity-type-display-name'); $values = $input->getArgument('entity-values'); $overrideMode = $input->getOption('entity-override-mode'); session_entity_type_create($projectId, $displayName, $values, $sessionId, $overrideMode); }) ); // delete session entity type command $application->add((new Command('session-entity-type-delete')) ->addArgument('project-id', InputArgument::REQUIRED, 'Project/agent id. Required.') ->addOption('session-id', 's', InputOption::VALUE_REQUIRED, 'Identifier of the DetectIntent session.') ->addArgument('entity-type-display-name', InputArgument::REQUIRED, 'Display name of the entity type.') ->setDescription('Delete session entity type of provided display name.') ->setHelp(<<<EOF The <info>%command.name%</info> command deletes specified session entity type. <info>php %command.full_name% PROJECT_ID SESSION_ID ENTITY_TYPE_DISPLAY_NAME </info> EOF ) ->setCode(function ($input, $output) { $projectId = $input->getArgument('project-id'); $sessionId = $input->getOption('session-id'); $displayName = $input->getArgument('entity-type-display-name'); session_entity_type_delete($projectId, $displayName, $sessionId); }) ); if (getenv('PHPUNIT_TESTS') === '1') { return $application; } $application->run();