dialog_flowtter

Creator: coderz1093

Last updated:

Add to Cart

Description:

dialog flowtter

A Flutter implementation of DialogFlow, improved.


Build your integrations with DialogFlow easier and faster.


















About the package #

Dialog Flow on Flutter, now with Null Safety support!

DialogFlowtter is a package that helps you to build integrations with DialogFlow easier and faster.

Authenticate with Google Auth Json
Get an authenticated http client so you can talk with your DialogFlow agent
Get access to all DialogFlow responses and models easily
Inspect what values a DialogFlow response could have

Why DialogFlowtter #
The problem with the current DialogFlow integration packages that are available in Pub is that they're:

Completely abandoned
Not well documented
Lack functionality
Lack flexibility

This one is intended to solve those problems and add more features that I've seen the users want. Check the TO-DO section for more info on that.
Platform support #
This package is fully supported in Android, iOS and Web.
We have plans on testing and adding support for Windows, Linux and MacOS as this platforms mature in the Flutter SDK.
Installation #


Add the package to your flutter dependencies in you pubspec.yaml:
dependencies:
dialog_flowtter: ^0.3.1
copied to clipboard


Make sure you add your dialog_flow_auth.json to the pubspec.yaml assets:
flutter:
uses-material-design: true
assets:
- assets/dialog_flow_auth.json
copied to clipboard


Add your DialogFlow Auth JSON to the assets folder and rename it to dialog_flow_auth.json



You can change the name and Path of your JSON later in the code. Just make sure to use the same one in the pubspec.yaml



Get the packages from:
flutter packages get
copied to clipboard


Get your keys #
Refer to Create a service account and download the private key file
How to use #
Retrieve your keys #
You can set your DialogFlow authentication keys in various ways.

From an in-memory JSON

DialogAuthCredentials credentials = DialogAuthCredentials.fromJson(json);
copied to clipboard

From a JSON file

DialogAuthCredentials credentials = await DialogAuthCredentials.fromFile(path);
copied to clipboard

This method is asynchronous!


From the Network

DialogAuthCredentials credentials = await DialogAuthCredentials.fromNetwork(url);
copied to clipboard

This method is asynchronous!

Then, pass your credentials to you DialogFlowtter class
DialogFlowtter instance = DialogFlowtter(
credentials: credentials,
);
copied to clipboard

You can also use the shorthand expression of these methods when instanciating the DialogFlowtter class

DialogFlowtter jsonInstance = DialogFlowtter.fromJson(json);

//! async
DialogFlowtter fileInstance = await DialogFlowtter.fromFile(path);

//! async
DialogFlowtter networkInstance = await DialogFlowtter.fromNetwork(url);
copied to clipboard
Detect intent #
One of the core features of DialogFlow is to detect what a person is trying to say. You can do that by detecting an intent that you have defined in your DialogFlow console

Create an instance of DialogFlowtter and set the sessionId that will be used to identify the current conversation of the user with DialogFlow.


It's highly recommended that you use a different sessionId for every conversation that the user establishes with the Assistant

final DialogFlowtter dialogFlowtter = DialogFlowtter(
credentials: credentials,
sessionId: "YOUR_SESSION_ID_HERE",
);
copied to clipboard

Create a QueryInput where you can specify what data you want to send to DialogFlow.

final QueryInput queryInput = QueryInput(
text: TextInput(
text: "Hi. How are you?",
languageCode: "en",
),
);
copied to clipboard

Send your input to DialogFlow through the detectIntent function.

DetectIntentResponse response = await dialogFlowtter.detectIntent(
queryInput: queryInput,
);
copied to clipboard

You can check the code for more info on what info you can send and receive

Get the info from the intent #
You can access the info returned by DialogFlow from the DetectIntentResponse that the detectIntent function returns.
Get the text from the response #
DetectIntentResponse response = await dialogFlowtter.detectIntent(
queryInput: QueryInput(text: TextInput(text: "Hi")),
);

String? textResponse = response.text;

print(textResponse); // Hi, how may I help you?
copied to clipboard

response.text returns null if there's no text returned by DialogFlow or if the first message returned it's not of type MessageType.text

Get the message from the response #
See Message for more info on what the model properties can be
Also, check this issue to see how to create and use Rich Responses like cards and carousels
DetectIntentResponse response = await dialogFlowtter.detectIntent(
queryInput: QueryInput(text: TextInput(text: "Hi")),
);

Message? messageResponse = response.message;
copied to clipboard
Get audio from the response #

Set the audio configuration in the detectIntent function

DetectIntentResponse response = await dialogFlowtter.detectIntent(
queryInput: QueryInput(text: TextInput(text: "Hi")),

// You can set your own configuration with the OutputAudioConfig class
audioConfig: OutputAudioConfig(),
);
copied to clipboard

Retrieve the audio from the response

String? audioBase64 = response.outputAudio;
Uint8List? audioBytes = response.outputAudioBytes;
copied to clipboard

Play the audio response with your favorite plugin!


Check Soundpool for playing the audio from memory

Get the response type of the message #
MessageType? messageType = response.message.type;

print(messageType); /// MessageType.card
copied to clipboard

response.message returns null if there's no messages returned by DialogFlow

Be sure to dispose the instance when you're done using it #
dialogFlowtter.dispose();
copied to clipboard
Change the project id #
You can change the Project ID that DialogFlowtter will use to find your intents in DialogFlow.

Create an instance of DialogFlowtter

final DialogFlowtter dialogFlowtter = DialogFlowtter(
credentials: credentials,
);
copied to clipboard

Change the projectId prop of the instance;

dialogFlowtter.projectId = "deimos-apps-0905";
copied to clipboard


Pro tip. You can do the exact same thing as above with the special Dart's cascade notation.
final DialogFlowtter dialogFlowtter = DialogFlowtter(
credentials: credentials,
)..projectId = "deimos-apps-0905";
copied to clipboard


Make authenticated http requests to your DialogFlow project #
You can access the authenticated http client generated by the package by calling the client attribute in your instance.
Keep in mind that this can become null if you have disposed your instance before.
Create your own authenticated http client #
You can get an authenticated, auto refreshing http client with your custom json data if you call the static function
final credentials = DialogAuthCredentials.fromJson(yourJson);
final client = DialogFlowtter.getClient(credentials)
copied to clipboard
Keep in mind that this only authenticates with json provided by Google.
Check googleapis_auth for more info.
Further considerations #
Every time you instanciate DialogFlowtter, the class creates an authenticated http client, with the credentials obtained from the DialogFlow Auth JSON. Be sure to save this instance and reuse it to avoid memory leaks
Memory leaks #
Make sure to dispose your DialogFlowtter instance whenever you're done using it. This makes sure to close the authenticated http client and all its StreamSubscriptions to avoid memory leaks.
Too many models #
We have coded almost every Dialog Flow model that you may need to use when implementing this package so you don't have to work with annoying Map<String, dynamic> objects. Feel free to ask for any model that is missing to be added to the package.

The models that were not coded are included as annoying Map<String, dynamic> and are tagged with the //? Create model if necessary.

TO-DO #

✅ Add support for null safety
✅ Add support for cards, images, etc.
✅ Memory, file and remote auth JSON
❌ Secure DialogFlow auth JSON
❌ Support audio queries
❌ Add a catalog of supported languages
❌ Add direct access to common used attributes
❌ Support use of custom HTTP Client

Starware #
DialogFlowtter is Starware.
This means you're free to use the project, as long as you star its GitHub repository.
Your appreciation makes us grow and glow up. ⭐
Contribute #
Your help is always appreciated.
You can contribute by checking our contributing guide or opening an issue.

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.