From a95f1f12780bfb148397ec09b9df9c213e60931f Mon Sep 17 00:00:00 2001 From: xavidop Date: Wed, 13 Dec 2023 09:18:13 +0000 Subject: [PATCH] Deployed 3c379b7 with MkDocs version: 1.4.2 --- .nojekyll | 0 404.html | 1696 +++++ CNAME | 1 + agents/create/index.html | 1825 +++++ agents/delete/index.html | 1821 +++++ agents/export/index.html | 1829 +++++ agents/introduction/index.html | 1887 +++++ agents/restore/index.html | 1829 +++++ agents/update/index.html | 1825 +++++ assets/images/favicon.png | Bin 0 -> 1870 bytes assets/javascripts/bundle.51d95adb.min.js | 29 + assets/javascripts/bundle.51d95adb.min.js.map | 8 + assets/javascripts/lunr/min/lunr.ar.min.js | 1 + assets/javascripts/lunr/min/lunr.da.min.js | 18 + assets/javascripts/lunr/min/lunr.de.min.js | 18 + assets/javascripts/lunr/min/lunr.du.min.js | 18 + assets/javascripts/lunr/min/lunr.es.min.js | 18 + assets/javascripts/lunr/min/lunr.fi.min.js | 18 + assets/javascripts/lunr/min/lunr.fr.min.js | 18 + assets/javascripts/lunr/min/lunr.hi.min.js | 1 + assets/javascripts/lunr/min/lunr.hu.min.js | 18 + assets/javascripts/lunr/min/lunr.it.min.js | 18 + assets/javascripts/lunr/min/lunr.ja.min.js | 1 + assets/javascripts/lunr/min/lunr.jp.min.js | 1 + assets/javascripts/lunr/min/lunr.ko.min.js | 1 + assets/javascripts/lunr/min/lunr.multi.min.js | 1 + assets/javascripts/lunr/min/lunr.nl.min.js | 18 + assets/javascripts/lunr/min/lunr.no.min.js | 18 + assets/javascripts/lunr/min/lunr.pt.min.js | 18 + assets/javascripts/lunr/min/lunr.ro.min.js | 18 + assets/javascripts/lunr/min/lunr.ru.min.js | 18 + .../lunr/min/lunr.stemmer.support.min.js | 1 + assets/javascripts/lunr/min/lunr.sv.min.js | 18 + assets/javascripts/lunr/min/lunr.ta.min.js | 1 + assets/javascripts/lunr/min/lunr.th.min.js | 1 + assets/javascripts/lunr/min/lunr.tr.min.js | 18 + assets/javascripts/lunr/min/lunr.vi.min.js | 1 + assets/javascripts/lunr/min/lunr.zh.min.js | 1 + assets/javascripts/lunr/tinyseg.js | 206 + assets/javascripts/lunr/wordcut.js | 6708 +++++++++++++++++ .../workers/search.e5c33ebb.min.js | 42 + .../workers/search.e5c33ebb.min.js.map | 8 + assets/stylesheets/main.558e4712.min.css | 1 + assets/stylesheets/main.558e4712.min.css.map | 1 + assets/stylesheets/palette.2505c338.min.css | 1 + .../stylesheets/palette.2505c338.min.css.map | 1 + ci/index.html | 1720 +++++ cmd/cxcli/index.html | 1842 +++++ cmd/cxcli_agent/index.html | 1830 +++++ cmd/cxcli_agent_create/index.html | 1775 +++++ cmd/cxcli_agent_delete/index.html | 1766 +++++ cmd/cxcli_agent_export/index.html | 1768 +++++ cmd/cxcli_agent_restore/index.html | 1767 +++++ cmd/cxcli_agent_update/index.html | 1774 +++++ cmd/cxcli_completion/index.html | 1776 +++++ cmd/cxcli_completion_bash/index.html | 1810 +++++ cmd/cxcli_completion_fish/index.html | 1783 +++++ cmd/cxcli_completion_powershell/index.html | 1780 +++++ cmd/cxcli_completion_zsh/index.html | 1813 +++++ cmd/cxcli_dialog/index.html | 1829 +++++ cmd/cxcli_entity-type/index.html | 1828 +++++ cmd/cxcli_entity-type_create/index.html | 1770 +++++ cmd/cxcli_entity-type_delete/index.html | 1768 +++++ cmd/cxcli_entity-type_update/index.html | 1770 +++++ cmd/cxcli_environment/index.html | 1829 +++++ cmd/cxcli_environment_create/index.html | 1769 +++++ cmd/cxcli_environment_delete/index.html | 1767 +++++ cmd/cxcli_environment_execute-cicd/index.html | 1767 +++++ cmd/cxcli_environment_update/index.html | 1769 +++++ cmd/cxcli_flow-version/index.html | 1828 +++++ cmd/cxcli_flow-version_create/index.html | 1769 +++++ cmd/cxcli_flow-version_delete/index.html | 1768 +++++ cmd/cxcli_flow-version_update/index.html | 1769 +++++ cmd/cxcli_flow/index.html | 1829 +++++ cmd/cxcli_flow_create/index.html | 1772 +++++ cmd/cxcli_flow_delete/index.html | 1767 +++++ cmd/cxcli_flow_train/index.html | 1767 +++++ cmd/cxcli_flow_update/index.html | 1772 +++++ cmd/cxcli_intent/index.html | 1828 +++++ cmd/cxcli_intent_create/index.html | 1770 +++++ cmd/cxcli_intent_delete/index.html | 1767 +++++ cmd/cxcli_intent_update/index.html | 1770 +++++ cmd/cxcli_jsonschema/index.html | 1826 +++++ cmd/cxcli_profile-nlu/index.html | 1826 +++++ cmd/cxcli_profile-nlu_execute/index.html | 1764 +++++ cmd/cxcli_stt/index.html | 1826 +++++ cmd/cxcli_stt_recognize/index.html | 1765 +++++ cmd/cxcli_tts/index.html | 1826 +++++ cmd/cxcli_tts_synthesize/index.html | 1766 +++++ cmd/cxcli_version/index.html | 1825 +++++ cmd/cxcli_webhook/index.html | 1828 +++++ cmd/cxcli_webhook_create/index.html | 1772 +++++ cmd/cxcli_webhook_delete/index.html | 1768 +++++ cmd/cxcli_webhook_update/index.html | 1772 +++++ community/contributing/index.html | 1876 +++++ community/sponsors/index.html | 1794 +++++ community/users/index.html | 1799 +++++ dialog/index.html | 1851 +++++ entitytypes/create/index.html | 1825 +++++ entitytypes/delete/index.html | 1821 +++++ entitytypes/introduction/index.html | 1861 +++++ entitytypes/update/index.html | 1825 +++++ environments/cicd/index.html | 1826 +++++ environments/create/index.html | 1827 +++++ environments/delete/index.html | 1821 +++++ environments/introduction/index.html | 1868 +++++ environments/update/index.html | 1827 +++++ flows/create/index.html | 1821 +++++ flows/delete/index.html | 1821 +++++ flows/introduction/index.html | 1868 +++++ flows/train/index.html | 1825 +++++ flows/update/index.html | 1821 +++++ flowversions/create/index.html | 1825 +++++ flowversions/delete/index.html | 1821 +++++ flowversions/introduction/index.html | 1852 +++++ flowversions/update/index.html | 1821 +++++ images/cx_logo.png | Bin 0 -> 11318 bytes images/favicon.ico | Bin 0 -> 1150 bytes images/flow.png | Bin 0 -> 9375 bytes images/gopher.png | Bin 0 -> 105282 bytes images/logo.png | Bin 0 -> 69655 bytes images/logo_background.png | Bin 0 -> 63848 bytes images/stt.png | Bin 0 -> 11362 bytes images/tts.png | Bin 0 -> 2839 bytes index.html | 1809 +++++ intents/create/index.html | 1825 +++++ intents/delete/index.html | 1821 +++++ intents/introduction/index.html | 1859 +++++ intents/update/index.html | 1825 +++++ links/index.html | 1748 +++++ nluprofiler/examples/audio/index.html | 1826 +++++ nluprofiler/examples/index.html | 1763 +++++ nluprofiler/examples/simple/index.html | 1832 +++++ nluprofiler/examples/system/index.html | 1828 +++++ nluprofiler/examples/text/index.html | 1842 +++++ nluprofiler/introduction/index.html | 1866 +++++ nluprofiler/suites/index.html | 1829 +++++ nluprofiler/tests/index.html | 1860 +++++ overview/authentication/index.html | 1891 +++++ overview/faq/index.html | 1969 +++++ overview/install/index.html | 2235 ++++++ overview/roadmap/index.html | 1759 +++++ search/search_index.json | 1 + security/index.html | 1745 +++++ sitemap.xml | 513 ++ sitemap.xml.gz | Bin 0 -> 804 bytes static/hi.mp3 | Bin 0 -> 19884 bytes static/run | 45 + static/suite.json | 66 + static/test.json | 110 + stt/index.html | 1872 +++++ troubleshooting/index.html | 1845 +++++ tts/index.html | 1867 +++++ webhooks/create/index.html | 1904 +++++ webhooks/delete/index.html | 1821 +++++ webhooks/introduction/index.html | 1852 +++++ webhooks/update/index.html | 1905 +++++ 157 files changed, 195038 insertions(+) create mode 100644 .nojekyll create mode 100644 404.html create mode 100644 CNAME create mode 100644 agents/create/index.html create mode 100644 agents/delete/index.html create mode 100644 agents/export/index.html create mode 100644 agents/introduction/index.html create mode 100644 agents/restore/index.html create mode 100644 agents/update/index.html create mode 100644 assets/images/favicon.png create mode 100644 assets/javascripts/bundle.51d95adb.min.js create mode 100644 assets/javascripts/bundle.51d95adb.min.js.map create mode 100644 assets/javascripts/lunr/min/lunr.ar.min.js create mode 100644 assets/javascripts/lunr/min/lunr.da.min.js create mode 100644 assets/javascripts/lunr/min/lunr.de.min.js create mode 100644 assets/javascripts/lunr/min/lunr.du.min.js create mode 100644 assets/javascripts/lunr/min/lunr.es.min.js create mode 100644 assets/javascripts/lunr/min/lunr.fi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.fr.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hu.min.js create mode 100644 assets/javascripts/lunr/min/lunr.it.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ja.min.js create mode 100644 assets/javascripts/lunr/min/lunr.jp.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ko.min.js create mode 100644 assets/javascripts/lunr/min/lunr.multi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.nl.min.js create mode 100644 assets/javascripts/lunr/min/lunr.no.min.js create mode 100644 assets/javascripts/lunr/min/lunr.pt.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ro.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ru.min.js create mode 100644 assets/javascripts/lunr/min/lunr.stemmer.support.min.js create mode 100644 assets/javascripts/lunr/min/lunr.sv.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ta.min.js create mode 100644 assets/javascripts/lunr/min/lunr.th.min.js create mode 100644 assets/javascripts/lunr/min/lunr.tr.min.js create mode 100644 assets/javascripts/lunr/min/lunr.vi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.zh.min.js create mode 100644 assets/javascripts/lunr/tinyseg.js create mode 100644 assets/javascripts/lunr/wordcut.js create mode 100644 assets/javascripts/workers/search.e5c33ebb.min.js create mode 100644 assets/javascripts/workers/search.e5c33ebb.min.js.map create mode 100644 assets/stylesheets/main.558e4712.min.css create mode 100644 assets/stylesheets/main.558e4712.min.css.map create mode 100644 assets/stylesheets/palette.2505c338.min.css create mode 100644 assets/stylesheets/palette.2505c338.min.css.map create mode 100644 ci/index.html create mode 100644 cmd/cxcli/index.html create mode 100644 cmd/cxcli_agent/index.html create mode 100644 cmd/cxcli_agent_create/index.html create mode 100644 cmd/cxcli_agent_delete/index.html create mode 100644 cmd/cxcli_agent_export/index.html create mode 100644 cmd/cxcli_agent_restore/index.html create mode 100644 cmd/cxcli_agent_update/index.html create mode 100644 cmd/cxcli_completion/index.html create mode 100644 cmd/cxcli_completion_bash/index.html create mode 100644 cmd/cxcli_completion_fish/index.html create mode 100644 cmd/cxcli_completion_powershell/index.html create mode 100644 cmd/cxcli_completion_zsh/index.html create mode 100644 cmd/cxcli_dialog/index.html create mode 100644 cmd/cxcli_entity-type/index.html create mode 100644 cmd/cxcli_entity-type_create/index.html create mode 100644 cmd/cxcli_entity-type_delete/index.html create mode 100644 cmd/cxcli_entity-type_update/index.html create mode 100644 cmd/cxcli_environment/index.html create mode 100644 cmd/cxcli_environment_create/index.html create mode 100644 cmd/cxcli_environment_delete/index.html create mode 100644 cmd/cxcli_environment_execute-cicd/index.html create mode 100644 cmd/cxcli_environment_update/index.html create mode 100644 cmd/cxcli_flow-version/index.html create mode 100644 cmd/cxcli_flow-version_create/index.html create mode 100644 cmd/cxcli_flow-version_delete/index.html create mode 100644 cmd/cxcli_flow-version_update/index.html create mode 100644 cmd/cxcli_flow/index.html create mode 100644 cmd/cxcli_flow_create/index.html create mode 100644 cmd/cxcli_flow_delete/index.html create mode 100644 cmd/cxcli_flow_train/index.html create mode 100644 cmd/cxcli_flow_update/index.html create mode 100644 cmd/cxcli_intent/index.html create mode 100644 cmd/cxcli_intent_create/index.html create mode 100644 cmd/cxcli_intent_delete/index.html create mode 100644 cmd/cxcli_intent_update/index.html create mode 100644 cmd/cxcli_jsonschema/index.html create mode 100644 cmd/cxcli_profile-nlu/index.html create mode 100644 cmd/cxcli_profile-nlu_execute/index.html create mode 100644 cmd/cxcli_stt/index.html create mode 100644 cmd/cxcli_stt_recognize/index.html create mode 100644 cmd/cxcli_tts/index.html create mode 100644 cmd/cxcli_tts_synthesize/index.html create mode 100644 cmd/cxcli_version/index.html create mode 100644 cmd/cxcli_webhook/index.html create mode 100644 cmd/cxcli_webhook_create/index.html create mode 100644 cmd/cxcli_webhook_delete/index.html create mode 100644 cmd/cxcli_webhook_update/index.html create mode 100644 community/contributing/index.html create mode 100644 community/sponsors/index.html create mode 100644 community/users/index.html create mode 100644 dialog/index.html create mode 100644 entitytypes/create/index.html create mode 100644 entitytypes/delete/index.html create mode 100644 entitytypes/introduction/index.html create mode 100644 entitytypes/update/index.html create mode 100644 environments/cicd/index.html create mode 100644 environments/create/index.html create mode 100644 environments/delete/index.html create mode 100644 environments/introduction/index.html create mode 100644 environments/update/index.html create mode 100644 flows/create/index.html create mode 100644 flows/delete/index.html create mode 100644 flows/introduction/index.html create mode 100644 flows/train/index.html create mode 100644 flows/update/index.html create mode 100644 flowversions/create/index.html create mode 100644 flowversions/delete/index.html create mode 100644 flowversions/introduction/index.html create mode 100644 flowversions/update/index.html create mode 100644 images/cx_logo.png create mode 100644 images/favicon.ico create mode 100644 images/flow.png create mode 100644 images/gopher.png create mode 100644 images/logo.png create mode 100644 images/logo_background.png create mode 100644 images/stt.png create mode 100644 images/tts.png create mode 100644 index.html create mode 100644 intents/create/index.html create mode 100644 intents/delete/index.html create mode 100644 intents/introduction/index.html create mode 100644 intents/update/index.html create mode 100644 links/index.html create mode 100644 nluprofiler/examples/audio/index.html create mode 100644 nluprofiler/examples/index.html create mode 100644 nluprofiler/examples/simple/index.html create mode 100644 nluprofiler/examples/system/index.html create mode 100644 nluprofiler/examples/text/index.html create mode 100644 nluprofiler/introduction/index.html create mode 100644 nluprofiler/suites/index.html create mode 100644 nluprofiler/tests/index.html create mode 100644 overview/authentication/index.html create mode 100644 overview/faq/index.html create mode 100644 overview/install/index.html create mode 100644 overview/roadmap/index.html create mode 100644 search/search_index.json create mode 100644 security/index.html create mode 100644 sitemap.xml create mode 100644 sitemap.xml.gz create mode 100644 static/hi.mp3 create mode 100644 static/run create mode 100644 static/suite.json create mode 100644 static/test.json create mode 100644 stt/index.html create mode 100644 troubleshooting/index.html create mode 100644 tts/index.html create mode 100644 webhooks/create/index.html create mode 100644 webhooks/delete/index.html create mode 100644 webhooks/introduction/index.html create mode 100644 webhooks/update/index.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/404.html b/404.html new file mode 100644 index 00000000..212bf59b --- /dev/null +++ b/404.html @@ -0,0 +1,1696 @@ + + + + + + + + + + + + + + + + + + + + + + Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ +

404 - Not found

+ +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 00000000..30833f82 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +cxcli.xavidop.me \ No newline at end of file diff --git a/agents/create/index.html b/agents/create/index.html new file mode 100644 index 00000000..5ff27f97 --- /dev/null +++ b/agents/create/index.html @@ -0,0 +1,1825 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Create

+

Usage

+

You can find the create functionality within the cxcli agent create subcommand. You can read the documentation about this command here.

+

The argument to --timezone is a value from the IANA time zone database. This is an example: +

America/New_York
+Europe/Madrid
+

+

Example

+

Here is a simple example of the cxcli agent create command:

+
cxcli agent create test-agent --project-id test-cx-346408 --location-id us-central1 --locale en --timezone Europe/Madrid
+
+

The above command will give you output similar to the following:

+
$ cxcli agent create test-agent --project-id test-cx-346408 --location-id us-central1 --locale en --timezone Europe/Madrid
+INFO Agent created with id: projects/test-cx-346408/locations/us-central1/agents/e2ae2503-f38c-46a1-a3bf-22e57617baf0
+
+ +

If you want to learn more about Dialogflow CX Agent creation, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/agents/delete/index.html b/agents/delete/index.html new file mode 100644 index 00000000..02318f6b --- /dev/null +++ b/agents/delete/index.html @@ -0,0 +1,1821 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Delete - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Delete

+

Usage

+

You can find the delete functionality within the cxcli agent delete subcommand. You can read the documentation about this command here.

+

Example

+

Here is a simple example of the cxcli agent delete command:

+
cxcli agent delete test-agent --project-id test-cx-346408 --location-id us-central1
+
+

The above command will give you output similar to the following:

+
$ cxcli agent delete test-agent --project-id test-cx-346408 --location-id us-central1
+INFO Agent deleted
+
+ +

If you want to learn more about Dialogflow CX Agent deletion, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/agents/export/index.html b/agents/export/index.html new file mode 100644 index 00000000..d242aec8 --- /dev/null +++ b/agents/export/index.html @@ -0,0 +1,1829 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Export - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Export

+

Usage

+

You can find the export functionality within the cxcli agent export subcommand. You can read the documentation about this command here.

+
+

Exported file format

+

You can export your agent in blob or json format. When you choose json format, the output file is going to be a zip file.

+
+

Example

+

Here is a simple example of the cxcli agent export command:

+
cxcli agent export test-agent --project-id test-cx-346408 --location-id us-central1 --export-format blob
+
+

The above command will give you output similar to the following:

+
$ cxcli agent export test-agent --project-id test-cx-346408 --location-id us-central1 --export-format json --output-file agent.zip
+INFO Agent exported to file: agent.zip
+
+
+

are you running this command in a CI/CD pipeline?

+

If this is the case, we recommend that you set the --output-format parameter to json.

+
+ +

If you want to learn more about Dialogflow CX exports, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/agents/introduction/index.html b/agents/introduction/index.html new file mode 100644 index 00000000..f04dcacb --- /dev/null +++ b/agents/introduction/index.html @@ -0,0 +1,1887 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Introduction - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Agents

+

What is this?

+

An agent in Dialogflow CX is the entity that handles all the conversations that we have defined on the Dialogflow CX console with the end users.

+

An agent is basically an assistant that will manage the state of each user's conversation when the end users are interacting with the agent through text or audio in multiple channels.

+

With cxcli, you can easily interact with your Dialogflow CX agents.

+

All of the commands that are available in cxcli to interact with your agents are located within the cxcli agent subcommand.

+

Create

+

You can create an agent using this tool.

+

The cxcli has a command that allows you to create an agent. You can find a more detailed explanation here

+

Update

+

You can update an agent using this cli.

+

The cxcli has a command that allows you to update an agent. You can find a more detailed explanation here

+

Delete

+

The cxcli has a command that allows you to delete your agent. You can find a more detailed explanation here

+

Restore

+

You can restore an agent using a blob or a json-package file. Right now the Dialogflow CX API, used by the cxcli, works with the blob and json format.

+

The cxcli has a command that allows you to restore an agent. You can find a more detailed explanation here

+

Export

+

An agent can be exported as a blob or a json-package file. Right now the Dialogflow CX API, used by the cxcli, works with the blob and json format.

+

The cxcli has a command that allows you to export your agent. You can find a more detailed explanation here

+ +

If you want to see the full usage of the cxcli agent command, please refer to this page.

+

If you want to learn more about Dialogflow CX agents, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/agents/restore/index.html b/agents/restore/index.html new file mode 100644 index 00000000..d5a6232a --- /dev/null +++ b/agents/restore/index.html @@ -0,0 +1,1829 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Restore - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Restore

+

Usage

+

You can find the restore functionality within the cxcli agent restore subcommand. You can read the documentation about this command here.

+
+

File format to be restored

+

Now you can restore your agents in blob or json format. When you choose json format, the input file has to be a zip file with a proper Dialogflow CX structure.

+
+

Example

+

Here is a simple example of the cxcli agent restore command:

+
cxcli agent restore test-agent --project-id test-cx-346408 --location-id us-central1 --input agent.blob
+
+

The above command will give you output similar to the following:

+
$ cxcli agent restore test-agent --project-id test-cx-346408 --location-id us-central1 --input agent.zip
+INFO Agent restored
+
+
+

Are you running this command in a CI/CD pipeline?

+

If this is the case, we recommend that you set the --output-format parameter to json.

+
+ +

If you want to learn more about Dialogflow CX restores, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/agents/update/index.html b/agents/update/index.html new file mode 100644 index 00000000..7c94eee8 --- /dev/null +++ b/agents/update/index.html @@ -0,0 +1,1825 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Update - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Update

+

Usage

+

You can find the update functionality within the cxcli agent update subcommand. You can read the documentation about this command here.

+

The argument to --timezone is a value from the IANA time zone database. This is an example: +

America/New_York
+Europe/Madrid
+

+

Example

+

Here is a simple example of the cxcli agent update command:

+
cxcli agent update test-agent --project-id test-cx-346408 --location-id us-central1 --locale en --timezone Europe/Madrid
+
+

The above command will give you output similar to the following:

+
$ cxcli agent update test-agent --project-id test-cx-346408 --location-id us-central1 --locale en --timezone Europe/Madrid
+INFO Agent updated
+
+ +

If you want to learn more about Dialogflow CX Agent update, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/assets/images/favicon.png b/assets/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..1cf13b9f9d978896599290a74f77d5dbe7d1655c GIT binary patch literal 1870 zcmV-U2eJ5xP)Gc)JR9QMau)O=X#!i9;T z37kk-upj^(fsR36MHs_+1RCI)NNu9}lD0S{B^g8PN?Ww(5|~L#Ng*g{WsqleV}|#l zz8@ri&cTzw_h33bHI+12+kK6WN$h#n5cD8OQt`5kw6p~9H3()bUQ8OS4Q4HTQ=1Ol z_JAocz`fLbT2^{`8n~UAo=#AUOf=SOq4pYkt;XbC&f#7lb$*7=$na!mWCQ`dBQsO0 zLFBSPj*N?#u5&pf2t4XjEGH|=pPQ8xh7tpx;US5Cx_Ju;!O`ya-yF`)b%TEt5>eP1ZX~}sjjA%FJF?h7cX8=b!DZl<6%Cv z*G0uvvU+vmnpLZ2paivG-(cd*y3$hCIcsZcYOGh{$&)A6*XX&kXZd3G8m)G$Zz-LV z^GF3VAW^Mdv!)4OM8EgqRiz~*Cji;uzl2uC9^=8I84vNp;ltJ|q-*uQwGp2ma6cY7 z;`%`!9UXO@fr&Ebapfs34OmS9^u6$)bJxrucutf>`dKPKT%%*d3XlFVKunp9 zasduxjrjs>f8V=D|J=XNZp;_Zy^WgQ$9WDjgY=z@stwiEBm9u5*|34&1Na8BMjjgf3+SHcr`5~>oz1Y?SW^=K z^bTyO6>Gar#P_W2gEMwq)ot3; zREHn~U&Dp0l6YT0&k-wLwYjb?5zGK`W6S2v+K>AM(95m2C20L|3m~rN8dprPr@t)5lsk9Hu*W z?pS990s;Ez=+Rj{x7p``4>+c0G5^pYnB1^!TL=(?HLHZ+HicG{~4F1d^5Awl_2!1jICM-!9eoLhbbT^;yHcefyTAaqRcY zmuctDopPT!%k+}x%lZRKnzykr2}}XfG_ne?nRQO~?%hkzo;@RN{P6o`&mMUWBYMTe z6i8ChtjX&gXl`nvrU>jah)2iNM%JdjqoaeaU%yVn!^70x-flljp6Q5tK}5}&X8&&G zX3fpb3E(!rH=zVI_9Gjl45w@{(ITqngWFe7@9{mX;tO25Z_8 zQHEpI+FkTU#4xu>RkN>b3Tnc3UpWzPXWm#o55GKF09j^Mh~)K7{QqbO_~(@CVq! zS<8954|P8mXN2MRs86xZ&Q4EfM@JB94b=(YGuk)s&^jiSF=t3*oNK3`rD{H`yQ?d; ztE=laAUoZx5?RC8*WKOj`%LXEkgDd>&^Q4M^z`%u0rg-It=hLCVsq!Z%^6eB-OvOT zFZ28TN&cRmgU}Elrnk43)!>Z1FCPL2K$7}gwzIc48NX}#!A1BpJP?#v5wkNprhV** z?Cpalt1oH&{r!o3eSKc&ap)iz2BTn_VV`4>9M^b3;(YY}4>#ML6{~(4mH+?%07*qo IM6N<$f(jP3KmY&$ literal 0 HcmV?d00001 diff --git a/assets/javascripts/bundle.51d95adb.min.js b/assets/javascripts/bundle.51d95adb.min.js new file mode 100644 index 00000000..b20ec683 --- /dev/null +++ b/assets/javascripts/bundle.51d95adb.min.js @@ -0,0 +1,29 @@ +"use strict";(()=>{var Hi=Object.create;var xr=Object.defineProperty;var Pi=Object.getOwnPropertyDescriptor;var $i=Object.getOwnPropertyNames,kt=Object.getOwnPropertySymbols,Ii=Object.getPrototypeOf,Er=Object.prototype.hasOwnProperty,an=Object.prototype.propertyIsEnumerable;var on=(e,t,r)=>t in e?xr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,P=(e,t)=>{for(var r in t||(t={}))Er.call(t,r)&&on(e,r,t[r]);if(kt)for(var r of kt(t))an.call(t,r)&&on(e,r,t[r]);return e};var sn=(e,t)=>{var r={};for(var n in e)Er.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&kt)for(var n of kt(e))t.indexOf(n)<0&&an.call(e,n)&&(r[n]=e[n]);return r};var Ht=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Fi=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of $i(t))!Er.call(e,o)&&o!==r&&xr(e,o,{get:()=>t[o],enumerable:!(n=Pi(t,o))||n.enumerable});return e};var yt=(e,t,r)=>(r=e!=null?Hi(Ii(e)):{},Fi(t||!e||!e.__esModule?xr(r,"default",{value:e,enumerable:!0}):r,e));var fn=Ht((wr,cn)=>{(function(e,t){typeof wr=="object"&&typeof cn!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(wr,function(){"use strict";function e(r){var n=!0,o=!1,i=null,a={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function s(T){return!!(T&&T!==document&&T.nodeName!=="HTML"&&T.nodeName!=="BODY"&&"classList"in T&&"contains"in T.classList)}function f(T){var Ke=T.type,We=T.tagName;return!!(We==="INPUT"&&a[Ke]&&!T.readOnly||We==="TEXTAREA"&&!T.readOnly||T.isContentEditable)}function c(T){T.classList.contains("focus-visible")||(T.classList.add("focus-visible"),T.setAttribute("data-focus-visible-added",""))}function u(T){T.hasAttribute("data-focus-visible-added")&&(T.classList.remove("focus-visible"),T.removeAttribute("data-focus-visible-added"))}function p(T){T.metaKey||T.altKey||T.ctrlKey||(s(r.activeElement)&&c(r.activeElement),n=!0)}function m(T){n=!1}function d(T){s(T.target)&&(n||f(T.target))&&c(T.target)}function h(T){s(T.target)&&(T.target.classList.contains("focus-visible")||T.target.hasAttribute("data-focus-visible-added"))&&(o=!0,window.clearTimeout(i),i=window.setTimeout(function(){o=!1},100),u(T.target))}function v(T){document.visibilityState==="hidden"&&(o&&(n=!0),B())}function B(){document.addEventListener("mousemove",z),document.addEventListener("mousedown",z),document.addEventListener("mouseup",z),document.addEventListener("pointermove",z),document.addEventListener("pointerdown",z),document.addEventListener("pointerup",z),document.addEventListener("touchmove",z),document.addEventListener("touchstart",z),document.addEventListener("touchend",z)}function re(){document.removeEventListener("mousemove",z),document.removeEventListener("mousedown",z),document.removeEventListener("mouseup",z),document.removeEventListener("pointermove",z),document.removeEventListener("pointerdown",z),document.removeEventListener("pointerup",z),document.removeEventListener("touchmove",z),document.removeEventListener("touchstart",z),document.removeEventListener("touchend",z)}function z(T){T.target.nodeName&&T.target.nodeName.toLowerCase()==="html"||(n=!1,re())}document.addEventListener("keydown",p,!0),document.addEventListener("mousedown",m,!0),document.addEventListener("pointerdown",m,!0),document.addEventListener("touchstart",m,!0),document.addEventListener("visibilitychange",v,!0),B(),r.addEventListener("focus",d,!0),r.addEventListener("blur",h,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)})});var un=Ht(Sr=>{(function(e){var t=function(){try{return!!Symbol.iterator}catch(c){return!1}},r=t(),n=function(c){var u={next:function(){var p=c.shift();return{done:p===void 0,value:p}}};return r&&(u[Symbol.iterator]=function(){return u}),u},o=function(c){return encodeURIComponent(c).replace(/%20/g,"+")},i=function(c){return decodeURIComponent(String(c).replace(/\+/g," "))},a=function(){var c=function(p){Object.defineProperty(this,"_entries",{writable:!0,value:{}});var m=typeof p;if(m!=="undefined")if(m==="string")p!==""&&this._fromString(p);else if(p instanceof c){var d=this;p.forEach(function(re,z){d.append(z,re)})}else if(p!==null&&m==="object")if(Object.prototype.toString.call(p)==="[object Array]")for(var h=0;hd[0]?1:0}),c._entries&&(c._entries={});for(var p=0;p1?i(d[1]):"")}})})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Sr);(function(e){var t=function(){try{var o=new e.URL("b","http://a");return o.pathname="c d",o.href==="http://a/c%20d"&&o.searchParams}catch(i){return!1}},r=function(){var o=e.URL,i=function(f,c){typeof f!="string"&&(f=String(f)),c&&typeof c!="string"&&(c=String(c));var u=document,p;if(c&&(e.location===void 0||c!==e.location.href)){c=c.toLowerCase(),u=document.implementation.createHTMLDocument(""),p=u.createElement("base"),p.href=c,u.head.appendChild(p);try{if(p.href.indexOf(c)!==0)throw new Error(p.href)}catch(T){throw new Error("URL unable to set base "+c+" due to "+T)}}var m=u.createElement("a");m.href=f,p&&(u.body.appendChild(m),m.href=m.href);var d=u.createElement("input");if(d.type="url",d.value=f,m.protocol===":"||!/:/.test(m.href)||!d.checkValidity()&&!c)throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:m});var h=new e.URLSearchParams(this.search),v=!0,B=!0,re=this;["append","delete","set"].forEach(function(T){var Ke=h[T];h[T]=function(){Ke.apply(h,arguments),v&&(B=!1,re.search=h.toString(),B=!0)}}),Object.defineProperty(this,"searchParams",{value:h,enumerable:!0});var z=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==z&&(z=this.search,B&&(v=!1,this.searchParams._fromString(this.search),v=!0))}})},a=i.prototype,s=function(f){Object.defineProperty(a,f,{get:function(){return this._anchorElement[f]},set:function(c){this._anchorElement[f]=c},enumerable:!0})};["hash","host","hostname","port","protocol"].forEach(function(f){s(f)}),Object.defineProperty(a,"search",{get:function(){return this._anchorElement.search},set:function(f){this._anchorElement.search=f,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(a,{toString:{get:function(){var f=this;return function(){return f.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(f){this._anchorElement.href=f,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(f){this._anchorElement.pathname=f},enumerable:!0},origin:{get:function(){var f={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],c=this._anchorElement.port!=f&&this._anchorElement.port!=="";return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(c?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(f){},enumerable:!0},username:{get:function(){return""},set:function(f){},enumerable:!0}}),i.createObjectURL=function(f){return o.createObjectURL.apply(o,arguments)},i.revokeObjectURL=function(f){return o.revokeObjectURL.apply(o,arguments)},e.URL=i};if(t()||r(),e.location!==void 0&&!("origin"in e.location)){var n=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:n,enumerable:!0})}catch(o){setInterval(function(){e.location.origin=n()},100)}}})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Sr)});var Qr=Ht((Lt,Kr)=>{/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */(function(t,r){typeof Lt=="object"&&typeof Kr=="object"?Kr.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Lt=="object"?Lt.ClipboardJS=r():t.ClipboardJS=r()})(Lt,function(){return function(){var e={686:function(n,o,i){"use strict";i.d(o,{default:function(){return ki}});var a=i(279),s=i.n(a),f=i(370),c=i.n(f),u=i(817),p=i.n(u);function m(j){try{return document.execCommand(j)}catch(O){return!1}}var d=function(O){var w=p()(O);return m("cut"),w},h=d;function v(j){var O=document.documentElement.getAttribute("dir")==="rtl",w=document.createElement("textarea");w.style.fontSize="12pt",w.style.border="0",w.style.padding="0",w.style.margin="0",w.style.position="absolute",w.style[O?"right":"left"]="-9999px";var k=window.pageYOffset||document.documentElement.scrollTop;return w.style.top="".concat(k,"px"),w.setAttribute("readonly",""),w.value=j,w}var B=function(O,w){var k=v(O);w.container.appendChild(k);var F=p()(k);return m("copy"),k.remove(),F},re=function(O){var w=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},k="";return typeof O=="string"?k=B(O,w):O instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(O==null?void 0:O.type)?k=B(O.value,w):(k=p()(O),m("copy")),k},z=re;function T(j){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?T=function(w){return typeof w}:T=function(w){return w&&typeof Symbol=="function"&&w.constructor===Symbol&&w!==Symbol.prototype?"symbol":typeof w},T(j)}var Ke=function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},w=O.action,k=w===void 0?"copy":w,F=O.container,q=O.target,Le=O.text;if(k!=="copy"&&k!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(q!==void 0)if(q&&T(q)==="object"&&q.nodeType===1){if(k==="copy"&&q.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(k==="cut"&&(q.hasAttribute("readonly")||q.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(Le)return z(Le,{container:F});if(q)return k==="cut"?h(q):z(q,{container:F})},We=Ke;function Ie(j){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Ie=function(w){return typeof w}:Ie=function(w){return w&&typeof Symbol=="function"&&w.constructor===Symbol&&w!==Symbol.prototype?"symbol":typeof w},Ie(j)}function Ti(j,O){if(!(j instanceof O))throw new TypeError("Cannot call a class as a function")}function nn(j,O){for(var w=0;w0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof F.action=="function"?F.action:this.defaultAction,this.target=typeof F.target=="function"?F.target:this.defaultTarget,this.text=typeof F.text=="function"?F.text:this.defaultText,this.container=Ie(F.container)==="object"?F.container:document.body}},{key:"listenClick",value:function(F){var q=this;this.listener=c()(F,"click",function(Le){return q.onClick(Le)})}},{key:"onClick",value:function(F){var q=F.delegateTarget||F.currentTarget,Le=this.action(q)||"copy",Rt=We({action:Le,container:this.container,target:this.target(q),text:this.text(q)});this.emit(Rt?"success":"error",{action:Le,text:Rt,trigger:q,clearSelection:function(){q&&q.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(F){return yr("action",F)}},{key:"defaultTarget",value:function(F){var q=yr("target",F);if(q)return document.querySelector(q)}},{key:"defaultText",value:function(F){return yr("text",F)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(F){var q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return z(F,q)}},{key:"cut",value:function(F){return h(F)}},{key:"isSupported",value:function(){var F=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],q=typeof F=="string"?[F]:F,Le=!!document.queryCommandSupported;return q.forEach(function(Rt){Le=Le&&!!document.queryCommandSupported(Rt)}),Le}}]),w}(s()),ki=Ri},828:function(n){var o=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function a(s,f){for(;s&&s.nodeType!==o;){if(typeof s.matches=="function"&&s.matches(f))return s;s=s.parentNode}}n.exports=a},438:function(n,o,i){var a=i(828);function s(u,p,m,d,h){var v=c.apply(this,arguments);return u.addEventListener(m,v,h),{destroy:function(){u.removeEventListener(m,v,h)}}}function f(u,p,m,d,h){return typeof u.addEventListener=="function"?s.apply(null,arguments):typeof m=="function"?s.bind(null,document).apply(null,arguments):(typeof u=="string"&&(u=document.querySelectorAll(u)),Array.prototype.map.call(u,function(v){return s(v,p,m,d,h)}))}function c(u,p,m,d){return function(h){h.delegateTarget=a(h.target,p),h.delegateTarget&&d.call(u,h)}}n.exports=f},879:function(n,o){o.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},o.nodeList=function(i){var a=Object.prototype.toString.call(i);return i!==void 0&&(a==="[object NodeList]"||a==="[object HTMLCollection]")&&"length"in i&&(i.length===0||o.node(i[0]))},o.string=function(i){return typeof i=="string"||i instanceof String},o.fn=function(i){var a=Object.prototype.toString.call(i);return a==="[object Function]"}},370:function(n,o,i){var a=i(879),s=i(438);function f(m,d,h){if(!m&&!d&&!h)throw new Error("Missing required arguments");if(!a.string(d))throw new TypeError("Second argument must be a String");if(!a.fn(h))throw new TypeError("Third argument must be a Function");if(a.node(m))return c(m,d,h);if(a.nodeList(m))return u(m,d,h);if(a.string(m))return p(m,d,h);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function c(m,d,h){return m.addEventListener(d,h),{destroy:function(){m.removeEventListener(d,h)}}}function u(m,d,h){return Array.prototype.forEach.call(m,function(v){v.addEventListener(d,h)}),{destroy:function(){Array.prototype.forEach.call(m,function(v){v.removeEventListener(d,h)})}}}function p(m,d,h){return s(document.body,m,d,h)}n.exports=f},817:function(n){function o(i){var a;if(i.nodeName==="SELECT")i.focus(),a=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var s=i.hasAttribute("readonly");s||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),s||i.removeAttribute("readonly"),a=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var f=window.getSelection(),c=document.createRange();c.selectNodeContents(i),f.removeAllRanges(),f.addRange(c),a=f.toString()}return a}n.exports=o},279:function(n){function o(){}o.prototype={on:function(i,a,s){var f=this.e||(this.e={});return(f[i]||(f[i]=[])).push({fn:a,ctx:s}),this},once:function(i,a,s){var f=this;function c(){f.off(i,c),a.apply(s,arguments)}return c._=a,this.on(i,c,s)},emit:function(i){var a=[].slice.call(arguments,1),s=((this.e||(this.e={}))[i]||[]).slice(),f=0,c=s.length;for(f;f{"use strict";/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */var is=/["'&<>]/;Jo.exports=as;function as(e){var t=""+e,r=is.exec(t);if(!r)return t;var n,o="",i=0,a=0;for(i=r.index;i0&&i[i.length-1])&&(c[0]===6||c[0]===2)){r=0;continue}if(c[0]===3&&(!i||c[1]>i[0]&&c[1]=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function W(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),o,i=[],a;try{for(;(t===void 0||t-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i}function D(e,t,r){if(r||arguments.length===2)for(var n=0,o=t.length,i;n1||s(m,d)})})}function s(m,d){try{f(n[m](d))}catch(h){p(i[0][3],h)}}function f(m){m.value instanceof Xe?Promise.resolve(m.value.v).then(c,u):p(i[0][2],m)}function c(m){s("next",m)}function u(m){s("throw",m)}function p(m,d){m(d),i.shift(),i.length&&s(i[0][0],i[0][1])}}function mn(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof xe=="function"?xe(e):e[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=e[i]&&function(a){return new Promise(function(s,f){a=e[i](a),o(s,f,a.done,a.value)})}}function o(i,a,s,f){Promise.resolve(f).then(function(c){i({value:c,done:s})},a)}}function A(e){return typeof e=="function"}function at(e){var t=function(n){Error.call(n),n.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var $t=at(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription: +`+r.map(function(n,o){return o+1+") "+n.toString()}).join(` + `):"",this.name="UnsubscriptionError",this.errors=r}});function De(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var Fe=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,n,o,i;if(!this.closed){this.closed=!0;var a=this._parentage;if(a)if(this._parentage=null,Array.isArray(a))try{for(var s=xe(a),f=s.next();!f.done;f=s.next()){var c=f.value;c.remove(this)}}catch(v){t={error:v}}finally{try{f&&!f.done&&(r=s.return)&&r.call(s)}finally{if(t)throw t.error}}else a.remove(this);var u=this.initialTeardown;if(A(u))try{u()}catch(v){i=v instanceof $t?v.errors:[v]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var m=xe(p),d=m.next();!d.done;d=m.next()){var h=d.value;try{dn(h)}catch(v){i=i!=null?i:[],v instanceof $t?i=D(D([],W(i)),W(v.errors)):i.push(v)}}}catch(v){n={error:v}}finally{try{d&&!d.done&&(o=m.return)&&o.call(m)}finally{if(n)throw n.error}}}if(i)throw new $t(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)dn(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&De(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&De(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}();var Or=Fe.EMPTY;function It(e){return e instanceof Fe||e&&"closed"in e&&A(e.remove)&&A(e.add)&&A(e.unsubscribe)}function dn(e){A(e)?e():e.unsubscribe()}var Ae={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var st={setTimeout:function(e,t){for(var r=[],n=2;n0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,o=this,i=o.hasError,a=o.isStopped,s=o.observers;return i||a?Or:(this.currentObservers=null,s.push(r),new Fe(function(){n.currentObservers=null,De(s,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,o=n.hasError,i=n.thrownError,a=n.isStopped;o?r.error(i):a&&r.complete()},t.prototype.asObservable=function(){var r=new U;return r.source=this,r},t.create=function(r,n){return new wn(r,n)},t}(U);var wn=function(e){ne(t,e);function t(r,n){var o=e.call(this)||this;return o.destination=r,o.source=n,o}return t.prototype.next=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,r)},t.prototype.error=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&o!==void 0?o:Or},t}(E);var Et={now:function(){return(Et.delegate||Date).now()},delegate:void 0};var wt=function(e){ne(t,e);function t(r,n,o){r===void 0&&(r=1/0),n===void 0&&(n=1/0),o===void 0&&(o=Et);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=n,i._timestampProvider=o,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=n===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,n),i}return t.prototype.next=function(r){var n=this,o=n.isStopped,i=n._buffer,a=n._infiniteTimeWindow,s=n._timestampProvider,f=n._windowTime;o||(i.push(r),!a&&i.push(s.now()+f)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),o=this,i=o._infiniteTimeWindow,a=o._buffer,s=a.slice(),f=0;f0?e.prototype.requestAsyncId.call(this,r,n,o):(r.actions.push(this),r._scheduled||(r._scheduled=ut.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,n,o){var i;if(o===void 0&&(o=0),o!=null?o>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,n,o);var a=r.actions;n!=null&&((i=a[a.length-1])===null||i===void 0?void 0:i.id)!==n&&(ut.cancelAnimationFrame(n),r._scheduled=void 0)},t}(Ut);var On=function(e){ne(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var o=this.actions,i;r=r||o.shift();do if(i=r.execute(r.state,r.delay))break;while((r=o[0])&&r.id===n&&o.shift());if(this._active=!1,i){for(;(r=o[0])&&r.id===n&&o.shift();)r.unsubscribe();throw i}},t}(Wt);var we=new On(Tn);var R=new U(function(e){return e.complete()});function Dt(e){return e&&A(e.schedule)}function kr(e){return e[e.length-1]}function Qe(e){return A(kr(e))?e.pop():void 0}function Se(e){return Dt(kr(e))?e.pop():void 0}function Vt(e,t){return typeof kr(e)=="number"?e.pop():t}var pt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function zt(e){return A(e==null?void 0:e.then)}function Nt(e){return A(e[ft])}function qt(e){return Symbol.asyncIterator&&A(e==null?void 0:e[Symbol.asyncIterator])}function Kt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function Ki(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Qt=Ki();function Yt(e){return A(e==null?void 0:e[Qt])}function Gt(e){return ln(this,arguments,function(){var r,n,o,i;return Pt(this,function(a){switch(a.label){case 0:r=e.getReader(),a.label=1;case 1:a.trys.push([1,,9,10]),a.label=2;case 2:return[4,Xe(r.read())];case 3:return n=a.sent(),o=n.value,i=n.done,i?[4,Xe(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,Xe(o)];case 6:return[4,a.sent()];case 7:return a.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function Bt(e){return A(e==null?void 0:e.getReader)}function $(e){if(e instanceof U)return e;if(e!=null){if(Nt(e))return Qi(e);if(pt(e))return Yi(e);if(zt(e))return Gi(e);if(qt(e))return _n(e);if(Yt(e))return Bi(e);if(Bt(e))return Ji(e)}throw Kt(e)}function Qi(e){return new U(function(t){var r=e[ft]();if(A(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function Yi(e){return new U(function(t){for(var r=0;r=2;return function(n){return n.pipe(e?_(function(o,i){return e(o,i,n)}):me,Oe(1),r?He(t):zn(function(){return new Xt}))}}function Nn(){for(var e=[],t=0;t=2,!0))}function fe(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new E}:t,n=e.resetOnError,o=n===void 0?!0:n,i=e.resetOnComplete,a=i===void 0?!0:i,s=e.resetOnRefCountZero,f=s===void 0?!0:s;return function(c){var u,p,m,d=0,h=!1,v=!1,B=function(){p==null||p.unsubscribe(),p=void 0},re=function(){B(),u=m=void 0,h=v=!1},z=function(){var T=u;re(),T==null||T.unsubscribe()};return g(function(T,Ke){d++,!v&&!h&&B();var We=m=m!=null?m:r();Ke.add(function(){d--,d===0&&!v&&!h&&(p=jr(z,f))}),We.subscribe(Ke),!u&&d>0&&(u=new et({next:function(Ie){return We.next(Ie)},error:function(Ie){v=!0,B(),p=jr(re,o,Ie),We.error(Ie)},complete:function(){h=!0,B(),p=jr(re,a),We.complete()}}),$(T).subscribe(u))})(c)}}function jr(e,t){for(var r=[],n=2;ne.next(document)),e}function K(e,t=document){return Array.from(t.querySelectorAll(e))}function V(e,t=document){let r=se(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function se(e,t=document){return t.querySelector(e)||void 0}function _e(){return document.activeElement instanceof HTMLElement&&document.activeElement||void 0}function tr(e){return L(b(document.body,"focusin"),b(document.body,"focusout")).pipe(ke(1),l(()=>{let t=_e();return typeof t!="undefined"?e.contains(t):!1}),N(e===_e()),Y())}function Be(e){return{x:e.offsetLeft,y:e.offsetTop}}function Yn(e){return L(b(window,"load"),b(window,"resize")).pipe(Ce(0,we),l(()=>Be(e)),N(Be(e)))}function rr(e){return{x:e.scrollLeft,y:e.scrollTop}}function dt(e){return L(b(e,"scroll"),b(window,"resize")).pipe(Ce(0,we),l(()=>rr(e)),N(rr(e)))}var Bn=function(){if(typeof Map!="undefined")return Map;function e(t,r){var n=-1;return t.some(function(o,i){return o[0]===r?(n=i,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var n=e(this.__entries__,r),o=this.__entries__[n];return o&&o[1]},t.prototype.set=function(r,n){var o=e(this.__entries__,r);~o?this.__entries__[o][1]=n:this.__entries__.push([r,n])},t.prototype.delete=function(r){var n=this.__entries__,o=e(n,r);~o&&n.splice(o,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var o=0,i=this.__entries__;o0},e.prototype.connect_=function(){!zr||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),xa?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!zr||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,n=r===void 0?"":r,o=ya.some(function(i){return!!~n.indexOf(i)});o&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),Jn=function(e,t){for(var r=0,n=Object.keys(t);r0},e}(),Zn=typeof WeakMap!="undefined"?new WeakMap:new Bn,eo=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=Ea.getInstance(),n=new Ra(t,r,this);Zn.set(this,n)}return e}();["observe","unobserve","disconnect"].forEach(function(e){eo.prototype[e]=function(){var t;return(t=Zn.get(this))[e].apply(t,arguments)}});var ka=function(){return typeof nr.ResizeObserver!="undefined"?nr.ResizeObserver:eo}(),to=ka;var ro=new E,Ha=I(()=>H(new to(e=>{for(let t of e)ro.next(t)}))).pipe(x(e=>L(Te,H(e)).pipe(C(()=>e.disconnect()))),J(1));function de(e){return{width:e.offsetWidth,height:e.offsetHeight}}function ge(e){return Ha.pipe(S(t=>t.observe(e)),x(t=>ro.pipe(_(({target:r})=>r===e),C(()=>t.unobserve(e)),l(()=>de(e)))),N(de(e)))}function bt(e){return{width:e.scrollWidth,height:e.scrollHeight}}function ar(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}var no=new E,Pa=I(()=>H(new IntersectionObserver(e=>{for(let t of e)no.next(t)},{threshold:0}))).pipe(x(e=>L(Te,H(e)).pipe(C(()=>e.disconnect()))),J(1));function sr(e){return Pa.pipe(S(t=>t.observe(e)),x(t=>no.pipe(_(({target:r})=>r===e),C(()=>t.unobserve(e)),l(({isIntersecting:r})=>r))))}function oo(e,t=16){return dt(e).pipe(l(({y:r})=>{let n=de(e),o=bt(e);return r>=o.height-n.height-t}),Y())}var cr={drawer:V("[data-md-toggle=drawer]"),search:V("[data-md-toggle=search]")};function io(e){return cr[e].checked}function qe(e,t){cr[e].checked!==t&&cr[e].click()}function je(e){let t=cr[e];return b(t,"change").pipe(l(()=>t.checked),N(t.checked))}function $a(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Ia(){return L(b(window,"compositionstart").pipe(l(()=>!0)),b(window,"compositionend").pipe(l(()=>!1))).pipe(N(!1))}function ao(){let e=b(window,"keydown").pipe(_(t=>!(t.metaKey||t.ctrlKey)),l(t=>({mode:io("search")?"search":"global",type:t.key,claim(){t.preventDefault(),t.stopPropagation()}})),_(({mode:t,type:r})=>{if(t==="global"){let n=_e();if(typeof n!="undefined")return!$a(n,r)}return!0}),fe());return Ia().pipe(x(t=>t?R:e))}function Me(){return new URL(location.href)}function ot(e){location.href=e.href}function so(){return new E}function co(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)co(e,r)}function M(e,t,...r){let n=document.createElement(e);if(t)for(let o of Object.keys(t))typeof t[o]!="undefined"&&(typeof t[o]!="boolean"?n.setAttribute(o,t[o]):n.setAttribute(o,""));for(let o of r)co(n,o);return n}function fr(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function fo(){return location.hash.substring(1)}function uo(e){let t=M("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function Fa(){return b(window,"hashchange").pipe(l(fo),N(fo()),_(e=>e.length>0),J(1))}function po(){return Fa().pipe(l(e=>se(`[id="${e}"]`)),_(e=>typeof e!="undefined"))}function Nr(e){let t=matchMedia(e);return Zt(r=>t.addListener(()=>r(t.matches))).pipe(N(t.matches))}function lo(){let e=matchMedia("print");return L(b(window,"beforeprint").pipe(l(()=>!0)),b(window,"afterprint").pipe(l(()=>!1))).pipe(N(e.matches))}function qr(e,t){return e.pipe(x(r=>r?t():R))}function ur(e,t={credentials:"same-origin"}){return ve(fetch(`${e}`,t)).pipe(ce(()=>R),x(r=>r.status!==200?Tt(()=>new Error(r.statusText)):H(r)))}function Ue(e,t){return ur(e,t).pipe(x(r=>r.json()),J(1))}function mo(e,t){let r=new DOMParser;return ur(e,t).pipe(x(n=>n.text()),l(n=>r.parseFromString(n,"text/xml")),J(1))}function pr(e){let t=M("script",{src:e});return I(()=>(document.head.appendChild(t),L(b(t,"load"),b(t,"error").pipe(x(()=>Tt(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(l(()=>{}),C(()=>document.head.removeChild(t)),Oe(1))))}function ho(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function bo(){return L(b(window,"scroll",{passive:!0}),b(window,"resize",{passive:!0})).pipe(l(ho),N(ho()))}function vo(){return{width:innerWidth,height:innerHeight}}function go(){return b(window,"resize",{passive:!0}).pipe(l(vo),N(vo()))}function yo(){return Q([bo(),go()]).pipe(l(([e,t])=>({offset:e,size:t})),J(1))}function lr(e,{viewport$:t,header$:r}){let n=t.pipe(X("size")),o=Q([n,r]).pipe(l(()=>Be(e)));return Q([r,t,o]).pipe(l(([{height:i},{offset:a,size:s},{x:f,y:c}])=>({offset:{x:a.x-f,y:a.y-c+i},size:s})))}(()=>{function e(n,o){parent.postMessage(n,o||"*")}function t(...n){return n.reduce((o,i)=>o.then(()=>new Promise(a=>{let s=document.createElement("script");s.src=i,s.onload=a,document.body.appendChild(s)})),Promise.resolve())}var r=class{constructor(n){this.url=n,this.onerror=null,this.onmessage=null,this.onmessageerror=null,this.m=a=>{a.source===this.w&&(a.stopImmediatePropagation(),this.dispatchEvent(new MessageEvent("message",{data:a.data})),this.onmessage&&this.onmessage(a))},this.e=(a,s,f,c,u)=>{if(s===this.url.toString()){let p=new ErrorEvent("error",{message:a,filename:s,lineno:f,colno:c,error:u});this.dispatchEvent(p),this.onerror&&this.onerror(p)}};let o=new EventTarget;this.addEventListener=o.addEventListener.bind(o),this.removeEventListener=o.removeEventListener.bind(o),this.dispatchEvent=o.dispatchEvent.bind(o);let i=document.createElement("iframe");i.width=i.height=i.frameBorder="0",document.body.appendChild(this.iframe=i),this.w.document.open(),this.w.document.write(` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

CI

+

TBD

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli/index.html b/cmd/cxcli/index.html new file mode 100644 index 00000000..17d8725b --- /dev/null +++ b/cmd/cxcli/index.html @@ -0,0 +1,1842 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + cxcli - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli

+

Dialogflow CX CLI

+

Synopsis

+

Welcome to cxcli!

+

This utility provides you with an easy way to interact +with your Dialogflow CX agents.

+

You can find the documentation at https://github.com/xavidop/dialogflow-cx-cli.

+

Please file all bug reports on GitHub at https://github.com/xavidop/dialogflow-cx-cli/issues.

+
cxcli [flags]
+
+

Options

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -h, --help                   help for cxcli
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_agent/index.html b/cmd/cxcli_agent/index.html new file mode 100644 index 00000000..819fddc6 --- /dev/null +++ b/cmd/cxcli_agent/index.html @@ -0,0 +1,1830 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + cxcli agent - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli agent

+

Actions on agent commands

+
cxcli agent [flags]
+
+

Options

+
  -h, --help   help for agent
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_agent_create/index.html b/cmd/cxcli_agent_create/index.html new file mode 100644 index 00000000..a2f580e5 --- /dev/null +++ b/cmd/cxcli_agent_create/index.html @@ -0,0 +1,1775 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli agent create - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli agent create

+

Creates an agent

+
cxcli agent create [agent-name] [flags]
+
+

Options

+
  -r, --avatar-uri string                   Avatar URI of the agent (optional)
+  -d, --description string                  Description of the agent (optional)
+  -b, --enable-interaction-logging string   Enable interaction logging for this agent. Possible values: true or false (optional)
+  -s, --enable-speech-adaptation string     Enable speech adaptation for this agent. Possible values: true or false (optional)
+  -n, --enable-spell-correction string      Enable spell correction for this agent. Possible values: true or false (optional)
+  -a, --enable-stackdriver-logging string   Enable Google Stackdriver logging for this agent. Possible values: true or false (optional)
+  -h, --help                                help for create
+  -e, --locale string                       Default locale of the agent (required)
+  -l, --location-id string                  Dialogflow CX Location ID of the Project (required)
+  -p, --project-id string                   Dialogflow CX Project ID (required)
+  -x, --supported-locales strings           Supported locales of the agent, comma separated. Example: fr,es,de (optional)
+  -t, --timezone string                     Timezone of the agent from the time zone database https://www.iana.org/time-zones. Example: America/New_York, Europe/Madrid (required)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_agent_delete/index.html b/cmd/cxcli_agent_delete/index.html new file mode 100644 index 00000000..b2e79050 --- /dev/null +++ b/cmd/cxcli_agent_delete/index.html @@ -0,0 +1,1766 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli agent delete - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli agent delete

+

Deletes a specific agent

+
cxcli agent delete [agent-name] [flags]
+
+

Options

+
  -h, --help                 help for delete
+  -l, --location-id string   Dialogflow CX Location ID of the Project (required)
+  -p, --project-id string    Dialogflow CX Project ID (required)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_agent_export/index.html b/cmd/cxcli_agent_export/index.html new file mode 100644 index 00000000..09e060a6 --- /dev/null +++ b/cmd/cxcli_agent_export/index.html @@ -0,0 +1,1768 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli agent export - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli agent export

+

Executes an export for a specific agent

+
cxcli agent export [agent-name] [flags]
+
+

Options

+
  -t, --export-format string   Export format type: json or blob. blob by default. Default: blob (optional) (default "blob")
+  -h, --help                   help for export
+  -l, --location-id string     Dialogflow CX Location ID of the Project (required)
+  -f, --output-file string     Output file name. Default: agent.blob (optional) (default "agent.blob")
+  -p, --project-id string      Dialogflow CX Project ID (required)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_agent_restore/index.html b/cmd/cxcli_agent_restore/index.html new file mode 100644 index 00000000..e1a4eee4 --- /dev/null +++ b/cmd/cxcli_agent_restore/index.html @@ -0,0 +1,1767 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli agent restore - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli agent restore

+

Executes a restore action for a specific agent

+
cxcli agent restore [agent-name] [flags]
+
+

Options

+
  -h, --help                 help for restore
+  -i, --input string         Input file name. Default: agent.blob (optional) (default "agent.blob")
+  -l, --location-id string   Dialogflow CX Location ID of the Project (required)
+  -p, --project-id string    Dialogflow CX Project ID (required)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_agent_update/index.html b/cmd/cxcli_agent_update/index.html new file mode 100644 index 00000000..5751f056 --- /dev/null +++ b/cmd/cxcli_agent_update/index.html @@ -0,0 +1,1774 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli agent update - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli agent update

+

Update an agent

+
cxcli agent update [agent-name] [flags]
+
+

Options

+
  -r, --avatar-uri string                   Avatar URI of the agent (optional)
+  -d, --description string                  Description of the agent (optional)
+  -b, --enable-interaction-logging string   Enable interaction logging for this agent. Possible values: true or false (optional)
+  -s, --enable-speech-adaptation string     Enable speech adaptation for this agent. Possible values: true or false (optional)
+  -n, --enable-spell-correction string      Enable spell correction for this agent. Possible values: true or false (optional)
+  -a, --enable-stackdriver-logging string   Enable Google Stackdriver logging for this agent. Possible values: true or false (optional)
+  -h, --help                                help for update
+  -l, --location-id string                  Dialogflow CX Location ID of the Project (required)
+  -p, --project-id string                   Dialogflow CX Project ID (required)
+  -x, --supported-locales strings           Supported locales of the agent, comma separated. Example: fr,es,de (optional)
+  -t, --timezone string                     Timezone of the agent from the time zone database https://www.iana.org/time-zones. Example: America/New_York, Europe/Madrid (optional)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_completion/index.html b/cmd/cxcli_completion/index.html new file mode 100644 index 00000000..a6b4dce2 --- /dev/null +++ b/cmd/cxcli_completion/index.html @@ -0,0 +1,1776 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli completion - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli completion

+

Generate the autocompletion script for the specified shell

+

Synopsis

+

Generate the autocompletion script for cxcli for the specified shell. +See each sub-command's help for details on how to use the generated script.

+

Options

+
  -h, --help   help for completion
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_completion_bash/index.html b/cmd/cxcli_completion_bash/index.html new file mode 100644 index 00000000..3ab38edf --- /dev/null +++ b/cmd/cxcli_completion_bash/index.html @@ -0,0 +1,1810 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli completion bash - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli completion bash

+

Generate the autocompletion script for bash

+

Synopsis

+

Generate the autocompletion script for the bash shell.

+

This script depends on the 'bash-completion' package. +If it is not installed already, you can install it via your OS's package manager.

+

To load completions in your current shell session:

+
source <(cxcli completion bash)
+
+ +

To load completions for every new session, execute once:

+

Linux:

+
cxcli completion bash > /etc/bash_completion.d/cxcli
+
+ +

macOS:

+
cxcli completion bash > $(brew --prefix)/etc/bash_completion.d/cxcli
+
+ +

You will need to start a new shell for this setup to take effect.

+
cxcli completion bash
+
+

Options

+
  -h, --help              help for bash
+      --no-descriptions   disable completion descriptions
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+
    +
  • cxcli completion - Generate the autocompletion script for the specified shell
  • +
+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_completion_fish/index.html b/cmd/cxcli_completion_fish/index.html new file mode 100644 index 00000000..3dc7f542 --- /dev/null +++ b/cmd/cxcli_completion_fish/index.html @@ -0,0 +1,1783 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli completion fish - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli completion fish

+

Generate the autocompletion script for fish

+

Synopsis

+

Generate the autocompletion script for the fish shell.

+

To load completions in your current shell session:

+
cxcli completion fish | source
+
+ +

To load completions for every new session, execute once:

+
cxcli completion fish > ~/.config/fish/completions/cxcli.fish
+
+ +

You will need to start a new shell for this setup to take effect.

+
cxcli completion fish [flags]
+
+

Options

+
  -h, --help              help for fish
+      --no-descriptions   disable completion descriptions
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+
    +
  • cxcli completion - Generate the autocompletion script for the specified shell
  • +
+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_completion_powershell/index.html b/cmd/cxcli_completion_powershell/index.html new file mode 100644 index 00000000..01e7984e --- /dev/null +++ b/cmd/cxcli_completion_powershell/index.html @@ -0,0 +1,1780 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli completion powershell - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli completion powershell

+

Generate the autocompletion script for powershell

+

Synopsis

+

Generate the autocompletion script for powershell.

+

To load completions in your current shell session:

+
cxcli completion powershell | Out-String | Invoke-Expression
+
+ +

To load completions for every new session, add the output of the above command +to your powershell profile.

+
cxcli completion powershell [flags]
+
+

Options

+
  -h, --help              help for powershell
+      --no-descriptions   disable completion descriptions
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+
    +
  • cxcli completion - Generate the autocompletion script for the specified shell
  • +
+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_completion_zsh/index.html b/cmd/cxcli_completion_zsh/index.html new file mode 100644 index 00000000..a41a9218 --- /dev/null +++ b/cmd/cxcli_completion_zsh/index.html @@ -0,0 +1,1813 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli completion zsh - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli completion zsh

+

Generate the autocompletion script for zsh

+

Synopsis

+

Generate the autocompletion script for the zsh shell.

+

If shell completion is not already enabled in your environment you will need +to enable it. You can execute the following once:

+
echo "autoload -U compinit; compinit" >> ~/.zshrc
+
+ +

To load completions in your current shell session:

+
source <(cxcli completion zsh)
+
+ +

To load completions for every new session, execute once:

+

Linux:

+
cxcli completion zsh > "${fpath[1]}/_cxcli"
+
+ +

macOS:

+
cxcli completion zsh > $(brew --prefix)/share/zsh/site-functions/_cxcli
+
+ +

You will need to start a new shell for this setup to take effect.

+
cxcli completion zsh [flags]
+
+

Options

+
  -h, --help              help for zsh
+      --no-descriptions   disable completion descriptions
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+
    +
  • cxcli completion - Generate the autocompletion script for the specified shell
  • +
+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_dialog/index.html b/cmd/cxcli_dialog/index.html new file mode 100644 index 00000000..fb2c4583 --- /dev/null +++ b/cmd/cxcli_dialog/index.html @@ -0,0 +1,1829 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + cxcli dialog - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli dialog

+

Test your CX Agent interactively directly from your terminal

+
cxcli dialog [flags]
+
+

Options

+
  -a, --agent-name string    Dialogflow CX Agent Name (required)
+  -h, --help                 help for dialog
+  -e, --locale string        Locale of the intent. Default: agent locale (optional)
+  -l, --location-id string   Dialogflow CX Location ID of the Project (required)
+  -p, --project-id string    Dialogflow CX Project ID (required)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+
    +
  • cxcli - Dialogflow CX CLI
  • +
+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_entity-type/index.html b/cmd/cxcli_entity-type/index.html new file mode 100644 index 00000000..6d03f9af --- /dev/null +++ b/cmd/cxcli_entity-type/index.html @@ -0,0 +1,1828 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + cxcli entity-type - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli entity-type

+

Actions on entity type commands

+
cxcli entity-type [flags]
+
+

Options

+
  -h, --help   help for entity-type
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_entity-type_create/index.html b/cmd/cxcli_entity-type_create/index.html new file mode 100644 index 00000000..463c329c --- /dev/null +++ b/cmd/cxcli_entity-type_create/index.html @@ -0,0 +1,1770 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli entity-type create - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli entity-type create

+

Creates an entity type in an agent

+
cxcli entity-type create [entity-type-name] [flags]
+
+

Options

+
  -a, --agent-name string    Dialogflow CX Agent Name (required)
+  -n, --entities strings     List of the entities for this entity type, comma separated. Format: entity1@synonym1|synonym2,entity2@synonym1|synonym2. Example: pikachu@25|pika,charmander@3 (required)
+  -h, --help                 help for create
+  -e, --locale string        Locale of the intent. Default: agent locale (optional)
+  -l, --location-id string   Dialogflow CX Location ID of the Project (required)
+  -p, --project-id string    Dialogflow CX Project ID (required)
+  -r, --redacted string      Set the entity type as redacted. Possible values: true or false (optional)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_entity-type_delete/index.html b/cmd/cxcli_entity-type_delete/index.html new file mode 100644 index 00000000..112f150f --- /dev/null +++ b/cmd/cxcli_entity-type_delete/index.html @@ -0,0 +1,1768 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli entity-type delete - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli entity-type delete

+

Deletes an entity type in an agent

+
cxcli entity-type delete [entity-type-name] [flags]
+
+

Options

+
  -a, --agent-name string    Dialogflow CX Agent Name (required)
+  -f, --force string         Forces to delete the Entity type. NOTE: it will delete all any references to the entity type. Possible values: true or false (optional)
+  -h, --help                 help for delete
+  -l, --location-id string   Dialogflow CX Location ID of the Project (required)
+  -p, --project-id string    Dialogflow CX Project ID (required)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_entity-type_update/index.html b/cmd/cxcli_entity-type_update/index.html new file mode 100644 index 00000000..2e5ff2d5 --- /dev/null +++ b/cmd/cxcli_entity-type_update/index.html @@ -0,0 +1,1770 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli entity-type update - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli entity-type update

+

Updates an entity type in an agent

+
cxcli entity-type update [entity-type-name] [flags]
+
+

Options

+
  -a, --agent-name string    Dialogflow CX Agent Name (required)
+  -n, --entities strings     List of the entities for this entity type, comma separated. Format: entity1@synonym1|synonym2,entity2@synonym1|synonym2. Example: pikachu@25|pika,charmander@3 (required)
+  -h, --help                 help for update
+  -e, --locale string        Locale of the intent. Default: agent locale (optional)
+  -l, --location-id string   Dialogflow CX Location ID of the Project (required)
+  -p, --project-id string    Dialogflow CX Project ID (required)
+  -r, --redacted string      Set the entity type as redacted. Possible values: true or false (optional)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_environment/index.html b/cmd/cxcli_environment/index.html new file mode 100644 index 00000000..26e960e0 --- /dev/null +++ b/cmd/cxcli_environment/index.html @@ -0,0 +1,1829 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + cxcli environment - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli environment

+

Actions on environment

+
cxcli environment [flags]
+
+

Options

+
  -h, --help   help for environment
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_environment_create/index.html b/cmd/cxcli_environment_create/index.html new file mode 100644 index 00000000..7f2cee74 --- /dev/null +++ b/cmd/cxcli_environment_create/index.html @@ -0,0 +1,1769 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli environment create - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli environment create

+

create an environment

+
cxcli environment create [name] [flags]
+
+

Options

+
  -a, --agent-name string       Dialogflow CX Agent Name (required)
+  -d, --description string      Description for this environment (optional)
+  -s, --flow-versions strings   List of Flow and its version to be added to this environment, comma separated. Format: flowName1@version1,flowName2|version2. Example: Default Start Flow@v1.0.0|Buy Flow@v1.0.1 (required)
+  -h, --help                    help for create
+  -l, --location-id string      Dialogflow CX Location ID of the Project (required)
+  -p, --project-id string       Dialogflow CX Project ID (required)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_environment_delete/index.html b/cmd/cxcli_environment_delete/index.html new file mode 100644 index 00000000..ca0fd824 --- /dev/null +++ b/cmd/cxcli_environment_delete/index.html @@ -0,0 +1,1767 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli environment delete - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli environment delete

+

delete an environment

+
cxcli environment delete [name] [flags]
+
+

Options

+
  -a, --agent-name string    Dialogflow CX Agent Name (required)
+  -h, --help                 help for delete
+  -l, --location-id string   Dialogflow CX Location ID of the Project (required)
+  -p, --project-id string    Dialogflow CX Project ID (required)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_environment_execute-cicd/index.html b/cmd/cxcli_environment_execute-cicd/index.html new file mode 100644 index 00000000..369c7eca --- /dev/null +++ b/cmd/cxcli_environment_execute-cicd/index.html @@ -0,0 +1,1767 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli environment execute-cicd - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli environment execute-cicd

+

Executes a CI/CD pipeline for a specific environment

+
cxcli environment execute-cicd [environment] [flags]
+
+

Options

+
  -a, --agent-name string    Dialogflow CX Agent Name (required)
+  -h, --help                 help for execute-cicd
+  -l, --location-id string   Dialogflow CX Location ID of the Project (required)
+  -p, --project-id string    Dialogflow CX Project ID (required)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_environment_update/index.html b/cmd/cxcli_environment_update/index.html new file mode 100644 index 00000000..3bd37a94 --- /dev/null +++ b/cmd/cxcli_environment_update/index.html @@ -0,0 +1,1769 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli environment update - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli environment update

+

update an environment

+
cxcli environment update [name] [flags]
+
+

Options

+
  -a, --agent-name string       Dialogflow CX Agent Name (required)
+  -d, --description string      Description for this environment (optional)
+  -s, --flow-versions strings   List of Flow and its version to be added to this environment, comma separated. Format: flowName1@version1,flowName2|version2. Example: Default Start Flow@v1.0.0|Buy Flow@v1.0.1 (required)
+  -h, --help                    help for update
+  -l, --location-id string      Dialogflow CX Location ID of the Project (required)
+  -p, --project-id string       Dialogflow CX Project ID (required)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_flow-version/index.html b/cmd/cxcli_flow-version/index.html new file mode 100644 index 00000000..ffb50fc6 --- /dev/null +++ b/cmd/cxcli_flow-version/index.html @@ -0,0 +1,1828 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + cxcli flow-version - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli flow-version

+

Actions on flow versions commands

+
cxcli flow-version [flags]
+
+

Options

+
  -h, --help   help for flow-version
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_flow-version_create/index.html b/cmd/cxcli_flow-version_create/index.html new file mode 100644 index 00000000..bd752bc6 --- /dev/null +++ b/cmd/cxcli_flow-version_create/index.html @@ -0,0 +1,1769 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli flow-version create - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli flow-version create

+

create a version

+
cxcli flow-version create [name] [flags]
+
+

Options

+
  -a, --agent-name string    Dialogflow CX Agent Name (required)
+  -d, --description string   Description for this version (optional)
+  -h, --help                 help for create
+  -l, --location-id string   Dialogflow CX Location ID of the Project (required)
+  -p, --project-id string    Dialogflow CX Project ID (required)
+  -s, --start-flow string    Start Flow name to create the version (required)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_flow-version_delete/index.html b/cmd/cxcli_flow-version_delete/index.html new file mode 100644 index 00000000..9d678b39 --- /dev/null +++ b/cmd/cxcli_flow-version_delete/index.html @@ -0,0 +1,1768 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli flow-version delete - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli flow-version delete

+

delete a version

+
cxcli flow-version delete [name] [flags]
+
+

Options

+
  -a, --agent-name string    Dialogflow CX Agent Name (required)
+  -h, --help                 help for delete
+  -l, --location-id string   Dialogflow CX Location ID of the Project (required)
+  -p, --project-id string    Dialogflow CX Project ID (required)
+  -s, --start-flow string    Start Flow name to create the version (required)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_flow-version_update/index.html b/cmd/cxcli_flow-version_update/index.html new file mode 100644 index 00000000..b55aeca2 --- /dev/null +++ b/cmd/cxcli_flow-version_update/index.html @@ -0,0 +1,1769 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli flow-version update - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli flow-version update

+

update a version

+
cxcli flow-version update [name] [flags]
+
+

Options

+
  -a, --agent-name string    Dialogflow CX Agent Name (required)
+  -d, --description string   Description for this version (optional)
+  -h, --help                 help for update
+  -l, --location-id string   Dialogflow CX Location ID of the Project (required)
+  -p, --project-id string    Dialogflow CX Project ID (required)
+  -s, --start-flow string    Start Flow name to create the version (required)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_flow/index.html b/cmd/cxcli_flow/index.html new file mode 100644 index 00000000..2a93e7b2 --- /dev/null +++ b/cmd/cxcli_flow/index.html @@ -0,0 +1,1829 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + cxcli flow - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli flow

+

Actions on flow commands

+
cxcli flow [flags]
+
+

Options

+
  -h, --help   help for flow
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_flow_create/index.html b/cmd/cxcli_flow_create/index.html new file mode 100644 index 00000000..19cb314f --- /dev/null +++ b/cmd/cxcli_flow_create/index.html @@ -0,0 +1,1772 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli flow create - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli flow create

+

Creates a flow in an agent

+
cxcli flow create [flow-name] [flags]
+
+

Options

+
  -a, --agent-name string                     Dialogflow CX Agent Name (required)
+  -d, --description string                    Description for this flow (optional)
+  -h, --help                                  help for create
+  -e, --locale string                         Locale of the flow. Default: agent locale (optional)
+  -l, --location-id string                    Dialogflow CX Location ID of the Project (required)
+  -s, --nlu-classification-threshold string   NLU Classification Threshold. From 0.0 (completely uncertain) to 1.0 (completely certain). Default: 0.3 (optional) (default "0.3")
+  -t, --nlu-model-training-mode string        NLU Model training mode. Possible values: automatic or manual. Default: manual (optional) (default "manual")
+  -m, --nlu-model-type string                 NLU Model Type. Possible values: advanced or standard. Default: standard (optional) (default "standard")
+  -p, --project-id string                     Dialogflow CX Project ID (required)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_flow_delete/index.html b/cmd/cxcli_flow_delete/index.html new file mode 100644 index 00000000..17164240 --- /dev/null +++ b/cmd/cxcli_flow_delete/index.html @@ -0,0 +1,1767 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli flow delete - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli flow delete

+

Deletes a flow in an agent

+
cxcli flow delete [flow-name] [flags]
+
+

Options

+
  -a, --agent-name string    Dialogflow CX Agent Name (required)
+  -h, --help                 help for delete
+  -l, --location-id string   Dialogflow CX Location ID of the Project (required)
+  -p, --project-id string    Dialogflow CX Project ID (required)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_flow_train/index.html b/cmd/cxcli_flow_train/index.html new file mode 100644 index 00000000..60e89320 --- /dev/null +++ b/cmd/cxcli_flow_train/index.html @@ -0,0 +1,1767 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli flow train - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli flow train

+

Trains a flow in an agent. If flow name is set to "all", it will train all flows in an agent

+
cxcli flow train [flow-name] [flags]
+
+

Options

+
  -a, --agent-name string    Dialogflow CX Agent Name (required)
+  -h, --help                 help for train
+  -l, --location-id string   Dialogflow CX Location ID of the Project (required)
+  -p, --project-id string    Dialogflow CX Project ID (required)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_flow_update/index.html b/cmd/cxcli_flow_update/index.html new file mode 100644 index 00000000..66dbf0dc --- /dev/null +++ b/cmd/cxcli_flow_update/index.html @@ -0,0 +1,1772 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli flow update - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli flow update

+

Updates a flow in an agent

+
cxcli flow update [flow-name] [flags]
+
+

Options

+
  -a, --agent-name string                     Dialogflow CX Agent Name (required)
+  -d, --description string                    Description for this flow (optional)
+  -h, --help                                  help for update
+  -e, --locale string                         Locale of the flow. Default: agent locale (optional)
+  -l, --location-id string                    Dialogflow CX Location ID of the Project (required)
+  -s, --nlu-classification-threshold string   NLU Classification Threshold. From 0.0 (completely uncertain) to 1.0 (completely certain). (optional)
+  -t, --nlu-model-training-mode string        NLU Model training mode. Possible values: automatic or manual (optional)
+  -m, --nlu-model-type string                 NLU Model Type. Possible values: advanced or standard (optional)
+  -p, --project-id string                     Dialogflow CX Project ID (required)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_intent/index.html b/cmd/cxcli_intent/index.html new file mode 100644 index 00000000..b1349f5b --- /dev/null +++ b/cmd/cxcli_intent/index.html @@ -0,0 +1,1828 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + cxcli intent - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli intent

+

Actions on intent commands

+
cxcli intent [flags]
+
+

Options

+
  -h, --help   help for intent
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_intent_create/index.html b/cmd/cxcli_intent_create/index.html new file mode 100644 index 00000000..bdfba130 --- /dev/null +++ b/cmd/cxcli_intent_create/index.html @@ -0,0 +1,1770 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli intent create - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli intent create

+

Creates an intent in an agent

+
cxcli intent create [intent-name] [flags]
+
+

Options

+
  -a, --agent-name string          Dialogflow CX Agent Name (required)
+  -d, --description string         Description for this intent (optional)
+  -h, --help                       help for create
+  -e, --locale string              Locale of the intent. Default: agent locale (optional)
+  -l, --location-id string         Dialogflow CX Location ID of the Project (required)
+  -p, --project-id string          Dialogflow CX Project ID (required)
+  -t, --training-phrases strings   List of the training phrases for this intent, comma separated. Entities, add @entity-type to the word: word@entity-type in the training phrase. Example: hello,hi how are you today@sys.date,morning!. (required)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_intent_delete/index.html b/cmd/cxcli_intent_delete/index.html new file mode 100644 index 00000000..a387289f --- /dev/null +++ b/cmd/cxcli_intent_delete/index.html @@ -0,0 +1,1767 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli intent delete - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli intent delete

+

Deletes an intent in an agent

+
cxcli intent delete [intent-name] [flags]
+
+

Options

+
  -a, --agent-name string    Dialogflow CX Agent Name (required)
+  -h, --help                 help for delete
+  -l, --location-id string   Dialogflow CX Location ID of the Project (required)
+  -p, --project-id string    Dialogflow CX Project ID (required)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_intent_update/index.html b/cmd/cxcli_intent_update/index.html new file mode 100644 index 00000000..5718c0c4 --- /dev/null +++ b/cmd/cxcli_intent_update/index.html @@ -0,0 +1,1770 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli intent update - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli intent update

+

Updates an intent in an agent

+
cxcli intent update [intent-name] [flags]
+
+

Options

+
  -a, --agent-name string          Dialogflow CX Agent Name (required)
+  -d, --description string         Description for this intent (optional)
+  -h, --help                       help for update
+  -e, --locale string              Locale of the intent. Default: agent locale (optional)
+  -l, --location-id string         Dialogflow CX Location ID of the Project (required)
+  -p, --project-id string          Dialogflow CX Project ID (required)
+  -t, --training-phrases strings   List of the training phrases for this intent, comma separated. Entities, add @entity-type to the word: word@entity-type in the training phrase. Example: hello,hi how are you today@sys.date,morning!. (Optional)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_jsonschema/index.html b/cmd/cxcli_jsonschema/index.html new file mode 100644 index 00000000..c52d2249 --- /dev/null +++ b/cmd/cxcli_jsonschema/index.html @@ -0,0 +1,1826 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + cxcli jsonschema - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli jsonschema

+

outputs cxcli's JSON schema

+
cxcli jsonschema [flags]
+
+

Options

+
  -h, --help                   help for jsonschema
+  -f, --output-folder string   Where to save the JSONSchema file (default "-")
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+
    +
  • cxcli - Dialogflow CX CLI
  • +
+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_profile-nlu/index.html b/cmd/cxcli_profile-nlu/index.html new file mode 100644 index 00000000..ec32633a --- /dev/null +++ b/cmd/cxcli_profile-nlu/index.html @@ -0,0 +1,1826 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + cxcli profile-nlu - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli profile-nlu

+

Actions on testing

+
cxcli profile-nlu [flags]
+
+

Options

+
  -h, --help   help for profile-nlu
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_profile-nlu_execute/index.html b/cmd/cxcli_profile-nlu_execute/index.html new file mode 100644 index 00000000..8a36527d --- /dev/null +++ b/cmd/cxcli_profile-nlu_execute/index.html @@ -0,0 +1,1764 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli profile-nlu execute - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli profile-nlu execute

+

Execute a suite

+
cxcli profile-nlu execute [suite-file] [flags]
+
+

Options

+
  -h, --help   help for execute
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_stt/index.html b/cmd/cxcli_stt/index.html new file mode 100644 index 00000000..ca225097 --- /dev/null +++ b/cmd/cxcli_stt/index.html @@ -0,0 +1,1826 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + cxcli stt - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli stt

+

Actions on speech-to-text commands

+
cxcli stt [flags]
+
+

Options

+
  -h, --help   help for stt
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_stt_recognize/index.html b/cmd/cxcli_stt_recognize/index.html new file mode 100644 index 00000000..bc2514a3 --- /dev/null +++ b/cmd/cxcli_stt_recognize/index.html @@ -0,0 +1,1765 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli stt recognize - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli stt recognize

+

Transforms audio into text

+
cxcli stt recognize [input] [flags]
+
+

Options

+
  -h, --help            help for recognize
+  -l, --locale string   Input locale (required)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+
    +
  • cxcli stt - Actions on speech-to-text commands
  • +
+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_tts/index.html b/cmd/cxcli_tts/index.html new file mode 100644 index 00000000..f790da8b --- /dev/null +++ b/cmd/cxcli_tts/index.html @@ -0,0 +1,1826 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + cxcli tts - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli tts

+

Actions on text-to-speech commands

+
cxcli tts [flags]
+
+

Options

+
  -h, --help   help for tts
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_tts_synthesize/index.html b/cmd/cxcli_tts_synthesize/index.html new file mode 100644 index 00000000..bea3fdf5 --- /dev/null +++ b/cmd/cxcli_tts_synthesize/index.html @@ -0,0 +1,1766 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli tts synthesize - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli tts synthesize

+

Transforms text into audio

+
cxcli tts synthesize [input] [flags]
+
+

Options

+
  -h, --help                 help for synthesize
+  -l, --locale string        Input locale (required)
+  -f, --output-file string   Output file name. Default: output.mp3 (optional) (default "output.mp3")
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+
    +
  • cxcli tts - Actions on text-to-speech commands
  • +
+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_version/index.html b/cmd/cxcli_version/index.html new file mode 100644 index 00000000..edd6a1de --- /dev/null +++ b/cmd/cxcli_version/index.html @@ -0,0 +1,1825 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + cxcli version - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli version

+

Get cxcli version

+
cxcli version [flags]
+
+

Options

+
  -h, --help   help for version
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+
    +
  • cxcli - Dialogflow CX CLI
  • +
+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_webhook/index.html b/cmd/cxcli_webhook/index.html new file mode 100644 index 00000000..959bd7c5 --- /dev/null +++ b/cmd/cxcli_webhook/index.html @@ -0,0 +1,1828 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + cxcli webhook - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli webhook

+

Actions on webhook commands

+
cxcli webhook [flags]
+
+

Options

+
  -h, --help   help for webhook
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_webhook_create/index.html b/cmd/cxcli_webhook_create/index.html new file mode 100644 index 00000000..fd385863 --- /dev/null +++ b/cmd/cxcli_webhook_create/index.html @@ -0,0 +1,1772 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli webhook create - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli webhook create

+

create a webhook

+
cxcli webhook create [name] [flags]
+
+

Options

+
  -a, --agent-name string           Dialogflow CX Agent Name (required)
+  -e, --environment string          Environment where you want to set the webhook url. Default: global (optional) (default "global")
+  -f, --flexible string             Creates a flexible webhook. Possible values: true or false (optional) (default "false")
+  -h, --help                        help for create
+  -l, --location-id string          Dialogflow CX Location ID of the Project (required)
+  -m, --parameters-mapping string   Creates a parameter mapping for flexible webhook, comma separated. The format is parameter@json-path,paramter2@json-path2. Example: my-param@$.fully.qualified.path.to.field (required only if flexible is true)
+  -p, --project-id string           Dialogflow CX Project ID (required)
+  -t, --request-body string         Creates a request body for flexible webhook. It has to be in JSON Format (required only if flexible is true)
+  -r, --url string                  Webhook URL (required)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_webhook_delete/index.html b/cmd/cxcli_webhook_delete/index.html new file mode 100644 index 00000000..c2721f8d --- /dev/null +++ b/cmd/cxcli_webhook_delete/index.html @@ -0,0 +1,1768 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli webhook delete - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli webhook delete

+

delete a webhook

+
cxcli webhook delete [name] [flags]
+
+

Options

+
  -a, --agent-name string    Dialogflow CX Agent Name (required)
+  -f, --force string         Forces to delete the webhook and its references in environments and flows. Possible values: true or false (optional)
+  -h, --help                 help for delete
+  -l, --location-id string   Dialogflow CX Location ID of the Project (required)
+  -p, --project-id string    Dialogflow CX Project ID (required)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cmd/cxcli_webhook_update/index.html b/cmd/cxcli_webhook_update/index.html new file mode 100644 index 00000000..f20fe3d8 --- /dev/null +++ b/cmd/cxcli_webhook_update/index.html @@ -0,0 +1,1772 @@ + + + + + + + + + + + + + + + + + + + + + + + + cxcli webhook update - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

cxcli webhook update

+

update a webhook

+
cxcli webhook update [name] [flags]
+
+

Options

+
  -a, --agent-name string           Dialogflow CX Agent Name (required)
+  -e, --environment string          Environment where you want to set the webhook url. Default: global (optional) (default "global")
+  -f, --flexible string             Creates a flexible webhook. Possible values: true or false (optional) (default "false")
+  -h, --help                        help for update
+  -l, --location-id string          Dialogflow CX Location ID of the Project (required)
+  -m, --parameters-mapping string   Creates a parameter mapping for flexible webhook, comma separated. The format is parameter@json-path,paramter2@json-path2. Example: my-param@$.fully.qualified.path.to.field. This only applies to flexible webhooks (optional)
+  -p, --project-id string           Dialogflow CX Project ID (required)
+  -t, --request-body string         Creates a request body for flexible webhook. It has to be in JSON Format. This only applies to flexible webhooks (optional)
+  -r, --url string                  Webhook URL (required)
+
+

Options inherited from parent commands

+
  -c, --credentials string     Google Cloud credentials JSON file path (optional)
+  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default "text")
+  -u, --skip-update-check      Skip the check for updates check run before every command (optional)
+  -v, --verbose                verbose error output (with stack trace) (optional)
+
+

See also

+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/community/contributing/index.html b/community/contributing/index.html new file mode 100644 index 00000000..894b5e39 --- /dev/null +++ b/community/contributing/index.html @@ -0,0 +1,1876 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contributing - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Contributing

+

By participating in this project, you agree to abide by our +code of conduct.

+

Set up your machine

+

cxcli is written in Go.

+

Prerequisites:

+ +

Other things you might need to run the tests:

+ +

Clone cxcli anywhere:

+
git clone git@github.com:xavidop/dialogflow-cx-cli.git
+
+

cd into the directory and install the dependencies:

+
go mod tidy
+
+

A good way of making sure everything is all right is running the build:

+
go build -o cxcli .
+
+

Test your change

+

You can create a branch for your changes and try to build from the source as you go:

+
go build -o cxcli .
+
+

Create a commit

+

Commit messages should be well formatted, and to make that "standardized", we +are using Conventional Commits.

+

You can follow the documentation on +their website.

+

Submit a pull request

+

Push your branch to your cxcli fork and open a pull request against the main branch.

+

Financial contributions

+

You can contribute in our GitHub Sponsors or to any of the contributors directly. +See this page for more details.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/community/sponsors/index.html b/community/sponsors/index.html new file mode 100644 index 00000000..2944ec4c --- /dev/null +++ b/community/sponsors/index.html @@ -0,0 +1,1794 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sponsors - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Sponsors

+

Do you or your company use cxcli? +You can help keep the project bug-free and feature rich by sponsoring the +project and its maintainers.

+

GitHub Sponsors

+

GitHub Sponsors is a great way to contribute directly to the primary maintainer, +xavidop.

+

This money usually goes to buying coffee, beer, better hardware, and, hopefully, +one day, paying the bills.

+ + +

You can sponsor and see who's sponsoring Xavier Portilla Edo here.

+
+

✨✨ Thanks for your support! ✨✨

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/community/users/index.html b/community/users/index.html new file mode 100644 index 00000000..ebf67b8b --- /dev/null +++ b/community/users/index.html @@ -0,0 +1,1799 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Users - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Users

+ +

Who uses cxcli?

+

As the cxcli community grows, we'd like to keep a list of our users.

+

Here's a running list of some organizations using cxcli1:

+
    +
  1. Empty list, become the first one!
  2. +
+

Feel free to add yours!

+ + +
+
+
    +
  1. +

    Entries were either added by the companies themselves or by the maintainers after seeing it in the wild. 

    +
  2. +
+
+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/dialog/index.html b/dialog/index.html new file mode 100644 index 00000000..2e00e786 --- /dev/null +++ b/dialog/index.html @@ -0,0 +1,1851 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Dialog - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Interactive Dialog

+

+ +

+ +

The cxcli tool has command that allows you to interactively play with your agent from your terminal!

+

Usage

+

You can find the dialog functionality within the cxcli dialog subcommand. You can read the documentation about this command here.

+

Parameters

+

These are the relevant parameters that you can use to interact with your agent interactively from your terminal:

+
    +
  1. locale: this parameter accepts all of the locales that are available in Dialogflow CX.
  2. +
+

Example

+

Here is a simple example of the cxcli dialog command:

+
cxcli dialog --agent-name test-agent --project-id test-cx-346408 --location-id us-central1
+
+

The above command will give you output similar to the following:

+
$ cxcli dialog --agent-name test-agent --project-id test-cx-346408 --location-id us-central1
+INFO Please press Ctrl+C whenever you want to stop the interaction. 
+User> hi
+Agent> Hi, this is Information Finder. Which product information do you need?
+User> sorry, can you repeat
+Agent> I didn't get that.
+Agent> Hi, I am a chatbot that can help you find information about CorpX products: Intelligent Customer Insight, Order Fulfillment, Order Handling, Order Management Suite, Sales Engine, or Supercharge.
+Agent> Do you want to continue looking up information for one of these products? Say yes or no.
+User> no
+Agent> Goodbye
+
+
+

Important

+

Once the session is finished, you will get the terminal prompt again.

+
+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/entitytypes/create/index.html b/entitytypes/create/index.html new file mode 100644 index 00000000..57243d2b --- /dev/null +++ b/entitytypes/create/index.html @@ -0,0 +1,1825 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Create

+

Usage

+

You can find the create functionality within the cxcli entity-type create subcommand. You can read the documentation about this command here.

+

The argument to --entities is a list of the entities with their synonyms, comma separated. This parameter has the following format: +

entity1@synonym1|synonym2,entity2@synonym1|synonym2
+

+

An example entity type with synonyms: pikachu@25|pika,charmander@3

+

Example

+

Here is a simple example of the cxcli entity-type create command:

+
cxcli entity-type create pokemon --entities "pikachu@25|pika,charmander@3" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1
+
+

The above command will give you output similar to the following:

+
$ cxcli entity-type create pokemon --entities "pikachu@25|pika,charmander@3" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1
+INFO Entity Type created with id: projects/test-cx-346408/locations/us-central1/agents/40278ea0-c0fc-4d9a-a4d4-caa68d86295f/entityTypes/457a451d-f5ce-47da-b8dc-16b17d874a5d
+
+ +

If you want to learn more about Dialogflow CX entity types creation, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/entitytypes/delete/index.html b/entitytypes/delete/index.html new file mode 100644 index 00000000..da7f42b9 --- /dev/null +++ b/entitytypes/delete/index.html @@ -0,0 +1,1821 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Delete - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Delete

+

Usage

+

You can find the delete functionality within the cxcli entity-type delete subcommand. You can read the documentation about this command here.

+

Example

+

Here is a simple example of the cxcli entity-type delete command:

+
cxcli entity-type delete pokemon2  --agent-name test-agent --project-id test-cx-346408 --location-id us-central1
+
+

The above command will give you output similar to the following:

+
$ cxcli entity-type delete pokemon2  --agent-name test-agent --project-id test-cx-346408 --location-id us-central1
+INFO Entity Type deleted
+
+ +

If you want to learn more about Dialogflow CX entity types deletion, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/entitytypes/introduction/index.html b/entitytypes/introduction/index.html new file mode 100644 index 00000000..63233802 --- /dev/null +++ b/entitytypes/introduction/index.html @@ -0,0 +1,1861 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Introduction - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Entity types

+

What is this?

+

One of the most important aspects of natural language understanding is entity types or entities. Entities contain the important factors within a message such as names, dates, products, organizations, places, or anything that we want to extract from the message. We call this concept “entities”. For example, let's take a look at the order_intent intent:

+
    +
  1. I want a pizza
  2. +
  3. I want 3 cokes
  4. +
  5. Give me two burgers
  6. +
+

As you can see in the example above, we can extract two entity Types: quantity and order_type. We can represent the entities within the above utterances as:

+
    +
  1. I want {quantity} {order_type}
  2. +
  3. Give me {quantity} {order_type}
  4. +
+

We can also think of entity types as variables.

+

With cxcli, you can easily interact with your Dialogflow CX entity types.

+

All of the commands that you have available in cxcli to interact with your entity types are located within the cxcli entity-type subcommand.

+

Create

+

The cxcli has a command that allows you to create an entity type. You can find a more detailed information here.

+

Update

+

The cxcli has a command that allows you to update an entity type. You can find a more detailed information here.

+

Delete

+

The cxcli has a command that allows you to delete your entity type. You can find a more detailed explanation here.

+ +

If you want to see the full usage of the cxcli entity-type command, please refer to this page.

+

If you want to learn more about Dialogflow CX entity types, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/entitytypes/update/index.html b/entitytypes/update/index.html new file mode 100644 index 00000000..03224c78 --- /dev/null +++ b/entitytypes/update/index.html @@ -0,0 +1,1825 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Update - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Update

+

Usage

+

You can find the update functionality within the cxcli entity-type update subcommand. You can read the documentation about this command here.

+

The argument to --entities is a list of the entities with their synonyms, comma separated. This parameter has the following format: +

entity1@synonym1|synonym2,entity2@synonym1|synonym2
+

+

An example entity type with synonyms: pikachu@25|pika,charmander@3

+

Example

+

Here is a simple example of the cxcli entity-type update command:

+
cxcli entity-type update pokemon --entities "pikachu@25|pika,charmander@3" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1
+
+

The above command will give you output similar to the following:

+
$ cxcli entity-type update pokemon --entities "pikachu@25|pika,charmander@3" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1
+INFO Entity Type updated
+
+ +

If you want to learn more about Dialogflow CX entity types update, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/environments/cicd/index.html b/environments/cicd/index.html new file mode 100644 index 00000000..424f3178 --- /dev/null +++ b/environments/cicd/index.html @@ -0,0 +1,1826 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + CI/CD - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Environments CI/CD

+

Usage

+

You can find the CI/CD functionality within the cxcli environment execute-cicd subcommand. You can read the documentation about this command here.

+

Example

+

Here is a simple example of the cxcli environment execute-cicd command:

+
cxcli environment execute-cicd cicd-env --project-id test-cx-346408 --location-id us-central1 --agent-name test-agent
+
+

The above command will give you output similar to the following:

+
$ cxcli environment execute-cicd cicd-env --project-id test-cx-346408 --location-id us-central1 --agent-name test-agent
+INFO Executing cicd for environment cicd-env
+INFO PASSED
+
+
+

Are you running this command in a CI/CD pipeline?

+

If this is the case, we recommend that you set the --output-format parameter to json.

+
+ +

If you want to learn more about Dialogflow CX CI/CD execution, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/environments/create/index.html b/environments/create/index.html new file mode 100644 index 00000000..f3ffca5c --- /dev/null +++ b/environments/create/index.html @@ -0,0 +1,1827 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Create

+

Usage

+

You can find the create functionality within the cxcli environment create subcommand. You can read the documentation about this command here.

+

The --flow-versions parameter is a list of flows and their versions to include in the environment, comma separated. For each flow used in this environment, it is required to add the version with this format: @flow-version. This is the full format:

+
flow@flow-version
+
+

An example of flows with their versions:

+
Default Start Flow@production_v2,Test Flow@v1.0.0
+
+

Example

+

Here is a simple example of using the cxcli environment create command:

+
cxcli environment create my-env --flow-versions "Default Start Flow@production_v2,Test Flow@v1.0.0"  --agent-name test-agent --project-id test-cx-346408 --location-id us-central1
+
+

The above command will give you output similar to the following:

+
$ cxcli environment create my-env --flow-versions "Default Start Flow@production_v2,Test Flow@v1.0.0"  --agent-name test-agent --project-id test-cx-346408 --location-id us-central1
+INFO Environment created with id: projects/test-cx-346408/locations/us-central1/agents/40278ea0-c0fc-4d9a-a4d4-caa68d86295f/environments/9f9cf42a-9033-4d73-9407-613d041c9403
+
+ +

If you want to learn more about Dialogflow CX environment creation, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/environments/delete/index.html b/environments/delete/index.html new file mode 100644 index 00000000..a3da387a --- /dev/null +++ b/environments/delete/index.html @@ -0,0 +1,1821 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Delete - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Delete

+

Usage

+

You can find the delete functionality within the cxcli environment delete subcommand. You can read the documentation about this command here.

+

Example

+

Here is a simple example of the cxcli environment delete command:

+
cxcli environment delete my-env --agent-name test-agent --project-id test-cx-346408 --location-id us-central1
+
+

The above command will give you output similar to the following:

+
$ cxcli environment delete my-env --agent-name test-agent --project-id test-cx-346408 --location-id us-central1
+INFO Environment deleted
+
+ +

If you want to learn more about Dialogflow CX environment deletion, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/environments/introduction/index.html b/environments/introduction/index.html new file mode 100644 index 00000000..61f82970 --- /dev/null +++ b/environments/introduction/index.html @@ -0,0 +1,1868 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Introduction - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Environments

+

What is this?

+

In software, it is a common pattern (and a best practice) to have different environments where developers can deploy different versions of their software. Each environment has its own configuration.

+

Dialogflow CX follows the same concept in that you can create a version of your agent and then deploy it to a specific environment. This is also similar to a webhook in that you can deploy a specific webhook version and use that version within an environment.

+

With cxcli, you can easily interact with the environments of your Dialogflow CX agents.

+

All of the commands that you have available in cxcli to interact with your environments are located within the cxcli environment subcommand.

+

Create

+

The cxcli has a command that allows you to create an environment. You can find a more detailed information here.

+

Update

+

The cxcli has a command that allows you to update an environment. You can find a more detailed information here.

+

Delete

+

The cxcli has a command that allows you to delete your environment. You can find a more detailed explanation here.

+

CI/CD

+

In Dialogflow CX, when you are testing your agents, you can save those tests and associate them with a specific environment.

+

The cxcli tool has a command that allows you to run these CI/CD pipelines from your terminal or from your CI processes. You can find a more detailed explanation here.

+ +

If you want to see the full usage of the cxcli environment command, please refer to this page.

+

If you want to learn more about Dialogflow CX environments, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/environments/update/index.html b/environments/update/index.html new file mode 100644 index 00000000..b079daa0 --- /dev/null +++ b/environments/update/index.html @@ -0,0 +1,1827 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Update - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Update

+

Usage

+

You can find the update functionality within the cxcli environment update subcommand. You can read the documentation about this command here.

+

The --flow-versions parameter is a list of flows and their versions to include in the environment, comma separated. For each flow used in this environment, it is required to add the version with this format: @flow-version. This is the full format:

+
flow@flow-version
+
+

An example of flows with their versions:

+
Default Start Flow@production_v2,Test Flow@v1.0.0
+
+

Example

+

Here is a simple example of the cxcli entity-type update command:

+
cxcli environment update my-env --flow-versions "Default Start Flow@production_v3,Test Flow@v1.1.0"  --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --description "This is a test environment"
+
+

The above command will give you output similar to the following:

+
$ cxcli environment update my-env --flow-versions "Default Start Flow@production_v3,Test Flow@v1.1.0"  --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --description "This is a test environment"
+INFO Environment updated
+
+ +

If you want to learn more about Dialogflow CX environment update, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/flows/create/index.html b/flows/create/index.html new file mode 100644 index 00000000..a2986155 --- /dev/null +++ b/flows/create/index.html @@ -0,0 +1,1821 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Create

+

Usage

+

You can find the create functionality within the cxcli flow create subcommand. You can read the documentation about this command here.

+

Example

+

Here is a simple example of using the cxcli flow create command:

+
cxcli flow create my-flow --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --description "My test flow"
+
+

The above command will give you output similar to the following:

+
$ cxcli flow create my-flow --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --description "My test flow"
+INFO Flow created with id: projects/test-cx-346408/locations/us-central1/agents/40278ea0-c0fc-4d9a-a4d4-caa68d86295f/flows/49a38c72-2a63-4d71-a266-2d722eb8360e
+
+ +

If you want to learn more about Dialogflow CX flow creation, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/flows/delete/index.html b/flows/delete/index.html new file mode 100644 index 00000000..22ae0a4a --- /dev/null +++ b/flows/delete/index.html @@ -0,0 +1,1821 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Delete - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Delete

+

Usage

+

You can find the delete functionality within the cxcli flow delete subcommand. You can read the documentation about this command here.

+

Example

+

Here is a simple example of the cxcli flow delete command:

+
cxcli flow delete my-flow --agent-name test-agent --project-id test-cx-346408 --location-id us-central1
+
+

The above command will give you output similar to the following:

+
$ cxcli flow delete my-flow --agent-name test-agent --project-id test-cx-346408 --location-id us-central1
+INFO Flow deleted
+
+ +

If you want to learn more about Dialogflow CX flow deletion, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/flows/introduction/index.html b/flows/introduction/index.html new file mode 100644 index 00000000..06ed1b5f --- /dev/null +++ b/flows/introduction/index.html @@ -0,0 +1,1868 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Introduction - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Flows

+

What is this?

+

In intricate conversations, various topics come into play. Take, for example, a flight book service, where a dialogue may cover areas like seat booking a meal reservation, obtaining customer information, and confirming the booking. Each of these topics requires multiple interactions between the agent and the end-user to gather the necessary information.

+

Flows are employed to delineate these topics and their respective conversational paths. Each agent is equipped with a default start flow, which serves as a foundation for simple agents.

+

With cxcli, you can easily interact with the flows of your Dialogflow CX agents.

+

All of the commands that you have available in cxcli to interact with your flows are located within the cxcli flow subcommand.

+

Create

+

The cxcli has a command that allows you to create a flow. You can find a more detailed information here.

+

Update

+

The cxcli has a command that allows you to update a flow. You can find a more detailed information here.

+

Delete

+

The cxcli has a command that allows you to delete your flow. You can find a more detailed explanation here.

+

Train

+

In Dialogflow CX, when you are adding training phrases to your intents and synonyms to your entity types, you will need to train your agent in order to have the latest changes ready for your end-users.

+

The cxcli tool has a command that allows you train your flow from your terminal or from your CI processes. You can find a more detailed explanation here.

+ +

If you want to see the full usage of the cxcli flow command, please refer to this page.

+

If you want to learn more about Dialogflow CX flows, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/flows/train/index.html b/flows/train/index.html new file mode 100644 index 00000000..d12a67dc --- /dev/null +++ b/flows/train/index.html @@ -0,0 +1,1825 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Train - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Train

+

Usage

+

You can find the train functionality within the cxcli flow train subcommand. You can read the documentation about this command here.

+

Example

+

Here is a simple example of the cxcli flow train command:

+
cxcli flow train my-flow --project-id test-cx-346408 --location-id us-central1 --agent-name test-agent
+
+

The above command will give you output similar to the following:

+
$ cxcli flow train my-flow --project-id test-cx-346408 --location-id us-central1 --agent-name test-agent
+INFO Flow trained
+
+
+

Is it taking longer than expected?

+

That is okay, depending on the amount of data to train it takes longer.

+
+ +

If you want to learn more about Dialogflow CX flow train execution, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/flows/update/index.html b/flows/update/index.html new file mode 100644 index 00000000..8e9bf8ed --- /dev/null +++ b/flows/update/index.html @@ -0,0 +1,1821 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Update - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Update

+

Usage

+

You can find the update functionality within the cxcli flow update subcommand. You can read the documentation about this command here.

+

Example

+

Here is a simple example of the cxcli flow update command:

+
cxcli flow update my-flow --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --description "My updated test flow"
+
+

The above command will give you output similar to the following:

+
$ cxcli flow update my-flow --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --description "My updated test flow"
+INFO Flow updated
+
+ +

If you want to learn more about Dialogflow CX flow update, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/flowversions/create/index.html b/flowversions/create/index.html new file mode 100644 index 00000000..1e3950fe --- /dev/null +++ b/flowversions/create/index.html @@ -0,0 +1,1825 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Create

+

Usage

+

You can find the create functionality within the cxcli flow-version create subcommand. You can read the documentation about this command here.

+

Example

+

Here is a simple example of using the cxcli flow-version create command:

+
cxcli flow-version create "v1.0.0" --start-flow "Test Flow" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --description "My flow version"
+
+

The above command will give you output similar to the following:

+
$ cxcli flow-version create "v1.0.0" --start-flow "Test Flow" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --description "My flow version"
+INFO Version created with id: projects/test-cx-346408/locations/us-central1/agents/40278ea0-c0fc-4d9a-a4d4-caa68d86295f/flows/b23e0247-2dd4-4d86-a23a-a289569480d4/versions/6
+
+
+

Is it taking longer than expected?

+

That is okay, depending on the size of the flow it takes longer.

+
+ +

If you want to learn more about Dialogflow CX flow version creation, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/flowversions/delete/index.html b/flowversions/delete/index.html new file mode 100644 index 00000000..61494c96 --- /dev/null +++ b/flowversions/delete/index.html @@ -0,0 +1,1821 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Delete - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Delete

+

Usage

+

You can find the delete functionality within the cxcli flow-version delete subcommand. You can read the documentation about this command here.

+

Example

+

Here is a simple example of the cxcli flow-version delete command:

+
cxcli flow-version delete "v1.0.0" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1
+
+

The above command will give you output similar to the following:

+
$ cxcli flow-version delete "v1.0.0" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1
+INFO Version deleted
+
+ +

If you want to learn more about Dialogflow CX flow version deletion, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/flowversions/introduction/index.html b/flowversions/introduction/index.html new file mode 100644 index 00000000..2b933c65 --- /dev/null +++ b/flowversions/introduction/index.html @@ -0,0 +1,1852 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Introduction - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Flow Versions

+

What is this?

+

It is possible to generate various iterations of your agent flows and deploy them to distinct serving environments.

+

When making modifications to a flow, you are essentially modifying a draft version. At any given time, you have the option to save a draft flow as a flow version. A flow version represents an unchangeable snapshot of your flow data along with all the related agent data, such as intents, entities, webhooks, pages, route groups, and more.

+

Furthermore, You can deploy this flow versions to different environments, such as development, test, and production. You can also deploy the same flow version to multiple environments.

+

With cxcli, you can easily interact with the flow versions of your Dialogflow CX agents.

+

All of the commands that you have available in cxcli to interact with your flows are located within the cxcli flow-version subcommand.

+

Create

+

The cxcli has a command that allows you to create a flow versions. You can find a more detailed information here.

+

Update

+

The cxcli has a command that allows you to update a flow versions. You can find a more detailed information here.

+

Delete

+

The cxcli has a command that allows you to delete your flow versions. You can find a more detailed explanation here.

+ +

If you want to see the full usage of the cxcli flow-version command, please refer to this page.

+

If you want to learn more about Dialogflow CX flows, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/flowversions/update/index.html b/flowversions/update/index.html new file mode 100644 index 00000000..d7348257 --- /dev/null +++ b/flowversions/update/index.html @@ -0,0 +1,1821 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Update - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Update

+

Usage

+

You can find the update functionality within the cxcli flow-version update subcommand. You can read the documentation about this command here.

+

Example

+

Here is a simple example of the cxcli flow update command:

+
cxcli flow-version update "v1.0.0" --start-flow "Test Flow" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --description "My updated flow version"
+
+

The above command will give you output similar to the following:

+
$ cxcli flow-version update "v1.0.0" --start-flow "Test Flow" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --description "My updated flow version"
+INFO Version updated
+
+ +

If you want to learn more about Dialogflow CX flow version update, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/images/cx_logo.png b/images/cx_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..4c746e42aa24b343c0ad14e13b4fc3430c0b73a8 GIT binary patch literal 11318 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 A(f|Me literal 0 HcmV?d00001 diff --git a/images/gopher.png b/images/gopher.png new file mode 100644 index 0000000000000000000000000000000000000000..919af7441a3450e6de21076eaf5e55d084112502 GIT binary patch literal 105282 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 a;II(V{~sVB;myGS$W>>L%TF!^Wc&{+V!odM literal 0 HcmV?d00001 diff --git a/images/logo.png b/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f26dd356dbdca8a8247232844a2dbb019af5b76a GIT binary patch literal 69655 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 P9zc1F!ujHJFKWT literal 0 HcmV?d00001 diff --git a/images/logo_background.png b/images/logo_background.png new file mode 100644 index 0000000000000000000000000000000000000000..3cb51f8bb0d7bf978016e2cac08ec597b4b87e97 GIT binary patch literal 63848 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

{7?IiPrcmTQ&OfU?Bc*CxbOE51Wp9;CNXNIo( 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%0D6atn(2|9!UJ#MwOCd~gL>S;vr+HP_Swu&QrP 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 UJ{TgZ2L~XiC}=*bk+X{UUjuqn8UO$Q literal 0 HcmV?d00001 diff --git a/images/stt.png b/images/stt.png new file mode 100644 index 0000000000000000000000000000000000000000..7bc5afbb704efe03435cdf11497c140c26dadff7 GIT binary patch literal 11362 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 literal 0 HcmV?d00001 diff --git a/images/tts.png b/images/tts.png new file mode 100644 index 0000000000000000000000000000000000000000..ad5f0d4e7bb48b7da349c6a6e2e8b7de116342d6 GIT binary patch literal 2839 zcma)8do+}57k}P&=4EDtAwzU%N+$QlwUB0rP>5mBMXr&KGEFKZ&A3(Ph)GkaloXXMOAY{`l7V)_R_`fBU!hZ}0s)f9(&2&Q1 z)aaCya_Uol-ISt8>79J)R(8u%_6Sd1$8GA5Q) zc6^=twiKKGp{zx+M0e15+`kqSj__izJe5PeUDgJpQ` zJOY5W(T@vx(bkF;q;jH{kGt|H1ZxAhY-j%t05BiD+*|^a{+jHI3+~;z0ttV6={OWK zozIExaog`n>&-YE()hg5qHjhn_n|N_bsXw!*Y)EuoGNkeU0V9EHm$;~kBtANL307Z6Y5~qXSqjrHG>rutz}}; zQ-!Lard6~Kpy)l?drNn{!byX&E*1yz_@)yQ`?R_A5D@)$#^6<_-;Ie0xV9 zqat65-kpr5vI2m-_JE zZyw&&99!Y~osg98C`;PJUuq~zAT*rfs^NE>g%6w{O{_=sqjM+*+pki`b|N=opog(; z?22G@Xv*f%s%L9`h%@6RjD)y{qemP<7l(Abv^t!fMp|hin(`h`li}gEqMEh-#N!0} zcW{B1$?#E_wN^AYW+L7R@`c%y+3;s5KQxohU%B1I0T{yv6GmEQ03OYpxWb4wG1dVt zyw6*Z5oJG}q+`$A#&lSX)a85GkCJEG@+hSzN0yS9NvWy%g)^NhJWD^1;P67qo4mb~ z{nPdGq{Z`So;kjF6&wgOYmUj2hAHy<9+02*{tPoeZ20i&%{S(pc%U4&$v>+knQX@@ z4ZddoX+Z^{(s{r3sq!)6$=7Ail24W?QWANDavVc`Ks`YI_-Tz6aAzweZpgG2_Eq*h zkvIh}$FYj3`uDU-)QIa`&kS{%JisDUpKw(N^{s$&Vcm$-ayS#_kwi+Ch(Gwa_DHvr z!FC5eFvga2=AOTto_1}xYw*KsS+lgR==yq<&eB3Zz(qGUBnv1qZswk1>Uz3(q82IUxA)^-;ywh=HX%|^Pwkzm3!aST5%H@pr@unH zA!AIH;b;pN$$>uVgjBc+X`Bj{14|0qjnO#8EEfgRA3KDxgD!x3i0i~5j1lyk0*&|l zK_x)7AQ^ELA6tPyZ3;9#&<7R}Z`4Pv{YoxKBk#g);YO-2B*_-shex0pY~Xx-=8dY6 zsnl82GH?%lV6l>a=a8bU1_m{q4lyym@3p6@v31nM_gVGejrwyHBJo~on<-h~E7j+pb8W#^nP(-*4vPQ4z z$icfRrf8(<*sR0g$?6+49*zK^ER6wQ z;yt=%;@(T-U`fk0KcP@8>V^l2_0GUj@|O`MbEmd1$M6#F!ya= z8s2!gh;^6x`thM@k64rzu(Uq)maGi9ifyo#5$X@Sl6X`0IIV6utmA+^&^U~pVzJ=U{(yuxcb8z21I|o zjqm{rb_lwhib1>UnFoPAx*k3+o>L+I!rRbQK9p8a$2rCnOc+#S#N{#Bx z=|0jTy>fvuVulxoIu+cD+)X$msWUo_&W;Av`XybM_~(ymjz20egnOOzK#G%RAAU@E z7xtviim`KHvz0gX@kuwoPk#1!fTT1Iz3KBx*c~3QlKPFD70Rv#oQ^Q)Pn_FHRFgY9 z4S0=J3V}`9Q`6s#$!KUStbU&d@3bCe!0!ryt+5O+Zi~`|m7t)50(m3F6$Y1sQ|Qk-Z9o}GwJQ>0)CPnaCuFAq>iyOyhOBC8IDv_sP}-`wxJKOG zDOpYLSVOi&gIlgj?E12H_3yNpHrOx<6qwpth}4&nm|;S1B(hReE<6-&%l`~J*A98m z`3`J;1PCNt)$Fl$P75Ji)#x$MRc6uo8tgP7rz4czqNYrxZ!{CE6s%38^B&oxbs}66 zI@=p8>fF7i(KDz=xr<{fzA7HHG&1~ntH>ngj&Pwv+AD8i{cTr=^X~o=^OnZ{EF%AGBoC$PoNz|D z_QcFK#R_DU=pK?79g(=tF^aiQVSqK++Qx!xWkI$Mw6=1zb8sZvn~}+mWO99H%kuvc c988Fgi%I_9g7)*tH3|Xna`$z+?HZo`FDOO!lK=n! literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 00000000..48e90e59 --- /dev/null +++ b/index.html @@ -0,0 +1,1809 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Dialogflow CX CLI

+

+ CXCLI Logo +

+ +

cxcli is a command-line tool that helps Dialogflow CX users test their agents and interact with them in various ways. +It is useful for your day-to-day tasks or if you want to integrate it with your favorite CI tool.

+

This CLI also allows you to interact with the text-to-speech and speech-to text APIs in Google Cloud.

+

Get started

+ +

Got questions, comments or suggestions?

+

cxcli is developed by xavidop.

+

You can contact us via email at: dialogflowcxcli@gmail.com.

+

Follow @dialogflowcxcli on Twitter for updates and announcements.

+

Visit our links section for more information about staying connected with us.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/intents/create/index.html b/intents/create/index.html new file mode 100644 index 00000000..cca4b610 --- /dev/null +++ b/intents/create/index.html @@ -0,0 +1,1825 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Create

+

Usage

+

You can find the create functionality within the cxcli intent create subcommand. You can read the documentation about this command here.

+

The --training-phrases parameter is a list of the training phrases for this intent, comma separated. For the entities used in this intent, add @entity-type to the word in the training phrase. This is the format:

+
word@entity-type
+
+

An example training phrase with a entity: hello, hi how are you today@sys.date, morning!

+

Example

+

Here is a simple example of using the cxcli intent create command:

+
cxcli intent create test_intent --training-phrases "hello, hi how are you today@sys.date, morning"  --agent-name test-agent --project-id test-cx-346408 --location-id us-central1
+
+

The above command will give you output similar to the following:

+
$ cxcli intent create test_intent --training-phrases "hello, hi how are you today@sys.date, morning"  --agent-name test-agent --project-id test-cx-346408 --location-id us-central1
+INFO Intent created with id: projects/test-cx-346408/locations/us-central1/agents/40278ea0-c0fc-4d9a-a4d4-caa68d86295f/intents/a7870357-e942-43dd-99d2-4de8c81a3c09
+
+ +

If you want to learn more about Dialogflow CX intent creation, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/intents/delete/index.html b/intents/delete/index.html new file mode 100644 index 00000000..2f8e0941 --- /dev/null +++ b/intents/delete/index.html @@ -0,0 +1,1821 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Delete - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Delete

+

Usage

+

You can find the delete functionality within the cxcli intent delete subcommand. You can read the documentation about this command here.

+

Example

+

Here is a simple example of the cxcli intent delete command:

+
cxcli intent delete test_intent --agent-name test-agent --project-id test-cx-346408 --location-id us-central1
+
+

The above command will give you output similar to the following:

+
$ cxcli intent delete test_intent --agent-name test-agent --project-id test-cx-346408 --location-id us-central1
+INFO Intent deleted
+
+ +

If you want to learn more about Dialogflow CX intent deletion, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/intents/introduction/index.html b/intents/introduction/index.html new file mode 100644 index 00000000..2581b3c8 --- /dev/null +++ b/intents/introduction/index.html @@ -0,0 +1,1859 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Introduction - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Intent

+

What is this?

+

Before we discuss intents, it is important to first understand what is natural language understanding (NLU). Natural language understanding is a subset of natural language processing (NLP). It helps a "machine" to be able to understand human language.

+

In Dialogflow CX, this is an important concept, since it will help predict the user's intention and allow us to act in a "smarter" way, and avoid the all-too-common default fallback intent: "I did not understand you, could you repeat?".

+

We refer to these intentions, proposals, or user requests that machine must classify as "intents". Each intent has training phrases. For example, the default welcome_intent intent can contain these three training phrases:

+
    +
  1. Hi
  2. +
  3. Hello
  4. +
  5. Whats up!
  6. +
+

As you can see in the example above, the purpose of the welcome_intent intent is to start a conversation when a user says any of these training phrases. An intent can have multiple entities.

+

Whenever you create, modify, or delete an intent, it is important to re-train your Dialogflow CX flows. This will re-train your NLU model. By doing this, your bot will "understand you", including your latest changes.

+

With cxcli, you can easily interact with your Dialogflow CX intents.

+

All of the commands that you have available in cxcli to interact with your intents are located within the cxcli intents subcommand.

+

Create

+

The cxcli has a command that allows you to create an intent. You can find a more detailed explanation here

+

Update

+

The cxcli has a command that allows you to update an intent. You can find a more detailed explanation here

+

Delete

+

The cxcli has a command that allows you to delete your intents. You can find a more detailed explanation here

+ +

If you want to see the full usage of the cxcli intents command, please refer to this page.

+

If you want to learn more about Dialogflow CX intents, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/intents/update/index.html b/intents/update/index.html new file mode 100644 index 00000000..81f0f644 --- /dev/null +++ b/intents/update/index.html @@ -0,0 +1,1825 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Update - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Update

+

Usage

+

You can find the update functionality within the cxcli intent update subcommand. You can read the documentation about this command here.

+

The --training-phrases parameter is a list of the training phrases for this intent, comma separated. For the entities used in this intent, add @entity-type to the word in the training phrase. This is the format:

+
word@entity-type
+
+

An example training phrase with a entity: hello, hi how are you today@sys.date, morning!

+

Example

+

Here is a simple example of using the cxcli intent update command:

+
cxcli intent update test_intent --training-phrases "hello, hi how are you today@sys.date, morning"  --agent-name test-agent --project-id test-cx-346408 --location-id us-central1
+
+

The above command will give you output similar to the following:

+
$ cxcli intent update test_intent --training-phrases "hello, hi how are you today@sys.date, morning"  --agent-name test-agent --project-id test-cx-346408 --location-id us-central1
+INFO Intent updated
+
+ +

If you want to learn more about Dialogflow CX intent update, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/links/index.html b/links/index.html new file mode 100644 index 00000000..5d0a44d5 --- /dev/null +++ b/links/index.html @@ -0,0 +1,1748 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Links - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+ +
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/nluprofiler/examples/audio/index.html b/nluprofiler/examples/audio/index.html new file mode 100644 index 00000000..f8c24afb --- /dev/null +++ b/nluprofiler/examples/audio/index.html @@ -0,0 +1,1826 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Audio input - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Audio input

+

Suite file

+
# suite.yaml
+
+name: Example Suite
+description: Suite used as an example
+projectId: test-cx-346408
+locationId: us-central1
+agentName: test-agent
+tests:
+  - id: test_id
+    file: ./test.yaml
+
+

Test file

+
# test.yaml
+
+name: Example test
+description: These are some tests
+localeId: en
+checks:
+  - id: my_check
+    input: 
+      type: audio
+      audio: ./audio/hi.mp3
+    validate:
+      intent: hi_intent
+
+

You can download the audio file used in this example here

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/nluprofiler/examples/index.html b/nluprofiler/examples/index.html new file mode 100644 index 00000000..21383ccd --- /dev/null +++ b/nluprofiler/examples/index.html @@ -0,0 +1,1763 @@ + + + + + + + + + + + + + + + + + + + + + + + + Examples - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Examples

+

Simple

+

Simple example that demonstrates the NLU Profiler in action. Find it here

+

System entity detection

+

Example that shows how to validate Dialogflow CX built-in entities. Find it here

+

Text input with entities

+

Full example with multiple user-defined entities and Dialogflow CX built-in entities. Find it here

+

Audio input

+

Example using an audio file as an input. Find it here

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/nluprofiler/examples/simple/index.html b/nluprofiler/examples/simple/index.html new file mode 100644 index 00000000..3567aebd --- /dev/null +++ b/nluprofiler/examples/simple/index.html @@ -0,0 +1,1832 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Simple - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Simple example

+

Suite file

+
# suite.yaml
+
+name: Example Suite
+description: Suite used as an example
+projectId: test-cx-346408
+locationId: us-central1
+agentName: test-agent
+tests:
+  - id: test_id
+    file: ./test.yaml
+
+

Test file

+
# test.yaml
+
+name: Example test
+description: These are some tests
+localeId: en
+checks:
+  - id: my_first_check
+    input: 
+      type: text
+      text: hi
+    validate:
+      intent: hi_intent
+
+  - id: my_second_check
+    input: 
+      type: text
+      text: hello
+    validate:
+      intent: hi_intent
+
+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/nluprofiler/examples/system/index.html b/nluprofiler/examples/system/index.html new file mode 100644 index 00000000..684a22e5 --- /dev/null +++ b/nluprofiler/examples/system/index.html @@ -0,0 +1,1828 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + System entities detection - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

System entity detection example

+

Suite file

+
# suite.yaml
+
+name: Example Suite
+description: Suite used as an example
+projectId: test-cx-346408
+locationId: us-central1
+agentName: test-agent
+tests:
+  - id: test_id
+    file: ./test.yaml
+
+

Test file

+
# test.yaml
+
+name: Example test
+description: These are some tests
+localeId: en
+checks:
+  - id: my_check
+    input: 
+      type: text
+      text: please, give me 3
+    validate:
+      intent: finish_order_intent
+      parameters:
+        - parameter: number
+          value: 3
+
+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/nluprofiler/examples/text/index.html b/nluprofiler/examples/text/index.html new file mode 100644 index 00000000..e781adfd --- /dev/null +++ b/nluprofiler/examples/text/index.html @@ -0,0 +1,1842 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Text input with entities - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Text input with parameters example

+

Suite file

+
# suite.yaml
+
+name: Example Suite
+description: Suite used as an example
+projectId: test-cx-346408
+locationId: us-central1
+agentName: test-agent
+tests:
+  - id: test_id
+    file: ./test.yaml
+
+

Test file

+
# test.yaml
+
+name: Example test
+description: These are some tests
+localeId: en
+checks:
+  - id: my_first_check
+    input: 
+      type: text
+      text: I want 3 pizzas
+    validate:
+      intent: order_intent
+      parameters:
+        - parameter: number
+          value: 3
+        - parameter: order_type
+          value: pizza
+
+  - id: my_second_check
+    input: 
+      type: text
+      text: I want 2 cokes
+    validate:
+      intent: order_intent
+      parameters:
+        - parameter: number
+          value: 2
+        - parameter: order_type
+          value: coke
+
+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/nluprofiler/introduction/index.html b/nluprofiler/introduction/index.html new file mode 100644 index 00000000..d20d03c8 --- /dev/null +++ b/nluprofiler/introduction/index.html @@ -0,0 +1,1866 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Introduction - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

NLU profiler

+

What is this?

+

+ Flow +

+ +

Use the NLU Profiler to test user utterances and improve your agent's interaction model.

+

With the NLU Profiler, you can see how utterances resolve to intents and slots in your interaction model. When an utterance doesn't resolve to the right intent or slot, you can update the interaction model and try again. With the cxcli, you can see which intents Dialogflow CX considered and discarded. Then, you can determine how to use additional samples to train your model to resolve utterances to their desired intents and slots.

+

Every suite is executed in the Dialogflow CX session so you can test not only your NLU but also a conversation itself.

+

All of the commands that are available in cxcli to execute the NLU profiler are located within the cxcli profile-nlu subcommand.

+

Reference

+

It is important to know which suites and tests you can build. Because of that, you can find the entire reference on the Reference page. Suites and test are defined as yaml files.

+

The cxcli has a command that allows you to run these suites from your terminal or from your CI pipelines.

+

To execute a suite, you can run the cxcli profile-nlu execute command. For the usage, please refer to this page.

+

Examples

+

You can find some useful examples on our GitHub repo and the Examples page.

+

Execution Example

+

Here is a simple example of the cxcli profile-nlu execute command:

+
cxcli profile-nlu execute examples/suite.yaml
+
+

The above command will give you output similar to the following:

+
$ cxcli profile-nlu execute suite.yaml
+INFO Suite Information: test-agent
+INFO Test ID: test_1
+INFO Input: type: text, value: hi
+INFO Intent Detected: hi_intent
+INFO Input: type: text, value: hello
+INFO Intent Detected: hi_intent
+INFO Input: type: audio, value: ./audio/hi.mp3
+INFO Intent Detected: hi_intent
+INFO Test ID: test_2
+INFO Input: type: text, value: I want 3 pizzas
+INFO Intent Detected: order_intent
+INFO Param order_type: pizza
+INFO Param number: 3
+INFO Input: type: text, value: I want 2 cokes
+INFO Intent Detected: order_intent
+INFO Param number: 2
+INFO Param order_type: coke
+
+
+

Are you running this command in a CI/CD pipeline?

+

If this is the case, we recommend that you set the --output-format parameter to json.

+
+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/nluprofiler/suites/index.html b/nluprofiler/suites/index.html new file mode 100644 index 00000000..4fa21ac2 --- /dev/null +++ b/nluprofiler/suites/index.html @@ -0,0 +1,1829 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Suites - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Suites

+

Reference

+

A suite is a yaml file with the following structure:

+
# suite.yaml
+
+# Name of the suite.
+name: Example Suite
+# Brief description of the suite.
+description: Suite used as an example
+# Project ID on Google Cloud where is located your Dialogflow CX agent.
+projectId: test-cx-346408
+# Location where your Dialogflow CX agent is running. 
+# More info here: https://cloud.google.com/dialogflow/cx/docs/concept/region
+locationId: us-central1
+# Agent name of your Dialogflow CX agent.
+# Notice: it is the agent name, not the agent ID.
+agentName: test-agent
+# You can have multiple tests defined in separated files
+tests:
+  # ID of the test.
+  - id: test_id
+    # File where the test specification is located
+    file: ./test.yaml
+
+

JSON Schema

+

cxcli also has a jsonschema file, which you can use to have better +editor support:

+
https://cxcli.xavidop.me/static/suite.json
+
+

You can also specify it in your yml config files by adding a +comment like the following: +

# yaml-language-server: $schema=https://cxcli.xavidop.me/static/suite.json
+

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/nluprofiler/tests/index.html b/nluprofiler/tests/index.html new file mode 100644 index 00000000..212c5486 --- /dev/null +++ b/nluprofiler/tests/index.html @@ -0,0 +1,1860 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tests - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Tests

+

Reference

+

A test is a yaml file with the following structure:

+
# test.yaml
+
+# Name of the test.
+name: Example test
+# Brief description of the test.
+description: These are some tests
+# Locale of the interaction model that is gonna be tested.
+# You can find the locales here: https://cloud.google.com/dialogflow/cx/docs/reference/language
+localeId: en
+# A check is the test itself: given an input, you will validate the intents and the parameters/entities detected by Dialogflow CX
+# You can have multiple checks defined
+checks:
+  # The ID of the check
+  - id: test
+    input:
+      # the input type
+      # it could be text or audio
+      type: text
+      # The input itself in text format. For type: audio, you have to specify the audio tag.
+      text: I want 3 pizzas
+    validate:
+      # Intent that is supposed to be detected
+      intent: order_intent
+      # You can have multiple parameters/intents
+      # Notice: this could be empty if your intent does not have any entities/parameters.
+      parameters:
+        # Entity name that is supposed to be detected
+        - parameter: number
+          # Value that is supposed to be detected
+          value: 3
+
+

Audio input

+

It is important to know that the input audio needs to have the following format:

+
    +
  1. A sample rate of 16000 Hertz
  2. +
  3. The audio encoding has to be Linear16. Linear16 is a 16-bit linear pulse-code modulation (PCM) encoding.
  4. +
+

If you don't have a file with this format, you can create it by yourself using the cxcli tts command! All the information is located here

+

JSON Schema

+

cxcli also has a jsonschema file, which you can use to have better +editor support:

+
https://cxcli.xavidop.me/static/test.json
+
+

You can also specify it in your yml config files by adding a +comment like the following: +

# yaml-language-server: $schema=https://cxcli.xavidop.me/static/test.json
+

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/overview/authentication/index.html b/overview/authentication/index.html new file mode 100644 index 00000000..16840212 --- /dev/null +++ b/overview/authentication/index.html @@ -0,0 +1,1891 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Authentication - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Authentication

+

cxcli uses various Google Cloud APIs. By default, the tool uses the default configuration that uses the gcloud cli. If you want to use another authentication key you can provide a json file with the global --credentials parameter.

+

The cxcli source code is open source, you can check it out here to learn more about the actions the tool performs.

+

Below you can find the roles and the APIs that are required to use this tool.

+

Roles needed

+

Dialogflow CX

+

Dialogflow API Admin: Provides full access to create, update, query, detect intent, and delete the agent from the console or API. Click here for more information.

+

We are using the Admin role because cxcli performs the List agent action.

+

This role allows you to execute Speech-to-text and Text-to-speech actions

+

APIs enabled needed

+

The following APIs should be enabled on your Google Cloud project if you want to use the respective cxcli capabilities:

+

Dialogflow CX

+

You will need to enable the Dialogflow API on your project. More information here

+

Speech-to-text

+

You will need to enable the Cloud Speech-to-Text API on your project. More information here

+

Text-to-speech

+

You will need to enable the Cloud Text-to-Speech API on your project. More information here

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/overview/faq/index.html b/overview/faq/index.html new file mode 100644 index 00000000..ae614de6 --- /dev/null +++ b/overview/faq/index.html @@ -0,0 +1,1969 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + FAQ - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + + + + + +
+
+ + + + + + + + +

Frequently Asked Questions (FAQ)

+

How does it work?

+

cxcli has three main purposes:

+
    +
  1. Make the interaction with your Dialogflow CX agents from your laptop or your continuous integration pipelines easier than ever
  2. +
  3. Create testing tools that will help users build their Dialogflow CX agent
  4. +
  5. Interact with other Google Cloud APIs such as TTS and STT in a very easy way
  6. +
+

Who is cxcli for?

+

cxcli is primarily for software engineering teams who are currently using Dialogflow CX. It is recommended for machine learning engineers that usually work with STT, TTS, NLU and NLP technologies.

+

What kind of machines/containers do I need for the cxcli?

+

You'll need either: a bare-metal host (your own, AWS i3.metal or Equinix Metal) or a VM that supports nested virtualisation such as those provided by Google Cloud, Azure, AWS DigitalOcean, etc. or a Linux or Windows container.

+

When will Jenkins, GitLab CI, BitBucket Pipeline Runners, Drone or Azure DevOps be supported?

+

For the current phase, we're targeting GitHub Actions because it has fine-grained access controls and the ability to schedule exactly one build to a runner. The other CI systems will be available soon.

+

That said, if you're using these tools within your organisation, we'd like to hear from you. +So feel free to reach out to us if you feel cxcli would be a good fit for your team.

+

Feel free to contact us at: dialogflowcxcli@gmail.com

+

What kind of access is required in my Google Cloud project?

+

Refer to the Authentication page here

+

Can cxcli be used on public repos?

+

Yes, cxcli can be used on public and private repos.

+

What's in the Container image and how is it built?

+

The Container image contains uses alpine:latest and the cxcli installed on it.

+

The image is built automatically using GitHub Actions and is available on a container registry.

+

Is ARM64 supported?

+

Yes, cxcli is built to run on both Intel/AMD and ARM64 hosts. This includes a Raspberry Pi 4B, AWS Graviton, Oracle Cloud ARM instances and potentially any other ARM64 instances that support virtualisation.

+

Are Windows or macOS supported?

+

Yes, in addition to Linux, Windows and macOS are also supported platforms for cxcli at this time on a AMD64 or ARM64 architecture.

+

Is cxcli free and open-source?

+

cxcli is an open source tool, however, it interacts with Google Cloud APIs, so a Google Cloud account is required.

+

The website and documentation are available on GitHub and we plan to release some open source tools in the future for cxcli customers.

+

Is there a risk that we could get "locked-in" to cxcli?

+

No, you can switch back to using either the gcloud CLI tool or the Google Cloud APIs at any time. Keep in mind that cxcli not only solves for a certain set of issues with both of those approaches but also simplifies the interaction with Google Cloud.

+

Why is the brand called "cxcli" and "Dialogflow CX CLI" ?

+

The name of the software is cxcli, in some places "cxcli" is not available, and we liked "Dialogflow CX CLI" because it refers to the what the tool does.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/overview/install/index.html b/overview/install/index.html new file mode 100644 index 00000000..9d252369 --- /dev/null +++ b/overview/install/index.html @@ -0,0 +1,2235 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Install - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Install

+

You can use cxcli by installing a pre-compiled binary (in several ways), using Docker, or compiling it from source. In the below sections, you can find the steps for each approach.

+

Install a pre-compiled binary

+

homebrew tap

+
    +
  1. Add the Homebrew tap: +
    brew tap xavidop/tap git@github.com:xavidop/homebrew-tap.git
    +brew update
    +
  2. +
  3. Install the Dialogflow CX CLI: +
    brew install cxcli
    +
  4. +
+

snapcraft

+
sudo snap install cxcli
+
+

scoop

+
scoop bucket add cxcli https://github.com/xavidop/scoop-bucket.git
+scoop install cxcli
+
+

apt

+
echo 'deb [trusted=yes] https://apt.fury.io/xavidop/ /' | sudo tee /etc/apt/sources.list.d/cxcli.list
+sudo apt update
+sudo apt install cxcli
+
+

yum

+
echo '[cxcli]
+name=Dialogflow CX CLI Repo
+baseurl=https://yum.fury.io/xavidop/
+enabled=1
+gpgcheck=0' | sudo tee /etc/yum.repos.d/cxcli.repo
+sudo yum install cxcli
+
+

aur

+
yay -S cxcli-bin
+
+

nix

+

nixpkgs

+
nix-env -iA cxcli
+
+
+

Info

+

The package in nixpkgs +might be slightly outdated, as it is not updated automatically. +Use our NUR to always get the latest updates.

+
+

nur

+

First, you'll need to add our NUR to your nix configuration. +You can follow the guides +here.

+

Once you do that, you can install the packages.

+
{ pkgs, lib, ... }: {
+    home.packages = with pkgs; [
+    nur.repos.xavidop.cxcli
+    ];
+}
+
+

deb, rpm and apk packages

+

Download the .deb, .rpm or .apk packages from the OSS releases page and install them with the appropriate tools.

+

go install

+
go install github.com/xavidop/dialogflow-cx-cli@latest
+
+

bash script

+
curl -sfL https://cxcli.xavidop.me/static/run | bash
+
+

Additional Options

+

You can also set the VERSION variable to specify +a version instead of using latest.

+

You can also pass flags and args to cxcli:

+
curl -sfL https://cxcli.xavidop.me/static/run |
+    VERSION=__VERSION__ bash -s -- version
+
+
+

Tip

+

This script does not install anything, it just downloads, verifies and +runs cxcli. +Its purpose is to be used within scripts and CIs.

+
+

manually

+

Download the pre-compiled binaries from the releases page and copy them to the desired location.

+

Verifying the artifacts

+

binaries

+

All artifacts are checksummed, and the checksum file is signed with cosign.

+
    +
  1. Download the files you want along with the checksums.txt, checksum.txt.pem, and checksums.txt.sig files from the releases page: +
    wget https://github.com/xavidop/dialogflow-cx-cli/releases/download/__VERSION__/checksums.txt
    +wget https://github.com/xavidop/dialogflow-cx-cli/releases/download/__VERSION__/checksums.txt.sig
    +wget https://github.com/xavidop/dialogflow-cx-cli/releases/download/__VERSION__/checksums.txt.pem
    +
  2. +
  3. Verify the signature: +
    COSIGN_EXPERIMENTAL=1 cosign verify-blob \
    +--cert checksums.txt.pem \
    +--signature checksums.txt.sig \
    +checksums.txt
    +
  4. +
  5. If the signature is valid, you can then verify the SHA256 sums match with the downloaded binary: +
    sha256sum --ignore-missing -c checksums.txt
    +
  6. +
+

docker images

+

Our Docker images are signed with cosign.

+

Verify the signatures:

+
COSIGN_EXPERIMENTAL=1 cosign verify xavidop/cxcli
+
+
+

Info

+

The .pem and .sig files are the image name:tag, replacing / and : with -.

+
+

Running with Docker

+

You can also use cxcli within a Docker container. +To do that, you'll need to execute something more-or-less like the examples below.

+

Registries:

+ +

Example usage:

+
docker run --rm \
+    xavidop/cxcli cxcli version
+
+

Note that the image will almost always have the last stable Go version.

+

If you need other packages and dependencies, you are encouraged to keep your own image. You can +always use cxcli's own Dockerfile as a starting point and iterate on that.

+

Compiling from source

+

Here you have two options:

+

If you want to contribute to the project, please follow the +steps on our contributing guide.

+

If you just want to build from source for whatever reason, follow these steps:

+

clone:

+
git clone https://github.com/xavidop/dialogflow-cx-cli
+cd dialogflow-cx-cli
+
+

get the dependencies:

+
go mod tidy
+
+

build:

+
go build -o cxcli .
+
+

verify that it works:

+
./cxcli version
+
+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/overview/roadmap/index.html b/overview/roadmap/index.html new file mode 100644 index 00000000..7ff8f037 --- /dev/null +++ b/overview/roadmap/index.html @@ -0,0 +1,1759 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Roadmap - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Roadmap

+

cxcli is in active development. The core product is functioning.

+

Our goal with the tool is to prove that there's market fit for a solution like this, and if so, we'll invest more time in automation, user experience, more features.

+

For now, if you're interested in participating and giving feedback, we believe cxcli already solves pain at this stage.

+

Shipped:

+
    +
  • Available in homebrew, snapcraft, apt, yum, scoop, aur package managers
  • +
  • Documentation updated
  • +
  • Profile NLU
  • +
  • Speech-to-text and Text-to-speech actions
  • +
  • Container image available for multiple architectures
  • +
  • SBOM files created
  • +
  • Artifacts uploaded, signed and available on GitHub
  • +
+

Coming soon:

+
    +
  • Continuous integration support (GitHub Action, CircleCI, etc.)
  • +
  • Flow import and export
  • +
  • Dialog from the terminal
  • +
  • More Agent actions (validate)
  • +
  • Pages Action (crate, update, delete)
  • +
  • Test Cases actions (export, import, run, run-all)
  • +
  • Changelog actions (show)
  • +
  • Experiment Actions - TBD
  • +
+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/search/search_index.json b/search/search_index.json new file mode 100644 index 00000000..db80085f --- /dev/null +++ b/search/search_index.json @@ -0,0 +1 @@ +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Dialogflow CX CLI","text":"

cxcli is a command-line tool that helps Dialogflow CX users test their agents and interact with them in various ways. It is useful for your day-to-day tasks or if you want to integrate it with your favorite CI tool.

This CLI also allows you to interact with the text-to-speech and speech-to text APIs in Google Cloud.

"},{"location":"#get-started","title":"Get started","text":"
  • How to install the tool
  • Authentication
  • Read the FAQ
"},{"location":"#got-questions-comments-or-suggestions","title":"Got questions, comments or suggestions?","text":"

cxcli is developed by xavidop.

You can contact us via email at: dialogflowcxcli@gmail.com.

Follow @dialogflowcxcli on Twitter for updates and announcements.

Visit our links section for more information about staying connected with us.

"},{"location":"ci/","title":"CI","text":"

TBD

"},{"location":"dialog/","title":"Interactive Dialog","text":"

The cxcli tool has command that allows you to interactively play with your agent from your terminal!

"},{"location":"dialog/#usage","title":"Usage","text":"

You can find the dialog functionality within the cxcli dialog subcommand. You can read the documentation about this command here.

"},{"location":"dialog/#parameters","title":"Parameters","text":"

These are the relevant parameters that you can use to interact with your agent interactively from your terminal:

  1. locale: this parameter accepts all of the locales that are available in Dialogflow CX.
"},{"location":"dialog/#example","title":"Example","text":"

Here is a simple example of the cxcli dialog command:

cxcli dialog --agent-name test-agent --project-id test-cx-346408 --location-id us-central1\n

The above command will give you output similar to the following:

$ cxcli dialog --agent-name test-agent --project-id test-cx-346408 --location-id us-central1\nINFO Please press Ctrl+C whenever you want to stop the interaction. \nUser> hi\nAgent> Hi, this is Information Finder. Which product information do you need?\nUser> sorry, can you repeat\nAgent> I didn't get that.\nAgent> Hi, I am a chatbot that can help you find information about CorpX products: Intelligent Customer Insight, Order Fulfillment, Order Handling, Order Management Suite, Sales Engine, or Supercharge.\nAgent> Do you want to continue looking up information for one of these products? Say yes or no.\nUser> no\nAgent> Goodbye\n

Important

Once the session is finished, you will get the terminal prompt again.

"},{"location":"links/","title":"Links","text":"
  • Follow our progress on the GitHub repository
  • Follow us on Twitter and Mastodon for updates
  • Join our Discord server
  • Read my blog
  • Sign up for my newsletter
  • For questions, support and general discussion, please use Discord or GitHub Discussions
  • Contributing Guidelines
  • Security Policy

This project adheres to the Contributor Covenant code of conduct. By participating, you are expected to uphold this code.

"},{"location":"security/","title":"Security Policy","text":""},{"location":"security/#supported-versions","title":"Supported Versions","text":"

Only the last stable version at any given point.

"},{"location":"security/#reporting-a-vulnerability","title":"Reporting a Vulnerability","text":"

Vulnerabilities can be disclosed via email to dialogflowcxcli@gmail.com

"},{"location":"stt/","title":"Speech-to-text","text":"

The cxcli tool has various commands that allow you to interact with Google Cloud's Speech to Text service using the Cloud Speech-to-text API!

Is this your first time using this feature?

Before you start using this functionality, please, read the authentication page.

"},{"location":"stt/#usage","title":"Usage","text":"

You can find the speech-to-text functionality within the cxcli stt subcommand. You can read the documentation about this command here.

The cxcli stt command has a recognize subcommand. You can find the usage of this command here.

"},{"location":"stt/#parameters","title":"Parameters","text":"

These are the relevant parameters that you can use to interact with Google Cloud STT:

  1. locale: this parameter accepts all of the locales that are available in the Google Cloud Speech-to-text API. You can find all the locales available here.
"},{"location":"stt/#audio-input-file","title":"Audio input file","text":"

It is important to know that the input audio needs to be in the following format:

  1. A sample rate of 16000 Hertz
  2. The audio encoding has to be Linear16. Linear16 is a 16-bit linear pulse-code modulation (PCM) encoding.

If you don't have a file with this format, you can create it by yourself using the cxcli tts command! All of the relevant information is located here.

"},{"location":"stt/#example","title":"Example","text":"

Here is a simple example of the cxcli stt recognize command:

cxcli stt recognize hi.mp3  --locale en-US\n

The above command will give you output similar to the following:

$ cxcli stt recognize hi.mp3 --locale en-US --verbose\nINFO Duration time: 570 miliseconds\nINFO Detections: 1\nINFO 1. Text detected: hi\nINFO 1. Confidence: 79.276474%\n

Are you running this command in a CI/CD pipeline?

If this is the case, we recommend that you set the --output-format parameter to json.

"},{"location":"troubleshooting/","title":"Troubleshooting","text":""},{"location":"troubleshooting/#getting-support","title":"Getting support","text":"

All users have access to a public Discord server for support and collaboration. Refer to the links page for more information.

"},{"location":"troubleshooting/#project-not-found","title":"Project not found","text":"

Make sure that you have configured either the gcloud CLI or the authentication json file properly. You can find more information on the Authentication page.

"},{"location":"troubleshooting/#you-need-to-enable-the-dialogflow-api","title":"You need to enable the Dialogflow API","text":"

You need to enable the Dialogflow API in your Google Cloud project if you want to interact with cxcli. Make sure you have the permissions needed for the tool. You can find more information on the Authentication page.

"},{"location":"troubleshooting/#you-need-to-enable-the-cloud-speech-to-text-api","title":"You need to enable the Cloud Speech-to-text API","text":"

You need to enable the Cloud Speech-to-text API in your Google Cloud project if you want to run the cxcli stt commands. You can find more information on the Authentication page.

"},{"location":"troubleshooting/#you-need-to-enable-the-cloud-text-to-speech-api","title":"You need to enable the Cloud Text-to-speech API","text":"

You need to enable the Cloud Text-to-speech API in your Google Cloud project if you want to run the cxcli tts commands. You can find more information on the Authentication page.

"},{"location":"tts/","title":"Text-to-speech","text":"

The cxcli tool has various commands that allow you to interact with Google Cloud's Text to Speech service using the Cloud Text-to-Speech API!

Is this your first time using this feature?

Before you start using this functionality, please, read the authentication page.

"},{"location":"tts/#usage","title":"Usage","text":"

You can find the text-to-speech functionality within the cxcli tts subcommand. You can read the documentation about this command here.

The cxcli tts command has a synthesize subcommand. You can find the usage of this command here.

"},{"location":"tts/#parameters","title":"Parameters","text":"

These are the relevant parameters that you can use to interact with Google Cloud TTS:

  1. locale: this parameter accepts all of the locales that are available in the Google Cloud Text-to-speech API. You can find all the locales available here.
  2. output-file: MP3 audio file where we are going to output the synthesized text.
"},{"location":"tts/#output","title":"Output","text":"

It is important to know that the output audio will have the following format:

  1. A sample rate of 16000 Hertz
  2. The audio encoding will be Linear16. Linear16 is a 16-bit linear pulse-code modulation (PCM) encoding.
"},{"location":"tts/#example","title":"Example","text":"

Here is a simple example of the cxcli tts synthesize command:

cxcli tts synthesize hi --locale en-US --output-file hi.mp3\n

The above command will give you an audio file similar to the following:

Your browser does not support the audio element.

You can download the audio file here.

"},{"location":"agents/create/","title":"Create","text":""},{"location":"agents/create/#usage","title":"Usage","text":"

You can find the create functionality within the cxcli agent create subcommand. You can read the documentation about this command here.

The argument to --timezone is a value from the IANA time zone database. This is an example:

America/New_York\nEurope/Madrid\n

"},{"location":"agents/create/#example","title":"Example","text":"

Here is a simple example of the cxcli agent create command:

cxcli agent create test-agent --project-id test-cx-346408 --location-id us-central1 --locale en --timezone Europe/Madrid\n

The above command will give you output similar to the following:

$ cxcli agent create test-agent --project-id test-cx-346408 --location-id us-central1 --locale en --timezone Europe/Madrid\nINFO Agent created with id: projects/test-cx-346408/locations/us-central1/agents/e2ae2503-f38c-46a1-a3bf-22e57617baf0\n
"},{"location":"agents/create/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX Agent creation, refer to the official documentation.

"},{"location":"agents/delete/","title":"Delete","text":""},{"location":"agents/delete/#usage","title":"Usage","text":"

You can find the delete functionality within the cxcli agent delete subcommand. You can read the documentation about this command here.

"},{"location":"agents/delete/#example","title":"Example","text":"

Here is a simple example of the cxcli agent delete command:

cxcli agent delete test-agent --project-id test-cx-346408 --location-id us-central1\n

The above command will give you output similar to the following:

$ cxcli agent delete test-agent --project-id test-cx-346408 --location-id us-central1\nINFO Agent deleted\n
"},{"location":"agents/delete/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX Agent deletion, refer to the official documentation.

"},{"location":"agents/export/","title":"Export","text":""},{"location":"agents/export/#usage","title":"Usage","text":"

You can find the export functionality within the cxcli agent export subcommand. You can read the documentation about this command here.

Exported file format

You can export your agent in blob or json format. When you choose json format, the output file is going to be a zip file.

"},{"location":"agents/export/#example","title":"Example","text":"

Here is a simple example of the cxcli agent export command:

cxcli agent export test-agent --project-id test-cx-346408 --location-id us-central1 --export-format blob\n

The above command will give you output similar to the following:

$ cxcli agent export test-agent --project-id test-cx-346408 --location-id us-central1 --export-format json --output-file agent.zip\nINFO Agent exported to file: agent.zip\n

are you running this command in a CI/CD pipeline?

If this is the case, we recommend that you set the --output-format parameter to json.

"},{"location":"agents/export/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX exports, refer to the official documentation.

"},{"location":"agents/introduction/","title":"Agents","text":""},{"location":"agents/introduction/#what-is-this","title":"What is this?","text":"

An agent in Dialogflow CX is the entity that handles all the conversations that we have defined on the Dialogflow CX console with the end users.

An agent is basically an assistant that will manage the state of each user's conversation when the end users are interacting with the agent through text or audio in multiple channels.

With cxcli, you can easily interact with your Dialogflow CX agents.

All of the commands that are available in cxcli to interact with your agents are located within the cxcli agent subcommand.

"},{"location":"agents/introduction/#create","title":"Create","text":"

You can create an agent using this tool.

The cxcli has a command that allows you to create an agent. You can find a more detailed explanation here

"},{"location":"agents/introduction/#update","title":"Update","text":"

You can update an agent using this cli.

The cxcli has a command that allows you to update an agent. You can find a more detailed explanation here

"},{"location":"agents/introduction/#delete","title":"Delete","text":"

The cxcli has a command that allows you to delete your agent. You can find a more detailed explanation here

"},{"location":"agents/introduction/#restore","title":"Restore","text":"

You can restore an agent using a blob or a json-package file. Right now the Dialogflow CX API, used by the cxcli, works with the blob and json format.

The cxcli has a command that allows you to restore an agent. You can find a more detailed explanation here

"},{"location":"agents/introduction/#export","title":"Export","text":"

An agent can be exported as a blob or a json-package file. Right now the Dialogflow CX API, used by the cxcli, works with the blob and json format.

The cxcli has a command that allows you to export your agent. You can find a more detailed explanation here

"},{"location":"agents/introduction/#useful-links","title":"Useful Links","text":"

If you want to see the full usage of the cxcli agent command, please refer to this page.

If you want to learn more about Dialogflow CX agents, refer to the official documentation.

"},{"location":"agents/restore/","title":"Restore","text":""},{"location":"agents/restore/#usage","title":"Usage","text":"

You can find the restore functionality within the cxcli agent restore subcommand. You can read the documentation about this command here.

File format to be restored

Now you can restore your agents in blob or json format. When you choose json format, the input file has to be a zip file with a proper Dialogflow CX structure.

"},{"location":"agents/restore/#example","title":"Example","text":"

Here is a simple example of the cxcli agent restore command:

cxcli agent restore test-agent --project-id test-cx-346408 --location-id us-central1 --input agent.blob\n

The above command will give you output similar to the following:

$ cxcli agent restore test-agent --project-id test-cx-346408 --location-id us-central1 --input agent.zip\nINFO Agent restored\n

Are you running this command in a CI/CD pipeline?

If this is the case, we recommend that you set the --output-format parameter to json.

"},{"location":"agents/restore/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX restores, refer to the official documentation.

"},{"location":"agents/update/","title":"Update","text":""},{"location":"agents/update/#usage","title":"Usage","text":"

You can find the update functionality within the cxcli agent update subcommand. You can read the documentation about this command here.

The argument to --timezone is a value from the IANA time zone database. This is an example:

America/New_York\nEurope/Madrid\n

"},{"location":"agents/update/#example","title":"Example","text":"

Here is a simple example of the cxcli agent update command:

cxcli agent update test-agent --project-id test-cx-346408 --location-id us-central1 --locale en --timezone Europe/Madrid\n

The above command will give you output similar to the following:

$ cxcli agent update test-agent --project-id test-cx-346408 --location-id us-central1 --locale en --timezone Europe/Madrid\nINFO Agent updated\n
"},{"location":"agents/update/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX Agent update, refer to the official documentation.

"},{"location":"cmd/cxcli/","title":"cxcli","text":"

Dialogflow CX CLI

"},{"location":"cmd/cxcli/#synopsis","title":"Synopsis","text":"

Welcome to cxcli!

This utility provides you with an easy way to interact with your Dialogflow CX agents.

You can find the documentation at https://github.com/xavidop/dialogflow-cx-cli.

Please file all bug reports on GitHub at https://github.com/xavidop/dialogflow-cx-cli/issues.

cxcli [flags]\n
"},{"location":"cmd/cxcli/#options","title":"Options","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -h, --help                   help for cxcli\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli/#see-also","title":"See also","text":"
  • cxcli agent - Actions on agent commands
  • cxcli completion - Generate the autocompletion script for the specified shell
  • cxcli dialog - Test your CX Agent interactively directly from your terminal
  • cxcli entity-type - Actions on entity type commands
  • cxcli environment - Actions on environment
  • cxcli flow - Actions on flow commands
  • cxcli flow-version - Actions on flow versions commands
  • cxcli intent - Actions on intent commands
  • cxcli jsonschema - outputs cxcli's JSON schema
  • cxcli profile-nlu - Actions on testing
  • cxcli stt - Actions on speech-to-text commands
  • cxcli tts - Actions on text-to-speech commands
  • cxcli version - Get cxcli version
  • cxcli webhook - Actions on webhook commands
"},{"location":"cmd/cxcli_agent/","title":"cxcli agent","text":"

Actions on agent commands

cxcli agent [flags]\n
"},{"location":"cmd/cxcli_agent/#options","title":"Options","text":"
  -h, --help   help for agent\n
"},{"location":"cmd/cxcli_agent/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_agent/#see-also","title":"See also","text":"
  • cxcli - Dialogflow CX CLI
  • cxcli agent create - Creates an agent
  • cxcli agent delete - Deletes a specific agent
  • cxcli agent export - Executes an export for a specific agent
  • cxcli agent restore - Executes a restore action for a specific agent
  • cxcli agent update - Update an agent
"},{"location":"cmd/cxcli_agent_create/","title":"cxcli agent create","text":"

Creates an agent

cxcli agent create [agent-name] [flags]\n
"},{"location":"cmd/cxcli_agent_create/#options","title":"Options","text":"
  -r, --avatar-uri string                   Avatar URI of the agent (optional)\n  -d, --description string                  Description of the agent (optional)\n  -b, --enable-interaction-logging string   Enable interaction logging for this agent. Possible values: true or false (optional)\n  -s, --enable-speech-adaptation string     Enable speech adaptation for this agent. Possible values: true or false (optional)\n  -n, --enable-spell-correction string      Enable spell correction for this agent. Possible values: true or false (optional)\n  -a, --enable-stackdriver-logging string   Enable Google Stackdriver logging for this agent. Possible values: true or false (optional)\n  -h, --help                                help for create\n  -e, --locale string                       Default locale of the agent (required)\n  -l, --location-id string                  Dialogflow CX Location ID of the Project (required)\n  -p, --project-id string                   Dialogflow CX Project ID (required)\n  -x, --supported-locales strings           Supported locales of the agent, comma separated. Example: fr,es,de (optional)\n  -t, --timezone string                     Timezone of the agent from the time zone database https://www.iana.org/time-zones. Example: America/New_York, Europe/Madrid (required)\n
"},{"location":"cmd/cxcli_agent_create/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_agent_create/#see-also","title":"See also","text":"
  • cxcli agent - Actions on agent commands
"},{"location":"cmd/cxcli_agent_delete/","title":"cxcli agent delete","text":"

Deletes a specific agent

cxcli agent delete [agent-name] [flags]\n
"},{"location":"cmd/cxcli_agent_delete/#options","title":"Options","text":"
  -h, --help                 help for delete\n  -l, --location-id string   Dialogflow CX Location ID of the Project (required)\n  -p, --project-id string    Dialogflow CX Project ID (required)\n
"},{"location":"cmd/cxcli_agent_delete/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_agent_delete/#see-also","title":"See also","text":"
  • cxcli agent - Actions on agent commands
"},{"location":"cmd/cxcli_agent_export/","title":"cxcli agent export","text":"

Executes an export for a specific agent

cxcli agent export [agent-name] [flags]\n
"},{"location":"cmd/cxcli_agent_export/#options","title":"Options","text":"
  -t, --export-format string   Export format type: json or blob. blob by default. Default: blob (optional) (default \"blob\")\n  -h, --help                   help for export\n  -l, --location-id string     Dialogflow CX Location ID of the Project (required)\n  -f, --output-file string     Output file name. Default: agent.blob (optional) (default \"agent.blob\")\n  -p, --project-id string      Dialogflow CX Project ID (required)\n
"},{"location":"cmd/cxcli_agent_export/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_agent_export/#see-also","title":"See also","text":"
  • cxcli agent - Actions on agent commands
"},{"location":"cmd/cxcli_agent_restore/","title":"cxcli agent restore","text":"

Executes a restore action for a specific agent

cxcli agent restore [agent-name] [flags]\n
"},{"location":"cmd/cxcli_agent_restore/#options","title":"Options","text":"
  -h, --help                 help for restore\n  -i, --input string         Input file name. Default: agent.blob (optional) (default \"agent.blob\")\n  -l, --location-id string   Dialogflow CX Location ID of the Project (required)\n  -p, --project-id string    Dialogflow CX Project ID (required)\n
"},{"location":"cmd/cxcli_agent_restore/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_agent_restore/#see-also","title":"See also","text":"
  • cxcli agent - Actions on agent commands
"},{"location":"cmd/cxcli_agent_update/","title":"cxcli agent update","text":"

Update an agent

cxcli agent update [agent-name] [flags]\n
"},{"location":"cmd/cxcli_agent_update/#options","title":"Options","text":"
  -r, --avatar-uri string                   Avatar URI of the agent (optional)\n  -d, --description string                  Description of the agent (optional)\n  -b, --enable-interaction-logging string   Enable interaction logging for this agent. Possible values: true or false (optional)\n  -s, --enable-speech-adaptation string     Enable speech adaptation for this agent. Possible values: true or false (optional)\n  -n, --enable-spell-correction string      Enable spell correction for this agent. Possible values: true or false (optional)\n  -a, --enable-stackdriver-logging string   Enable Google Stackdriver logging for this agent. Possible values: true or false (optional)\n  -h, --help                                help for update\n  -l, --location-id string                  Dialogflow CX Location ID of the Project (required)\n  -p, --project-id string                   Dialogflow CX Project ID (required)\n  -x, --supported-locales strings           Supported locales of the agent, comma separated. Example: fr,es,de (optional)\n  -t, --timezone string                     Timezone of the agent from the time zone database https://www.iana.org/time-zones. Example: America/New_York, Europe/Madrid (optional)\n
"},{"location":"cmd/cxcli_agent_update/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_agent_update/#see-also","title":"See also","text":"
  • cxcli agent - Actions on agent commands
"},{"location":"cmd/cxcli_completion/","title":"cxcli completion","text":"

Generate the autocompletion script for the specified shell

"},{"location":"cmd/cxcli_completion/#synopsis","title":"Synopsis","text":"

Generate the autocompletion script for cxcli for the specified shell. See each sub-command's help for details on how to use the generated script.

"},{"location":"cmd/cxcli_completion/#options","title":"Options","text":"
  -h, --help   help for completion\n
"},{"location":"cmd/cxcli_completion/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_completion/#see-also","title":"See also","text":"
  • cxcli - Dialogflow CX CLI
  • cxcli completion bash - Generate the autocompletion script for bash
  • cxcli completion fish - Generate the autocompletion script for fish
  • cxcli completion powershell - Generate the autocompletion script for powershell
  • cxcli completion zsh - Generate the autocompletion script for zsh
"},{"location":"cmd/cxcli_completion_bash/","title":"cxcli completion bash","text":"

Generate the autocompletion script for bash

"},{"location":"cmd/cxcli_completion_bash/#synopsis","title":"Synopsis","text":"

Generate the autocompletion script for the bash shell.

This script depends on the 'bash-completion' package. If it is not installed already, you can install it via your OS's package manager.

To load completions in your current shell session:

source <(cxcli completion bash)\n

To load completions for every new session, execute once:

"},{"location":"cmd/cxcli_completion_bash/#linux","title":"Linux:","text":"
cxcli completion bash > /etc/bash_completion.d/cxcli\n
"},{"location":"cmd/cxcli_completion_bash/#macos","title":"macOS:","text":"
cxcli completion bash > $(brew --prefix)/etc/bash_completion.d/cxcli\n

You will need to start a new shell for this setup to take effect.

cxcli completion bash\n
"},{"location":"cmd/cxcli_completion_bash/#options","title":"Options","text":"
  -h, --help              help for bash\n      --no-descriptions   disable completion descriptions\n
"},{"location":"cmd/cxcli_completion_bash/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_completion_bash/#see-also","title":"See also","text":"
  • cxcli completion - Generate the autocompletion script for the specified shell
"},{"location":"cmd/cxcli_completion_fish/","title":"cxcli completion fish","text":"

Generate the autocompletion script for fish

"},{"location":"cmd/cxcli_completion_fish/#synopsis","title":"Synopsis","text":"

Generate the autocompletion script for the fish shell.

To load completions in your current shell session:

cxcli completion fish | source\n

To load completions for every new session, execute once:

cxcli completion fish > ~/.config/fish/completions/cxcli.fish\n

You will need to start a new shell for this setup to take effect.

cxcli completion fish [flags]\n
"},{"location":"cmd/cxcli_completion_fish/#options","title":"Options","text":"
  -h, --help              help for fish\n      --no-descriptions   disable completion descriptions\n
"},{"location":"cmd/cxcli_completion_fish/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_completion_fish/#see-also","title":"See also","text":"
  • cxcli completion - Generate the autocompletion script for the specified shell
"},{"location":"cmd/cxcli_completion_powershell/","title":"cxcli completion powershell","text":"

Generate the autocompletion script for powershell

"},{"location":"cmd/cxcli_completion_powershell/#synopsis","title":"Synopsis","text":"

Generate the autocompletion script for powershell.

To load completions in your current shell session:

cxcli completion powershell | Out-String | Invoke-Expression\n

To load completions for every new session, add the output of the above command to your powershell profile.

cxcli completion powershell [flags]\n
"},{"location":"cmd/cxcli_completion_powershell/#options","title":"Options","text":"
  -h, --help              help for powershell\n      --no-descriptions   disable completion descriptions\n
"},{"location":"cmd/cxcli_completion_powershell/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_completion_powershell/#see-also","title":"See also","text":"
  • cxcli completion - Generate the autocompletion script for the specified shell
"},{"location":"cmd/cxcli_completion_zsh/","title":"cxcli completion zsh","text":"

Generate the autocompletion script for zsh

"},{"location":"cmd/cxcli_completion_zsh/#synopsis","title":"Synopsis","text":"

Generate the autocompletion script for the zsh shell.

If shell completion is not already enabled in your environment you will need to enable it. You can execute the following once:

echo \"autoload -U compinit; compinit\" >> ~/.zshrc\n

To load completions in your current shell session:

source <(cxcli completion zsh)\n

To load completions for every new session, execute once:

"},{"location":"cmd/cxcli_completion_zsh/#linux","title":"Linux:","text":"
cxcli completion zsh > \"${fpath[1]}/_cxcli\"\n
"},{"location":"cmd/cxcli_completion_zsh/#macos","title":"macOS:","text":"
cxcli completion zsh > $(brew --prefix)/share/zsh/site-functions/_cxcli\n

You will need to start a new shell for this setup to take effect.

cxcli completion zsh [flags]\n
"},{"location":"cmd/cxcli_completion_zsh/#options","title":"Options","text":"
  -h, --help              help for zsh\n      --no-descriptions   disable completion descriptions\n
"},{"location":"cmd/cxcli_completion_zsh/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_completion_zsh/#see-also","title":"See also","text":"
  • cxcli completion - Generate the autocompletion script for the specified shell
"},{"location":"cmd/cxcli_dialog/","title":"cxcli dialog","text":"

Test your CX Agent interactively directly from your terminal

cxcli dialog [flags]\n
"},{"location":"cmd/cxcli_dialog/#options","title":"Options","text":"
  -a, --agent-name string    Dialogflow CX Agent Name (required)\n  -h, --help                 help for dialog\n  -e, --locale string        Locale of the intent. Default: agent locale (optional)\n  -l, --location-id string   Dialogflow CX Location ID of the Project (required)\n  -p, --project-id string    Dialogflow CX Project ID (required)\n
"},{"location":"cmd/cxcli_dialog/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_dialog/#see-also","title":"See also","text":"
  • cxcli - Dialogflow CX CLI
"},{"location":"cmd/cxcli_entity-type/","title":"cxcli entity-type","text":"

Actions on entity type commands

cxcli entity-type [flags]\n
"},{"location":"cmd/cxcli_entity-type/#options","title":"Options","text":"
  -h, --help   help for entity-type\n
"},{"location":"cmd/cxcli_entity-type/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_entity-type/#see-also","title":"See also","text":"
  • cxcli - Dialogflow CX CLI
  • cxcli entity-type create - Creates an entity type in an agent
  • cxcli entity-type delete - Deletes an entity type in an agent
  • cxcli entity-type update - Updates an entity type in an agent
"},{"location":"cmd/cxcli_entity-type_create/","title":"cxcli entity-type create","text":"

Creates an entity type in an agent

cxcli entity-type create [entity-type-name] [flags]\n
"},{"location":"cmd/cxcli_entity-type_create/#options","title":"Options","text":"
  -a, --agent-name string    Dialogflow CX Agent Name (required)\n  -n, --entities strings     List of the entities for this entity type, comma separated. Format: entity1@synonym1|synonym2,entity2@synonym1|synonym2. Example: pikachu@25|pika,charmander@3 (required)\n  -h, --help                 help for create\n  -e, --locale string        Locale of the intent. Default: agent locale (optional)\n  -l, --location-id string   Dialogflow CX Location ID of the Project (required)\n  -p, --project-id string    Dialogflow CX Project ID (required)\n  -r, --redacted string      Set the entity type as redacted. Possible values: true or false (optional)\n
"},{"location":"cmd/cxcli_entity-type_create/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_entity-type_create/#see-also","title":"See also","text":"
  • cxcli entity-type - Actions on entity type commands
"},{"location":"cmd/cxcli_entity-type_delete/","title":"cxcli entity-type delete","text":"

Deletes an entity type in an agent

cxcli entity-type delete [entity-type-name] [flags]\n
"},{"location":"cmd/cxcli_entity-type_delete/#options","title":"Options","text":"
  -a, --agent-name string    Dialogflow CX Agent Name (required)\n  -f, --force string         Forces to delete the Entity type. NOTE: it will delete all any references to the entity type. Possible values: true or false (optional)\n  -h, --help                 help for delete\n  -l, --location-id string   Dialogflow CX Location ID of the Project (required)\n  -p, --project-id string    Dialogflow CX Project ID (required)\n
"},{"location":"cmd/cxcli_entity-type_delete/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_entity-type_delete/#see-also","title":"See also","text":"
  • cxcli entity-type - Actions on entity type commands
"},{"location":"cmd/cxcli_entity-type_update/","title":"cxcli entity-type update","text":"

Updates an entity type in an agent

cxcli entity-type update [entity-type-name] [flags]\n
"},{"location":"cmd/cxcli_entity-type_update/#options","title":"Options","text":"
  -a, --agent-name string    Dialogflow CX Agent Name (required)\n  -n, --entities strings     List of the entities for this entity type, comma separated. Format: entity1@synonym1|synonym2,entity2@synonym1|synonym2. Example: pikachu@25|pika,charmander@3 (required)\n  -h, --help                 help for update\n  -e, --locale string        Locale of the intent. Default: agent locale (optional)\n  -l, --location-id string   Dialogflow CX Location ID of the Project (required)\n  -p, --project-id string    Dialogflow CX Project ID (required)\n  -r, --redacted string      Set the entity type as redacted. Possible values: true or false (optional)\n
"},{"location":"cmd/cxcli_entity-type_update/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_entity-type_update/#see-also","title":"See also","text":"
  • cxcli entity-type - Actions on entity type commands
"},{"location":"cmd/cxcli_environment/","title":"cxcli environment","text":"

Actions on environment

cxcli environment [flags]\n
"},{"location":"cmd/cxcli_environment/#options","title":"Options","text":"
  -h, --help   help for environment\n
"},{"location":"cmd/cxcli_environment/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_environment/#see-also","title":"See also","text":"
  • cxcli - Dialogflow CX CLI
  • cxcli environment create - create an environment
  • cxcli environment delete - delete an environment
  • cxcli environment execute-cicd - Executes a CI/CD pipeline for a specific environment
  • cxcli environment update - update an environment
"},{"location":"cmd/cxcli_environment_create/","title":"cxcli environment create","text":"

create an environment

cxcli environment create [name] [flags]\n
"},{"location":"cmd/cxcli_environment_create/#options","title":"Options","text":"
  -a, --agent-name string       Dialogflow CX Agent Name (required)\n  -d, --description string      Description for this environment (optional)\n  -s, --flow-versions strings   List of Flow and its version to be added to this environment, comma separated. Format: flowName1@version1,flowName2|version2. Example: Default Start Flow@v1.0.0|Buy Flow@v1.0.1 (required)\n  -h, --help                    help for create\n  -l, --location-id string      Dialogflow CX Location ID of the Project (required)\n  -p, --project-id string       Dialogflow CX Project ID (required)\n
"},{"location":"cmd/cxcli_environment_create/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_environment_create/#see-also","title":"See also","text":"
  • cxcli environment - Actions on environment
"},{"location":"cmd/cxcli_environment_delete/","title":"cxcli environment delete","text":"

delete an environment

cxcli environment delete [name] [flags]\n
"},{"location":"cmd/cxcli_environment_delete/#options","title":"Options","text":"
  -a, --agent-name string    Dialogflow CX Agent Name (required)\n  -h, --help                 help for delete\n  -l, --location-id string   Dialogflow CX Location ID of the Project (required)\n  -p, --project-id string    Dialogflow CX Project ID (required)\n
"},{"location":"cmd/cxcli_environment_delete/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_environment_delete/#see-also","title":"See also","text":"
  • cxcli environment - Actions on environment
"},{"location":"cmd/cxcli_environment_execute-cicd/","title":"cxcli environment execute-cicd","text":"

Executes a CI/CD pipeline for a specific environment

cxcli environment execute-cicd [environment] [flags]\n
"},{"location":"cmd/cxcli_environment_execute-cicd/#options","title":"Options","text":"
  -a, --agent-name string    Dialogflow CX Agent Name (required)\n  -h, --help                 help for execute-cicd\n  -l, --location-id string   Dialogflow CX Location ID of the Project (required)\n  -p, --project-id string    Dialogflow CX Project ID (required)\n
"},{"location":"cmd/cxcli_environment_execute-cicd/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_environment_execute-cicd/#see-also","title":"See also","text":"
  • cxcli environment - Actions on environment
"},{"location":"cmd/cxcli_environment_update/","title":"cxcli environment update","text":"

update an environment

cxcli environment update [name] [flags]\n
"},{"location":"cmd/cxcli_environment_update/#options","title":"Options","text":"
  -a, --agent-name string       Dialogflow CX Agent Name (required)\n  -d, --description string      Description for this environment (optional)\n  -s, --flow-versions strings   List of Flow and its version to be added to this environment, comma separated. Format: flowName1@version1,flowName2|version2. Example: Default Start Flow@v1.0.0|Buy Flow@v1.0.1 (required)\n  -h, --help                    help for update\n  -l, --location-id string      Dialogflow CX Location ID of the Project (required)\n  -p, --project-id string       Dialogflow CX Project ID (required)\n
"},{"location":"cmd/cxcli_environment_update/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_environment_update/#see-also","title":"See also","text":"
  • cxcli environment - Actions on environment
"},{"location":"cmd/cxcli_flow-version/","title":"cxcli flow-version","text":"

Actions on flow versions commands

cxcli flow-version [flags]\n
"},{"location":"cmd/cxcli_flow-version/#options","title":"Options","text":"
  -h, --help   help for flow-version\n
"},{"location":"cmd/cxcli_flow-version/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_flow-version/#see-also","title":"See also","text":"
  • cxcli - Dialogflow CX CLI
  • cxcli flow-version create - create a version
  • cxcli flow-version delete - delete a version
  • cxcli flow-version update - update a version
"},{"location":"cmd/cxcli_flow-version_create/","title":"cxcli flow-version create","text":"

create a version

cxcli flow-version create [name] [flags]\n
"},{"location":"cmd/cxcli_flow-version_create/#options","title":"Options","text":"
  -a, --agent-name string    Dialogflow CX Agent Name (required)\n  -d, --description string   Description for this version (optional)\n  -h, --help                 help for create\n  -l, --location-id string   Dialogflow CX Location ID of the Project (required)\n  -p, --project-id string    Dialogflow CX Project ID (required)\n  -s, --start-flow string    Start Flow name to create the version (required)\n
"},{"location":"cmd/cxcli_flow-version_create/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_flow-version_create/#see-also","title":"See also","text":"
  • cxcli flow-version - Actions on flow versions commands
"},{"location":"cmd/cxcli_flow-version_delete/","title":"cxcli flow-version delete","text":"

delete a version

cxcli flow-version delete [name] [flags]\n
"},{"location":"cmd/cxcli_flow-version_delete/#options","title":"Options","text":"
  -a, --agent-name string    Dialogflow CX Agent Name (required)\n  -h, --help                 help for delete\n  -l, --location-id string   Dialogflow CX Location ID of the Project (required)\n  -p, --project-id string    Dialogflow CX Project ID (required)\n  -s, --start-flow string    Start Flow name to create the version (required)\n
"},{"location":"cmd/cxcli_flow-version_delete/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_flow-version_delete/#see-also","title":"See also","text":"
  • cxcli flow-version - Actions on flow versions commands
"},{"location":"cmd/cxcli_flow-version_update/","title":"cxcli flow-version update","text":"

update a version

cxcli flow-version update [name] [flags]\n
"},{"location":"cmd/cxcli_flow-version_update/#options","title":"Options","text":"
  -a, --agent-name string    Dialogflow CX Agent Name (required)\n  -d, --description string   Description for this version (optional)\n  -h, --help                 help for update\n  -l, --location-id string   Dialogflow CX Location ID of the Project (required)\n  -p, --project-id string    Dialogflow CX Project ID (required)\n  -s, --start-flow string    Start Flow name to create the version (required)\n
"},{"location":"cmd/cxcli_flow-version_update/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_flow-version_update/#see-also","title":"See also","text":"
  • cxcli flow-version - Actions on flow versions commands
"},{"location":"cmd/cxcli_flow/","title":"cxcli flow","text":"

Actions on flow commands

cxcli flow [flags]\n
"},{"location":"cmd/cxcli_flow/#options","title":"Options","text":"
  -h, --help   help for flow\n
"},{"location":"cmd/cxcli_flow/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_flow/#see-also","title":"See also","text":"
  • cxcli - Dialogflow CX CLI
  • cxcli flow create - Creates a flow in an agent
  • cxcli flow delete - Deletes a flow in an agent
  • cxcli flow train - Trains a flow in an agent. If flow name is set to \"all\", it will train all flows in an agent
  • cxcli flow update - Updates a flow in an agent
"},{"location":"cmd/cxcli_flow_create/","title":"cxcli flow create","text":"

Creates a flow in an agent

cxcli flow create [flow-name] [flags]\n
"},{"location":"cmd/cxcli_flow_create/#options","title":"Options","text":"
  -a, --agent-name string                     Dialogflow CX Agent Name (required)\n  -d, --description string                    Description for this flow (optional)\n  -h, --help                                  help for create\n  -e, --locale string                         Locale of the flow. Default: agent locale (optional)\n  -l, --location-id string                    Dialogflow CX Location ID of the Project (required)\n  -s, --nlu-classification-threshold string   NLU Classification Threshold. From 0.0 (completely uncertain) to 1.0 (completely certain). Default: 0.3 (optional) (default \"0.3\")\n  -t, --nlu-model-training-mode string        NLU Model training mode. Possible values: automatic or manual. Default: manual (optional) (default \"manual\")\n  -m, --nlu-model-type string                 NLU Model Type. Possible values: advanced or standard. Default: standard (optional) (default \"standard\")\n  -p, --project-id string                     Dialogflow CX Project ID (required)\n
"},{"location":"cmd/cxcli_flow_create/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_flow_create/#see-also","title":"See also","text":"
  • cxcli flow - Actions on flow commands
"},{"location":"cmd/cxcli_flow_delete/","title":"cxcli flow delete","text":"

Deletes a flow in an agent

cxcli flow delete [flow-name] [flags]\n
"},{"location":"cmd/cxcli_flow_delete/#options","title":"Options","text":"
  -a, --agent-name string    Dialogflow CX Agent Name (required)\n  -h, --help                 help for delete\n  -l, --location-id string   Dialogflow CX Location ID of the Project (required)\n  -p, --project-id string    Dialogflow CX Project ID (required)\n
"},{"location":"cmd/cxcli_flow_delete/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_flow_delete/#see-also","title":"See also","text":"
  • cxcli flow - Actions on flow commands
"},{"location":"cmd/cxcli_flow_train/","title":"cxcli flow train","text":"

Trains a flow in an agent. If flow name is set to \"all\", it will train all flows in an agent

cxcli flow train [flow-name] [flags]\n
"},{"location":"cmd/cxcli_flow_train/#options","title":"Options","text":"
  -a, --agent-name string    Dialogflow CX Agent Name (required)\n  -h, --help                 help for train\n  -l, --location-id string   Dialogflow CX Location ID of the Project (required)\n  -p, --project-id string    Dialogflow CX Project ID (required)\n
"},{"location":"cmd/cxcli_flow_train/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_flow_train/#see-also","title":"See also","text":"
  • cxcli flow - Actions on flow commands
"},{"location":"cmd/cxcli_flow_update/","title":"cxcli flow update","text":"

Updates a flow in an agent

cxcli flow update [flow-name] [flags]\n
"},{"location":"cmd/cxcli_flow_update/#options","title":"Options","text":"
  -a, --agent-name string                     Dialogflow CX Agent Name (required)\n  -d, --description string                    Description for this flow (optional)\n  -h, --help                                  help for update\n  -e, --locale string                         Locale of the flow. Default: agent locale (optional)\n  -l, --location-id string                    Dialogflow CX Location ID of the Project (required)\n  -s, --nlu-classification-threshold string   NLU Classification Threshold. From 0.0 (completely uncertain) to 1.0 (completely certain). (optional)\n  -t, --nlu-model-training-mode string        NLU Model training mode. Possible values: automatic or manual (optional)\n  -m, --nlu-model-type string                 NLU Model Type. Possible values: advanced or standard (optional)\n  -p, --project-id string                     Dialogflow CX Project ID (required)\n
"},{"location":"cmd/cxcli_flow_update/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_flow_update/#see-also","title":"See also","text":"
  • cxcli flow - Actions on flow commands
"},{"location":"cmd/cxcli_intent/","title":"cxcli intent","text":"

Actions on intent commands

cxcli intent [flags]\n
"},{"location":"cmd/cxcli_intent/#options","title":"Options","text":"
  -h, --help   help for intent\n
"},{"location":"cmd/cxcli_intent/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_intent/#see-also","title":"See also","text":"
  • cxcli - Dialogflow CX CLI
  • cxcli intent create - Creates an intent in an agent
  • cxcli intent delete - Deletes an intent in an agent
  • cxcli intent update - Updates an intent in an agent
"},{"location":"cmd/cxcli_intent_create/","title":"cxcli intent create","text":"

Creates an intent in an agent

cxcli intent create [intent-name] [flags]\n
"},{"location":"cmd/cxcli_intent_create/#options","title":"Options","text":"
  -a, --agent-name string          Dialogflow CX Agent Name (required)\n  -d, --description string         Description for this intent (optional)\n  -h, --help                       help for create\n  -e, --locale string              Locale of the intent. Default: agent locale (optional)\n  -l, --location-id string         Dialogflow CX Location ID of the Project (required)\n  -p, --project-id string          Dialogflow CX Project ID (required)\n  -t, --training-phrases strings   List of the training phrases for this intent, comma separated. Entities, add @entity-type to the word: word@entity-type in the training phrase. Example: hello,hi how are you today@sys.date,morning!. (required)\n
"},{"location":"cmd/cxcli_intent_create/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_intent_create/#see-also","title":"See also","text":"
  • cxcli intent - Actions on intent commands
"},{"location":"cmd/cxcli_intent_delete/","title":"cxcli intent delete","text":"

Deletes an intent in an agent

cxcli intent delete [intent-name] [flags]\n
"},{"location":"cmd/cxcli_intent_delete/#options","title":"Options","text":"
  -a, --agent-name string    Dialogflow CX Agent Name (required)\n  -h, --help                 help for delete\n  -l, --location-id string   Dialogflow CX Location ID of the Project (required)\n  -p, --project-id string    Dialogflow CX Project ID (required)\n
"},{"location":"cmd/cxcli_intent_delete/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_intent_delete/#see-also","title":"See also","text":"
  • cxcli intent - Actions on intent commands
"},{"location":"cmd/cxcli_intent_update/","title":"cxcli intent update","text":"

Updates an intent in an agent

cxcli intent update [intent-name] [flags]\n
"},{"location":"cmd/cxcli_intent_update/#options","title":"Options","text":"
  -a, --agent-name string          Dialogflow CX Agent Name (required)\n  -d, --description string         Description for this intent (optional)\n  -h, --help                       help for update\n  -e, --locale string              Locale of the intent. Default: agent locale (optional)\n  -l, --location-id string         Dialogflow CX Location ID of the Project (required)\n  -p, --project-id string          Dialogflow CX Project ID (required)\n  -t, --training-phrases strings   List of the training phrases for this intent, comma separated. Entities, add @entity-type to the word: word@entity-type in the training phrase. Example: hello,hi how are you today@sys.date,morning!. (Optional)\n
"},{"location":"cmd/cxcli_intent_update/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_intent_update/#see-also","title":"See also","text":"
  • cxcli intent - Actions on intent commands
"},{"location":"cmd/cxcli_jsonschema/","title":"cxcli jsonschema","text":"

outputs cxcli's JSON schema

cxcli jsonschema [flags]\n
"},{"location":"cmd/cxcli_jsonschema/#options","title":"Options","text":"
  -h, --help                   help for jsonschema\n  -f, --output-folder string   Where to save the JSONSchema file (default \"-\")\n
"},{"location":"cmd/cxcli_jsonschema/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_jsonschema/#see-also","title":"See also","text":"
  • cxcli - Dialogflow CX CLI
"},{"location":"cmd/cxcli_profile-nlu/","title":"cxcli profile-nlu","text":"

Actions on testing

cxcli profile-nlu [flags]\n
"},{"location":"cmd/cxcli_profile-nlu/#options","title":"Options","text":"
  -h, --help   help for profile-nlu\n
"},{"location":"cmd/cxcli_profile-nlu/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_profile-nlu/#see-also","title":"See also","text":"
  • cxcli - Dialogflow CX CLI
  • cxcli profile-nlu execute - Execute a suite
"},{"location":"cmd/cxcli_profile-nlu_execute/","title":"cxcli profile-nlu execute","text":"

Execute a suite

cxcli profile-nlu execute [suite-file] [flags]\n
"},{"location":"cmd/cxcli_profile-nlu_execute/#options","title":"Options","text":"
  -h, --help   help for execute\n
"},{"location":"cmd/cxcli_profile-nlu_execute/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_profile-nlu_execute/#see-also","title":"See also","text":"
  • cxcli profile-nlu - Actions on testing
"},{"location":"cmd/cxcli_stt/","title":"cxcli stt","text":"

Actions on speech-to-text commands

cxcli stt [flags]\n
"},{"location":"cmd/cxcli_stt/#options","title":"Options","text":"
  -h, --help   help for stt\n
"},{"location":"cmd/cxcli_stt/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_stt/#see-also","title":"See also","text":"
  • cxcli - Dialogflow CX CLI
  • cxcli stt recognize - Transforms audio into text
"},{"location":"cmd/cxcli_stt_recognize/","title":"cxcli stt recognize","text":"

Transforms audio into text

cxcli stt recognize [input] [flags]\n
"},{"location":"cmd/cxcli_stt_recognize/#options","title":"Options","text":"
  -h, --help            help for recognize\n  -l, --locale string   Input locale (required)\n
"},{"location":"cmd/cxcli_stt_recognize/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_stt_recognize/#see-also","title":"See also","text":"
  • cxcli stt - Actions on speech-to-text commands
"},{"location":"cmd/cxcli_tts/","title":"cxcli tts","text":"

Actions on text-to-speech commands

cxcli tts [flags]\n
"},{"location":"cmd/cxcli_tts/#options","title":"Options","text":"
  -h, --help   help for tts\n
"},{"location":"cmd/cxcli_tts/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_tts/#see-also","title":"See also","text":"
  • cxcli - Dialogflow CX CLI
  • cxcli tts synthesize - Transforms text into audio
"},{"location":"cmd/cxcli_tts_synthesize/","title":"cxcli tts synthesize","text":"

Transforms text into audio

cxcli tts synthesize [input] [flags]\n
"},{"location":"cmd/cxcli_tts_synthesize/#options","title":"Options","text":"
  -h, --help                 help for synthesize\n  -l, --locale string        Input locale (required)\n  -f, --output-file string   Output file name. Default: output.mp3 (optional) (default \"output.mp3\")\n
"},{"location":"cmd/cxcli_tts_synthesize/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_tts_synthesize/#see-also","title":"See also","text":"
  • cxcli tts - Actions on text-to-speech commands
"},{"location":"cmd/cxcli_version/","title":"cxcli version","text":"

Get cxcli version

cxcli version [flags]\n
"},{"location":"cmd/cxcli_version/#options","title":"Options","text":"
  -h, --help   help for version\n
"},{"location":"cmd/cxcli_version/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_version/#see-also","title":"See also","text":"
  • cxcli - Dialogflow CX CLI
"},{"location":"cmd/cxcli_webhook/","title":"cxcli webhook","text":"

Actions on webhook commands

cxcli webhook [flags]\n
"},{"location":"cmd/cxcli_webhook/#options","title":"Options","text":"
  -h, --help   help for webhook\n
"},{"location":"cmd/cxcli_webhook/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_webhook/#see-also","title":"See also","text":"
  • cxcli - Dialogflow CX CLI
  • cxcli webhook create - create a webhook
  • cxcli webhook delete - delete a webhook
  • cxcli webhook update - update a webhook
"},{"location":"cmd/cxcli_webhook_create/","title":"cxcli webhook create","text":"

create a webhook

cxcli webhook create [name] [flags]\n
"},{"location":"cmd/cxcli_webhook_create/#options","title":"Options","text":"
  -a, --agent-name string           Dialogflow CX Agent Name (required)\n  -e, --environment string          Environment where you want to set the webhook url. Default: global (optional) (default \"global\")\n  -f, --flexible string             Creates a flexible webhook. Possible values: true or false (optional) (default \"false\")\n  -h, --help                        help for create\n  -l, --location-id string          Dialogflow CX Location ID of the Project (required)\n  -m, --parameters-mapping string   Creates a parameter mapping for flexible webhook, comma separated. The format is parameter@json-path,paramter2@json-path2. Example: my-param@$.fully.qualified.path.to.field (required only if flexible is true)\n  -p, --project-id string           Dialogflow CX Project ID (required)\n  -t, --request-body string         Creates a request body for flexible webhook. It has to be in JSON Format (required only if flexible is true)\n  -r, --url string                  Webhook URL (required)\n
"},{"location":"cmd/cxcli_webhook_create/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_webhook_create/#see-also","title":"See also","text":"
  • cxcli webhook - Actions on webhook commands
"},{"location":"cmd/cxcli_webhook_delete/","title":"cxcli webhook delete","text":"

delete a webhook

cxcli webhook delete [name] [flags]\n
"},{"location":"cmd/cxcli_webhook_delete/#options","title":"Options","text":"
  -a, --agent-name string    Dialogflow CX Agent Name (required)\n  -f, --force string         Forces to delete the webhook and its references in environments and flows. Possible values: true or false (optional)\n  -h, --help                 help for delete\n  -l, --location-id string   Dialogflow CX Location ID of the Project (required)\n  -p, --project-id string    Dialogflow CX Project ID (required)\n
"},{"location":"cmd/cxcli_webhook_delete/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_webhook_delete/#see-also","title":"See also","text":"
  • cxcli webhook - Actions on webhook commands
"},{"location":"cmd/cxcli_webhook_update/","title":"cxcli webhook update","text":"

update a webhook

cxcli webhook update [name] [flags]\n
"},{"location":"cmd/cxcli_webhook_update/#options","title":"Options","text":"
  -a, --agent-name string           Dialogflow CX Agent Name (required)\n  -e, --environment string          Environment where you want to set the webhook url. Default: global (optional) (default \"global\")\n  -f, --flexible string             Creates a flexible webhook. Possible values: true or false (optional) (default \"false\")\n  -h, --help                        help for update\n  -l, --location-id string          Dialogflow CX Location ID of the Project (required)\n  -m, --parameters-mapping string   Creates a parameter mapping for flexible webhook, comma separated. The format is parameter@json-path,paramter2@json-path2. Example: my-param@$.fully.qualified.path.to.field. This only applies to flexible webhooks (optional)\n  -p, --project-id string           Dialogflow CX Project ID (required)\n  -t, --request-body string         Creates a request body for flexible webhook. It has to be in JSON Format. This only applies to flexible webhooks (optional)\n  -r, --url string                  Webhook URL (required)\n
"},{"location":"cmd/cxcli_webhook_update/#options-inherited-from-parent-commands","title":"Options inherited from parent commands","text":"
  -c, --credentials string     Google Cloud credentials JSON file path (optional)\n  -o, --output-format string   Output Format. Options: text, json. Default: text (optional) (default \"text\")\n  -u, --skip-update-check      Skip the check for updates check run before every command (optional)\n  -v, --verbose                verbose error output (with stack trace) (optional)\n
"},{"location":"cmd/cxcli_webhook_update/#see-also","title":"See also","text":"
  • cxcli webhook - Actions on webhook commands
"},{"location":"community/contributing/","title":"Contributing","text":"

By participating in this project, you agree to abide by our code of conduct.

"},{"location":"community/contributing/#set-up-your-machine","title":"Set up your machine","text":"

cxcli is written in Go.

Prerequisites:

  • Go 1.20+

Other things you might need to run the tests:

  • cosign
  • Docker
  • Podman
  • Snapcraft
  • Syft

Clone cxcli anywhere:

git clone git@github.com:xavidop/dialogflow-cx-cli.git\n

cd into the directory and install the dependencies:

go mod tidy\n

A good way of making sure everything is all right is running the build:

go build -o cxcli .\n
"},{"location":"community/contributing/#test-your-change","title":"Test your change","text":"

You can create a branch for your changes and try to build from the source as you go:

go build -o cxcli .\n
"},{"location":"community/contributing/#create-a-commit","title":"Create a commit","text":"

Commit messages should be well formatted, and to make that \"standardized\", we are using Conventional Commits.

You can follow the documentation on their website.

"},{"location":"community/contributing/#submit-a-pull-request","title":"Submit a pull request","text":"

Push your branch to your cxcli fork and open a pull request against the main branch.

"},{"location":"community/contributing/#financial-contributions","title":"Financial contributions","text":"

You can contribute in our GitHub Sponsors or to any of the contributors directly. See this page for more details.

"},{"location":"community/sponsors/","title":"Sponsors","text":"

Do you or your company use cxcli? You can help keep the project bug-free and feature rich by sponsoring the project and its maintainers.

"},{"location":"community/sponsors/#github-sponsors","title":"GitHub Sponsors","text":"

GitHub Sponsors is a great way to contribute directly to the primary maintainer, xavidop.

This money usually goes to buying coffee, beer, better hardware, and, hopefully, one day, paying the bills.

You can sponsor and see who's sponsoring Xavier Portilla Edo here.

\u2728\u2728 Thanks for your support! \u2728\u2728

"},{"location":"community/users/","title":"Users","text":""},{"location":"community/users/#who-uses-cxcli","title":"Who uses cxcli?","text":"

As the cxcli community grows, we'd like to keep a list of our users.

Here's a running list of some organizations using cxcli1:

  1. Empty list, become the first one!

Feel free to add yours!

  1. Entries were either added by the companies themselves or by the maintainers after seeing it in the wild.\u00a0\u21a9

"},{"location":"entitytypes/create/","title":"Create","text":""},{"location":"entitytypes/create/#usage","title":"Usage","text":"

You can find the create functionality within the cxcli entity-type create subcommand. You can read the documentation about this command here.

The argument to --entities is a list of the entities with their synonyms, comma separated. This parameter has the following format:

entity1@synonym1|synonym2,entity2@synonym1|synonym2\n

An example entity type with synonyms: pikachu@25|pika,charmander@3

"},{"location":"entitytypes/create/#example","title":"Example","text":"

Here is a simple example of the cxcli entity-type create command:

cxcli entity-type create pokemon --entities \"pikachu@25|pika,charmander@3\" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1\n

The above command will give you output similar to the following:

$ cxcli entity-type create pokemon --entities \"pikachu@25|pika,charmander@3\" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1\nINFO Entity Type created with id: projects/test-cx-346408/locations/us-central1/agents/40278ea0-c0fc-4d9a-a4d4-caa68d86295f/entityTypes/457a451d-f5ce-47da-b8dc-16b17d874a5d\n
"},{"location":"entitytypes/create/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX entity types creation, refer to the official documentation.

"},{"location":"entitytypes/delete/","title":"Delete","text":""},{"location":"entitytypes/delete/#usage","title":"Usage","text":"

You can find the delete functionality within the cxcli entity-type delete subcommand. You can read the documentation about this command here.

"},{"location":"entitytypes/delete/#example","title":"Example","text":"

Here is a simple example of the cxcli entity-type delete command:

cxcli entity-type delete pokemon2  --agent-name test-agent --project-id test-cx-346408 --location-id us-central1\n

The above command will give you output similar to the following:

$ cxcli entity-type delete pokemon2  --agent-name test-agent --project-id test-cx-346408 --location-id us-central1\nINFO Entity Type deleted\n
"},{"location":"entitytypes/delete/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX entity types deletion, refer to the official documentation.

"},{"location":"entitytypes/introduction/","title":"Entity types","text":""},{"location":"entitytypes/introduction/#what-is-this","title":"What is this?","text":"

One of the most important aspects of natural language understanding is entity types or entities. Entities contain the important factors within a message such as names, dates, products, organizations, places, or anything that we want to extract from the message. We call this concept \u201centities\u201d. For example, let's take a look at the order_intent intent:

  1. I want a pizza
  2. I want 3 cokes
  3. Give me two burgers

As you can see in the example above, we can extract two entity Types: quantity and order_type. We can represent the entities within the above utterances as:

  1. I want {quantity} {order_type}
  2. Give me {quantity} {order_type}

We can also think of entity types as variables.

With cxcli, you can easily interact with your Dialogflow CX entity types.

All of the commands that you have available in cxcli to interact with your entity types are located within the cxcli entity-type subcommand.

"},{"location":"entitytypes/introduction/#create","title":"Create","text":"

The cxcli has a command that allows you to create an entity type. You can find a more detailed information here.

"},{"location":"entitytypes/introduction/#update","title":"Update","text":"

The cxcli has a command that allows you to update an entity type. You can find a more detailed information here.

"},{"location":"entitytypes/introduction/#delete","title":"Delete","text":"

The cxcli has a command that allows you to delete your entity type. You can find a more detailed explanation here.

"},{"location":"entitytypes/introduction/#useful-links","title":"Useful Links","text":"

If you want to see the full usage of the cxcli entity-type command, please refer to this page.

If you want to learn more about Dialogflow CX entity types, refer to the official documentation.

"},{"location":"entitytypes/update/","title":"Update","text":""},{"location":"entitytypes/update/#usage","title":"Usage","text":"

You can find the update functionality within the cxcli entity-type update subcommand. You can read the documentation about this command here.

The argument to --entities is a list of the entities with their synonyms, comma separated. This parameter has the following format:

entity1@synonym1|synonym2,entity2@synonym1|synonym2\n

An example entity type with synonyms: pikachu@25|pika,charmander@3

"},{"location":"entitytypes/update/#example","title":"Example","text":"

Here is a simple example of the cxcli entity-type update command:

cxcli entity-type update pokemon --entities \"pikachu@25|pika,charmander@3\" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1\n

The above command will give you output similar to the following:

$ cxcli entity-type update pokemon --entities \"pikachu@25|pika,charmander@3\" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1\nINFO Entity Type updated\n
"},{"location":"entitytypes/update/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX entity types update, refer to the official documentation.

"},{"location":"environments/cicd/","title":"Environments CI/CD","text":""},{"location":"environments/cicd/#usage","title":"Usage","text":"

You can find the CI/CD functionality within the cxcli environment execute-cicd subcommand. You can read the documentation about this command here.

"},{"location":"environments/cicd/#example","title":"Example","text":"

Here is a simple example of the cxcli environment execute-cicd command:

cxcli environment execute-cicd cicd-env --project-id test-cx-346408 --location-id us-central1 --agent-name test-agent\n

The above command will give you output similar to the following:

$ cxcli environment execute-cicd cicd-env --project-id test-cx-346408 --location-id us-central1 --agent-name test-agent\nINFO Executing cicd for environment cicd-env\nINFO PASSED\n

Are you running this command in a CI/CD pipeline?

If this is the case, we recommend that you set the --output-format parameter to json.

"},{"location":"environments/cicd/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX CI/CD execution, refer to the official documentation.

"},{"location":"environments/create/","title":"Create","text":""},{"location":"environments/create/#usage","title":"Usage","text":"

You can find the create functionality within the cxcli environment create subcommand. You can read the documentation about this command here.

The --flow-versions parameter is a list of flows and their versions to include in the environment, comma separated. For each flow used in this environment, it is required to add the version with this format: @flow-version. This is the full format:

flow@flow-version\n

An example of flows with their versions:

Default Start Flow@production_v2,Test Flow@v1.0.0\n
"},{"location":"environments/create/#example","title":"Example","text":"

Here is a simple example of using the cxcli environment create command:

cxcli environment create my-env --flow-versions \"Default Start Flow@production_v2,Test Flow@v1.0.0\"  --agent-name test-agent --project-id test-cx-346408 --location-id us-central1\n

The above command will give you output similar to the following:

$ cxcli environment create my-env --flow-versions \"Default Start Flow@production_v2,Test Flow@v1.0.0\"  --agent-name test-agent --project-id test-cx-346408 --location-id us-central1\nINFO Environment created with id: projects/test-cx-346408/locations/us-central1/agents/40278ea0-c0fc-4d9a-a4d4-caa68d86295f/environments/9f9cf42a-9033-4d73-9407-613d041c9403\n
"},{"location":"environments/create/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX environment creation, refer to the official documentation.

"},{"location":"environments/delete/","title":"Delete","text":""},{"location":"environments/delete/#usage","title":"Usage","text":"

You can find the delete functionality within the cxcli environment delete subcommand. You can read the documentation about this command here.

"},{"location":"environments/delete/#example","title":"Example","text":"

Here is a simple example of the cxcli environment delete command:

cxcli environment delete my-env --agent-name test-agent --project-id test-cx-346408 --location-id us-central1\n

The above command will give you output similar to the following:

$ cxcli environment delete my-env --agent-name test-agent --project-id test-cx-346408 --location-id us-central1\nINFO Environment deleted\n
"},{"location":"environments/delete/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX environment deletion, refer to the official documentation.

"},{"location":"environments/introduction/","title":"Environments","text":""},{"location":"environments/introduction/#what-is-this","title":"What is this?","text":"

In software, it is a common pattern (and a best practice) to have different environments where developers can deploy different versions of their software. Each environment has its own configuration.

Dialogflow CX follows the same concept in that you can create a version of your agent and then deploy it to a specific environment. This is also similar to a webhook in that you can deploy a specific webhook version and use that version within an environment.

With cxcli, you can easily interact with the environments of your Dialogflow CX agents.

All of the commands that you have available in cxcli to interact with your environments are located within the cxcli environment subcommand.

"},{"location":"environments/introduction/#create","title":"Create","text":"

The cxcli has a command that allows you to create an environment. You can find a more detailed information here.

"},{"location":"environments/introduction/#update","title":"Update","text":"

The cxcli has a command that allows you to update an environment. You can find a more detailed information here.

"},{"location":"environments/introduction/#delete","title":"Delete","text":"

The cxcli has a command that allows you to delete your environment. You can find a more detailed explanation here.

"},{"location":"environments/introduction/#cicd","title":"CI/CD","text":"

In Dialogflow CX, when you are testing your agents, you can save those tests and associate them with a specific environment.

The cxcli tool has a command that allows you to run these CI/CD pipelines from your terminal or from your CI processes. You can find a more detailed explanation here.

"},{"location":"environments/introduction/#useful-links","title":"Useful Links","text":"

If you want to see the full usage of the cxcli environment command, please refer to this page.

If you want to learn more about Dialogflow CX environments, refer to the official documentation.

"},{"location":"environments/update/","title":"Update","text":""},{"location":"environments/update/#usage","title":"Usage","text":"

You can find the update functionality within the cxcli environment update subcommand. You can read the documentation about this command here.

The --flow-versions parameter is a list of flows and their versions to include in the environment, comma separated. For each flow used in this environment, it is required to add the version with this format: @flow-version. This is the full format:

flow@flow-version\n

An example of flows with their versions:

Default Start Flow@production_v2,Test Flow@v1.0.0\n
"},{"location":"environments/update/#example","title":"Example","text":"

Here is a simple example of the cxcli entity-type update command:

cxcli environment update my-env --flow-versions \"Default Start Flow@production_v3,Test Flow@v1.1.0\"  --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --description \"This is a test environment\"\n

The above command will give you output similar to the following:

$ cxcli environment update my-env --flow-versions \"Default Start Flow@production_v3,Test Flow@v1.1.0\"  --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --description \"This is a test environment\"\nINFO Environment updated\n
"},{"location":"environments/update/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX environment update, refer to the official documentation.

"},{"location":"flows/create/","title":"Create","text":""},{"location":"flows/create/#usage","title":"Usage","text":"

You can find the create functionality within the cxcli flow create subcommand. You can read the documentation about this command here.

"},{"location":"flows/create/#example","title":"Example","text":"

Here is a simple example of using the cxcli flow create command:

cxcli flow create my-flow --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --description \"My test flow\"\n

The above command will give you output similar to the following:

$ cxcli flow create my-flow --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --description \"My test flow\"\nINFO Flow created with id: projects/test-cx-346408/locations/us-central1/agents/40278ea0-c0fc-4d9a-a4d4-caa68d86295f/flows/49a38c72-2a63-4d71-a266-2d722eb8360e\n
"},{"location":"flows/create/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX flow creation, refer to the official documentation.

"},{"location":"flows/delete/","title":"Delete","text":""},{"location":"flows/delete/#usage","title":"Usage","text":"

You can find the delete functionality within the cxcli flow delete subcommand. You can read the documentation about this command here.

"},{"location":"flows/delete/#example","title":"Example","text":"

Here is a simple example of the cxcli flow delete command:

cxcli flow delete my-flow --agent-name test-agent --project-id test-cx-346408 --location-id us-central1\n

The above command will give you output similar to the following:

$ cxcli flow delete my-flow --agent-name test-agent --project-id test-cx-346408 --location-id us-central1\nINFO Flow deleted\n
"},{"location":"flows/delete/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX flow deletion, refer to the official documentation.

"},{"location":"flows/introduction/","title":"Flows","text":""},{"location":"flows/introduction/#what-is-this","title":"What is this?","text":"

In intricate conversations, various topics come into play. Take, for example, a flight book service, where a dialogue may cover areas like seat booking a meal reservation, obtaining customer information, and confirming the booking. Each of these topics requires multiple interactions between the agent and the end-user to gather the necessary information.

Flows are employed to delineate these topics and their respective conversational paths. Each agent is equipped with a default start flow, which serves as a foundation for simple agents.

With cxcli, you can easily interact with the flows of your Dialogflow CX agents.

All of the commands that you have available in cxcli to interact with your flows are located within the cxcli flow subcommand.

"},{"location":"flows/introduction/#create","title":"Create","text":"

The cxcli has a command that allows you to create a flow. You can find a more detailed information here.

"},{"location":"flows/introduction/#update","title":"Update","text":"

The cxcli has a command that allows you to update a flow. You can find a more detailed information here.

"},{"location":"flows/introduction/#delete","title":"Delete","text":"

The cxcli has a command that allows you to delete your flow. You can find a more detailed explanation here.

"},{"location":"flows/introduction/#train","title":"Train","text":"

In Dialogflow CX, when you are adding training phrases to your intents and synonyms to your entity types, you will need to train your agent in order to have the latest changes ready for your end-users.

The cxcli tool has a command that allows you train your flow from your terminal or from your CI processes. You can find a more detailed explanation here.

"},{"location":"flows/introduction/#useful-links","title":"Useful Links","text":"

If you want to see the full usage of the cxcli flow command, please refer to this page.

If you want to learn more about Dialogflow CX flows, refer to the official documentation.

"},{"location":"flows/train/","title":"Train","text":""},{"location":"flows/train/#usage","title":"Usage","text":"

You can find the train functionality within the cxcli flow train subcommand. You can read the documentation about this command here.

"},{"location":"flows/train/#example","title":"Example","text":"

Here is a simple example of the cxcli flow train command:

cxcli flow train my-flow --project-id test-cx-346408 --location-id us-central1 --agent-name test-agent\n

The above command will give you output similar to the following:

$ cxcli flow train my-flow --project-id test-cx-346408 --location-id us-central1 --agent-name test-agent\nINFO Flow trained\n

Is it taking longer than expected?

That is okay, depending on the amount of data to train it takes longer.

"},{"location":"flows/train/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX flow train execution, refer to the official documentation.

"},{"location":"flows/update/","title":"Update","text":""},{"location":"flows/update/#usage","title":"Usage","text":"

You can find the update functionality within the cxcli flow update subcommand. You can read the documentation about this command here.

"},{"location":"flows/update/#example","title":"Example","text":"

Here is a simple example of the cxcli flow update command:

cxcli flow update my-flow --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --description \"My updated test flow\"\n

The above command will give you output similar to the following:

$ cxcli flow update my-flow --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --description \"My updated test flow\"\nINFO Flow updated\n
"},{"location":"flows/update/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX flow update, refer to the official documentation.

"},{"location":"flowversions/create/","title":"Create","text":""},{"location":"flowversions/create/#usage","title":"Usage","text":"

You can find the create functionality within the cxcli flow-version create subcommand. You can read the documentation about this command here.

"},{"location":"flowversions/create/#example","title":"Example","text":"

Here is a simple example of using the cxcli flow-version create command:

cxcli flow-version create \"v1.0.0\" --start-flow \"Test Flow\" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --description \"My flow version\"\n

The above command will give you output similar to the following:

$ cxcli flow-version create \"v1.0.0\" --start-flow \"Test Flow\" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --description \"My flow version\"\nINFO Version created with id: projects/test-cx-346408/locations/us-central1/agents/40278ea0-c0fc-4d9a-a4d4-caa68d86295f/flows/b23e0247-2dd4-4d86-a23a-a289569480d4/versions/6\n

Is it taking longer than expected?

That is okay, depending on the size of the flow it takes longer.

"},{"location":"flowversions/create/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX flow version creation, refer to the official documentation.

"},{"location":"flowversions/delete/","title":"Delete","text":""},{"location":"flowversions/delete/#usage","title":"Usage","text":"

You can find the delete functionality within the cxcli flow-version delete subcommand. You can read the documentation about this command here.

"},{"location":"flowversions/delete/#example","title":"Example","text":"

Here is a simple example of the cxcli flow-version delete command:

cxcli flow-version delete \"v1.0.0\" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1\n

The above command will give you output similar to the following:

$ cxcli flow-version delete \"v1.0.0\" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1\nINFO Version deleted\n
"},{"location":"flowversions/delete/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX flow version deletion, refer to the official documentation.

"},{"location":"flowversions/introduction/","title":"Flow Versions","text":""},{"location":"flowversions/introduction/#what-is-this","title":"What is this?","text":"

It is possible to generate various iterations of your agent flows and deploy them to distinct serving environments.

When making modifications to a flow, you are essentially modifying a draft version. At any given time, you have the option to save a draft flow as a flow version. A flow version represents an unchangeable snapshot of your flow data along with all the related agent data, such as intents, entities, webhooks, pages, route groups, and more.

Furthermore, You can deploy this flow versions to different environments, such as development, test, and production. You can also deploy the same flow version to multiple environments.

With cxcli, you can easily interact with the flow versions of your Dialogflow CX agents.

All of the commands that you have available in cxcli to interact with your flows are located within the cxcli flow-version subcommand.

"},{"location":"flowversions/introduction/#create","title":"Create","text":"

The cxcli has a command that allows you to create a flow versions. You can find a more detailed information here.

"},{"location":"flowversions/introduction/#update","title":"Update","text":"

The cxcli has a command that allows you to update a flow versions. You can find a more detailed information here.

"},{"location":"flowversions/introduction/#delete","title":"Delete","text":"

The cxcli has a command that allows you to delete your flow versions. You can find a more detailed explanation here.

"},{"location":"flowversions/introduction/#useful-links","title":"Useful Links","text":"

If you want to see the full usage of the cxcli flow-version command, please refer to this page.

If you want to learn more about Dialogflow CX flows, refer to the official documentation.

"},{"location":"flowversions/update/","title":"Update","text":""},{"location":"flowversions/update/#usage","title":"Usage","text":"

You can find the update functionality within the cxcli flow-version update subcommand. You can read the documentation about this command here.

"},{"location":"flowversions/update/#example","title":"Example","text":"

Here is a simple example of the cxcli flow update command:

cxcli flow-version update \"v1.0.0\" --start-flow \"Test Flow\" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --description \"My updated flow version\"\n

The above command will give you output similar to the following:

$ cxcli flow-version update \"v1.0.0\" --start-flow \"Test Flow\" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --description \"My updated flow version\"\nINFO Version updated\n
"},{"location":"flowversions/update/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX flow version update, refer to the official documentation.

"},{"location":"intents/create/","title":"Create","text":""},{"location":"intents/create/#usage","title":"Usage","text":"

You can find the create functionality within the cxcli intent create subcommand. You can read the documentation about this command here.

The --training-phrases parameter is a list of the training phrases for this intent, comma separated. For the entities used in this intent, add @entity-type to the word in the training phrase. This is the format:

word@entity-type\n

An example training phrase with a entity: hello, hi how are you today@sys.date, morning!

"},{"location":"intents/create/#example","title":"Example","text":"

Here is a simple example of using the cxcli intent create command:

cxcli intent create test_intent --training-phrases \"hello, hi how are you today@sys.date, morning\"  --agent-name test-agent --project-id test-cx-346408 --location-id us-central1\n

The above command will give you output similar to the following:

$ cxcli intent create test_intent --training-phrases \"hello, hi how are you today@sys.date, morning\"  --agent-name test-agent --project-id test-cx-346408 --location-id us-central1\nINFO Intent created with id: projects/test-cx-346408/locations/us-central1/agents/40278ea0-c0fc-4d9a-a4d4-caa68d86295f/intents/a7870357-e942-43dd-99d2-4de8c81a3c09\n
"},{"location":"intents/create/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX intent creation, refer to the official documentation.

"},{"location":"intents/delete/","title":"Delete","text":""},{"location":"intents/delete/#usage","title":"Usage","text":"

You can find the delete functionality within the cxcli intent delete subcommand. You can read the documentation about this command here.

"},{"location":"intents/delete/#example","title":"Example","text":"

Here is a simple example of the cxcli intent delete command:

cxcli intent delete test_intent --agent-name test-agent --project-id test-cx-346408 --location-id us-central1\n

The above command will give you output similar to the following:

$ cxcli intent delete test_intent --agent-name test-agent --project-id test-cx-346408 --location-id us-central1\nINFO Intent deleted\n
"},{"location":"intents/delete/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX intent deletion, refer to the official documentation.

"},{"location":"intents/introduction/","title":"Intent","text":""},{"location":"intents/introduction/#what-is-this","title":"What is this?","text":"

Before we discuss intents, it is important to first understand what is natural language understanding (NLU). Natural language understanding is a subset of natural language processing (NLP). It helps a \"machine\" to be able to understand human language.

In Dialogflow CX, this is an important concept, since it will help predict the user's intention and allow us to act in a \"smarter\" way, and avoid the all-too-common default fallback intent: \"I did not understand you, could you repeat?\".

We refer to these intentions, proposals, or user requests that machine must classify as \"intents\". Each intent has training phrases. For example, the default welcome_intent intent can contain these three training phrases:

  1. Hi
  2. Hello
  3. Whats up!

As you can see in the example above, the purpose of the welcome_intent intent is to start a conversation when a user says any of these training phrases. An intent can have multiple entities.

Whenever you create, modify, or delete an intent, it is important to re-train your Dialogflow CX flows. This will re-train your NLU model. By doing this, your bot will \"understand you\", including your latest changes.

With cxcli, you can easily interact with your Dialogflow CX intents.

All of the commands that you have available in cxcli to interact with your intents are located within the cxcli intents subcommand.

"},{"location":"intents/introduction/#create","title":"Create","text":"

The cxcli has a command that allows you to create an intent. You can find a more detailed explanation here

"},{"location":"intents/introduction/#update","title":"Update","text":"

The cxcli has a command that allows you to update an intent. You can find a more detailed explanation here

"},{"location":"intents/introduction/#delete","title":"Delete","text":"

The cxcli has a command that allows you to delete your intents. You can find a more detailed explanation here

"},{"location":"intents/introduction/#useful-links","title":"Useful Links","text":"

If you want to see the full usage of the cxcli intents command, please refer to this page.

If you want to learn more about Dialogflow CX intents, refer to the official documentation.

"},{"location":"intents/update/","title":"Update","text":""},{"location":"intents/update/#usage","title":"Usage","text":"

You can find the update functionality within the cxcli intent update subcommand. You can read the documentation about this command here.

The --training-phrases parameter is a list of the training phrases for this intent, comma separated. For the entities used in this intent, add @entity-type to the word in the training phrase. This is the format:

word@entity-type\n

An example training phrase with a entity: hello, hi how are you today@sys.date, morning!

"},{"location":"intents/update/#example","title":"Example","text":"

Here is a simple example of using the cxcli intent update command:

cxcli intent update test_intent --training-phrases \"hello, hi how are you today@sys.date, morning\"  --agent-name test-agent --project-id test-cx-346408 --location-id us-central1\n

The above command will give you output similar to the following:

$ cxcli intent update test_intent --training-phrases \"hello, hi how are you today@sys.date, morning\"  --agent-name test-agent --project-id test-cx-346408 --location-id us-central1\nINFO Intent updated\n
"},{"location":"intents/update/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX intent update, refer to the official documentation.

"},{"location":"nluprofiler/examples/","title":"Examples","text":""},{"location":"nluprofiler/examples/#simple","title":"Simple","text":"

Simple example that demonstrates the NLU Profiler in action. Find it here

"},{"location":"nluprofiler/examples/#system-entity-detection","title":"System entity detection","text":"

Example that shows how to validate Dialogflow CX built-in entities. Find it here

"},{"location":"nluprofiler/examples/#text-input-with-entities","title":"Text input with entities","text":"

Full example with multiple user-defined entities and Dialogflow CX built-in entities. Find it here

"},{"location":"nluprofiler/examples/#audio-input","title":"Audio input","text":"

Example using an audio file as an input. Find it here

"},{"location":"nluprofiler/introduction/","title":"NLU profiler","text":""},{"location":"nluprofiler/introduction/#what-is-this","title":"What is this?","text":"

Use the NLU Profiler to test user utterances and improve your agent's interaction model.

With the NLU Profiler, you can see how utterances resolve to intents and slots in your interaction model. When an utterance doesn't resolve to the right intent or slot, you can update the interaction model and try again. With the cxcli, you can see which intents Dialogflow CX considered and discarded. Then, you can determine how to use additional samples to train your model to resolve utterances to their desired intents and slots.

Every suite is executed in the Dialogflow CX session so you can test not only your NLU but also a conversation itself.

All of the commands that are available in cxcli to execute the NLU profiler are located within the cxcli profile-nlu subcommand.

"},{"location":"nluprofiler/introduction/#reference","title":"Reference","text":"

It is important to know which suites and tests you can build. Because of that, you can find the entire reference on the Reference page. Suites and test are defined as yaml files.

The cxcli has a command that allows you to run these suites from your terminal or from your CI pipelines.

To execute a suite, you can run the cxcli profile-nlu execute command. For the usage, please refer to this page.

"},{"location":"nluprofiler/introduction/#examples","title":"Examples","text":"

You can find some useful examples on our GitHub repo and the Examples page.

"},{"location":"nluprofiler/introduction/#execution-example","title":"Execution Example","text":"

Here is a simple example of the cxcli profile-nlu execute command:

cxcli profile-nlu execute examples/suite.yaml\n

The above command will give you output similar to the following:

$ cxcli profile-nlu execute suite.yaml\nINFO Suite Information: test-agent\nINFO Test ID: test_1\nINFO Input: type: text, value: hi\nINFO Intent Detected: hi_intent\nINFO Input: type: text, value: hello\nINFO Intent Detected: hi_intent\nINFO Input: type: audio, value: ./audio/hi.mp3\nINFO Intent Detected: hi_intent\nINFO Test ID: test_2\nINFO Input: type: text, value: I want 3 pizzas\nINFO Intent Detected: order_intent\nINFO Param order_type: pizza\nINFO Param number: 3\nINFO Input: type: text, value: I want 2 cokes\nINFO Intent Detected: order_intent\nINFO Param number: 2\nINFO Param order_type: coke\n

Are you running this command in a CI/CD pipeline?

If this is the case, we recommend that you set the --output-format parameter to json.

"},{"location":"nluprofiler/suites/","title":"Suites","text":""},{"location":"nluprofiler/suites/#reference","title":"Reference","text":"

A suite is a yaml file with the following structure:

# suite.yaml\n\n# Name of the suite.\nname: Example Suite\n# Brief description of the suite.\ndescription: Suite used as an example\n# Project ID on Google Cloud where is located your Dialogflow CX agent.\nprojectId: test-cx-346408\n# Location where your Dialogflow CX agent is running. \n# More info here: https://cloud.google.com/dialogflow/cx/docs/concept/region\nlocationId: us-central1\n# Agent name of your Dialogflow CX agent.\n# Notice: it is the agent name, not the agent ID.\nagentName: test-agent\n# You can have multiple tests defined in separated files\ntests:\n# ID of the test.\n- id: test_id\n# File where the test specification is located\nfile: ./test.yaml\n
"},{"location":"nluprofiler/suites/#json-schema","title":"JSON Schema","text":"

cxcli also has a jsonschema file, which you can use to have better editor support:

https://cxcli.xavidop.me/static/suite.json\n

You can also specify it in your yml config files by adding a comment like the following:

# yaml-language-server: $schema=https://cxcli.xavidop.me/static/suite.json\n

"},{"location":"nluprofiler/tests/","title":"Tests","text":""},{"location":"nluprofiler/tests/#reference","title":"Reference","text":"

A test is a yaml file with the following structure:

# test.yaml\n\n# Name of the test.\nname: Example test\n# Brief description of the test.\ndescription: These are some tests\n# Locale of the interaction model that is gonna be tested.\n# You can find the locales here: https://cloud.google.com/dialogflow/cx/docs/reference/language\nlocaleId: en\n# A check is the test itself: given an input, you will validate the intents and the parameters/entities detected by Dialogflow CX\n# You can have multiple checks defined\nchecks:\n# The ID of the check\n- id: test\ninput:\n# the input type\n# it could be text or audio\ntype: text\n# The input itself in text format. For type: audio, you have to specify the audio tag.\ntext: I want 3 pizzas\nvalidate:\n# Intent that is supposed to be detected\nintent: order_intent\n# You can have multiple parameters/intents\n# Notice: this could be empty if your intent does not have any entities/parameters.\nparameters:\n# Entity name that is supposed to be detected\n- parameter: number\n# Value that is supposed to be detected\nvalue: 3\n
"},{"location":"nluprofiler/tests/#audio-input","title":"Audio input","text":"

It is important to know that the input audio needs to have the following format:

  1. A sample rate of 16000 Hertz
  2. The audio encoding has to be Linear16. Linear16 is a 16-bit linear pulse-code modulation (PCM) encoding.

If you don't have a file with this format, you can create it by yourself using the cxcli tts command! All the information is located here

"},{"location":"nluprofiler/tests/#json-schema","title":"JSON Schema","text":"

cxcli also has a jsonschema file, which you can use to have better editor support:

https://cxcli.xavidop.me/static/test.json\n

You can also specify it in your yml config files by adding a comment like the following:

# yaml-language-server: $schema=https://cxcli.xavidop.me/static/test.json\n

"},{"location":"nluprofiler/examples/audio/","title":"Audio input","text":""},{"location":"nluprofiler/examples/audio/#suite-file","title":"Suite file","text":"
# suite.yaml\n\nname: Example Suite\ndescription: Suite used as an example\nprojectId: test-cx-346408\nlocationId: us-central1\nagentName: test-agent\ntests:\n- id: test_id\nfile: ./test.yaml\n
"},{"location":"nluprofiler/examples/audio/#test-file","title":"Test file","text":"
# test.yaml\n\nname: Example test\ndescription: These are some tests\nlocaleId: en\nchecks:\n- id: my_check\ninput: type: audio\naudio: ./audio/hi.mp3\nvalidate:\nintent: hi_intent\n

You can download the audio file used in this example here

"},{"location":"nluprofiler/examples/simple/","title":"Simple example","text":""},{"location":"nluprofiler/examples/simple/#suite-file","title":"Suite file","text":"
# suite.yaml\n\nname: Example Suite\ndescription: Suite used as an example\nprojectId: test-cx-346408\nlocationId: us-central1\nagentName: test-agent\ntests:\n- id: test_id\nfile: ./test.yaml\n
"},{"location":"nluprofiler/examples/simple/#test-file","title":"Test file","text":"
# test.yaml\n\nname: Example test\ndescription: These are some tests\nlocaleId: en\nchecks:\n- id: my_first_check\ninput: type: text\ntext: hi\nvalidate:\nintent: hi_intent\n\n- id: my_second_check\ninput: type: text\ntext: hello\nvalidate:\nintent: hi_intent\n
"},{"location":"nluprofiler/examples/system/","title":"System entity detection example","text":""},{"location":"nluprofiler/examples/system/#suite-file","title":"Suite file","text":"
# suite.yaml\n\nname: Example Suite\ndescription: Suite used as an example\nprojectId: test-cx-346408\nlocationId: us-central1\nagentName: test-agent\ntests:\n- id: test_id\nfile: ./test.yaml\n
"},{"location":"nluprofiler/examples/system/#test-file","title":"Test file","text":"
# test.yaml\n\nname: Example test\ndescription: These are some tests\nlocaleId: en\nchecks:\n- id: my_check\ninput: type: text\ntext: please, give me 3\nvalidate:\nintent: finish_order_intent\nparameters:\n- parameter: number\nvalue: 3\n
"},{"location":"nluprofiler/examples/text/","title":"Text input with parameters example","text":""},{"location":"nluprofiler/examples/text/#suite-file","title":"Suite file","text":"
# suite.yaml\n\nname: Example Suite\ndescription: Suite used as an example\nprojectId: test-cx-346408\nlocationId: us-central1\nagentName: test-agent\ntests:\n- id: test_id\nfile: ./test.yaml\n
"},{"location":"nluprofiler/examples/text/#test-file","title":"Test file","text":"
# test.yaml\n\nname: Example test\ndescription: These are some tests\nlocaleId: en\nchecks:\n- id: my_first_check\ninput: type: text\ntext: I want 3 pizzas\nvalidate:\nintent: order_intent\nparameters:\n- parameter: number\nvalue: 3\n- parameter: order_type\nvalue: pizza\n\n- id: my_second_check\ninput: type: text\ntext: I want 2 cokes\nvalidate:\nintent: order_intent\nparameters:\n- parameter: number\nvalue: 2\n- parameter: order_type\nvalue: coke\n
"},{"location":"overview/authentication/","title":"Authentication","text":"

cxcli uses various Google Cloud APIs. By default, the tool uses the default configuration that uses the gcloud cli. If you want to use another authentication key you can provide a json file with the global --credentials parameter.

The cxcli source code is open source, you can check it out here to learn more about the actions the tool performs.

Below you can find the roles and the APIs that are required to use this tool.

"},{"location":"overview/authentication/#roles-needed","title":"Roles needed","text":""},{"location":"overview/authentication/#dialogflow-cx","title":"Dialogflow CX","text":"

Dialogflow API Admin: Provides full access to create, update, query, detect intent, and delete the agent from the console or API. Click here for more information.

We are using the Admin role because cxcli performs the List agent action.

This role allows you to execute Speech-to-text and Text-to-speech actions

"},{"location":"overview/authentication/#apis-enabled-needed","title":"APIs enabled needed","text":"

The following APIs should be enabled on your Google Cloud project if you want to use the respective cxcli capabilities:

"},{"location":"overview/authentication/#dialogflow-cx_1","title":"Dialogflow CX","text":"

You will need to enable the Dialogflow API on your project. More information here

"},{"location":"overview/authentication/#speech-to-text","title":"Speech-to-text","text":"

You will need to enable the Cloud Speech-to-Text API on your project. More information here

"},{"location":"overview/authentication/#text-to-speech","title":"Text-to-speech","text":"

You will need to enable the Cloud Text-to-Speech API on your project. More information here

"},{"location":"overview/faq/","title":"Frequently Asked Questions (FAQ)","text":""},{"location":"overview/faq/#how-does-it-work","title":"How does it work?","text":"

cxcli has three main purposes:

  1. Make the interaction with your Dialogflow CX agents from your laptop or your continuous integration pipelines easier than ever
  2. Create testing tools that will help users build their Dialogflow CX agent
  3. Interact with other Google Cloud APIs such as TTS and STT in a very easy way
"},{"location":"overview/faq/#who-is-cxcli-for","title":"Who is cxcli for?","text":"

cxcli is primarily for software engineering teams who are currently using Dialogflow CX. It is recommended for machine learning engineers that usually work with STT, TTS, NLU and NLP technologies.

"},{"location":"overview/faq/#what-kind-of-machinescontainers-do-i-need-for-the-cxcli","title":"What kind of machines/containers do I need for the cxcli?","text":"

You'll need either: a bare-metal host (your own, AWS i3.metal or Equinix Metal) or a VM that supports nested virtualisation such as those provided by Google Cloud, Azure, AWS DigitalOcean, etc. or a Linux or Windows container.

"},{"location":"overview/faq/#when-will-jenkins-gitlab-ci-bitbucket-pipeline-runners-drone-or-azure-devops-be-supported","title":"When will Jenkins, GitLab CI, BitBucket Pipeline Runners, Drone or Azure DevOps be supported?","text":"

For the current phase, we're targeting GitHub Actions because it has fine-grained access controls and the ability to schedule exactly one build to a runner. The other CI systems will be available soon.

That said, if you're using these tools within your organisation, we'd like to hear from you. So feel free to reach out to us if you feel cxcli would be a good fit for your team.

Feel free to contact us at: dialogflowcxcli@gmail.com

"},{"location":"overview/faq/#what-kind-of-access-is-required-in-my-google-cloud-project","title":"What kind of access is required in my Google Cloud project?","text":"

Refer to the Authentication page here

"},{"location":"overview/faq/#can-cxcli-be-used-on-public-repos","title":"Can cxcli be used on public repos?","text":"

Yes, cxcli can be used on public and private repos.

"},{"location":"overview/faq/#whats-in-the-container-image-and-how-is-it-built","title":"What's in the Container image and how is it built?","text":"

The Container image contains uses alpine:latest and the cxcli installed on it.

The image is built automatically using GitHub Actions and is available on a container registry.

"},{"location":"overview/faq/#is-arm64-supported","title":"Is ARM64 supported?","text":"

Yes, cxcli is built to run on both Intel/AMD and ARM64 hosts. This includes a Raspberry Pi 4B, AWS Graviton, Oracle Cloud ARM instances and potentially any other ARM64 instances that support virtualisation.

"},{"location":"overview/faq/#are-windows-or-macos-supported","title":"Are Windows or macOS supported?","text":"

Yes, in addition to Linux, Windows and macOS are also supported platforms for cxcli at this time on a AMD64 or ARM64 architecture.

"},{"location":"overview/faq/#is-cxcli-free-and-open-source","title":"Is cxcli free and open-source?","text":"

cxcli is an open source tool, however, it interacts with Google Cloud APIs, so a Google Cloud account is required.

The website and documentation are available on GitHub and we plan to release some open source tools in the future for cxcli customers.

"},{"location":"overview/faq/#is-there-a-risk-that-we-could-get-locked-in-to-cxcli","title":"Is there a risk that we could get \"locked-in\" to cxcli?","text":"

No, you can switch back to using either the gcloud CLI tool or the Google Cloud APIs at any time. Keep in mind that cxcli not only solves for a certain set of issues with both of those approaches but also simplifies the interaction with Google Cloud.

"},{"location":"overview/faq/#why-is-the-brand-called-cxcli-and-dialogflow-cx-cli","title":"Why is the brand called \"cxcli\" and \"Dialogflow CX CLI\" ?","text":"

The name of the software is cxcli, in some places \"cxcli\" is not available, and we liked \"Dialogflow CX CLI\" because it refers to the what the tool does.

"},{"location":"overview/install/","title":"Install","text":"

You can use cxcli by installing a pre-compiled binary (in several ways), using Docker, or compiling it from source. In the below sections, you can find the steps for each approach.

"},{"location":"overview/install/#install-a-pre-compiled-binary","title":"Install a pre-compiled binary","text":""},{"location":"overview/install/#homebrew-tap","title":"homebrew tap","text":"
  1. Add the Homebrew tap:
    brew tap xavidop/tap git@github.com:xavidop/homebrew-tap.git\nbrew update\n
  2. Install the Dialogflow CX CLI:
    brew install cxcli\n
"},{"location":"overview/install/#snapcraft","title":"snapcraft","text":"
sudo snap install cxcli\n
"},{"location":"overview/install/#scoop","title":"scoop","text":"
scoop bucket add cxcli https://github.com/xavidop/scoop-bucket.git\nscoop install cxcli\n
"},{"location":"overview/install/#apt","title":"apt","text":"
echo 'deb [trusted=yes] https://apt.fury.io/xavidop/ /' | sudo tee /etc/apt/sources.list.d/cxcli.list\nsudo apt update\nsudo apt install cxcli\n
"},{"location":"overview/install/#yum","title":"yum","text":"
echo '[cxcli]\nname=Dialogflow CX CLI Repo\nbaseurl=https://yum.fury.io/xavidop/\nenabled=1\ngpgcheck=0' | sudo tee /etc/yum.repos.d/cxcli.repo\nsudo yum install cxcli\n
"},{"location":"overview/install/#aur","title":"aur","text":"
yay -S cxcli-bin\n
"},{"location":"overview/install/#nix","title":"nix","text":""},{"location":"overview/install/#nixpkgs","title":"nixpkgs","text":"
nix-env -iA cxcli\n

Info

The package in nixpkgs might be slightly outdated, as it is not updated automatically. Use our NUR to always get the latest updates.

"},{"location":"overview/install/#nur","title":"nur","text":"

First, you'll need to add our NUR to your nix configuration. You can follow the guides here.

Once you do that, you can install the packages.

{ pkgs, lib, ... }: {\n    home.packages = with pkgs; [\n    nur.repos.xavidop.cxcli\n    ];\n}\n
"},{"location":"overview/install/#deb-rpm-and-apk-packages","title":"deb, rpm and apk packages","text":"

Download the .deb, .rpm or .apk packages from the OSS releases page and install them with the appropriate tools.

"},{"location":"overview/install/#go-install","title":"go install","text":"
go install github.com/xavidop/dialogflow-cx-cli@latest\n
"},{"location":"overview/install/#bash-script","title":"bash script","text":"
curl -sfL https://cxcli.xavidop.me/static/run | bash\n
"},{"location":"overview/install/#additional-options","title":"Additional Options","text":"

You can also set the VERSION variable to specify a version instead of using latest.

You can also pass flags and args to cxcli:

curl -sfL https://cxcli.xavidop.me/static/run |\nVERSION=__VERSION__ bash -s -- version\n

Tip

This script does not install anything, it just downloads, verifies and runs cxcli. Its purpose is to be used within scripts and CIs.

"},{"location":"overview/install/#manually","title":"manually","text":"

Download the pre-compiled binaries from the releases page and copy them to the desired location.

"},{"location":"overview/install/#verifying-the-artifacts","title":"Verifying the artifacts","text":""},{"location":"overview/install/#binaries","title":"binaries","text":"

All artifacts are checksummed, and the checksum file is signed with cosign.

  1. Download the files you want along with the checksums.txt, checksum.txt.pem, and checksums.txt.sig files from the releases page:
    wget https://github.com/xavidop/dialogflow-cx-cli/releases/download/__VERSION__/checksums.txt\nwget https://github.com/xavidop/dialogflow-cx-cli/releases/download/__VERSION__/checksums.txt.sig\nwget https://github.com/xavidop/dialogflow-cx-cli/releases/download/__VERSION__/checksums.txt.pem\n
  2. Verify the signature:
    COSIGN_EXPERIMENTAL=1 cosign verify-blob \\\n--cert checksums.txt.pem \\\n--signature checksums.txt.sig \\\nchecksums.txt\n
  3. If the signature is valid, you can then verify the SHA256 sums match with the downloaded binary:
    sha256sum --ignore-missing -c checksums.txt\n
"},{"location":"overview/install/#docker-images","title":"docker images","text":"

Our Docker images are signed with cosign.

Verify the signatures:

COSIGN_EXPERIMENTAL=1 cosign verify xavidop/cxcli\n

Info

The .pem and .sig files are the image name:tag, replacing / and : with -.

"},{"location":"overview/install/#running-with-docker","title":"Running with Docker","text":"

You can also use cxcli within a Docker container. To do that, you'll need to execute something more-or-less like the examples below.

Registries:

  • xavidop/cxcli
  • ghcr.io/xavidop/cxcli

Example usage:

docker run --rm \\\nxavidop/cxcli cxcli version\n

Note that the image will almost always have the last stable Go version.

If you need other packages and dependencies, you are encouraged to keep your own image. You can always use cxcli's own Dockerfile as a starting point and iterate on that.

"},{"location":"overview/install/#compiling-from-source","title":"Compiling from source","text":"

Here you have two options:

If you want to contribute to the project, please follow the steps on our contributing guide.

If you just want to build from source for whatever reason, follow these steps:

clone:

git clone https://github.com/xavidop/dialogflow-cx-cli\ncd dialogflow-cx-cli\n

get the dependencies:

go mod tidy\n

build:

go build -o cxcli .\n

verify that it works:

./cxcli version\n
"},{"location":"overview/roadmap/","title":"Roadmap","text":"

cxcli is in active development. The core product is functioning.

Our goal with the tool is to prove that there's market fit for a solution like this, and if so, we'll invest more time in automation, user experience, more features.

For now, if you're interested in participating and giving feedback, we believe cxcli already solves pain at this stage.

Shipped:

  • Available in homebrew, snapcraft, apt, yum, scoop, aur package managers
  • Documentation updated
  • Profile NLU
  • Speech-to-text and Text-to-speech actions
  • Container image available for multiple architectures
  • SBOM files created
  • Artifacts uploaded, signed and available on GitHub

Coming soon:

  • Continuous integration support (GitHub Action, CircleCI, etc.)
  • Flow import and export
  • Dialog from the terminal
  • More Agent actions (validate)
  • Pages Action (crate, update, delete)
  • Test Cases actions (export, import, run, run-all)
  • Changelog actions (show)
  • Experiment Actions - TBD
"},{"location":"webhooks/create/","title":"Create","text":""},{"location":"webhooks/create/#usage","title":"Usage","text":"

You can find the create functionality within the cxcli webhook create subcommand. You can read the documentation about this command here.

"},{"location":"webhooks/create/#flexible-webhook","title":"Flexible Webhook","text":"

If you want to create a flexible webhook, you have to set the --flexible parameter. When you set these parameters, you have to provide a --request-body and a --parameters-mapping parameter:

  1. The --request-body parameter is a JSON string that will be sent to the webhook.
  2. The --parameters-mapping parameter is a comma-separated list of key-value pairs. The key is the name of the parameter that will be sent to the webhook, and the value is a JSON path that will be used to extract the value from the --request-body parameter. This parameter has the following format:
    parameter@json-path,paramter2@json-path2\n
    An example of a parameter mapping: my-param@$.fully.qualified.path.to.field
"},{"location":"webhooks/create/#example","title":"Example","text":""},{"location":"webhooks/create/#standard-webhook","title":"Standard Webhook","text":"

Here is a simple example of using the cxcli webhook create command:

cxcli webhook create my-webhook --url \"https://my-webhook.com\" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 

The above command will give you output similar to the following:

$ cxcli webhook create my-webhook --url \"https://my-webhook.com\" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 \nINFO Webhook created with id: projects/test-cx-346408/locations/us-central1/agents/40278ea0-c0fc-4d9a-a4d4-caa68d86295f/webhooks/55f56aeb-be30-40a2-8bd6-cbbd6b9cc041\n
"},{"location":"webhooks/create/#flexible-webhook_1","title":"Flexible Webhook","text":"
cxcli webhook create my-webhook --url \"https://my-webhook.com\" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --flexible true --request-body \"{\\\"hello\\\": true}\" --parameters-mapping \"my-param@$.fully.qualified.path.to.field, my-param2@$.fully.qualified.path.to.field2\"\n

The above command will give you output similar to the following:

$ cxcli webhook create my-webhook --url \"https://my-webhook.com\" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --flexible true --request-body \"{\\\"hello\\\": true}\" --parameters-mapping \"my-param@$.fully.qualified.path.to.field, my-param2@$.fully.qualified.path.to.field2\"\nINFO Webhook created with id: projects/test-cx-346408/locations/us-central1/agents/40278ea0-c0fc-4d9a-a4d4-caa68d86295f/webhooks/13df6f13-6848-4fab-8cda-752b4f9819fa 
"},{"location":"webhooks/create/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX webhook creation, refer to the official documentation.

"},{"location":"webhooks/delete/","title":"Delete","text":""},{"location":"webhooks/delete/#usage","title":"Usage","text":"

You can find the delete functionality within the cxcli webhook delete subcommand. You can read the documentation about this command here.

"},{"location":"webhooks/delete/#example","title":"Example","text":"

Here is a simple example of the cxcli webhook delete command:

cxcli webhook delete my-webhook --agent-name test-agent --project-id test-cx-346408 --location-id us-central1\n

The above command will give you output similar to the following:

$ cxcli webhook delete my-webhook --agent-name test-agent --project-id test-cx-346408 --location-id us-central1\nINFO Webhook deleted\n
"},{"location":"webhooks/delete/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX webhook deletion, refer to the official documentation.

"},{"location":"webhooks/introduction/","title":"Webhooks","text":""},{"location":"webhooks/introduction/#what-is-this","title":"What is this?","text":"

Webhooks serve as platforms for hosting your business logic or invoking other services. Within a session, webhooks enable you to utilize the data extracted through Dialogflow's natural language processing to generate dynamic responses, verify gathered data, or initiate actions on the backend.

There are two types of webhooks: standard webhooks and flexible webhooks. In the case of a standard webhook, the request and response fields are determined by Dialogflow. On the other hand, a flexible webhook allows you to specify the request and response fields according to your requirements.

With cxcli, you can easily interact with the webhooks of your Dialogflow CX agents.

All of the commands that you have available in cxcli to interact with your webhooks are located within the cxcli webhook subcommand.

You can create, update or delete standard and flexible webhooks with cxcli for a specific environment by setting the --environment parameter. If you do not specify an environment, the cxcli will create, update or delete this webhook for all environments.

"},{"location":"webhooks/introduction/#create","title":"Create","text":"

The cxcli has a command that allows you to create a standard or flexible webhook. You can find a more detailed information here.

"},{"location":"webhooks/introduction/#update","title":"Update","text":"

The cxcli has a command that allows you to update a standard or flexible webhook. You can find a more detailed information here.

"},{"location":"webhooks/introduction/#delete","title":"Delete","text":"

The cxcli has a command that allows you to delete your standard or flexible webhook. You can find a more detailed explanation here.

"},{"location":"webhooks/introduction/#useful-links","title":"Useful Links","text":"

If you want to see the full usage of the cxcli webhook command, please refer to this page.

If you want to learn more about Dialogflow CX webhooks, refer to the official documentation.

"},{"location":"webhooks/update/","title":"Update","text":""},{"location":"webhooks/update/#usage","title":"Usage","text":"

You can find the update functionality within the cxcli webhook update subcommand. You can read the documentation about this command here.

"},{"location":"webhooks/update/#flexible-webhook","title":"Flexible Webhook","text":"

If you want to create a flexible webhook, you have to set the --flexible parameter. When you set these parameters, you have to provide a --request-body and a --parameters-mapping parameter:

  1. The --request-body parameter is a JSON string that will be sent to the webhook.
  2. The --parameters-mapping parameter is a comma-separated list of key-value pairs. The key is the name of the parameter that will be sent to the webhook, and the value is a JSON path that will be used to extract the value from the --request-body parameter. This parameter has the following format:
    parameter@json-path,paramter2@json-path2\n
    An example of a parameter mapping: my-param@$.fully.qualified.path.to.field
"},{"location":"webhooks/update/#example","title":"Example","text":""},{"location":"webhooks/update/#standard-webhook","title":"Standard Webhook","text":"

Here is a simple example of the cxcli webhook update command:

cxcli webhook update my-webhook --url \"https://my-webhook-updated.com\" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 

The above command will give you output similar to the following:

$ cxcli webhook update my-webhook --url \"https://my-webhook-updated.com\" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 \nINFO Webhook updated\n
"},{"location":"webhooks/update/#flexible-webhook_1","title":"Flexible Webhook","text":"

Here is a simple example of the cxcli webhook update command:

cxcli webhook create my-webhook --url \"https://my-webhook-updated.com\" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --flexible true --request-body \"{\\\"hello\\\": false}\" --parameters-mapping \"my-param@$.fully.qualified.path.to.field\"\n

The above command will give you output similar to the following:

$ cxcli webhook create my-webhook --url \"https://my-webhook-updated.com\" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --flexible true --request-body \"{\\\"hello\\\": false}\" --parameters-mapping \"my-param@$.fully.qualified.path.to.field\"\nINFO Webhook updated\n
"},{"location":"webhooks/update/#useful-links","title":"Useful Links","text":"

If you want to learn more about Dialogflow CX webhook update, refer to the official documentation.

"}]} \ No newline at end of file diff --git a/security/index.html b/security/index.html new file mode 100644 index 00000000..f1c792a8 --- /dev/null +++ b/security/index.html @@ -0,0 +1,1745 @@ + + + + + + + + + + + + + + + + + + + + + + + + Security Policy - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Security Policy

+

Supported Versions

+

Only the last stable version at any given point.

+

Reporting a Vulnerability

+

Vulnerabilities can be disclosed via email to dialogflowcxcli@gmail.com

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 00000000..012c4816 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,513 @@ + + + + https://cxcli.xavidop.me/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/ci/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/dialog/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/links/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/security/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/stt/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/troubleshooting/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/tts/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/agents/create/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/agents/delete/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/agents/export/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/agents/introduction/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/agents/restore/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/agents/update/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_agent/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_agent_create/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_agent_delete/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_agent_export/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_agent_restore/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_agent_update/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_completion/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_completion_bash/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_completion_fish/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_completion_powershell/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_completion_zsh/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_dialog/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_entity-type/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_entity-type_create/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_entity-type_delete/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_entity-type_update/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_environment/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_environment_create/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_environment_delete/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_environment_execute-cicd/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_environment_update/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_flow-version/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_flow-version_create/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_flow-version_delete/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_flow-version_update/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_flow/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_flow_create/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_flow_delete/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_flow_train/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_flow_update/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_intent/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_intent_create/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_intent_delete/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_intent_update/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_jsonschema/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_profile-nlu/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_profile-nlu_execute/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_stt/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_stt_recognize/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_tts/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_tts_synthesize/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_version/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_webhook/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_webhook_create/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_webhook_delete/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/cmd/cxcli_webhook_update/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/community/contributing/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/community/sponsors/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/community/users/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/entitytypes/create/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/entitytypes/delete/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/entitytypes/introduction/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/entitytypes/update/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/environments/cicd/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/environments/create/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/environments/delete/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/environments/introduction/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/environments/update/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/flows/create/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/flows/delete/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/flows/introduction/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/flows/train/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/flows/update/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/flowversions/create/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/flowversions/delete/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/flowversions/introduction/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/flowversions/update/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/intents/create/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/intents/delete/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/intents/introduction/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/intents/update/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/nluprofiler/examples/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/nluprofiler/introduction/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/nluprofiler/suites/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/nluprofiler/tests/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/nluprofiler/examples/audio/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/nluprofiler/examples/simple/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/nluprofiler/examples/system/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/nluprofiler/examples/text/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/overview/authentication/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/overview/faq/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/overview/install/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/overview/roadmap/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/webhooks/create/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/webhooks/delete/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/webhooks/introduction/ + 2023-12-13 + daily + + + https://cxcli.xavidop.me/webhooks/update/ + 2023-12-13 + daily + + \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz new file mode 100644 index 0000000000000000000000000000000000000000..608f93fc81e0e83b34a0ed668f49412dfe4eca3c GIT binary patch literal 804 zcmV+<1Ka!`iwFqSc6nt2|8r?{Wo=<_E_iKh0M*;ga+@#^2k?8J!s9z8AD6b{IJZ7Q zduC*@Hfn@Kq{ZMoeMP_+dwS`m^Iu==V21e(-j!C1vVHAqyE;*b#=DpG*tT`>-u%~W!nZDiC5`l7hl#DbMrmVyRO?r!&Iv#ZhScAQCI1Ym`?}uht0S3 z?#n8@h6{|JK3`kw^=`OIOqbEUwr10-lPP_(sVU#)!`I8RRpi>2yQhbz=j`z*dwfo( zOve_d=}NgH9Rj`YN@eVMn=g)xjC^+dlSmstRB4p;M?jc0?kxhkBI!05J|ohY0aYA) zySEf8?>P+!h(bmTG<77GU^oSip{k_fXhj@g530KHfudhoE~Y{#aCKUpFa0G3T7WF^j#5l@#m2 z$gwuQOAGgktd%1E0Kd7gOX@2zjZ$d|oAJ3JDNYGf|B@@909bMb%vt14CU{q)SE>uA zjG(=8MFj1YOFik9Dbq%mV$cFI?O=VEP5pc^Pzkwq;}wu>H(nuu3lEeMs8Ry7;Ghit zI3*!}jAQibY9va?p-Czrizcan0R0`k8#f3*Gn?QK#!}{NE5&&!rlGx5BVQb+sB`!@+j2~+!pDqwEEP;n=BU)QZ0c2sHaIGBA4 zx=rW`jZLaTe2CD^cukXW-3EOC)TPFOlHeh?Z2?k!aDSO`(a|Q@%Cgrq4nN zoIeXCd;%@3uo*P;xq!oRP zFmPaAfUq%n0fL9)g$Wyp&bCu)I^@)=Ve4N6XM+FaOKNNl!{5&&ymSqNTu%+CK+Y<|8);@uxxo$&ORLI41z+=$iy literal 0 HcmV?d00001 diff --git a/static/hi.mp3 b/static/hi.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..d17b135ac0b37e1483570f327ea8381141bcbeb3 GIT binary patch literal 19884 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 literal 0 HcmV?d00001 diff --git a/static/run b/static/run new file mode 100644 index 00000000..2a108d41 --- /dev/null +++ b/static/run @@ -0,0 +1,45 @@ +#!/bin/sh +set -e + + +echo "Using the OSS distribution..." +RELEASES_URL="https://github.com/xavidop/dialogflow-cx-cli/releases" +FILE_BASENAME="cxcli" + +test -z "$VERSION" && VERSION="$(curl -sfL -o /dev/null -w %{url_effective} "$RELEASES_URL/latest" | + rev | + cut -f1 -d'/'| + rev)" + +test -z "$VERSION" && { + echo "Unable to get cxcli version." >&2 + exit 1 +} + +test -z "$TMPDIR" && TMPDIR="$(mktemp -d)" +export TAR_FILE="$TMPDIR/${FILE_BASENAME}_$(uname -s)_$(uname -m).tar.gz" + +( + cd "$TMPDIR" + echo "Downloading Dialogflow CX CLI $VERSION..." + curl -sfLo "$TAR_FILE" \ + "$RELEASES_URL/download/$VERSION/${FILE_BASENAME}_$(uname -s)_$(uname -m).tar.gz" + curl -sfLo "checksums.txt" "$RELEASES_URL/download/$VERSION/checksums.txt" + curl -sfLo "checksums.txt.sig" "$RELEASES_URL/download/$VERSION/checksums.txt.sig" + curl -sfLo "checksums.txt.pem" "$RELEASES_URL/download/$VERSION/checksums.txt.pem" + echo "Verifying checksums..." + sha256sum --ignore-missing --quiet --check checksums.txt + if command -v cosign >/dev/null 2>&1; then + echo "Verifying signatures..." + COSIGN_EXPERIMENTAL=1 cosign verify-blob \ + --cert checksums.txt.pem \ + --signature checksums.txt.sig \ + checksums.txt + else + echo "Could not verify signatures, cosign is not installed." + fi +) + +tar -xf "$TAR_FILE" -C "$TMPDIR" +"${TMPDIR}/cxcli" "$@" + diff --git a/static/suite.json b/static/suite.json new file mode 100644 index 00000000..9f50f89f --- /dev/null +++ b/static/suite.json @@ -0,0 +1,66 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://github.com/xavidop/dialogflow-cx-cli/internal/types/suite", + "$ref": "#/$defs/Suite", + "$defs": { + "Suite": { + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "ProjectID": { + "type": "string" + }, + "LocationID": { + "type": "string" + }, + "AgentName": { + "type": "string" + }, + "Tests": { + "items": { + "$ref": "#/$defs/Tests" + }, + "type": "array" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "Name", + "Description", + "ProjectID", + "LocationID", + "AgentName", + "Tests" + ] + }, + "Tests": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://github.com/xavidop/dialogflow-cx-cli/internal/types/tests", + "$ref": "#/$defs/Tests", + "$defs": { + "Tests": { + "properties": { + "ID": { + "type": "string" + }, + "File": { + "type": "string" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "ID", + "File" + ] + } + } + } + }, + "description": "cxcli suite definition file" + } \ No newline at end of file diff --git a/static/test.json b/static/test.json new file mode 100644 index 00000000..4e7f7a0e --- /dev/null +++ b/static/test.json @@ -0,0 +1,110 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://github.com/xavidop/dialogflow-cx-cli/internal/types/test", + "$ref": "#/$defs/Test", + "$defs": { + "Check": { + "properties": { + "ID": { + "type": "string" + }, + "Input": { + "$ref": "#/$defs/Input" + }, + "Validate": { + "$ref": "#/$defs/Validate" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "ID", + "Input", + "Validate" + ] + }, + "Input": { + "properties": { + "Type": { + "type": "string" + }, + "Text": { + "type": "string" + }, + "Audio": { + "type": "string" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "Type", + "Text", + "Audio" + ] + }, + "Parameter": { + "properties": { + "Parameter": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "Parameter", + "Value" + ] + }, + "Test": { + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "LocaleID": { + "type": "string" + }, + "Checks": { + "items": { + "$ref": "#/$defs/Check" + }, + "type": "array" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "Name", + "Description", + "LocaleID", + "Checks" + ] + }, + "Validate": { + "properties": { + "Intent": { + "type": "string" + }, + "Parameters": { + "items": { + "$ref": "#/$defs/Parameter" + }, + "type": "array" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "Intent", + "Parameters" + ] + } + }, + "description": "cxcli test definition file" + } \ No newline at end of file diff --git a/stt/index.html b/stt/index.html new file mode 100644 index 00000000..8cf69a57 --- /dev/null +++ b/stt/index.html @@ -0,0 +1,1872 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Speech-to-text - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Speech-to-text

+

+ Google Cloud TTS Logo +

+ +

The cxcli tool has various commands that allow you to interact with Google Cloud's Speech to Text service using the Cloud Speech-to-text API!

+
+

Is this your first time using this feature?

+

Before you start using this functionality, please, read the authentication page.

+
+

Usage

+

You can find the speech-to-text functionality within the cxcli stt subcommand. You can read the documentation about this command here.

+

The cxcli stt command has a recognize subcommand. You can find the usage of this command here.

+

Parameters

+

These are the relevant parameters that you can use to interact with Google Cloud STT:

+
    +
  1. locale: this parameter accepts all of the locales that are available in the Google Cloud Speech-to-text API. You can find all the locales available here.
  2. +
+

Audio input file

+

It is important to know that the input audio needs to be in the following format:

+
    +
  1. A sample rate of 16000 Hertz
  2. +
  3. The audio encoding has to be Linear16. Linear16 is a 16-bit linear pulse-code modulation (PCM) encoding.
  4. +
+

If you don't have a file with this format, you can create it by yourself using the cxcli tts command! All of the relevant information is located here.

+

Example

+

Here is a simple example of the cxcli stt recognize command:

+
cxcli stt recognize hi.mp3  --locale en-US
+
+

The above command will give you output similar to the following:

+
$ cxcli stt recognize hi.mp3 --locale en-US --verbose
+INFO Duration time: 570 miliseconds
+INFO Detections: 1
+INFO 1. Text detected: hi
+INFO 1. Confidence: 79.276474%
+
+
+

Are you running this command in a CI/CD pipeline?

+

If this is the case, we recommend that you set the --output-format parameter to json.

+
+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/troubleshooting/index.html b/troubleshooting/index.html new file mode 100644 index 00000000..e0270e2c --- /dev/null +++ b/troubleshooting/index.html @@ -0,0 +1,1845 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Troubleshooting - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + + + + + +
+
+ + + + + + + + +

Troubleshooting

+

Getting support

+

All users have access to a public Discord server for support and collaboration. Refer to the links page for more information.

+

Project not found

+

Make sure that you have configured either the gcloud CLI or the authentication json file properly. You can find more information on the Authentication page.

+

You need to enable the Dialogflow API

+

You need to enable the Dialogflow API in your Google Cloud project if you want to interact with cxcli. Make sure you have the permissions needed for the tool. You can find more information on the Authentication page.

+

You need to enable the Cloud Speech-to-text API

+

You need to enable the Cloud Speech-to-text API in your Google Cloud project if you want to run the cxcli stt commands. You can find more information on the Authentication page.

+

You need to enable the Cloud Text-to-speech API

+

You need to enable the Cloud Text-to-speech API in your Google Cloud project if you want to run the cxcli tts commands. You can find more information on the Authentication page.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/tts/index.html b/tts/index.html new file mode 100644 index 00000000..4ddc9ccb --- /dev/null +++ b/tts/index.html @@ -0,0 +1,1867 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Text-to-speech - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Text-to-speech

+

+ Google Cloud TTS Logo +

+ +

The cxcli tool has various commands that allow you to interact with Google Cloud's Text to Speech service using the Cloud Text-to-Speech API!

+
+

Is this your first time using this feature?

+

Before you start using this functionality, please, read the authentication page.

+
+

Usage

+

You can find the text-to-speech functionality within the cxcli tts subcommand. You can read the documentation about this command here.

+

The cxcli tts command has a synthesize subcommand. You can find the usage of this command here.

+

Parameters

+

These are the relevant parameters that you can use to interact with Google Cloud TTS:

+
    +
  1. locale: this parameter accepts all of the locales that are available in the Google Cloud Text-to-speech API. You can find all the locales available here.
  2. +
  3. output-file: MP3 audio file where we are going to output the synthesized text.
  4. +
+

Output

+

It is important to know that the output audio will have the following format:

+
    +
  1. A sample rate of 16000 Hertz
  2. +
  3. The audio encoding will be Linear16. Linear16 is a 16-bit linear pulse-code modulation (PCM) encoding.
  4. +
+

Example

+

Here is a simple example of the cxcli tts synthesize command:

+
cxcli tts synthesize hi --locale en-US --output-file hi.mp3
+
+

The above command will give you an audio file similar to the following:

+

+

You can download the audio file here.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/webhooks/create/index.html b/webhooks/create/index.html new file mode 100644 index 00000000..df172e06 --- /dev/null +++ b/webhooks/create/index.html @@ -0,0 +1,1904 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Create

+

Usage

+

You can find the create functionality within the cxcli webhook create subcommand. You can read the documentation about this command here.

+

Flexible Webhook

+

If you want to create a flexible webhook, you have to set the --flexible parameter. When you set these parameters, you have to provide a --request-body and a --parameters-mapping parameter:

+
    +
  1. The --request-body parameter is a JSON string that will be sent to the webhook.
  2. +
  3. The --parameters-mapping parameter is a comma-separated list of key-value pairs. The key is the name of the parameter that will be sent to the webhook, and the value is a JSON path that will be used to extract the value from the --request-body parameter. This parameter has the following format: +
    parameter@json-path,paramter2@json-path2
    +
    +An example of a parameter mapping: my-param@$.fully.qualified.path.to.field
  4. +
+

Example

+

Standard Webhook

+

Here is a simple example of using the cxcli webhook create command:

+
cxcli webhook create my-webhook --url "https://my-webhook.com" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 
+
+

The above command will give you output similar to the following:

+
$ cxcli webhook create my-webhook --url "https://my-webhook.com" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 
+INFO Webhook created with id: projects/test-cx-346408/locations/us-central1/agents/40278ea0-c0fc-4d9a-a4d4-caa68d86295f/webhooks/55f56aeb-be30-40a2-8bd6-cbbd6b9cc041
+
+

Flexible Webhook

+
cxcli webhook create my-webhook --url "https://my-webhook.com" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --flexible true --request-body "{\"hello\": true}" --parameters-mapping "my-param@$.fully.qualified.path.to.field, my-param2@$.fully.qualified.path.to.field2"
+
+

The above command will give you output similar to the following:

+
$ cxcli webhook create my-webhook --url "https://my-webhook.com" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --flexible true --request-body "{\"hello\": true}" --parameters-mapping "my-param@$.fully.qualified.path.to.field, my-param2@$.fully.qualified.path.to.field2"
+INFO Webhook created with id: projects/test-cx-346408/locations/us-central1/agents/40278ea0-c0fc-4d9a-a4d4-caa68d86295f/webhooks/13df6f13-6848-4fab-8cda-752b4f9819fa 
+
+ +

If you want to learn more about Dialogflow CX webhook creation, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/webhooks/delete/index.html b/webhooks/delete/index.html new file mode 100644 index 00000000..916e2af1 --- /dev/null +++ b/webhooks/delete/index.html @@ -0,0 +1,1821 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Delete - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Delete

+

Usage

+

You can find the delete functionality within the cxcli webhook delete subcommand. You can read the documentation about this command here.

+

Example

+

Here is a simple example of the cxcli webhook delete command:

+
cxcli webhook delete my-webhook --agent-name test-agent --project-id test-cx-346408 --location-id us-central1
+
+

The above command will give you output similar to the following:

+
$ cxcli webhook delete my-webhook --agent-name test-agent --project-id test-cx-346408 --location-id us-central1
+INFO Webhook deleted
+
+ +

If you want to learn more about Dialogflow CX webhook deletion, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/webhooks/introduction/index.html b/webhooks/introduction/index.html new file mode 100644 index 00000000..208e0ad2 --- /dev/null +++ b/webhooks/introduction/index.html @@ -0,0 +1,1852 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Introduction - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Webhooks

+

What is this?

+

Webhooks serve as platforms for hosting your business logic or invoking other services. Within a session, webhooks enable you to utilize the data extracted through Dialogflow's natural language processing to generate dynamic responses, verify gathered data, or initiate actions on the backend.

+

There are two types of webhooks: standard webhooks and flexible webhooks. In the case of a standard webhook, the request and response fields are determined by Dialogflow. On the other hand, a flexible webhook allows you to specify the request and response fields according to your requirements.

+

With cxcli, you can easily interact with the webhooks of your Dialogflow CX agents.

+

All of the commands that you have available in cxcli to interact with your webhooks are located within the cxcli webhook subcommand.

+

You can create, update or delete standard and flexible webhooks with cxcli for a specific environment by setting the --environment parameter. If you do not specify an environment, the cxcli will create, update or delete this webhook for all environments.

+

Create

+

The cxcli has a command that allows you to create a standard or flexible webhook. You can find a more detailed information here.

+

Update

+

The cxcli has a command that allows you to update a standard or flexible webhook. You can find a more detailed information here.

+

Delete

+

The cxcli has a command that allows you to delete your standard or flexible webhook. You can find a more detailed explanation here.

+ +

If you want to see the full usage of the cxcli webhook command, please refer to this page.

+

If you want to learn more about Dialogflow CX webhooks, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/webhooks/update/index.html b/webhooks/update/index.html new file mode 100644 index 00000000..fada18ce --- /dev/null +++ b/webhooks/update/index.html @@ -0,0 +1,1905 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Update - Dialogflow CX CLI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Update

+

Usage

+

You can find the update functionality within the cxcli webhook update subcommand. You can read the documentation about this command here.

+

Flexible Webhook

+

If you want to create a flexible webhook, you have to set the --flexible parameter. When you set these parameters, you have to provide a --request-body and a --parameters-mapping parameter:

+
    +
  1. The --request-body parameter is a JSON string that will be sent to the webhook.
  2. +
  3. The --parameters-mapping parameter is a comma-separated list of key-value pairs. The key is the name of the parameter that will be sent to the webhook, and the value is a JSON path that will be used to extract the value from the --request-body parameter. This parameter has the following format: +
    parameter@json-path,paramter2@json-path2
    +
    +An example of a parameter mapping: my-param@$.fully.qualified.path.to.field
  4. +
+

Example

+

Standard Webhook

+

Here is a simple example of the cxcli webhook update command:

+
cxcli webhook update my-webhook --url "https://my-webhook-updated.com" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 
+
+

The above command will give you output similar to the following:

+
$ cxcli webhook update my-webhook --url "https://my-webhook-updated.com" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 
+INFO Webhook updated
+
+

Flexible Webhook

+

Here is a simple example of the cxcli webhook update command:

+
cxcli webhook create my-webhook --url "https://my-webhook-updated.com" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --flexible true --request-body "{\"hello\": false}" --parameters-mapping "my-param@$.fully.qualified.path.to.field"
+
+

The above command will give you output similar to the following:

+
$ cxcli webhook create my-webhook --url "https://my-webhook-updated.com" --agent-name test-agent --project-id test-cx-346408 --location-id us-central1 --flexible true --request-body "{\"hello\": false}" --parameters-mapping "my-param@$.fully.qualified.path.to.field"
+INFO Webhook updated
+
+ +

If you want to learn more about Dialogflow CX webhook update, refer to the official documentation.

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file