Diese Bibliothek ist von dialogflow/dialogflow-fulfillment-nodejs inspiriert.
Es unterstützt die Erfüllung von Webhook-JSON-Anfragen und -Antworten von Dialogflow für v1- und v2-Agenten.
Die vollständige Klassenreferenz finden Sie im Dokument.
Installation über Composer: composer require eristemena/dialogflow-fulfillment-webhook-php
.
Um den Agenten zu initiieren, verwenden Sie den Konstruktor DialogflowWebhookClient
mit dem Eingabeparameter als Array der von Dialogflow kommenden Anfrage.
In Vanilla PHP kann dies wie folgt erfolgen:
use Dialogflow WebhookClient ;
$ agent = new WebhookClient ( json_decode ( file_get_contents ( ' php://input ' ), true ));
// or
$ agent = WebhookClient :: fromData ( $ _POST );
oder wenn Sie Laravel verwenden,
$ 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
usw.) $ originalRequest = $ agent -> getRequestSource ();
$ originalRequest = $ agent -> getOriginalRequest ();
$ agentVersion = $ agent -> getAgentVersion ();
Um eine Antwort zu senden, verwenden Sie die Methode reply()
.
$ agent -> reply ( ' Hi, how can I help? ' );
Verwenden Sie dann render()
um eine Antwort im Array zu erhalten. Sie müssen lediglich das Array als JSON drucken.
header ( ' Content-type: application/json ' );
echo json_encode ( $ agent -> render ());
oder in Laravel,
return response ()-> json ( $ agent -> render ());
Die Antwortnutzlast wird automatisch entsprechend der Agent-Version der Anfrage formatiert.
$ 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
]));
}
Diese Bibliothek unterstützt auch Actions on Google-spezifische Funktionen. Es befindet sich noch in der Entwicklung, daher werden in Zukunft weitere Funktionen hinzugefügt.
Um Aktionen im Google Dialogflow-Konversationsobjekt zu verwenden, müssen Sie zunächst sicherstellen, dass die requestSource
von Google Assistant stammt.
if ( $ agent -> getRequestSource ()== ' google ' ) {
$ conv = $ agent -> getActionConversation ();
// here you can use the rest of Actions on Google responses and helpers
$ agent -> reply ( $ conv );
}
Oder Sie rufen einfach die Methode getActionConversation()
auf. Sie gibt null
zurück, wenn die Anfrage nicht von Google Assistant kommt.
$ 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
}
Mit dem Dialogflow-Konversationsobjekt können Sie eine Antwort auf zwei Arten senden:
$ conv -> close ( ' Have a nice day! ' );
$ conv -> ask ( ' Hi, how can I help? ' );
Bitte sehen Sie sich die Dokumentation hier an.
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 ' ));
Bitte sehen Sie sich die Dokumentation hier an.
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/ ' )
);
Bitte sehen Sie sich die Dokumentation hier an.
Die Einzelauswahlliste präsentiert dem Benutzer eine vertikale Liste mit mehreren Elementen und ermöglicht dem Benutzer die Auswahl eines einzelnen Elements. Wenn Sie ein Element aus der Liste auswählen, wird eine Benutzerabfrage (Chat-Blase) generiert, die den Titel des Listenelements enthält.
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 ' )
)
);
Um die vom Benutzer ausgewählte Option zu erfassen, erstellen Sie eine Dialogflow-Absicht mit dem Ereignis actions_intent_OPTION
. Angenommen, Sie benennen die Absicht als Get Option
, können Sie das Argument wie folgt abrufen:
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 ;
}
}
Bitte sehen Sie sich die Dokumentation hier an.
Das Karussell scrollt horizontal und ermöglicht die Auswahl eines Elements. Im Vergleich zur Listenauswahl verfügt es über große Kacheln, was umfangreichere Inhalte ermöglicht. Die Kacheln, aus denen ein Karussell besteht, ähneln der Grundkarte mit Bild. Wenn Sie ein Element aus dem Karussell auswählen, wird einfach eine Chat-Blase als Antwort generiert, genau wie bei der Listenauswahl.
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 ' )
)
);
Um zu überprüfen, ob der Benutzer Ihnen die Informationen gewährt hat, und um dann auf die Daten zuzugreifen, erstellen Sie eine Dialogflow-Absicht mit dem Ereignis actions_intent_OPTION
. Angenommen, Sie benennen die Absicht als Get Option
, können Sie das Argument wie folgt abrufen:
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 ;
}
}
Bitte sehen Sie sich die Dokumentation hier an.
Ein Browsing-Karussell ist eine Rich-Antwort, ähnlich der Karussell-Antwort, da es horizontal scrollt und Benutzern die Auswahl einer Kachel ermöglicht. Browsing-Karussells sind speziell für Webinhalte konzipiert, indem die ausgewählte Kachel in einem Webbrowser (oder einem AMP-Browser, wenn alle Kacheln AMP-fähig sind) geöffnet wird. Das Browsing-Karussell bleibt auch auf der Assistant-Oberfläche des Benutzers bestehen und kann später durchsucht werden.
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 ' )
)
);
Für Benutzerinteraktionen mit Browse-Karussellelementen ist keine Folgeabwicklung erforderlich, da das Karussell die Browserübergabe übernimmt.
Bitte sehen Sie sich die Dokumentation hier an.
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 ' ));
Bitte sehen Sie sich die Dokumentation hier an.
Mit Medienantworten können Ihre Aktionen Audioinhalte mit einer Wiedergabedauer abspielen, die länger als die 120-Sekunden-Grenze von SSML ist. Der Hauptbestandteil einer Medienresonanz ist die einspurige Karte.
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 ' ]));
Bitte sehen Sie sich die Dokumentation hier an.
use Dialogflow Action Questions Permission ;
$ conv -> ask ( Permission :: create ( ' To address you by name and know your location ' , [ ' NAME ' , ' DEVICE_PRECISE_LOCATION ' ]));
Um zu überprüfen, ob der Benutzer Ihnen die Informationen gewährt hat, und um dann auf die Daten zuzugreifen, erstellen Sie eine Dialogflow-Absicht mit dem Ereignis actions_intent_PERMISSION
. Angenommen, Sie benennen die Absicht als Get Permission
, können Sie die Informationen wie folgt abrufen:
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 ' );
}
}
Bitte sehen Sie sich die Dokumentation hier an.
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? ' ));
Um zu überprüfen, ob der Benutzer Zugriff gewährt hat, und dann auf die Daten zuzugreifen, erstellen Sie eine Dialogflow-Absicht mit dem Ereignis actions_intent_DATETIME
. Angenommen, Sie benennen die Absicht als Get Date Time
, können Sie die Informationen wie folgt abrufen:
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 ' );
}
}
Bitte sehen Sie sich die Dokumentation hier an.
use Dialogflow Action Questions Place ;
$ conv -> ask ( new Place ( ' Where do you want to have lunch? ' , ' To find lunch locations ' ));
Um zu überprüfen, ob der Benutzer Zugriff gewährt hat, und dann auf die Daten zuzugreifen, erstellen Sie eine Dialogflow-Absicht mit dem Ereignis actions_intent_PLACE
. Angenommen, Sie benennen die Absicht „ Get Place
, dann können Sie die Informationen wie folgt abrufen:
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 ' );
}
}
Bitte sehen Sie sich die Dokumentation hier an.
use Dialogflow Action Questions Confirmation ;
$ conv -> ask ( new Confirmation ( ' Can you confirm? ' ));
Um zu überprüfen, ob der Benutzer bestätigt hat oder nicht, erstellen Sie eine Dialogflow-Absicht mit dem Ereignis actions_intent_CONFIRMATION
. Angenommen, Sie benennen die Absicht als Get Confirmation
, dann können Sie die Informationen wie folgt abrufen:
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 kann auf einer Vielzahl von Oberflächen verwendet werden, z. B. auf Mobilgeräten, die Audio- und Anzeigeerlebnisse unterstützen, oder auf einem Google Home-Gerät, das reine Audioerlebnisse unterstützt.
Um Konversationen zu entwerfen und aufzubauen, die auf allen Oberflächen gut funktionieren, nutzen Sie Oberflächenfunktionen, um Ihre Konversationen richtig zu steuern und einzuschränken.
$ 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
}