Flutter集成开发平台插件botnoi_dev_platform的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter集成开发平台插件botnoi_dev_platform的使用

Botnoi Dev Platform

Botnoi Dev Platform 是一个程序化的替代方案,用于由 https://botnoi.ai 提供的可视化聊天机器人构建器。它可以用于为各种平台(如Facebook Messenger和LINE)构建和训练聊天机器人。

此官方库提供了Botnoi Dev Platform API的Dart实现,以简化构建聊天机器人的过程。它还提供了与聊天机器人相关的各种数据类型,例如’BotIntent’、'BotObject’以及许多帮助函数来处理它们。

这最适合于想要通过编程方式构建聊天机器人或在应用程序用户执行操作时自动训练聊天机器人的开发者。

安装

在您的项目文件夹中,在终端运行以下命令:

flutter pub add botnoi_dev_platform

然后,导入包:

import 'package:botnoi_dev_platform/botnoi_dev_platform.dart';

注意:您需要一个API密钥才能使用此包。您可以在 https://botnoi.ai 获取一个。

使用

设置

首先,使用您的API密钥初始化BotnoiChatbot服务器:

BotnoiChatbot.initializeClient(key: 'your_api_key');

然后,您可以创建一个BotnoiChatbot服务器实例:

BotnoiChatbot server = BotnoiChatbot.serverInstance;

(可选但推荐)您还可以初始化收集器。收集器是一个非常有用的工具,可以收集聊天机器人资产(如聊天机器人、意图和对象),这样您就可以在不重新加载它们或传递它们的实例的情况下稍后使用它们。

BotnoiChatbot.initializeCollector();

注意:有关收集器的更多信息,请参阅下方的“使用收集器”部分。

创建一个聊天机器人

创建聊天机器人很简单。您只需创建一个聊天机器人实例并将其添加到服务器:

// 创建一个新的Bot实例
Bot myBot = Bot(
  botName: "myBot",
  sex: "male",
  age: 20,
  owner: "newOwner",
  botAvatar: "https://example.com/avatar.png",
  businessType: "Education",
);

// 将新的Bot实例添加到服务器
await server.createBot(bot: myBot);

// 从服务器重新加载聊天机器人
// 这是因为添加到服务器后会生成聊天机器人的ID
await myBot.reload();

或者根据名称查找现有的聊天机器人:

Bot? myBot = await server.findBotWithName("myBot");

创建并训练一个意图

您可以在聊天机器人内部创建一个意图,通过创建一个新的BotIntent实例并将其实例添加到聊天机器人中:

// 创建一个新的BotIntent实例
BotIntent myIntent = BotIntent(name: "myIntent");

// 将新的BotIntent实例添加到聊天机器人
await myBot.opt.createIntent(intent: myIntent);

// 从服务器重新加载意图
// 这是因为添加到聊天机器人后会生成意图的ID
await myIntent.reload();

或者根据名称查找现有的意图:

BotIntent? myIntent = await myBot.opt.findIntentWithName("myIntent");

请注意,当您想对聊天机器人进行与Botnoi Dev Platform相关的操作时(如createIntent、findIntents等),将使用’opt’属性。 这是所有可以直接与服务器交互的数据类型的标准(如Bot、BotIntent等)。

您可以训练意图,通过向其添加一些关键字(输入)和反应(输出):

await myIntent.opt.trainKeyword(keyword: BotIntentKeyword(keyword: "Hello"));
await myIntent.opt.trainReaction(reaction: BotIntentReaction(actions: ["Hello", "How are you?"]));

或者用更复杂的动作来训练反应:

myIntent.opt.trainReaction(
  reaction: BotIntentReaction(actions: [
    BotAction.createParameter("user_name", BotAction.keyword()), // 创建一个包含用户最后回复的参数
    BotAction.image("greeting_image"), // 显示greeting_image对象。更多关于对象的信息,请参阅“创建对象”部分
    BotAction.text("Hello, ${BotAction.parameter("user_name")}"), // 获取用户_name参数并在文本回复中使用它
  ]),
);

创建一个对象

创建对象的过程类似于创建意图。首先,创建一个带有对象属性(如BotApiObject、BotImageObject、BotButtonObject等)的BotObject实例。每个对象实例必须是同一类型。然后,您可以将BotObject实例添加到聊天机器人中。

// 创建一个新的BotObject实例,并在其objects属性中包含一个BotApiObject实例
BotObject myApiObject = BotObject(
  objectName: "myApiObject",
  objects: [
    BotApiObject(
      url: "https://api_example.com",
      method: "post",
      header: {"Content-Type": "application/json"},
      body: "{'data': 'example_data'}",
    )
  ],
);

// 将新的BotObject实例添加到聊天机器人
await myBot.opt.createObject(object: myApiObject);

或者根据名称查找现有的对象:

BotObject? myApiObject = await myBot.opt.findObjectWithName(name: "myApiObject", type: BotObjectType.api);

使用收集器(可选但推荐)

收集器是一个非常有用的工具,可以收集聊天机器人资产(如聊天机器人、意图和对象),这样您就可以在不重新加载它们或传递它们的实例的情况下稍后使用它们。

示例 1 : 手动收集资产

  1. 初始化收集器:
BotnoiChatbot.initializeCollector();
  1. 正常创建聊天机器人并收集它:
Bot myBot = Bot(
    botName: "myBot",
    sex: "male",
    age: 20,
    owner: "newOwner",
    botAvatar: "https://new.com/avatar.png",
    businessType: "education",
  );
await BotnoiChatbot.serverInstance.createBot(bot: myBot);
await myBot.reload();
BotnoiChatbot.collector.collectBot(myBot);
  1. 从收集器获取聊天机器人,创建一个意图并收集该意图:
await BotnoiChatbot.collector.getBot().then((bot) async {
  BotIntent myIntent = BotIntent(name: "myIntent");
  await bot?.opt.createIntent(intent: myIntent);
  await myIntent.reload();
  BotnoiChatbot.collector.collectIntent(myIntent);
});
  1. 从收集器获取收集的意图并训练它:
await BotnoiChatbot.collector.getIntent("myIntent").then((intent) async {
  await intent?.opt?.trainKeyword(keyword: BotIntentKeyword(keyword: "Hello"));
  await intent?.opt?.trainReaction(reaction: BotIntentReaction(actions: ["Hello", "How are you?"]));
});

示例 2 : 让收集器自动收集资产

  1. 使用隐式收集设置初始化收集器:
BotnoiChatbot.initializeCollector(implicitCollecting: true);
  1. 正常创建聊天机器人,但不再需要保留它的实例:
await BotnoiChatbot.serverInstance.createBot(
  bot: Bot(
    botName: "myBot",
    sex: "male",
    age: 20,
    owner: "newOwner",
    botAvatar: "https://new.com/avatar.png",
    businessType: "education",
  ),
);
  1. 从收集器获取聊天机器人并创建一个意图。注意,您不需要显式地收集聊天机器人。如果指定名称的聊天机器人未被收集,收集器将自动加载并收集它:
await BotnoiChatbot.collector.getBot("myBot").then((bot) async {
  BotIntent newIntent = BotIntent(name: "myIntent");
  await bot?.opt?.createIntent(intent: newIntent);
});
  1. 训练意图。就像聊天机器人一样,您不需要显式地收集意图即可获取它:
await BotnoiChatbot.collector.getIntent("myIntent").then((intent) async {
  await intent?.opt?.trainKeyword(keyword: BotIntentKeyword(keyword: "Hello"));
  await intent?.opt?.trainReaction(reaction: BotIntentReaction(actions: ["Hello", "How are you?"]));
});
  1. 请记住,收集的资产将存储在本地,并不会在您从服务器更新或删除它们时自动更新或删除。要更新或删除收集的资产,您必须手动执行这些操作:
// 更新服务器上的意图后重新加载
BotnoiChatbot.collector.reloadIntent("myIntent");

// 从收集器中删除意图
BotnoiChatbot.collector.trashIntent("myIntent");

注意:由于每一步都只依赖于BotnoiChatbot而不是聊天机器人的实例,因此它们可以从应用程序的任何地方获取。例如,您可以在一个屏幕中创建聊天机器人,在另一个屏幕中创建该聊天机器人的意图,然后在另一个屏幕中训练该意图,而无需在应用程序中传递聊天机器人或意图的实例。

错误处理

默认情况下,当错误发生时,此库会抛出错误。为了处理这些错误,您可以设置回调函数以在错误发生时调用,从而阻止错误被抛出:

BotnoiChatbot.setErrorCallback((error) {
  // 在这里处理错误
  print(error);
});

或者,如果您只是想检查上次调用的函数是否成功,您可以使用以下方法:

bool status = BotnoiChatbot.didFinishSuccesfully

更多关于Flutter集成开发平台插件botnoi_dev_platform的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter集成开发平台插件botnoi_dev_platform的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成并使用botnoi_dev_platform插件的示例代码。假设botnoi_dev_platform是一个已发布的Flutter插件,并且你已经在pubspec.yaml文件中添加了依赖。

1. 添加依赖

首先,确保你已经在pubspec.yaml文件中添加了botnoi_dev_platform的依赖。如果还没有添加,请按照以下步骤操作:

dependencies:
  flutter:
    sdk: flutter
  botnoi_dev_platform: ^latest_version  # 替换为实际的最新版本号

然后运行flutter pub get来安装依赖。

2. 导入插件

在你的Dart文件中导入插件:

import 'package:botnoi_dev_platform/botnoi_dev_platform.dart';

3. 初始化插件

通常,插件需要在应用启动时进行初始化。你可以在main.dartvoid main()函数中进行初始化。

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化插件(假设插件有初始化方法)
  await BotnoiDevPlatform.instance.initialize();

  runApp(MyApp());
}

注意:具体的初始化方法可能因插件而异,请参考插件的官方文档。

4. 使用插件功能

假设botnoi_dev_platform插件提供了一个方法来发送消息,你可以在你的Flutter应用中这样使用:

import 'package:flutter/material.dart';
import 'package:botnoi_dev_platform/botnoi_dev_platform.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await BotnoiDevPlatform.instance.initialize();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String _response = '';

  void _sendMessage() async {
    try {
      String result = await BotnoiDevPlatform.instance.sendMessage(
        message: 'Hello, Botnoi!',
      );
      setState(() {
        _response = 'Response: $result';
      });
    } catch (e) {
      setState(() {
        _response = 'Error: ${e.message}';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Send message to Botnoi',
            ),
            ElevatedButton(
              onPressed: _sendMessage,
              child: Text('Send Message'),
            ),
            Text(
              _response,
              style: TextStyle(fontSize: 18),
            ),
          ],
        ),
      ),
    );
  }
}

注意事项

  1. 插件文档:务必参考botnoi_dev_platform插件的官方文档,因为不同插件可能有不同的初始化方法和API。
  2. 错误处理:在实际应用中,添加适当的错误处理逻辑以确保应用的稳定性。
  3. 权限:如果插件需要访问设备权限(如网络权限),请确保在AndroidManifest.xmlInfo.plist中正确声明这些权限。

这个示例代码展示了如何在Flutter项目中集成并使用一个假设的botnoi_dev_platform插件。如果插件的具体API和初始化方法与示例不同,请参考插件的官方文档进行调整。

回到顶部