DialogFlow的Flutter实现,已改进。
构建您与 DialogFlow 的集成,更快、更轻松。
关于软件包
Dialog Flow on Flutter,现已支持Null Safety!
DialogFlowtter 是一个软件包,可帮助您更轻松、更快速地构建与 DialogFlow 的集成。
- 使用Google Auth Json进行身份验证
- 获取经过身份验证的http客户端,以便您可以与您的DialogFlow代理进行通信
- 轻松访问所有DialogFlow响应和模型
- 检查DialogFlow响应可能具有的值
为什么选择DialogFlowtter
Pub上现有的DialogFlow集成包的问题在于它们
- 完全被放弃
- 文档不完善
- 功能缺失
- 灵活性不足
此包旨在解决这些问题并添加更多用户希望看到的功能。请查看待办事项部分了解更多信息。
平台支持
该软件包完全支持Android、iOS和Web。
我们计划在Flutter SDK支持的平台成熟时,对Windows、Linux和MacOS进行测试并添加支持。
安装
-
将该包添加到您的
pubspec.yaml中的Flutter依赖项dependencies: dialog_flowtter: ^0.3.1
-
确保您将dialog_flow_auth.json添加到
pubspec.yaml的assets中flutter: uses-material-design: true assets: - assets/dialog_flow_auth.json
-
将您的DialogFlow Auth JSON添加到
assets文件夹,并将其重命名为dialog_flow_auth.json
您以后可以在代码中更改JSON的名称和路径。只需确保在
pubspec.yaml中使用相同的名称即可。
-
从以下位置获取软件包
flutter packages get
获取您的密钥
如何使用
检索您的密钥
您可以通过多种方式设置您的DialogFlow身份验证密钥。
- 从内存中的JSON
DialogAuthCredentials credentials = DialogAuthCredentials.fromJson(json);
- 从JSON文件
DialogAuthCredentials credentials = await DialogAuthCredentials.fromFile(path);
此方法是异步的!
- 从网络
DialogAuthCredentials credentials = await DialogAuthCredentials.fromNetwork(url);
此方法是异步的!
然后,将您的凭证传递给DialogFlowtter类
DialogFlowtter instance = DialogFlowtter(
credentials: credentials,
);
您也可以在实例化
DialogFlowtter类时使用这些方法的简写形式。
DialogFlowtter jsonInstance = DialogFlowtter.fromJson(json);
//! async
DialogFlowtter fileInstance = await DialogFlowtter.fromFile(path);
//! async
DialogFlowtter networkInstance = await DialogFlowtter.fromNetwork(url);
检测意图
DialogFlow的核心功能之一是检测一个人试图说什么。您可以通过检测您在DialogFlow控制台中定义的意图来实现此目的。
- 创建一个
DialogFlowtter实例,并设置将用于识别用户与DialogFlow当前对话的sessionId。
强烈建议您为用户与助手建立的每一次对话使用不同的
sessionId。
final DialogFlowtter dialogFlowtter = DialogFlowtter(
credentials: credentials,
sessionId: "YOUR_SESSION_ID_HERE",
);
- 创建一个
QueryInput,您可以在其中指定要发送到DialogFlow的数据。
final QueryInput queryInput = QueryInput(
text: TextInput(
text: "Hi. How are you?",
languageCode: "en",
),
);
- 通过
detectIntent函数将输入发送到DialogFlow。
DetectIntentResponse response = await dialogFlowtter.detectIntent(
queryInput: queryInput,
);
您可以查看代码以获取有关您可以发送和接收哪些信息的更多信息。
从意图中获取信息
您可以访问detectIntent函数返回的DetectIntentResponse中的信息。
从响应中获取文本
DetectIntentResponse response = await dialogFlowtter.detectIntent(
queryInput: QueryInput(text: TextInput(text: "Hi")),
);
String? textResponse = response.text;
print(textResponse); // Hi, how may I help you?
如果DialogFlow没有返回文本,或者返回的第一个消息不是MessageType.text类型,则response.text将返回null。
从响应中获取消息
有关模型属性的更多信息,请参阅Message。
另外,请查看此问题,了解如何创建和使用富响应(如卡片和轮播)。
DetectIntentResponse response = await dialogFlowtter.detectIntent(
queryInput: QueryInput(text: TextInput(text: "Hi")),
);
Message? messageResponse = response.message;
从响应中获取音频
- 在
detectIntent函数中设置音频配置。
DetectIntentResponse response = await dialogFlowtter.detectIntent(
queryInput: QueryInput(text: TextInput(text: "Hi")),
// You can set your own configuration with the OutputAudioConfig class
audioConfig: OutputAudioConfig(),
);
- 从响应中检索音频。
String? audioBase64 = response.outputAudio;
Uint8List? audioBytes = response.outputAudioBytes;
- 使用您喜欢的插件播放音频响应!
有关从内存中播放音频,请查看Soundpool。
获取消息的响应类型
MessageType? messageType = response.message.type;
print(messageType); /// MessageType.card
如果DialogFlow没有返回消息,则response.message将返回null。
请务必在完成使用后处置该实例。
dialogFlowtter.dispose();
更改项目ID
您可以更改DialogFlowtter用于在DialogFlow中查找意图的项目ID。
- 创建一个
DialogFlowtter实例。
final DialogFlowtter dialogFlowtter = DialogFlowtter(
credentials: credentials,
);
- 更改实例的
projectId属性;
dialogFlowtter.projectId = "deimos-apps-0905";
-
专业提示。您可以使用Dart的特殊级联表示法执行与上面完全相同的操作。
final DialogFlowtter dialogFlowtter = DialogFlowtter( credentials: credentials, )..projectId = "deimos-apps-0905";
向您的DialogFlow项目发出已认证的http请求
您可以通过调用实例中的client属性来访问软件包生成的已认证http客户端。
请记住,如果您在此之前已处置了实例,则此值可能会变为null。
创建您自己的已认证http客户端
如果您调用静态函数,则可以使用自定义json数据获取已认证、自动刷新的http客户端。
final credentials = DialogAuthCredentials.fromJson(yourJson);
final client = DialogFlowtter.getClient(credentials)
请记住,这仅使用Google提供的json进行身份验证。
有关更多信息,请查看googleapis_auth。
进一步的考虑
每次实例化DialogFlowtter时,该类都会创建一个已认证的http客户端,并使用从DialogFlow Auth JSON获得的凭证。请确保保存此实例并重用它,以避免内存泄漏。
内存泄漏
确保在完成使用DialogFlowtter实例后对其进行dispose。这可以确保关闭已认证的http客户端及其所有StreamSubscription,以避免内存泄漏。
模型过多
我们几乎编写了您在实现此软件包时可能需要使用的所有Dialog Flow模型,因此您不必处理烦人的Map<String, dynamic>对象。如果缺少任何模型,请随时要求添加到软件包中。
未编写的模型被包含为烦人的
Map<String, dynamic>,并标记为//? Create model if necessary。
待办事项
- 添加对null safety的支持
- 添加对卡片、图片等的支持。
- 内存、文件和远程auth JSON
- 保护DialogFlow auth JSON
- 支持音频查询
- 添加支持的语言目录
- 添加对常用属性的直接访问
- 支持使用自定义HTTP客户端
Starware
DialogFlowtter是Starware。
这意味着您可以自由使用该项目,前提是您在GitHub仓库中对其进行star。
您的赞赏使我们不断成长和发光。⭐
贡献
您的帮助总是值得赞赏的。