在 Dialogflow V2 的 EventInput 中设置参数 API

set parameters in EventInput in Dialogflow V2 API

我拼命尝试在

中设置参数
dialogflow.types.EventInput

在 python.

这个doc说参数需要是Struct类型。

我读到 here 参数需要是 google.protobuf.Struct。 但这对我不起作用。

在 python 中是否有另一个 Struct 类型等效?

如果我发送不带参数的 EventInput,则可以正确检测到意图。

到目前为止我试过这个:

import dialogflow_v2 as dialogflow
session_client = dialogflow.SessionsClient()

session = session_client.session_path(project_id, session_id)
parameters = struct_pb2.Struct()
parameters['given-name'] = 'Jeff'
parameters['last-name'] = 'Bridges'

event_input = dialogflow.types.EventInput(         
    name='greetPerson',
    language_code='de',
    parameters=parameters)

query_input = dialogflow.types.QueryInput(event=event_input)

response = session_client.detect_intent(
    session=session, query_input=query_input)

有人对这个用例有经验吗?

我也试过的东西:

  1. 传递一个 class 命名的 p 产量:

    Parameter to MergeFrom() must be instance of same class: expected Struct got p. for field EventInput.parameters

  2. 传递指令:

    parameters = {
        'given-name': 'Jeff',
        'last-name': 'Bridges'} 
    

    产量:

    Protocol message Struct has no "given-name" field.

  3. 使用构造函数生成结构:

    from google.protobuf.struct_pb2 import Struct, Value
    parameters = Struct(fields={
        'given-name':Value(string_value='Jeff'),
        'last-name':Value(string_value='Bidges')
    })
    

    有时产量:

    Exception in thread ptvsd.stopping (most likely raised during interpreter shutdown):

/事件输入

我是这样做的:

import dialogflow
from google.protobuf import struct_pb2

session_client = dialogflow.SessionsClient()
session = session_client.session_path(project_id, session_id)

parameters = struct_pb2.Struct()
parameters["given-name"] = 'Jeff'
parameters["last-name"] = 'Bridges'

query_input = {
    'event': {
        "name": "greetPerson",
        "parameters": parameters,
        "language_code": "de"
    }
}

response = session_client.detect_intent(
    session=session,
    query_input=query_input)

注:
在 dialogflow 控制台中,您必须将参数的默认值设置为 #even_name.parameter_name.
在这种情况下,对于参数 given-name 它将是 #greetPerson.given-name 而对于 last-name 它将是 #greetPerson.last-name.

文档参考:
我们正在使用 DetectIntent, in which we are using QueryInput, in which finally we are using EvenInput

希望对您有所帮助。

已接受答案中的信息不正确。

您不必提供默认值。

您可以直接在参数table的值列中引用事件参数。

To reference an event parameter in the parameter table or a response, use the following format: #event-name.parameter-name.

dialogflow docs

因此,将#greetPerson.given-name 放入 Value 即可。