Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dialogflow es Dialogflow v2 Beta 1使用Python的更新意图_Dialogflow Es_Grpc_Google Api Python Client - Fatal编程技术网

Dialogflow es Dialogflow v2 Beta 1使用Python的更新意图

Dialogflow es Dialogflow v2 Beta 1使用Python的更新意图,dialogflow-es,grpc,google-api-python-client,Dialogflow Es,Grpc,Google Api Python Client,我迷路了。 我在我的项目中有一个当前存在的意图,我正在尝试以编程方式更新所有字段,因为这是我的项目所需要的 我阅读了文档并在GitHub上进行了检查,我认为我之所以会出错是因为我不理解源代码的这一部分: Args: intent(Union[dict,~google.cloud.dialogflow_v2beta1.types.intent]):必需。意图 更新。 格式:项目//agent/intents/。 如果提供dict,它必须与protobuf具有相同的形式 消息:class:~goog

我迷路了。 我在我的项目中有一个当前存在的意图,我正在尝试以编程方式更新所有字段,因为这是我的项目所需要的

我阅读了文档并在GitHub上进行了检查,我认为我之所以会出错是因为我不理解源代码的这一部分:

Args: intent(Union[dict,~google.cloud.dialogflow_v2beta1.types.intent]):必需。意图 更新。 格式:
项目//agent/intents/
。 如果提供dict,它必须与protobuf具有相同的形式 消息:class:
~google.cloud.dialogflow_v2beta1.types.Intent

(第484行供参考)

平台工作得很好我只是不知道我错过了什么

我的代码

from constants import *
from google.oauth2 import service_account
import dialogflow_v2beta1
cred = service_account.Credentials.from_service_account_file(AUTH_JSON)
client = dialogflow_v2beta1.IntentsClient(credentials=cred)
params = dialogflow_v2beta1.types.Intent.Parameter(name='test', display_name='test', value='test', is_list=True)
t = dialogflow_v2beta1.types.Intent.Message.Text(text='TEST TEXT')
m = dialogflow_v2beta1.types.Intent.Message(text=t)
p = dialogflow_v2beta1.types.Intent.TrainingPhrase.Part(text='test',entity_type='@test_type', alias='test_alias', user_defined=True)
t = dialogflow_v2beta1.types.Intent.TrainingPhrase(name='test',type=2, parts=[p])
modified_intent = dialogflow_v2beta1.types.Intent(
    display_name='test',       
    messages=[m],
    webhook_state=1,
    is_fallback=False,
    ml_disabled=False,
    input_context_names=PROJECT_DIR+'agent/sessions/-/contexts/' + 'TEST_CONTEXT',
    events='TESTING EVENT',
    training_phrases=[t],
    action='TESTING ACTION',
    reset_contexts=False,
    parameters=[params]
    ) 
name = client.intent_path(PROJECT_NAME, '7b8f2105-53d4-4724-8d4c-0170b8db7028')
intent = client.get_intent(name)
client.update_intent(intent=modified_intent, language_code=LANGUAGE_CODE, intent_view=0)
Traceback (most recent call last):
  File "/anaconda/envs/data/lib/python3.6/site-packages/google/api_core/grpc_helpers.py", line 57, in error_remapped_callable
    return callable_(*args, **kwargs)
  File "/anaconda/envs/data/lib/python3.6/site-packages/grpc/_channel.py", line 550, in __call__
    return _end_unary_response_blocking(state, call, False, None)
  File "/anaconda/envs/data/lib/python3.6/site-packages/grpc/_channel.py", line 467, in _end_unary_response_blocking
    raise _Rendezvous(state, None, None, deadline)
grpc._channel._Rendezvous: <_Rendezvous of RPC that terminated with:
        status = StatusCode.INVALID_ARGUMENT
        details = "Resource name '' does not match 'projects/*/agent/intents/*'."
        debug_error_string = "{"created":"@1552461629.958860000","description":"Error received from peer","file":"src/core/lib/surface/call.cc","file_line":1036,"grpc_message":"Resource name '' does not match 'projects/*/agent/intents/*'.","grpc_status":3}"
>

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "test.py", line 26, in <module>
    client.update_intent(intent=modified_intent, language_code=LANGUAGE_CODE, intent_view=0)
  File "/anaconda/envs/data/lib/python3.6/site-packages/dialogflow_v2beta1/gapic/intents_client.py", line 535, in update_intent
    request, retry=retry, timeout=timeout, metadata=metadata)
  File "/anaconda/envs/data/lib/python3.6/site-packages/google/api_core/gapic_v1/method.py", line 143, in __call__
    return wrapped_func(*args, **kwargs)
  File "/anaconda/envs/data/lib/python3.6/site-packages/google/api_core/retry.py", line 270, in retry_wrapped_func
    on_error=on_error,
  File "/anaconda/envs/data/lib/python3.6/site-packages/google/api_core/retry.py", line 179, in retry_target
    return target()
  File "/anaconda/envs/data/lib/python3.6/site-packages/google/api_core/timeout.py", line 214, in func_with_timeout
    return func(*args, **kwargs)
  File "/anaconda/envs/data/lib/python3.6/site-packages/google/api_core/grpc_helpers.py", line 59, in error_remapped_callable
    six.raise_from(exceptions.from_grpc_error(exc), exc)
  File "<string>", line 3, in raise_from
google.api_core.exceptions.InvalidArgument: 400 Resource name '' does not match 'projects/*/agent/intents/*'.
完整错误消息

from constants import *
from google.oauth2 import service_account
import dialogflow_v2beta1
cred = service_account.Credentials.from_service_account_file(AUTH_JSON)
client = dialogflow_v2beta1.IntentsClient(credentials=cred)
params = dialogflow_v2beta1.types.Intent.Parameter(name='test', display_name='test', value='test', is_list=True)
t = dialogflow_v2beta1.types.Intent.Message.Text(text='TEST TEXT')
m = dialogflow_v2beta1.types.Intent.Message(text=t)
p = dialogflow_v2beta1.types.Intent.TrainingPhrase.Part(text='test',entity_type='@test_type', alias='test_alias', user_defined=True)
t = dialogflow_v2beta1.types.Intent.TrainingPhrase(name='test',type=2, parts=[p])
modified_intent = dialogflow_v2beta1.types.Intent(
    display_name='test',       
    messages=[m],
    webhook_state=1,
    is_fallback=False,
    ml_disabled=False,
    input_context_names=PROJECT_DIR+'agent/sessions/-/contexts/' + 'TEST_CONTEXT',
    events='TESTING EVENT',
    training_phrases=[t],
    action='TESTING ACTION',
    reset_contexts=False,
    parameters=[params]
    ) 
name = client.intent_path(PROJECT_NAME, '7b8f2105-53d4-4724-8d4c-0170b8db7028')
intent = client.get_intent(name)
client.update_intent(intent=modified_intent, language_code=LANGUAGE_CODE, intent_view=0)
Traceback (most recent call last):
  File "/anaconda/envs/data/lib/python3.6/site-packages/google/api_core/grpc_helpers.py", line 57, in error_remapped_callable
    return callable_(*args, **kwargs)
  File "/anaconda/envs/data/lib/python3.6/site-packages/grpc/_channel.py", line 550, in __call__
    return _end_unary_response_blocking(state, call, False, None)
  File "/anaconda/envs/data/lib/python3.6/site-packages/grpc/_channel.py", line 467, in _end_unary_response_blocking
    raise _Rendezvous(state, None, None, deadline)
grpc._channel._Rendezvous: <_Rendezvous of RPC that terminated with:
        status = StatusCode.INVALID_ARGUMENT
        details = "Resource name '' does not match 'projects/*/agent/intents/*'."
        debug_error_string = "{"created":"@1552461629.958860000","description":"Error received from peer","file":"src/core/lib/surface/call.cc","file_line":1036,"grpc_message":"Resource name '' does not match 'projects/*/agent/intents/*'.","grpc_status":3}"
>

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "test.py", line 26, in <module>
    client.update_intent(intent=modified_intent, language_code=LANGUAGE_CODE, intent_view=0)
  File "/anaconda/envs/data/lib/python3.6/site-packages/dialogflow_v2beta1/gapic/intents_client.py", line 535, in update_intent
    request, retry=retry, timeout=timeout, metadata=metadata)
  File "/anaconda/envs/data/lib/python3.6/site-packages/google/api_core/gapic_v1/method.py", line 143, in __call__
    return wrapped_func(*args, **kwargs)
  File "/anaconda/envs/data/lib/python3.6/site-packages/google/api_core/retry.py", line 270, in retry_wrapped_func
    on_error=on_error,
  File "/anaconda/envs/data/lib/python3.6/site-packages/google/api_core/retry.py", line 179, in retry_target
    return target()
  File "/anaconda/envs/data/lib/python3.6/site-packages/google/api_core/timeout.py", line 214, in func_with_timeout
    return func(*args, **kwargs)
  File "/anaconda/envs/data/lib/python3.6/site-packages/google/api_core/grpc_helpers.py", line 59, in error_remapped_callable
    six.raise_from(exceptions.from_grpc_error(exc), exc)
  File "<string>", line 3, in raise_from
google.api_core.exceptions.InvalidArgument: 400 Resource name '' does not match 'projects/*/agent/intents/*'.
回溯(最近一次呼叫最后一次):
文件“/anaconda/envs/data/lib/python3.6/site packages/google/api_core/grpc_helpers.py”,第57行,错误\u重新映射\u可调用
返回可调用函数(*args,**kwargs)
文件“/anaconda/envs/data/lib/python3.6/site packages/grpc/_channel.py”,第550行,在调用中__
返回\u结束\u一元\u响应\u阻塞(状态、调用、错误、无)
文件“/anaconda/envs/data/lib/python3.6/site packages/grpc/_channel.py”,第467行,一元响应中
提升集合点(状态,无,无,截止日期)
grpc._通道_会合点:
上述异常是以下异常的直接原因:
回溯(最近一次呼叫最后一次):
文件“test.py”,第26行,在
client.update\u intent(intent=modified\u intent,language\u code=language\u code,intent\u view=0)
文件“/anaconda/envs/data/lib/python3.6/site packages/dialogflow_v2beta1/gapic/intents_client.py”,第535行,在update_intent中
请求,重试=重试,超时=超时,元数据=元数据)
文件“/anaconda/envs/data/lib/python3.6/site packages/google/api_core/gapic_v1/method.py”,第143行,在__
返回包装函数(*args,**kwargs)
文件“/anaconda/envs/data/lib/python3.6/site packages/google/api_core/retry.py”,第270行,在retry_wrapped_func中
on_错误=on_错误,
文件“/anaconda/envs/data/lib/python3.6/site packages/google/api_core/retry.py”,第179行,在retry_目标中
返回目标()
文件“/anaconda/envs/data/lib/python3.6/site packages/google/api_core/timeout.py”,第214行,在func_中带有超时
返回函数(*args,**kwargs)
文件“/anaconda/envs/data/lib/python3.6/site packages/google/api_core/grpc_helpers.py”,第59行,错误\u重新映射\u可调用
六、从(例外情况。从grpc错误(exc),exc)
文件“”,第3行,从
google.api_core.exceptions.InvalidArgument:400资源名称“”与“projects/*/agent/intents/*”不匹配。

您可以使用

name = client.intent_path(PROJECT_NAME, your_intent_id)
您将获得您意图的完整定义。
然后,您需要通过访问并分配您的值来更改此意图的值。
之后,您需要在
update\u intent()
函数中传递相同的意图。
还建议使用
update\u mask
避免更改任何其他字段或将其余字段设置为None

下面是将意向显示名称从问候更新为问候的示例:

client = dialogflow.IntentsClient()
intent_name = client.intent_path(project_id, intent_id)
intent = client.get_intent(intent_name, intent_view=dialogflow.enums.IntentView.INTENT_VIEW_FULL)
intent.display_name = 'hello'
update_mask = field_mask_pb2.FieldMask(paths=['display_name']) 
print(response)
您的代码中还需要额外的导入:

from google.protobuf import field_mask_pb2
这样,intent的显示名称将更改。
您也可以对其他属性执行相同的操作。只需记住通过以下方式传递属性所期望的值,您也可以从中获得帮助


希望能有所帮助。

项目名称的价值是什么?我的基本项目名称是在我的代理中转到“设置”页面时给出的。本质上,它只是“project ID”。intent名称的正确格式是:
'projects/{{project\u ID}}/agent/intents/{{your\u intent\u ID}}}
@sid8491获取intent并将其分配给变量“name”在我的调试中工作正常,当代码执行
client.update\u intent时会发生错误(意图=修改的意图,语言代码=语言代码,意图视图=0)
好的,我能够复制它,我在这里遇到了问题,你需要对你得到的意图进行修改,然后将其分配给
更新\u意图
。很快就会发布答案。伙计!你是摇滚明星,非常感谢。在线
update\u mask=field\u mask\u pb2.FieldMask(路径=['display\u name']
请在末尾添加一个“'),因为有字符最小长度限制,所以不允许我这样做。干杯man@Jonathan哦,是的,很抱歉误会了。现在已修复。@Jonathan当然,让我知道如何与您联系,:)我刚刚关注了您的媒体频道,您有LinkedIn个人资料吗?@Jonathan我在媒体上关注了您。。。。linkedin: