6 votes

définir les paramètres dans EventInput dans Dialogflow V2 API

J'essaie désespérément de définir des paramètres dans une

dialogflow.types.EventInput

en python.

Este doc indique que les paramètres doivent être de type Struct .

Je lis aquí que les paramètres doivent être un google.protobuf.Struct. Mais cela ne fonctionne pas pour moi.

Y a-t-il un autre Struct équivalent en python ?

Si j'envoie le EventInput sans paramètres, l'intention est détectée correctement.

J'ai essayé jusqu'à présent :

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)

Quelqu'un a-t-il une expérience de ce cas d'utilisation ?

Des choses que j'ai aussi essayées :

  1. Passez un class nommé p rend :

    Le paramètre de MergeFrom() doit être une instance de la même classe : expected La structure a obtenu un p. pour le champ EventInput.parameters

  2. Passez un dict :

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

    rendements :

    Le message de protocole Struct n'a pas de champ "given-name".

  3. Générer une structure avec un constructeur :

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

    donne parfois des résultats :

    Exception dans le fil d'exécution ptvsd.stopping (probablement soulevée pendant l'arrêt de l'interpréteur) :

This is the parameter section if my intent

/EventInput

8voto

sid8491 Points 2948

C'est comme ça que j'ai fait :

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 :
Dans la console dialogflow, vous devez donner les valeurs par défaut des paramètres comme #even_name.parameter_name .
Dans ce cas, pour le paramètre given-name ce serait #greetPerson.given-name et pour last-name ce serait #greetPerson.last-name .

Référence du document :
Nous utilisons DetectIntent dans lequel nous utilisons Entrée de requête dans lequel nous utilisons finalement EvenInput

J'espère que cela vous aidera.

0voto

MortFollower Points 66

L'information dans la réponse acceptée est incorrecte.

Il n'est pas nécessaire de fournir des valeurs par défaut.

Vous pouvez faire référence aux paramètres de l'événement directement dans la colonne Valeur du tableau Paramètres.

Pour référencer un paramètre d'événement dans la table des paramètres ou dans une réponse, utilisez le format suivant : #nom-de-l'événement.nom-du-paramètre.

docs sur le flux de dialogue

Par conséquent, il suffirait de mettre #greetPerson.given-name dans Value.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X