A ready-to-use library to create Facebook Messenger bots easily.
Find the latest version and import it.
Details for the Facebook Bot API please visit here.
Basically a facebook bot needs to get and send messages.
Just create your own bot class and extend ClayFaceBot.
import com.github.anlcnydn.FacebookApiException;
import com.github.anlcnydn.bots.ClayFaceBot;
import com.github.anlcnydn.models.Message;
import com.github.anlcnydn.models.Update;
public class FacebookBot extends ClayFaceBot {
//This not a good practice to keep tokens here. This just for documentation purposes.
private static final String VERIFICATION_TOKEN = "YOUR_CUSTOM_VERIFICATION_TOKEN";
private static final String BOT_TOKEN = "YOUR_PAGE_TOKEN_CREATED_BY_FACEBOOK";
@Override
public boolean onUpdateReceived(Update update) {
//When message arrived.
}
@Override
public String getVerificationToken() {
return VERIFICATION_TOKEN;
}
@Override
public String getBotToken() {
return BOT_TOKEN;
}
}
First, we need to verify the facebook webhook connection. It means that facebook will send a get request to your host's "/webhook" url(For ex: https://example.com/webhook?hub.mode=subscribe&hub.challenge=SOME_CHALLENGE_SENT_BY_FACEBOOK&hub.verify_token=YOUR_CUSTOM_VERIFICATION_TOKEN).
In where you get the GET request, you need to put the parameters in a Map<String, String[]>.
//Lets create a dummy map.
Map<String, String[]> map = new HashMap<>();
map.put("hub.mode", "subscribe");
map.put("hub.challenge", "SOME_CHALLENGE_SENT_BY_FACEBOOK");
map.put("hub.verify_token", "YOUR_CUSTOM_VERIFICATION_TOKEN");
FacebookBotApi api = new FacebookBotApi(new FacebookBot);
//This result can be unauthorized or ok
BotHttpResult result = api.verify(map);
if(result.getCode().equals("ok")) {
//the value is hub.challenge from facebook
return ok(result.getValue());
}
return unauthorized();
Messages are sent /webhook url as POST request with a JSON body. You need to pass body as string to api.receive() method.
String request = request().body().asJson().toString();
FacebookBotApi api = new FacebookBotApi(new FacebookBot());
//This result can be ok or internal_server_error
BotHttpResult result = api.receive(request);
if(result.getCode().equals("ok")) {
return ok();
}
return internalServerError();
Messages arrive our bots onUpdateReceived() method.
@Override
public boolean onUpdateReceived(Update update) {
if(update.hasMessage()) {
Message m = Message.create(update.getMessage().getSenderId(), update.getMessage().getText());
try {
sendMessage(m);
} catch (FacebookApiException e) {
//TODO
}
return true;
}
return false;
}
The above code snippet sends the same message to its sender.
This library uses Facebook Messenger Bot API. For further information please visit API's documentation.
Examples will be shared under this title.
Feel free to open an issue.