scaletta/botman-driver-dialogflow

Dialogflow fulfillment driver for BotMan with Fixes

1.0.0 2020-03-28 17:41 UTC

This package is auto-updated.

Last update: 2024-03-29 02:06:02 UTC


README

PHP Composer

BotMan Dialogflow Driver with Fixes

BotMan driver to handle Dialogflow fulfillment with BotMan. The original repo is not maintained anymore, no answers on pullrequests. As for that reason i forked it with fixes. The main fix right now is to be able to provide Outgoing Context to DialogFlow.

It uses eristemena/dialog-fulfillment-webhook-php library, so it supports v1 and v2 of Dialogflow request.

Installation & Setup

First you need to pull in the Driver.

composer require Scaletta/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([]);

Usage

Hearing Messages

You can start receiving message using hears() based on the Intent of the message,

$botman->hears('Intent Name', function ($botman) {
    // replies here
});

Single Message Reply

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!');
});

Add Outgoing Context

To make use of parameters in DialogFlow you can use outgoing context

$parameters = ["Parameter_1" => "Test1", "Parameter_2" => "Test2"];
$botman
       ->addMessage(["name" => "test", "parameters" => $parameters, "lifespan" => 5])
       ->addMessage("This message contains Outgoing Context")
       ->sendMessage();

Multiple Message Replies

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();
});

Rich Messages

Text

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);

Image

Use Dialogflow\RichMessage\Image

    $image = Image::create('https://picsum.photos/200/300');
    $botman
        ->addMessage('This is an image')
        ->addMessage($image)
        ->sendMessage()
    ;

Card

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()
    ;

Quick Replies

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()
    ;

Custom Payload

Use Dialogflow\RichMessage\Payload

    $payload = Payload::create([
        'expectUserResponse' => false
    ]);

    $botman
        ->addMessage('Have a good day')
        ->addMessage($payload)
        ->sendMessage()
    ;