在Dialogflow V2 API中的EventInput中设置参数

TVK*_*TVK 4 python protocol-buffers chatbot dialogflow-es

我拼命尝试在

dialogflow.types.EventInput
Run Code Online (Sandbox Code Playgroud)

在python中。

doc说参数必须是type Struct

在这里读到,参数必须是google.protobuf.Struct。但这对我不起作用。

Structpython中是否还有另一个等效的类型?

如果我发送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)
Run Code Online (Sandbox Code Playgroud)

有人对此用例有经验吗?

我也尝试过的事情:

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

    MergeFrom()的参数必须是同一类的实例:预期的Struct得到p。用于字段EventInput.parameters

  2. 传递命令:

    parameters = {
        'given-name': 'Jeff',
        'last-name': 'Bridges'} 
    
    Run Code Online (Sandbox Code Playgroud)

    产量:

    协议消息Struct没有“给定名称”字段。

  3. 用构造函数生成Struct:

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

    有时会产生:

    线程ptvsd.stopping中的异常(很可能在解释器关闭期间引发):

如果我的意图是这是参数部分

/事件输入

sid*_*491 6

这就是我这样做的方式:

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)
Run Code Online (Sandbox Code Playgroud)

注意:
在dialogflow控制台中,必须将参数的默认值指定为#even_name.parameter_name
在这种情况下进行参数given-name这将是#greetPerson.given-namelast-name这将是#greetPerson.last-name

文档参考:
我们使用的是DetectIntent,其中使用的是QueryInput,最后使用的是EvenInput。

希望能帮助到你。