搜尋套件、儲存庫與 APP 分類

套件詳情v0.3.3

dialog_flowtter

DialogFlow 改進版的 Flutter 實作。立即準備好您的聊天機器人。

AndroidiOSmacOSWindowsLinux
近 30 天下載
279
喜歡數
58
Pub 分數
130

安裝套件

flutter pub add dialog_flowtter

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

DialogFlowtter 是一個 Flutter 套件,可簡化與 DialogFlow 的整合,讓開發人員能快速在應用程式中建構和部署聊天機器人功能。它透過提升可靠性、簡化設定以及增強跨多個平台的 Flutter 相容性,改善了原始的 DialogFlow 實作。支援 Android、iOS、macOS、Windows 和 Linux,可使用自然語言處理實現無縫的即時對話處理。適用於需要智慧使用者互動的應用程式,它簡化了連接到 DialogFlow 代理和管理回應的過程。

適用情境

  • 建構人工智慧驅動的客戶支援聊天機器人
  • 整合語音和基於文字的助手
  • 建立互動式應用程式指南和教學
  • 啟用多語言使用者互動
  • 為移動和桌面開發對話式使用者介面

主要特色

  • 跨平台支援(Android、iOS、macOS、Windows、Linux)
  • 與 DialogFlow 代理輕鬆整合
  • 即時訊息處理
  • 相比原生 DialogFlow 的穩定性有所提升
  • 內建的回應解析和錯誤處理
  • 支援文字和音訊輸入

適合對象

  • Flutter 開發人員建構聊天機器人
  • 將自然語言處理整合到現有應用程式中的團隊
  • 需要多語言聊天功能的項目
  • 初創公司正在開發對話式介面原型
  • 需要快速部署AI助理的應用程式

使用建議

  • 需要一個配置了意圖和實體的 DialogFlow 代理
  • 需要互聯網連接以進行基於雲端的自然語言處理
  • 可能需要為自定義驗證進行額外設置
  • 有限的離線功能
  • 取決於 DialogFlow 的 API 可用性和配額

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

logo

A Flutter implementation of DialogFlow, improved.

Build your integrations with DialogFlow easier and faster.

Pub Package Star on GitHub style: effective dart MIT License MIT License

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

  1. Add the package to your flutter dependencies in you pubspec.yaml:

    dependencies:
        dialog_flowtter: ^0.3.1
    
  2. 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
    
  3. 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

  1. Get the packages from:

    flutter packages get
    

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.

  1. From an in-memory JSON
DialogAuthCredentials credentials = DialogAuthCredentials.fromJson(json);
  1. From a JSON file
DialogAuthCredentials credentials = await DialogAuthCredentials.fromFile(path);

This method is asynchronous!

  1. From the Network
DialogAuthCredentials credentials = await DialogAuthCredentials.fromNetwork(url);

This method is asynchronous!

Then, pass your credentials to you DialogFlowtter class

DialogFlowtter instance = DialogFlowtter(
  credentials: credentials,
);

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

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

  1. 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",
  );
  1. 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",
    ),
  );
  1. Send your input to DialogFlow through the detectIntent function.
  DetectIntentResponse response = await dialogFlowtter.detectIntent(
    queryInput: queryInput,
  );

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?

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;
Get audio from the response
  1. 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(),
  );
  1. Retrieve the audio from the response
  String? audioBase64 = response.outputAudio;
  Uint8List? audioBytes = response.outputAudioBytes;
  1. 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

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

Change the project id

You can change the Project ID that DialogFlowtter will use to find your intents in DialogFlow.

  1. Create an instance of DialogFlowtter
  final DialogFlowtter dialogFlowtter = DialogFlowtter(
    credentials: credentials,
  );
  1. Change the projectId prop of the instance;
  dialogFlowtter.projectId = "deimos-apps-0905";
  • 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";
    

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)

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

  • [x] Add support for null safety
  • [x] Add support for cards, images, etc.
  • [x] 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.

所屬分類

依賴

依賴清單 5 項

原始碼儲存庫

使用此套件的專案

暫無相關資料。