SKServer 已被整合到 SlackKit

一个用于创建 Slack 应用的服务器端 Swift 模块。

安装

CocoaPods

将 SKServer 添加到你的 pod 文件

use_frameworks!
pod 'SKServer'

并运行

# Use CocoaPods version >= 1.4.0
pod install

Carthage

将 SKServer 添加到你的 Cartfile

github "SlackKit/SKServer"

并运行

carthage bootstrap

将构建好的 SKServer.framework 拖入你的 Xcode 项目。

Swift Package Manager

将 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

使用 RequestRoute 类型将中间件分配给特定的路由

let route = RequestRoute(path: "/hello", middleware: middleware)

SlackKitResponder

将你的路由添加到 SlackKitResponder

let responder = SlackKitResponder(routes: [route])

SKServer

最后,初始化并启动你的 SKServer

let server = SKServer(responder: responder)
server.start()

自定义集成

出站 Webhook

要使用出站 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 中配置你的斜杠命令后(你也可以将斜杠命令作为 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)