The 2.0 release of the google-cloud-dialogflow
client is a significant upgrade based on a next-gen code generator, and includes substantial interface changes. Existing code written for earlier versions of this library will likely require updates to use this version. This document describes the changes that have been made, and what you need to do to update your usage.
If you experience issues or have questions, please file an issue.
WARNING: Breaking change
The 2.0.0 release changes the name and import path of the library to fall under the google-cloud namespace.
No further updates will be made to the package dialogflow on PyPI.
Before:
python3 -m pip install dialogflow
import dialogflow
After:
python3 -m pip install google-cloud-dialogflow
from google.cloud import dialogflow
WARNING: Breaking change
The 2.0.0 release requires Python 3.6+.
WARNING: Breaking change
Methods expect request objects. We provide a script that will convert most common use cases.
- Install the library
$ python3 -m pip install google-cloud-dialogflow
- The scripts
fixup_dialogflow_v2_keywords.py
andfixup_dialogflow_v2beta1_keywords.py
are shipped with the library. It expects an input directory (with the code to convert) and an empty destination directory.
$ fixup_dialogflow_v2_keywords.py --input-directory .samples/ --output-directory samples/
Before:
import dialogflow
client = dialogflow.ContextsClient()
response = client.list_contexts(parent="projects/1337/agent/sessions/1024")
After:
from google.cloud import dialogflow
client = dialogflow.ContextsClient()
response = client.list_contexts(request={"parent": "projects/1337/agent/sessions/1024", page_size=10})
In google-cloud-dialogflow<2.0.0, parameters required by the API were positional parameters and optional parameters were keyword parameters.
Before:
def detect_intent(
self,
session,
query_input,
query_params=None,
output_audio_config=None,
output_audio_config_mask=None,
input_audio=None,
retry=google.api_core.gapic_v1.method.DEFAULT,
timeout=google.api_core.gapic_v1.method.DEFAULT,
metadata=None,
):
In the 2.0.0 release, all methods have a single positional parameter request. Method docstrings indicate whether a parameter is required or optional.
Some methods have additional keyword only parameters. The available parameters depend on the google.api.method_signature
annotation specified by the API producer.
After::
def detect_intent(self,
request=None,
*,
session: str=None,
query_input=None,
retry=gapic_v1.method.DEFAULT,
timeout=None,
metadata=(),
):
NOTE: The
request
parameter and flattened keyword parameters for the API are mutually exclusive. Passing both will result in an error.
Both of these calls are valid:
response = client.create_context(
request={
"parent": "parent_value",
"context": dialogflow.Context(name="name_value"),
}
)
response = client.create_context(
parent="parent_value",
context=dialogflow.Context(name="name_value"),
)
This call is invalid because it mixes request
with a keyword argument audio_config
. Executing this code will result in an error.
response = client.create_context(
request={
"parent": "parent_value",
},
context=dialogflow.Context(name="name_value"),
)
WARNING: Breaking change
The submodules enums
and types
have been removed in the versionless module.
Before:
import dialogflow
encoding = dialogflow.enums.AudioEncoding.AUDIO_ENCODING_FLAC
query_params = dialogflow.types.QueryParameters(time_zone="Europe/Paris")
After:
from google.cloud import dialogflow
encoding = dialogflow.AudioEncoding.AUDIO_ENCODING_FLAC
query_params = dialogflow.QueryParameters(time_zone="Europe/Paris")
The types
submodule is still present in the versioned module.
E.g.
from google.cloud import dialogvlow_v2
query_params = dialogvlow_v2.types.QueryParameters(time_zone="Europe/Paris")
WARNING: Breaking change
Some resource path helpers have been renamed, and others have been removed. See below for an alternative method or a string.
v2
from google.cloud import dialogflow_v2
# AgentsClient
project_path = dialogflow_v2.AgentsClient.common_project_path("PROJECT")
# ContextsClient
session_path = dialogflow_v2.SessionsClient.session_path("PROJECT", "SESSION")
# EntityTypesClient
agent_path = dialogflow_v2.AgentsClient.agent_path("PROJECT")
project_agent_path = dialogflow_v2.AgentsClient.agent_path("PROJECT")
# EnvironmentsClient
agent_path = dialogflow_v2.AgentsClient.agent_path("PROJECT")
# IntentsClient
agent_path = dialogflow_v2.AgentsClient.agent_path("PROJECT")
project_agent_path = dialogflow_v2.AgentsClient.agent_path("PROJECT")
# SessionEntityTypesClient
session_path = dialogflow_v2.SessionsClient.session_path("PROJECT", "SESSION")
v2beta1
from google.cloud import dialogflow_v2beta1
context = "CONTEXT"
entity_type = "ENTITY_TYPE"
environmnent = "ENVIRONMENT"
project = "PROJECT"
session = "SESSION"
user = "USER"
# AgentsClient
location_path = dialogflow_v2beta1.AgentsClient.common_location_path(
"PROJECT", "LOCATION"
)
project_path = dialogflow_v2beta1.AgentsClient.common_project_path("PROJECT")
# ContextsClient
environment_context_path = f"projects/{project}/agent/environments/{environment}/users/{user}/sessions/{session}/contexts/{context}"
environment_session_path = f"projects/{project}/agent/environments/{environment}/users/{user}/sessions/{session}"
session_path = dialogflow_v2beta1.SessionsClient.session_path("PROJECT", "SESSION")
# DocumentsClient
knowledge_base_path = dialogflow_v2beta1.KnowledgeBasesClient.knowledge_base_path(
"PROJECT", "KNOWLEDGE_BASE"
)
# EnvironmentsClient
agent_path = dialogflow_v2beta1.AgentsClient.agent_path("PROJECT")
# IntentsClient
agent_path = dialogflow_v2beta1.AgentsClient.agent_path("PROJECT")
project_path = dialogflow_v2beta1.AgentsClient.common_project_path("PROJECT")
# KnowledgeBasesClient
project_path = dialogflow_v2beta1.KnowledgeBasesClient.common_project_path("PROJECT")
# SessionEntityTypesClient
environment_session_path = f"projects/{project}/agent/environments/{environment}/users/{user}/sessions/{session}"
environment_sessions_entity_path = f"projects/{project}/agent/environments/{environment}/users/{user}/sessions/{session}/entityTypes/{entity_type}"
session_path = f"projects/{project}/agent/sessions/{session}"
# SessionsClient
environment_session_path = f"projects/{project}/agent/environments/{environment}/users/{user}/sessions/{session}"