快速聊天:使用 Botter 构建聊天机器人
🤓 理论
🔥 练习
🏁 结论
祝你编码愉快,记住——唯一的限制就是你的想象力!🌈
如果您是一位 Swift 开发者,并且正在构思一个聊天机器人的创意,并渴望使用您最喜欢的编程语言将其变为现实,那么最简单的方法就是使用 Botter——一个开源的跨平台聊天机器人框架。它利用 Vapor 的强大功能以及特定于平台的框架,实现快速便捷的跨平台聊天机器人开发。
🤓 理论
Botter 使您能够接收和发送短信、媒体附件、文件和命令,以获得高质量的用户体验,同时使用 Swift(所有 Apple 开发人员的原生编程语言)。
Botter 与Vapor协同工作,后者负责处理您项目的服务器端功能。这种强大的组合让您可以专注于最重要的事情——打造一个引人入胜且高效的聊天机器人。
🔥 练习
接下来,我将逐步演示使用该框架编写一个简单的聊天机器人是多么容易:
👶 设置你的 Vapor 环境
正如我之前提到的,我们的项目将基于 Vapor 构建。因此,我们需要在本地安装它。你可以在终端中运行以下命令来执行此操作:
brew install vapor
现在我们已经安装了 Vapor,让我们创建一个新的空 Vapor 项目。您可以通过运行以下命令来执行此操作:
vapor new hello -n
运行此命令后,目录中将生成一个新项目/hello
。下一步是Package.swift
在 Xcode 中打开该文件。您可以导航到项目目录并使用以下命令打开该文件:
cd ./hello
open Package.swift
🔀 添加依赖项
要使用 Botter,我们需要将其添加为外部依赖项。打开项目的 Swift 包管理器文件,并将以下行添加到依赖项数组中:
.package(url: "https://github.com/CoolONEOfficial/Botter.git", branch: "main"),
接下来,通过在同一文件的目标部分中包含以下行,将 Botter 添加到应用程序的依赖项中:
.product(name: "Botter", package: "Botter"),
然后,您可以尝试构建项目。这将确保 Botter 正确链接到您的项目并可供使用。
🏗️ 描述机器人逻辑
在 Botter 中,有三个实体描述聊天机器人:
bot
:与平台交互,例如发送某些内容、修改现有消息等。updater
:通过 webhook 检索数据。dispatcher
:处理接收到的数据并将其传递给您。
将这些实体包装在您自己的实体中是一种很好的做法,如下所示:
class EchoBot {
public let dispatcher: Botter.Dispatcher
public let bot: Botter.Bot
public let updater: Botter.Updater
public init(settings: Botter.Bot.Settings, app: Application) throws {
self.bot = try .init(settings: settings)
self.dispatcher = .init(bot: bot, app: app)
self.updater = .init(bot: bot, dispatcher: dispatcher)
}
}
要订阅用户的短信,可以参考dispatcher
:
dispatcher.add(handler: Botter.MessageHandler(filters: .all, callback: handleMessage))
并且在handleMessage
方法中可以像这样指定刚刚收到的消息的返回:
func handleMessage(_ update: Botter.Update, context: Botter.BotContextProtocol) throws {
guard case let .message(message) = update.content else { return }
guard let params = Botter.Bot.SendMessageParams(to: message, text: message.text) else { return }
try bot.sendMessage(params, platform: message.platform.any, context: context)
}
同样,您可以接收其他类型的更新,例如接收图像或单击之前发送的按钮。
👷♂️ 配置你的机器人
要启动并运行聊天机器人,您需要指定平台特定的设置,例如聊天机器人可访问的端口和 URL、授权密钥等等。您可以在configure
文件中按如下方式指定这些设置:
private func configureEchoBotter(_ app: Application) throws {
let botterSettings = Botter.Bot.Settings(
tg: tgSettings(app)
)
let bot = try EchoBot(settings: botterSettings, app: app)
}
func tgSettings(_ app: Application) -> Telegrammer.Bot.Settings {
var tgSettings = Telegrammer.Bot.Settings(token: ””, debugMode: !app.environment.isRelease)
tgSettings.webhooksConfig = .init(ip: "0.0.0.0", baseUrl: “”, port: 123)
return tgSettings
}
每个平台都需要有自己的聊天机器人设置才能正常工作。例如,对于 Telegram,您需要一个令牌、一个 URL 和一个用于聊天机器人的端口。要获取令牌,您需要按照官方指南中的步骤操作。您还需要设置服务器,使其可以通过互联网访问。这可以通过多种服务来完成,例如http://localhost.run/。
一旦指定了所有参数,请不要忘记在方法主体中调用机器人配置方法configure
:
try configureEchoBotter(app)
并开始接收来自平台的更新:
try bot.updater.startWebhooks(vkServerName: Constants.vkServerName).wait()
如果一切都正确指定,启动后,聊天机器人应该可以运行并复制消息。
为了您的方便,我已将上述示例上传到存储库:https://github.com/CoolONEOfficial/echobot
⚙️ 高级机器人逻辑示例
现在我们已经介绍了基础知识,让我们深入研究一些您可能会觉得有用的更复杂的机器人逻辑。
📝 编辑已发送的消息
editMessage
您可以使用如下方法编辑一条刚刚发送的消息:
try bot.sendMessage(params, platform: message.platform.any, context: context).map(\.first).optionalFlatMap { message in
try! self.bot.editMessage(message, params: .init(message: "Other text"), app: self.app)!
}
🖼️ 将图像附加到消息
您可以通过添加一个包含附件数组的参数,将图片附加到消息中attachments
。附件可以是媒体内容或文档。以下是示例:
Botter.Bot.SendMessageParams(to: message, text: message.text, attachments: [ .init(type: .photo, content: .url("")) ])
🔘 向消息添加按钮
您可以使用以下参数向消息添加按钮keyboard
:
Botter.Bot.SendMessageParams(to: message, text: message.text, keyboard: [ [ Button(text: "Tap me", payload: "some data") ] ])
要处理按钮点击,您应该在handleMessage
方法中处理它们,其中可以在参数中找到按钮的有效负载update
。
☁️ 部署你的机器人
在前面的步骤中,我们设法让聊天机器人在本地运行,但是您可以在哪里托管它以供持续使用?
好消息是,该项目同时支持 macOS 和 Linux,因此您可以利用众多 PaaS 服务。您可以从 Heroku 或其替代方案开始,但由于端口限制,您需要为每个平台分别启动聊天机器人实例。
然而,对我来说更好的解决方案是来自 MacStadium 的专用 macOS 服务器,它不会施加这样的限制。
📚 资源
您可以在我的PhotoBot 项目中找到更多使用 Botter 的示例,该项目利用了该框架的所有功能。
如果您有兴趣深入了解 Botter - Vapor 的基础知识,我推荐以下资源:
🏁 结论
我们已经完成了使用 Botter 框架设置和配置聊天机器人的步骤,甚至还介绍了一些高级功能。但这仅仅是个开始。真正的奇迹发生在你开始尝试、创新并构建属于你自己的独特产品时。
记住,每个优秀的聊天机器人都始于一行代码。有了 Botter,您就拥有了一款强大的工具,可以让您的聊天机器人梦想成真。无论您是想构建一个简单的趣味机器人,还是一个用于业务的复杂机器人,Botter 都能提供您所需的灵活性和功能。
还在等什么?聊天机器人的世界触手可及。立即开始编程,看看你的创造力能带来什么。你的第一个聊天机器人可能只需几行代码就能诞生。