This library provides helpers for Vapor 2 to interact with the facebook bot api. It simplifies the interaction with the Send API as well as parses incoming webhooks for you.
The following is a list with all features of the facebook Send API and webhooks as of May 2017 together with a note whether it is supported or not. If you find something that's not listed there please open an issue.
| Feature | Supported | Note |
|---|---|---|
| Parse and validate webhooks | Yes | |
| Message Received Callback | Yes | |
| Postback Received Webhook | Yes | |
| Other webhooks | No | If you need more webhooks open an issue |
| Feature | Supported | Note |
|---|---|---|
| Interact with Send API | Yes | |
| Send to page scoped id | Yes | |
| Send to phone number | Yes | |
| Send sender_action | Yes | e.g.: typing_on, typing_off, mark_seen |
| Add notification_type | Yes | e.g.: REGULAR, SILENT_PUSH, or NO_PUSH |
| Send text messages | Yes | |
| Send quick_replies | Yes | |
| Add metadata to send request | Yes | |
| Send multimedia attachments | Yes (url) | e.g.: image, audio, video, file |
| Send with attachment reuse | Yes | |
| Binary multimedia upload | No | If you need it open an issue |
| Send template attachments | Partially | See below... |
| Generic Template | Yes | |
| Button Template | Yes | |
| Receipt Template | No | In development... |
| List Template | No | In development... |
| Airline Templates | No | If you need it open an issue |
| Buttons | Partially | See below... |
| URL Button | Yes | |
| Postback Button | Yes | |
| Call Button | Yes | |
| Share Button | Yes | |
| Buy Button | No | If you need it open an issue |
| Log In Button | No | In development... |
| Log Out Button | No | In development... |
| Message Tags | No | If you need it open an issue |
| Auto parsing response | No | In development... |
This Swift package is intended to be used together with Vapor 2.0.
Add the following line to your dependencies in the Package.swift file:
.Package(url: "https://github.com/Boilertalk/VaporFacebookBot.git", majorVersion: 0)Your Package.swift file should now look a little bit like the following:
import PackageDescription
let package = Package(
name: "MyAwesomeBot",
targets: [
Target(name: "App"),
Target(name: "Run", dependencies: ["App"]),
],
dependencies: [
.Package(url: "https://github.com/vapor/vapor.git", majorVersion: 2),
.Package(url: "https://github.com/vapor/fluent-provider.git", majorVersion: 1),
.Package(url: "https://github.com/Boilertalk/VaporFacebookBot.git", majorVersion: 0)
],
exclude: [
"Config",
"Database",
"Localization",
"Public",
"Resources",
]
)First of all import VaporFacebookBot:
import VaporFacebookBotThen you can parse facebook webhooks in your route:
// builder is your RouteBuilder
builder.post("facebook") { request in
// Parse json body onto a callback object
if let j = request.json {
let callback = try FacebookCallback(json: j)
// Loop through all entries and messaging objects as described in the facebook documentation
for e in callback.entry {
for m in e.messaging {
if let mR = m.messageReceived {
// We have a message received callback
if let text = mR.message.text {
// We have a text
print(text)
} else if let att = mR.message.attachments {
// We have some attachments
print(att.debugDescription)
}
} else if let pR = m.postbackReceived {
// We have a postback received callback
// Do something with that...
}
}
}
}
// Return 200 OK
var json = JSON()
try json.set("success", true)
return json
}You can basically access all non optional and optional values through these objects. For a complete list of available values refer to the facebook bot documentation.
TODO: Add documentation for Send API...
TODO: Add information for contributors...