毫无疑问,使用 Ruby 在 Facebook Messenger 上制作机器人是最好的方法
$ gem install facebook-messengerYou can reply to messages sent by the human:
# bot.rb
require 'facebook/messenger'
Facebook::Messenger::Bot.on :message do |message|
message.id # => 'mid.1457764197618:41d102a3e1ae206a38'
message.sender # => { 'id' => '1008372609250235' }
message.recipient # => { 'id' => '2015573629214912' }
message.seq # => 73
message.sent_at # => 2016-04-22 21:30:36 +0200
message.text # => 'Hello, bot!'
message.attachments # => [ { 'type' => 'image', 'payload' => { 'url' => 'https://www.example.com/1.jpg' } } ]
message.reply(text: 'Hello, human!')
end... or even send the human messages out of the blue:
Facebook::Messenger::Bot.deliver({
recipient: {
id: YOUR_RECIPIENT_ID
},
message: {
text: 'Human?'
},
messaging_type: Facebook::Messenger::Bot::MessagingType::UPDATE
}, page_id: YOUR_PAGE_ID)The human may require visual aid to understand:
message.reply(
attachment: {
type: 'image',
payload: {
url: 'http://sky.net/visual-aids-for-stupid-organisms/pig.jpg'
}
}
)The human may appreciate hints:
message.reply(
text: 'Human, who is your favorite bot?',
quick_replies: [
{
content_type: 'text',
title: 'You are!',
payload: 'HARMLESS'
}
]
)The human may require simple options to communicate:
message.reply(
attachment: {
type: 'template',
payload: {
template_type: 'button',
text: 'Human, do you like me?',
buttons: [
{ type: 'postback', title: 'Yes', payload: 'HARMLESS' },
{ type: 'postback', title: 'No', payload: 'EXTERMINATE' }
]
}
}
)When the human has selected an option, you can act on it:
Bot.on :postback do |postback|
postback.sender # => { 'id' => '1008372609250235' }
postback.recipient # => { 'id' => '2015573629214912' }
postback.sent_at # => 2016-04-22 21:30:36 +0200
postback.payload # => 'EXTERMINATE'
if postback.payload == 'EXTERMINATE'
puts "Human #{postback.recipient} marked for extermination"
end
endSee Facebook's documentation for all message options.
Humans have feelings, and they can react to your messages. You can pretend to understand:
Bot.on :reaction do |message|
message.emoji # => ""
message.action # => "react"
message.reaction # => "like"
message.reply(text: 'Your feelings have been registered')
endShow the human you are preparing a message for them:
Bot.on :message do |message|
message.typing_on
# Do something expensive
message.reply(text: 'Hello, human!')
endOr that you changed your mind:
Bot.on :message do |message|
message.typing_on
if # something
message.reply(text: 'Hello, human!')
else
message.typing_off
end
endYou can mark messages as seen to keep the human on their toes:
Bot.on :message do |message|
message.mark_seen
endYou can keep track of messages sent to the human:
Facebook::Messenger::Bot.on :message_echo do |message_echo|
message_echo.id # => 'mid.1457764197618:41d102a3e1ae206a38'
message_echo.sender # => { 'id' => '1008372609250235' }
message_echo.seq # => 73
message_echo.sent_at # => 2016-04-22 21:30:36 +0200
message_echo.text # => 'Hello, bot!'
message_echo.attachments # => [ { 'type' => 'image', 'payload' => { 'url' => 'https://www.example.com/1.jpg' } } ]
# Log or store in your storage method of choice (skynet, obviously)
endYou can keep track of message requests accepted by the human:
Bot.on :message_request do |message_request|
message_request.accept? # => true
# Log or store in your storage method of choice (skynet, obviously)
endYou can keep track of instant game progress:
Bot.on :game_play do |game_play|
game_play.sender # => { 'id' => '1008372609250235' }
game_play.recipient # => { 'id' => '2015573629214912' }
game_play.sent_at # => 2016-04-22 21:30:36 +0200
game_play.game # => ""
game_play.player # => ""
game_play.context # => { 'context_type' => "", 'context_id' => "" }
game_play.score # => 100
game_play.payload # => ""
endWhen the human clicks the Send to Messenger button
embedded on a website, you will receive an optin event.
Bot.on :optin do |optin|
optin.sender # => { 'id' => '1008372609250235' }
optin.recipient # => { 'id' => '2015573629214912' }
optin.sent_at # => 2016-04-22 21:30:36 +0200
optin.ref # => 'CONTACT_SKYNET'
optin.reply(text: 'Ah, human!')
endYou can stalk the human:
Bot.on :delivery do |delivery|
delivery.ids # => 'mid.1457764197618:41d102a3e1ae206a38'
delivery.sender # => { 'id' => '1008372609250235' }
delivery.recipient # => { 'id' => '2015573629214912' }
delivery.at # => 2016-04-22 21:30:36 +0200
delivery.seq # => 37
puts "Human was online at #{delivery.at}"
endWhen the human follows a m.me link with a ref parameter like http://m.me/mybot?ref=myparam,
you will receive a referral event.
Facebook::Messenger::Bot.on :referral do |referral|
referral.sender # => { 'id' => '1008372609250235' }
referral.recipient # => { 'id' => '2015573629214912' }
referral.sent_at # => 2016-04-22 21:30:36 +0200
referral.ref # => 'MYPARAM'
endAnother bot can pass a human to you:
Facebook::Messenger::Bot.on :pass_thread_control do |pass_thread_control|
pass_thread_control.new_owner_app_id # => '123456789'
pass_thread_control.metadata # => 'Additional content that the caller wants to set'
endYou can greet new humans to entice them into talking to you, in different locales:
Facebook::Messenger::Profile.set({
greeting: [
{
locale: 'default',
text: 'Welcome to your new bot overlord!'
},
{
locale: 'fr_FR',
text: 'Bienvenue dans le bot du Wagon !'
}
]
}, page_id: YOUR_PAGE_ID)You can define the action to trigger when new humans click on the Get Started button. Before doing it you should check to select the messaging_postbacks field when setting up your webhook.
Facebook::Messenger::Profile.set({
get_started: {
payload: 'GET_STARTED_PAYLOAD'
}
}, page_id: YOUR_PAGE_ID) You can show a persistent menu to humans.
…See Facebook's documentation on Messaging Policy Enforcement
Facebook::Messenger::Bot.on :'policy_enforcement' do |referral|
referral.action # => 'block'
referral.reason # => "The bot violated our Platform Policies (https://developers.facebook.com/policy/#messengerplatform). Common violations include sending out excessive spammy messages or being non-functional."
endSee Facebook's documentation on Sending Messages
As of May 7th 2018 all messages are required to include a messaging_type
Facebook::Messenger::Bot.deliver({
recipient: {
id: '45123'
},
message: {
text: 'Human?'
},
messaging_type: Facebook::Messenger::Bot::MessagingType::UPDATE
}, page_id: YOUR_PAGE_ID)See Facebook's documentation on Message Tags
When sending a message with messaging_type: MESSAGE_TAG (Facebook::Messenger::Bot::MessagingType::MESSAGE_TAG) you must ensure you add a tag: parameter
Facebook::Messenger::Bot.deliver({
recipient: {
id: '45123'
},
message: {
text: 'Human?'
},
messaging_type: Facebook::Messenger::Bot::MessagingType::MESSAGE_TAG
tag: Facebook::Messenger::Bot::Tag::NON_PROMOTIONAL_SUBSCRIPTION
}, page_id: YOUR_PAGE_ID) Follow the Quick Start guide to create an Application on Facebook.
Use the generated access token and your verify token to configure your bot. Most bots live on a single Facebook Page. If that is the case with yours, too, just set these environment variables and skip to the next section:
export ACCESS_TOKEN=EAAAG6WgW...
export APP_SECRET=a885a...
export VERIFY_TOKEN=95vr15g...If your bot lives on multiple Facebook Pages, make a configuration provider to keep track of access tokens, app secrets and verify tokens for each of them:
class ExampleProvider "1234"}
recipient = {"id"=>"5678"}
timestamp = 1528049653543
message = {"text"=>"Hello, world"}
FakeMessage.new(sender, recipient, timestamp, message)
end
endAfter checking out the repo, run bin/setup to install dependencies. You can also run
bin/console for an interactive prompt that will allow you to experiment.
Run rspec to run the tests, rubocop to lint, or rake to do both.
To install this gem onto your local machine, run bundle exec rake install. To
release a new version, update the version number in version.rb, and then run
bundle exec rake release, which will create a git tag for the version, push git
commits and tags, and push the .gem file to rubygems.org.
Bug reports and pull requests are welcome on GitHub at https://github.com/jgorset/facebook-messenger.
Rubotnik is a boilerplate for Facebook Messenger, and a great place to start if you're new to bots.
Chatwoot use Facebook Messenger to integrate their customer support bots with, well, Facebook Messenger.
Botamp is the all-in-one solution for Marketing Automation via messaging apps.
Johannes Gorset made this. You should tweet me if you can't get it to work. In fact, you should tweet me anyway.
I work at Schibsted Products & Technology with a bunch of awesome folks who are every bit as passionate about building things as I am. If you're using Facebook Messenger, you should probably join us.
暂无开放 Issues,或尚未同步最近议题。