一个用于创建 Slack 应用的服务器端 Swift 模块。
将 SKServer 添加到你的 pod 文件
use_frameworks!
pod 'SKServer'
并运行
# Use CocoaPods version >= 1.4.0
pod install
将 SKServer 添加到你的 Cartfile
github "SlackKit/SKServer"
并运行
carthage bootstrap
将构建好的 SKServer.framework
拖入你的 Xcode 项目。
将 SKServer 添加到你的 Package.swift
import PackageDescription
let package = Package(
dependencies: [
.package(url: "https://github.com/SlackKit/SKServer.git", .upToNextMinor(from: "4.1.0"))
]
)
在你的应用主目录运行 swift build
。
要在你的项目中使用该库,请导入它
import SKServer
对于本地开发和测试需要通过 https 连接的功能,例如 OAuth、斜杠命令和消息按钮,你可能需要使用像 ngrok 这样的工具。
使用 SlackKitResponder
初始化一个 SKServer
实例
let middleware = ResponseMiddleware(token: "xoxp-SLACK_AUTH_TOKEN", response: SKResponse(text: "👋"))
let route = RequestRoute(path: "/hello", middleware: middleware)
let responder = SlackKitResponder(routes: [route])
// Without OAuth
let server = SKServer(responder: responder)
// With OAuth
let oauthConfig = OAuthConfig(clientID: "CLIENT_ID", clientSecret: "CLIENT_SECRET")
let server = SKServer(responder: responder, oauth: oauthConfig)
server.start()
OAuth 默认配置为使用 /oauth
路由。
使用提供的 ResponseMiddleware
来响应请求
let middleware = ResponseMiddleware(token: "xoxp-SLACK_AUTH_TOKEN", response: SKResponse(text: "👋"))
或者通过遵循 Middleware
协议来创建你自己的自定义中间件
public protocol Middleware {
func respond(to request: (RequestType, ResponseType)) -> (RequestType, ResponseType)
}
使用 RequestRoute
类型将中间件分配给特定的路由
let route = RequestRoute(path: "/hello", middleware: middleware)
将你的路由添加到 SlackKitResponder
let responder = SlackKitResponder(routes: [route])
最后,初始化并启动你的 SKServer
let server = SKServer(responder: responder)
server.start()
要使用出站 webhook,请在 Slack 中配置你的出站 webhook 并将其指向你的服务器后,配置中间件和一个带有 Slack 验证令牌的路由
let outgoingMiddleware = ResponseMiddleware(token: "xoxp-SLACK_AUTH_TOKEN", response: SlackResponse(text: "Hello, 🌎", responseType: .inChannel))
let outgoingRoute = RequestRoute(path: "/world", middleware: outgoingMiddleware)
let responder = SlackKitResponder(routes: [outgoingRoute])
let server = SKServer(responder: responder)
server.start()
在 Slack 中配置你的斜杠命令后(你也可以将斜杠命令作为 Slack 应用的一部分提供),为该路由创建一个路由、响应中间件,并将其添加到响应器
let middleware = ResponseMiddleware(token: "SLASH_COMMAND_TOKEN", response: SKResponse(text: "👋"))
let route = RequestRoute(path: "/hello", middleware: middleware)
let responder = SlackKitResponder(routes: [route])
let server = SKServer(responder: responder)
server.start()
当用户输入该斜杠命令时,它将访问你配置的路由并返回你指定的响应。
要使用消息按钮,请使用 Action
类型创建操作,并将它们作为附件附加到你的 SlackResponse
let confirm = Action.Confirm(text: "Are you sure?", title: "Confirm", okText: "All Systems Go", dismissText: "Abort!")
let action = Action(name: "launch", text: "Blast Off!", style: .Danger, confirm: confirm)
let attachment = Attachment(fallback: "launch", title: "Misson Control", callbackID: "launch_id", actions: [action])
let response = SlackResponse(text: "T-Minus 10…", responseType: .InChannel, attachments: [attachment])
要响应消息按钮按下事件,请为每个操作创建一个 MessageActionRoute
,并配置相应的中间件
let responseMiddleware = ResponseMiddleware(token: "slack-verification-token", response: SlackResponse(text: "Initiate Launch Sequence"))
let messageActionRoute = MessageActionRoute(action: action, middleware: responseMiddleware)
将你的 MessageActionRoute
添加到 MessageActionResponder
let responder = MessageActionResponder(routes: [messageActionRoute])
最后,创建一个 MessageActionMiddleware
并指定到达它的路由
let actionMiddleware = MessageActionMiddleware(token: "slack-verification-token", responder: responder)
let actionRoute = RequestRoute(path: "/actions", middleware: actionMiddleware)
let responder = SlackKitResponder(routes: [actionRoute])
let server = SKServer(responder: responder)
server.start()
通过遵循 SlackKitServer
来提供你自己的服务器实现
public protocol SlackKitServer {
func start()
}
let server = YourServer()
let slackApp = SKServer(server: YourServer(), responder: aResponder)