Cette bibliothèque est inspirée de dialogflow/dialogflow-fulfillment-nodejs.
Il prend en charge les requêtes et réponses JSON du webhook de traitement de Dialogflow pour les agents v1 et v2.
Pour une référence complète de la classe, veuillez vous référer au document.
Installer via composer : composer require eristemena/dialogflow-fulfillment-webhook-php
.
Pour lancer l'agent, utilisez le constructeur DialogflowWebhookClient
avec le paramètre d'entrée sous forme de tableau de requête provenant de Dialogflow.
En PHP Vanilla, cela peut être fait comme suit :
use Dialogflow WebhookClient ;
$ agent = new WebhookClient ( json_decode ( file_get_contents ( ' php://input ' ), true ));
// or
$ agent = WebhookClient :: fromData ( $ _POST );
ou si vous utilisez Laravel,
$ agent = Dialogflow WebhookClient :: fromData ( $ request -> json ()-> all ());
$ intent = $ agent -> getIntent ();
$ action = $ agent -> getAction ();
$ query = $ agent -> getQuery ();
$ parameters = $ agent -> getParameters ();
$ session = $ agent -> getSession ();
$ contexts = $ agent -> getContexts ();
$ language = $ agent -> getLocale ();
google
, facebook
, slack
, etc.) $ originalRequest = $ agent -> getRequestSource ();
$ originalRequest = $ agent -> getOriginalRequest ();
$ agentVersion = $ agent -> getAgentVersion ();
Pour envoyer une réponse, utilisez la méthode reply()
.
$ agent -> reply ( ' Hi, how can I help? ' );
Utilisez ensuite render()
pour obtenir la réponse dans le tableau. Tout ce que vous avez à faire est d'imprimer le tableau au format JSON,
header ( ' Content-type: application/json ' );
echo json_encode ( $ agent -> render ());
ou à Laravel,
return response ()-> json ( $ agent -> render ());
La charge utile de la réponse sera automatiquement formatée en fonction de la version de l'agent de la demande.
$ text = Dialogflow RichMessage Text :: create ()
-> text ( ' This is text ' )
-> ssml ( ' <speak>This is <say-as interpret-as="characters">ssml</say-as></speak> ' )
;
$ agent -> reply ( $ text );
$ image = Dialogflow RichMessage Image :: create ( ' https://www.example.com/image.png ' );
$ agent -> reply ( $ image );
$ card = Dialogflow RichMessage Card :: create ()
-> title ( ' This is title ' )
-> text ( ' this is text body ' )
-> image ( ' https://www.example.com/image.png ' )
-> button ( ' This is a button ' , ' https://docs.dialogflow.com/ ' )
;
$ agent -> reply ( $ card );
$ suggestion = Dialogflow RichMessage Suggestion :: create ([ ' Suggestion one ' , ' Suggestion two ' ]);
$ agent -> reply ( $ suggestion );
if ( $ agent -> getRequestSource ()== ' google ' ) {
$ agent -> reply ( Dialogflow RichMessage Payload :: create ([
' expectUserResponse ' => false
]));
}
Cette bibliothèque prend également en charge les fonctionnalités spécifiques d'Actions on Google. Il est encore en développement, donc d'autres fonctionnalités seront ajoutées à l'avenir.
Pour utiliser Actions sur l'objet Conversation Google Dialogflow, vous devez d'abord vous assurer que la requestSource
provient de l'Assistant Google.
if ( $ agent -> getRequestSource ()== ' google ' ) {
$ conv = $ agent -> getActionConversation ();
// here you can use the rest of Actions on Google responses and helpers
$ agent -> reply ( $ conv );
}
ou vous pouvez simplement appeler la méthode getActionConversation()
, et elle renverra null
si la demande ne provient pas de Google Assistant.
$ conv = $ agent -> getActionConversation ();
if ( $ conv ) {
// here you can use the rest of Actions on Google responses and helpers
} else {
// the request does not come from Google Assistant
}
À l'aide de l'objet Conversation Dialogflow, vous pouvez envoyer une réponse de deux manières :
$ conv -> close ( ' Have a nice day! ' );
$ conv -> ask ( ' Hi, how can I help? ' );
Veuillez consulter la documentation ici.
use Dialogflow Action Responses SimpleResponse ;
$ conv -> ask ( SimpleResponse :: create ()
-> displayText ( ' Hello, how can i help? ' )
-> ssml ( ' <speak>Hello,<break time="0.5s"/> <prosody rate="slow">how can i help?</prosody></speak> ' )
);
use Dialogflow Action Responses Image ;
$ conv -> close ( Image :: create ( ' https://picsum.photos/400/300 ' ));
Veuillez consulter la documentation ici.
use Dialogflow Action Responses BasicCard ;
$ conv -> close ( BasicCard :: create ()
-> title ( ' This is a title ' )
-> formattedText ( ' This is a subtitle ' )
-> image ( ' https://picsum.photos/400/300 ' )
-> button ( ' This is a button ' , ' https://docs.dialogflow.com/ ' )
);
Veuillez consulter la documentation ici.
La liste à sélection unique présente à l'utilisateur une liste verticale de plusieurs éléments et permet à l'utilisateur d'en sélectionner un seul. La sélection d'un élément dans la liste génère une requête utilisateur (bulle de discussion) contenant le titre de l'élément de la liste.
use Dialogflow Action Questions ListCard ;
use Dialogflow Action Questions ListCard Option ;
$ conv -> ask ( ' Please choose below ' );
$ conv -> ask ( ListCard :: create ()
-> title ( ' This is a title ' )
-> addOption ( Option :: create ()
-> key ( ' OPTION_1 ' )
-> title ( ' Option 1 ' )
-> synonyms ([ ' option one ' , ' one ' ])
-> description ( ' Select option 1 ' )
-> image ( ' https://picsum.photos/48/48 ' )
)
-> addOption ( Option :: create ()
-> key ( ' OPTION_2 ' )
-> title ( ' Option 2 ' )
-> synonyms ([ ' option two ' , ' two ' ])
-> description ( ' Select option 2 ' )
-> image ( ' https://picsum.photos/48/48 ' )
)
);
Pour capturer l'option sélectionnée par l'utilisateur, créez une intention Dialogflow avec l'événement actions_intent_OPTION
. En supposant que vous nommiez l'intention Get Option
, vous pouvez obtenir l'argument comme suit :
if ( ' Get Option ' == $ agent -> getIntent ()) {
$ conv = $ agent -> getActionConversation ();
$ option = $ conv -> getArguments ()-> get ( ' OPTION ' );
switch ( $ option ) {
case ' OPTION_1 ' :
$ conv -> close ( ' You choose option 1 ' );
break ;
case ' OPTION_2 ' :
$ conv -> close ( ' You choose option 2 ' );
break ;
default :
$ conv -> close ( ' Sorry, i do not understand ' );
break ;
}
}
Veuillez consulter la documentation ici.
Le carrousel défile horizontalement et permet de sélectionner un élément. Comparé au sélecteur de liste, il comporte de grandes vignettes permettant un contenu plus riche. Les tuiles qui composent un carrousel sont similaires à la carte de base avec image. La sélection d'un élément dans le carrousel générera simplement une bulle de discussion comme réponse, tout comme avec le sélecteur de liste.
use Dialogflow Action Questions Carousel ;
use Dialogflow Action Questions Carousel Option ;
$ conv -> ask ( ' Please choose below ' );
$ conv -> ask (
Carousel :: create ()
-> Option (
Option :: create ()
-> key ( ' OPTION_1 ' )
-> title ( ' Option 1 ' )
-> synonyms ([ ' option one ' , ' one ' ])
-> description ( ' Select option 1 ' )
-> image ( ' https://picsum.photos/300/300 ' )
)
-> Option (
Option :: create ()
-> key ( ' OPTION_2 ' )
-> title ( ' Option 2 ' )
-> synonyms ([ ' option two ' , ' two ' ])
-> description ( ' Select option 2 ' )
-> image ( ' https://picsum.photos/300/300 ' )
)
-> Option (
Option :: create ()
-> key ( ' OPTION_3 ' )
-> title ( ' Option 3 ' )
-> synonyms ([ ' option three ' , ' three ' ])
-> description ( ' Select option 3 ' )
-> image ( ' https://picsum.photos/300/300 ' )
)
-> Option (
Option :: create ()
-> key ( ' OPTION_4 ' )
-> title ( ' Option 4 ' )
-> synonyms ([ ' option four ' , ' four ' ])
-> description ( ' Select option 4 ' )
-> image ( ' https://picsum.photos/300/300 ' )
)
);
Pour vérifier si l'utilisateur vous a accordé les informations, puis accéder aux données, créez un intent Dialogflow avec l'événement actions_intent_OPTION
. En supposant que vous nommiez l'intention Get Option
, vous pouvez obtenir l'argument comme suit :
if ( ' Get Option ' == $ agent -> getIntent ()) {
$ conv = $ agent -> getActionConversation ();
$ option = $ conv -> getArguments ()-> get ( ' OPTION ' );
switch ( $ option ) {
case ' OPTION_1 ' :
$ conv -> close ( ' You choose option 1 ' );
break ;
case ' OPTION_2 ' :
$ conv -> close ( ' You choose option 2 ' );
break ;
case ' OPTION_3 ' :
$ conv -> close ( ' You choose option 3 ' );
break ;
case ' OPTION_4 ' :
$ conv -> close ( ' You choose option 4 ' );
break ;
default :
$ conv -> close ( ' Sorry, i do not understand ' );
break ;
}
}
Veuillez consulter la documentation ici.
Un carrousel de navigation est une réponse riche, similaire à la réponse du carrousel car il défile horizontalement et permet aux utilisateurs de sélectionner une vignette. Les carrousels de navigation sont conçus spécifiquement pour le contenu Web en ouvrant la vignette sélectionnée dans un navigateur Web (ou un navigateur AMP si toutes les vignettes sont compatibles AMP). Le carrousel de navigation persistera également sur la surface Assistant de l'utilisateur pour une navigation ultérieure.
use Dialogflow Action Responses BrowseCarousel ;
use Dialogflow Action Responses BrowseCarousel Option ;
$ conv -> ask ( ' Please choose below ' );
$ conv -> ask (
BrowseCarousel :: create ()
-> imageDisplayOptions ( ' CROPPED ' )
-> addOption (
Option :: create ()
-> title ( ' Title of item 1 ' )
-> description ( ' Description of item 1 ' )
-> footer ( ' Item 1 footer ' )
-> url ( ' http://www.example.com ' )
-> image ( ' https://picsum.photos/300/300 ' )
)
-> addOption (
Option :: create ()
-> title ( ' Title of item 2 ' )
-> description ( ' Description of item 2 ' )
-> footer ( ' Item 2 footer ' )
-> url ( ' http://www.example.com ' )
-> image ( ' https://picsum.photos/300/300 ' )
)
-> addOption (
Option :: create ()
-> title ( ' Title of item 3 ' )
-> description ( ' Description of item 3 ' )
-> footer ( ' Item 3 footer ' )
-> url ( ' http://www.example.com ' )
-> image ( ' https://picsum.photos/300/300 ' )
)
-> addOption (
Option :: create ()
-> title ( ' Title of item 4 ' )
-> description ( ' Description of item 4 ' )
-> footer ( ' Item 4 footer ' )
-> url ( ' http://www.example.com ' )
-> image ( ' https://picsum.photos/300/300 ' )
)
);
Aucune exécution de suivi n'est nécessaire pour les interactions de l'utilisateur avec les éléments du carrousel de navigation, puisque le carrousel gère le transfert du navigateur.
Veuillez consulter la documentation ici.
use Dialogflow Action Responses LinkOutSuggestion ;
use Dialogflow Action Responses Suggestions ;
$ conv -> ask ( ' Please choose ' );
$ conv -> ask ( new Suggestions ([ ' Suggestion 1 ' , ' Suggestion 2 ' ]));
$ conv -> ask ( new Suggestions ( ' Suggestion 3 ' ));
$ conv -> ask ( new LinkOutSuggestion ( ' Website ' , ' http://www.example.com ' ));
Veuillez consulter la documentation ici.
Les réponses multimédias permettent à vos actions de lire du contenu audio avec une durée de lecture supérieure à la limite de 120 secondes de SSML. L’élément principal d’une réponse médiatique est la carte à voie unique.
use Dialogflow Action Responses MediaObject ;
use Dialogflow Action Responses MediaResponse ;
use Dialogflow Action Responses Suggestions ;
$ conv -> ask ( ' Here you go ' );
$ conv -> ask (
new MediaResponse (
MediaObject :: create ( ' http://storage.googleapis.com/automotive-media/Jazz_In_Paris.mp3 ' )
-> name ( ' Jazz in Paris ' )
-> description ( ' A funky Jazz tune ' )
-> icon ( ' http://storage.googleapis.com/automotive-media/album_art.jpg ' )
-> image ( ' http://storage.googleapis.com/automotive-media/album_art.jpg ' )
)
);
$ conv -> ask ( new Suggestions ([ ' Pause ' , ' Stop ' , ' Start over ' ]));
Veuillez consulter la documentation ici.
use Dialogflow Action Questions Permission ;
$ conv -> ask ( Permission :: create ( ' To address you by name and know your location ' , [ ' NAME ' , ' DEVICE_PRECISE_LOCATION ' ]));
Pour vérifier si l'utilisateur vous a accordé les informations, puis accéder aux données, créez un intent Dialogflow avec l'événement actions_intent_PERMISSION
. En supposant que vous nommiez l'intention Get Permission
, vous pouvez obtenir les informations comme suit :
if ( ' Get Permission ' == $ agent -> getIntent ()) {
$ conv = $ agent -> getActionConversation ();
$ approved = $ conv -> getArguments ()-> get ( ' PERMISSION ' );
if ( $ approved ) {
$ name = $ conv -> getUser ()-> getName ()-> getDisplay ();
$ latlng = $ conv -> getDevice ()-> getLocation ()-> getCoordinates ();
$ lat = $ latlng -> getLatitude ();
$ lng = $ latlng -> getLongitude ();
$ conv -> close ( ' Got it, your name is ' . $ name . ' and your coordinates are ' . $ lat . ' , ' . $ lng );
} else {
$ conv -> close ( ' Never mind then ' );
}
}
Veuillez consulter la documentation ici.
use Dialogflow Action Questions DateTime ;
$ conv -> ask ( new DateTime ( ' When do you want to come in? ' , ' What is the best date to schedule your appointment? ' , ' What time of day works best for you? ' ));
Pour vérifier si l'utilisateur a accordé l'accès, puis accéder aux données, créez un intent Dialogflow avec l'événement actions_intent_DATETIME
. En supposant que vous nommiez l'intention Get Date Time
, vous pouvez obtenir les informations comme suit :
if ( ' Get Date Time ' == $ agent -> getIntent ()) {
$ conv = $ agent -> getActionConversation ();
$ date = $ conv -> getArguments ()-> get ( ' DATETIME ' );
if ( $ date ) {
$ conv -> close ( ' Ok, got it, i will see you at ' . $ date -> format ( ' r ' ));
} else {
$ conv -> close ( ' Never mind then ' );
}
}
Veuillez consulter la documentation ici.
use Dialogflow Action Questions Place ;
$ conv -> ask ( new Place ( ' Where do you want to have lunch? ' , ' To find lunch locations ' ));
Pour vérifier si l'utilisateur a accordé l'accès, puis accéder aux données, créez une intention Dialogflow avec l'événement actions_intent_PLACE
. En supposant que vous nommiez l'intention Get Place
, vous pouvez obtenir les informations comme suit :
if ( ' Get Place ' == $ agent -> getIntent ()) {
$ conv = $ agent -> getActionConversation ();
$ place = $ conv -> getArguments ()-> get ( ' PLACE ' );
if ( $ place ) {
$ conv -> close ( ' Ok, got it, we ' ll meet at ' . $ place -> getFormattedAddress ());
} else {
$ conv -> close ( ' Never mind then ' );
}
}
Veuillez consulter la documentation ici.
use Dialogflow Action Questions Confirmation ;
$ conv -> ask ( new Confirmation ( ' Can you confirm? ' ));
Pour vérifier si l'utilisateur a confirmé ou non, créez un intent Dialogflow avec l'événement actions_intent_CONFIRMATION
. En supposant que vous nommiez l'intention comme Get Confirmation
, vous pouvez obtenir les informations comme suit :
if ( ' Get Confirmation ' == $ agent -> getIntent ()) {
$ conv = $ agent -> getActionConversation ();
$ confirmed = $ conv -> getArguments ()-> get ( ' CONFIRMATION ' );
if ( $ confirmed ) {
$ conv -> close ( ' Ok, it is confirmed ' );
} else {
$ conv -> close ( ' Alright then, it is canceled ' );
}
}
Google Assistant peut être utilisé sur diverses surfaces, telles que des appareils mobiles prenant en charge les expériences audio et d'affichage ou un appareil Google Home prenant en charge les expériences audio uniquement.
Pour concevoir et créer des conversations qui fonctionnent correctement sur toutes les surfaces, utilisez les fonctionnalités de la surface pour contrôler et étendre correctement vos conversations.
$ surface = $ conv -> getSurface ();
if ( $ surface -> hasScreen ()) {
// surface has screen
} elseif ( $ surface -> hasAudio ()) {
// surface has audio
} elseif ( $ surface -> hasMediaPlayback ()) {
// surface can play audio
} elseif ( $ surface -> hasWebBrowser ()) {
// user can interact with the content in a web browser
}