هذه المكتبة مستوحاة من Dialogflow/dialogflow-fulfillment-nodejs.
وهو يدعم طلبات Webhook JSON الخاصة بـ Dialogflow واستجاباتها لوكلاء v1 وv2.
للحصول على مرجع كامل للصف يرجى الرجوع إلى الوثيقة.
التثبيت عبر الملحن: composer require eristemena/dialogflow-fulfillment-webhook-php
.
لبدء الوكيل، استخدم مُنشئ DialogflowWebhookClient
مع معلمة الإدخال كمصفوفة طلب قادمة من Dialogflow.
في Vanilla PHP، يمكن القيام بذلك على النحو التالي،
use Dialogflow WebhookClient ;
$ agent = new WebhookClient ( json_decode ( file_get_contents ( ' php://input ' ), true ));
// or
$ agent = WebhookClient :: fromData ( $ _POST );
أو إذا كنت تستخدم 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
، إلخ) $ originalRequest = $ agent -> getRequestSource ();
$ originalRequest = $ agent -> getOriginalRequest ();
$ agentVersion = $ agent -> getAgentVersion ();
لإرسال رد، استخدم طريقة reply()
.
$ agent -> reply ( ' Hi, how can I help? ' );
ثم استخدم render()
للحصول على استجابة في المصفوفة. كل ما عليك فعله هو طباعة المصفوفة بتنسيق JSON،
header ( ' Content-type: application/json ' );
echo json_encode ( $ agent -> render ());
أو في لارافيل
return response ()-> json ( $ agent -> render ());
سيتم تنسيق حمولة الاستجابة تلقائيًا وفقًا لإصدار الوكيل للطلب.
$ 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
]));
}
تدعم هذه المكتبة أيضًا الإجراءات المتعلقة بوظائف Google المحددة. إنه لا يزال قيد التطوير، لذلك سيتم إضافة المزيد من الميزات في المستقبل.
لاستخدام الإجراءات على كائن محادثة Google Dialogflow، يجب عليك أولاً التأكد من أن requestSource
يأتي من مساعد Google،
if ( $ agent -> getRequestSource ()== ' google ' ) {
$ conv = $ agent -> getActionConversation ();
// here you can use the rest of Actions on Google responses and helpers
$ agent -> reply ( $ conv );
}
أو يمكنك فقط الاتصال بطريقة getActionConversation()
، وستعود null
إذا لم يأتي الطلب من 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
}
باستخدام كائن محادثة Dialogflow، يمكنك إرسال رد بطريقتين،
$ conv -> close ( ' Have a nice day! ' );
$ conv -> ask ( ' Hi, how can I help? ' );
يرجى الاطلاع على الوثائق هنا.
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 ' ));
يرجى الاطلاع على الوثائق هنا.
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/ ' )
);
يرجى الاطلاع على الوثائق هنا.
تقدم قائمة التحديد الفردي للمستخدم قائمة عمودية تحتوي على عناصر متعددة وتسمح للمستخدم بتحديد عنصر واحد. يؤدي تحديد عنصر من القائمة إلى إنشاء استعلام مستخدم (فقاعة محادثة) يحتوي على عنوان عنصر القائمة.
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 ' )
)
);
لالتقاط الخيار المحدد من قبل المستخدم، قم بإنشاء غرض Dialogflow باستخدام حدث actions_intent_OPTION
. بافتراض أنك قمت بتسمية الغرض باسم Get Option
، يمكنك الحصول على الوسيطة على النحو التالي،
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 ;
}
}
يرجى الاطلاع على الوثائق هنا.
يتم تمرير الرف الدائري أفقيًا ويسمح باختيار عنصر واحد. بالمقارنة مع محدد القائمة، فهو يحتوي على مربعات كبيرة تسمح بمحتوى أكثر ثراءً. تشبه المربعات التي تشكل الرف الدائري البطاقة الأساسية التي تحتوي على صورة. سيؤدي تحديد عنصر من الرف الدائري إلى إنشاء فقاعة دردشة كاستجابة تمامًا كما هو الحال مع محدد القائمة.
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 ' )
)
);
للتحقق مما إذا كان المستخدم قد منحك المعلومات ثم الوصول إلى البيانات، أنشئ هدف Dialogflow باستخدام الحدث actions_intent_OPTION
. بافتراض أنك قمت بتسمية الغرض باسم Get Option
، يمكنك الحصول على الوسيطة على النحو التالي،
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 ;
}
}
يرجى الاطلاع على الوثائق هنا.
تعد مكتبة التصفح استجابة غنية، تشبه استجابة الرف الدائري حيث يتم تمريرها أفقيًا وتسمح للمستخدمين بتحديد مربع. تم تصميم دوارات التصفح خصيصًا لمحتوى الويب عن طريق فتح اللوحة المحددة في متصفح الويب (أو متصفح AMP إذا كانت جميع المربعات ممكّنة لـ AMP). ستستمر دائرة التصفح أيضًا على سطح مساعد المستخدم للتصفح لاحقًا.
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 ' )
)
);
ليس من الضروري إجراء متابعة لتفاعلات المستخدم مع عناصر مكتبة التصفح، نظرًا لأن المكتبة تتولى عملية تسليم المتصفح.
يرجى الاطلاع على الوثائق هنا.
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 ' ));
يرجى الاطلاع على الوثائق هنا.
تتيح استجابات الوسائط لإجراءاتك تشغيل المحتوى الصوتي بمدة تشغيل أطول من حد SSML وهو 120 ثانية. المكون الأساسي لاستجابة الوسائط هو البطاقة ذات المسار الواحد.
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 ' ]));
يرجى الاطلاع على الوثائق هنا.
use Dialogflow Action Questions Permission ;
$ conv -> ask ( Permission :: create ( ' To address you by name and know your location ' , [ ' NAME ' , ' DEVICE_PRECISE_LOCATION ' ]));
للتحقق مما إذا كان المستخدم قد منحك المعلومات ثم الوصول إلى البيانات، قم بإنشاء غرض Dialogflow باستخدام حدث actions_intent_PERMISSION
. بافتراض أنك قمت بتسمية الهدف باسم Get Permission
، يمكنك الحصول على المعلومات على النحو التالي،
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 ' );
}
}
يرجى الاطلاع على الوثائق هنا.
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? ' ));
للتحقق مما إذا كان المستخدم قد منح حق الوصول ثم الوصول إلى البيانات، قم بإنشاء غرض Dialogflow باستخدام الحدث actions_intent_DATETIME
. بافتراض أنك قمت بتسمية الهدف باسم Get Date Time
، يمكنك الحصول على المعلومات على النحو التالي،
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 ' );
}
}
يرجى الاطلاع على الوثائق هنا.
use Dialogflow Action Questions Place ;
$ conv -> ask ( new Place ( ' Where do you want to have lunch? ' , ' To find lunch locations ' ));
للتحقق مما إذا كان المستخدم قد منح حق الوصول ثم الوصول إلى البيانات، قم بإنشاء غرض Dialogflow باستخدام الحدث actions_intent_PLACE
. بافتراض أنك قمت بتسمية الهدف باسم Get Place
، يمكنك الحصول على المعلومات على النحو التالي،
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 ' );
}
}
يرجى الاطلاع على الوثائق هنا.
use Dialogflow Action Questions Confirmation ;
$ conv -> ask ( new Confirmation ( ' Can you confirm? ' ));
للتحقق مما إذا كان المستخدم قد أكد أم لا، قم بإنشاء غرض Dialogflow باستخدام حدث actions_intent_CONFIRMATION
. بافتراض أنك قمت بتسمية النية باسم Get Confirmation
، يمكنك الحصول على المعلومات على النحو التالي،
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 على مجموعة متنوعة من الأسطح مثل الأجهزة المحمولة التي تدعم تجارب الصوت والعرض أو جهاز Google Home الذي يدعم تجارب الصوت فقط.
لتصميم وبناء المحادثات التي تعمل بشكل جيد على جميع الأسطح، استخدم إمكانات السطح للتحكم في محادثاتك ونطاقها بشكل صحيح.
$ 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
}