BotMan driver to handle Dialogflow fulfillment with BotMan.
It uses eristemena/dialog-fulfillment-webhook-php
library, so it supports v1 and v2 of Dialogflow request.
First you need to pull in the Driver.
composer require eristemena/botman-driver-dialogflow
If you're using BotMan Studio, that's pretty much it.
But if you don't, then load the driver before creating the BotMan instance:
DriverManager::loadDriver(\BotMan\Drivers\Dialogflow\DialogflowDriver::class);
// Create BotMan instance
BotManFactory::create([]);
You can start receiving message using hears()
based on the Intent of the message,
$botman->hears('Intent Name', function ($botman) {
// replies here
});
The simplest way to reply to an incoming message is using BotMan's own reply()
method:
$botman->hears('Default Welcome Intent', function ($botman) {
$botman->reply('Hi, welcome!');
});
Normally when you want to send multiple replies, you use reply()
multiple times. Unfortunately this doesn't work for Dialogflow driver, cause the messages should be in a single response payload.
For that, you have to use specific methods for this driver addMessage()
and sendMessage()
as follow,
$botman->hears('Default Welcome Intent', function ($botman) {
$botman->addMessage('Good morning');
$botman->addMessage('How may i help you?');
$botman->sendMessage();
});
Use Dialogflow\RichMessage\Text
$text = Text::create()
->text('Hello')
->ssml('
<speak>
Hello!
<audio src="https://actions.google.com/sounds/v1/cartoon/clang_and_wobble.ogg"></audio>
</speak>
')
;
$botman->reply($text);
Use Dialogflow\RichMessage\Image
$image = Image::create('https://picsum.photos/200/300');
$botman
->addMessage('This is an image')
->addMessage($image)
->sendMessage()
;
Use Dialogflow\RichMessage\Card
$card = Card::create()
->title('This is title')
->text('This is text body, you can put whatever here.')
->image('https://picsum.photos/200/300')
->button('This is a button', 'https://docs.dialogflow.com/')
;
$botman
->addMessage('This is a card')
->addMessage($card)
->sendMessage()
;
Use Dialogflow\RichMessage\Suggestion
$suggestion = Suggestion::create(['Tell me a joke', 'Tell me about yourself']);
$botman
->addMessage('Hi, how can i help you with?')
->addMessage($suggestion)
->sendMessage()
;
Use Dialogflow\RichMessage\Payload
$payload = Payload::create([
'expectUserResponse' => false
]);
$botman
->addMessage('Have a good day')
->addMessage($payload)
->sendMessage()
;