dialog_flowtter
构建您与 DialogFlow 的集成,更快、更轻松。
DialogFlowtter 是一个帮助您更轻松、更快速地构建与 DialogFlow 集成的软件包。
- 使用 Google Auth Json 进行身份验证
- 获取一个已身份验证的 http 客户端,以便您可以与您的 DialogFlow 代理进行通信
- 轻松访问所有 DialogFlow 响应和模型
- 检查 DialogFlow 响应可能具有的值
为什么选择 DialogFlowtter
Pub 上现有的 DialogFlow 集成包存在的问题是它们
- 完全被放弃
- 文档不完善
- 功能缺失
- 灵活性不足
本项目旨在解决这些问题并添加更多用户期望的功能。有关更多信息,请查看待办事项部分。
平台支持
此软件包在 Android、iOS 和 Web 上得到全面支持。
我们计划在 Flutter SDK 的这些平台成熟时,进行测试并增加对 Windows、Linux 和 MacOS 的支持。
安装
-
将软件包添加到您的 Flutter 依赖项中的
pubspec.yamldependencies: 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 中访问 DialogFlow 返回的信息。
从响应中获取文本
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。
另外,请参阅 此 issue,了解如何创建和使用 富响应,例如卡片和轮播。
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 客户端
如果您调用静态函数,可以获取一个已身份验证的、自动刷新的 http 客户端,其中包含您的自定义 json 数据。
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>,并标记为//? 如果需要,请创建模型。
待办事项
- [x] 添加对 null safety 的支持
- [x] 添加对卡片、图片等的支持
- [x] 内存、文件和远程 auth JSON
- [ ] 安全 DialogFlow auth JSON
- [ ] 支持音频查询
- [ ] 添加支持的语言目录
- [ ] 添加对常用属性的直接访问
- [ ] 支持使用自定义 HTTP Client
Starware
DialogFlowtter 是 Starware。
这意味着您可以自由使用此项目,只要您在 GitHub 上为其仓库点星。
您的赞赏使我们不断成长和发光。⭐