作者:语笑嫣然小公主155 | 来源:互联网 | 2022-11-21 12:25
我拼命尝试在
dialogflow.types.EventInput
在python中。
该doc说参数必须是type Struct
。
我在这里读到,参数必须是google.protobuf.Struct。但这对我不起作用。
Struct
python中是否还有另一个等效的类型?
如果我发送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)
有人对此用例有经验吗?
我也尝试过的事情:
传递一个class
名为p的产量:
MergeFrom()的参数必须是同一类的实例:预期的Struct得到p。用于字段EventInput.parameters
传递命令:
parameters = {
'given-name': 'Jeff',
'last-name': 'Bridges'}
产量:
协议消息Struct没有“给定名称”字段。
用构造函数生成Struct:
from google.protobuf.struct_pb2 import Struct, Value
parameters = Struct(fields={
'given-name':Value(string_value='Jeff'),
'last-name':Value(string_value='Bidges')
})
有时会产生:
线程ptvsd.stopping中的异常(很可能在解释器关闭期间引发):
/事件输入
1> sid8491..:
这就是我这样做的方式:
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,其中使用的是QueryInput,最后使用的是EvenInput。
希望能帮助到你。