set parameters in EventInput in Dialogflow V2 API

爷,独闯天下 提交于 2019-11-28 08:38:24

问题


I desperatly try to set parameters in a

dialogflow.types.EventInput

in python.

This doc says the parameters need to be of type Struct.

I read here that the parameters needs to be a google.protobuf.Struct. But it does not work for me.

Is there another Struct type equivalent in python?

If i send the EventInput without parameters, the intent is detected correctly.

I tried this so far:

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)

Anybody having experience with this usecase?

Things i also tried:

  1. Pass a class named p yields:

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

  2. Pass a dict:

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

    yields:

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

  3. Generate Struct with constructor:

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

    yields sometimes:

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

/EventInput


回答1:


This is how I did this:

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)

Note:
In dialogflow console, you must give default values of parameters as #even_name.parameter_name.
In this case for parameter given-name it would be #greetPerson.given-name and for last-name it would be #greetPerson.last-name.

Docs Reference:
We are using DetectIntent, in which we are using QueryInput, in which finally we are using EvenInput

Hope it helps.




回答2:


Information in accepted answer is incorrect.

You don't have to provide default values.

You can reference event parameters directly in Value column of Parameters table.

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

dialogflow docs

Therefore, putting #greetPerson.given-name in Value would be enough.



来源:https://stackoverflow.com/questions/54197528/set-parameters-in-eventinput-in-dialogflow-v2-api

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!