Intento desesperadamente establecer parámetros en una
dialogflow.types.EventInput
en python.
Este documento dice que los parámetros deben ser de tipo Struct
.
Leí aquí que los parámetros deben ser un google.protobuf.Struct. Pero no funciona para mí.
¿Hay otro tipo de Struct
equivalente en python?
Si envío el EventInput
sin parámetros, la intención se detecta correctamente.
Intenté esto hasta ahora:
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)
¿Alguien que tenga experiencia con este caso de uso?
Cosas que también probé
Pasa una class
llamada p rendimientos:
El parámetro para MergeFrom () debe ser una instancia de la misma clase: esperado Struct got p. para el campo EventInput.parameters
Pasar un dictado
parameters = { 'given-name': 'Jeff', 'last-name': 'Bridges'}
rendimientos
El mensaje de protocolo Struct no tiene un campo de “nombre de stack”.
Generar Struct con constructor:
from google.protobuf.struct_pb2 import Struct, Value parameters = Struct(fields={ 'given-name':Value(string_value='Jeff'), 'last-name':Value(string_value='Bidges') })
cede a veces:
Excepción en el hilo ptvsd.stopping (lo más probable es que se haya generado durante el cierre del intérprete):
/ EventInput
Así es como hice esto:
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)
Nota:
En la consola de dialogflow, debe dar los valores predeterminados de los parámetros como #even_name.parameter_name
.
En este caso, para el given-name
parámetro given-name
sería #greetPerson.given-name
y para last-name
sería #greetPerson.last-name
.
Referencia de documentos:
Estamos usando DetectIntent , en el que estamos usando QueryInput , en el que finalmente estamos usando EvenInput
Espero eso ayude.
La información en la respuesta aceptada es incorrecta.
No tienes que proporcionar valores por defecto.
Puede hacer referencia a los parámetros de eventos directamente en la columna Valor de la tabla Parámetros.
Para hacer referencia a un parámetro de evento en la tabla de parámetros o una respuesta, use el siguiente formato: # event-name.parameter-name.
documentos de flujo de diálogo
Por lo tanto, poner # greetPerson.given-name en Value sería suficiente.