2017-09-27 1 views
1

Je suis en train de soulever l'événement à Api.ai et transmettre des données dans le client pythonImpossible de transmettre des données à l'événement Api.ai

ai = apiai.ApiAI(CLIENT_ACCESS_TOKEN) 
parm = {} 
parm['amount'] = 222 
parm['CName'] = 'CustName' 

event1 = apiai.events.Event("MyCustomEvent") 
event1.data = parm 
request = ai.event_request(event1) 

MyCustomEvent est définie et liée à l'intention droite. Intention avec paramètres obligatoires définis CName et montant

L'événement et l'intention sont déclenchés lors de l'envoi de la demande. Mais les données ne sont pas mis en correspondance

Qu'est-ce que je fais mal? Quelqu'un peut-il s'il vous plaît aider Ou pointez-moi à un échantillon pour obtenir ce travail

Répondre

1

Ceci est un peu difficile et c'est quelque chose que j'ai découvert tout en travaillant avec API.ai. Autant que je sache, API.ai a beaucoup de "fonctionnalités non documentées", ceci étant l'une d'entre elles.

Vous pouvez réellement définir les paramètres lorsque vous déclenchez un événement, moins que l'événement que vous essayez de déclencher les mêmes paramètres que celui que vous passer à cette intention lors du déclenchement. Qu'est-ce qui se passe alors est la suivante: API.ai mystérieusement et magiquement "vide" ces paramètres, comme si elles sont réinitialisées par l'intention.

Je l'ai posté sur les forums API.ai à ce sujet, si elle est une caractéristique réelle ou un bug, mais je ne l'ai pas obtenu de réponse à ce sujet jusqu'ici.

Donc, pour vous donner un exemple concret, disons que nous avons:

Intent: "customIntent" 
Entity: "amount" 
Entity: "cname" 
Event: "myCustomEvent" 
ContextIn: "testIn" 
ContextOut: "testOut" 

si je déclenche cette intention avec un événement du webhook contenant le JSON suivant:

{ 
    "followupEvent": { 
    "name": "myCustomEvent", 
    "data": { 
     "amount": "2222", 
     "Cname": "a persons name", 
     "testentity": "this shouldn't be blank" 
    } 
    } 
} 

montant et Cname sera vide et réinitialisé par l'intention, vous pouvez rechercher le contexte dans la console API.ai pour voir ce résultat, cependant, testentity ne sera pas vide et réinitialisé puisque testentity n'est pas dans la liste des paramètres de l'intention.

C'est bizarre et déroutant, mais c'est ce qui s'est passé à travers plusieurs tests que j'ai courus. Pour résoudre ce problème, j'ai créé une solution de contournement en faisant une intention supplémentaire avec les mêmes "phrases utilisateur" et contextin et contextout que l'intention que j'ai essayé de déclencher en premier lieu mais avec la différence de ne pas ajouter de paramètres à cette nouvelle intention.

Il ressemble à ceci:

Intent: "customIntent" 
Entity: "amount" 
Entity: "cname" 
ContextIn: "testIn" 
ContextOut: "testOut" 

Intent: "workaroundIntent" 
Event: "myCustomEvent" 
ContextIn: "testIn" 
ContextOut: "testOut" 

Voilà comment je résolu moi-même, pourquoi cela arrive, je suis toujours en attente pour moi-même réponse par l'un des membres du personnel API.ai.

+0

Toutes nos excuses pour une réponse tardive, avez manqué votre réponse plus tôt. Merci pour une bonne explication, n'avait pas été en mesure de comprendre le comportement. Je vais essayer votre solution. Avoir mis dans une solution de contournement inefficace pendant ce temps. – Ajay