1. 克隆$ git clone git@github.com:ramswaroop/jbot.git项目。
  2. 创建Facebook应用程序和页面。
  3. 为页面生成页面访问令牌(在应用程序的信使设置中)。

  1. 将上面创建的令牌粘贴到application.properties文件中。
  2. 通过在IDE中或通过命令行运行JBotApplication来运行示例应用程序: $ cd JBot $ mvn clean install $ cd jbot-example $ mvn spring-boot:run
  3. 设置webhook以接收消息和其他事件。您需要有一个安全的公共地址来设置webhook。如果您在计算机上本地运行,则可以使用localtunnel.me生成安全的公共地址。

  1. 在“Webooks”设置下的“Callback Url”字段中指定上面创建的地址,并将验证令牌作为fb_token_for_jbot并单击“Verify and Save”。

您现在可以通过转到Facebook页面并单击“发送消息”按钮来开始发送您的机器人消息。

如果你现在懒得开始并只是想玩,你可以尝试jbot-example访问JBot Facebook页面并点击“发送消息”按钮。

基本用法

Bot的主要功能是接收和回复消息。使用JBot,接收消息就像编写简单@Controller并通过调用reply()方法回复它一样简单,如下所示:

@Controller(events = EventType.MESSAGE)
public void onReceiveMessage(Event event) {if ("hi".equals(event.getMessage().getText())) {reply(event, "Hi, I am JBot.");}
}

你的机器人的所有代码都在FbBot类中,它从核心包中扩展了Bot。您可以拥有任意数量的机器人,只需让类扩展Bot类,它就可以获得Facebook Bot的所有功能。虽然建议为不同的机器人使用单独的JBot实例。

使用JBot构建Facebook Messenger机器人

在我们深入了解细节之前,请确保您拥有Facebook应用程序,fb页面并设置了webhooks。请参阅“ 入门”部分以了解更多信息。

设置你的机器人

在Facebook,我们可以为网页而不是用户制作信使机器人。要开始使用fb API,我们需要一个页面访问令牌,可以从您的任何fb应用程序设置生成。需要在jbot-example 中的application.properties文件中指定此页面访问令牌 。你也可以从spring.profiles.active中删除“slack” 。在此之后,您可以通过IDE或命令行运行JBotApplication来启动机器人。

机器人启动后,您可以转到应用程序的设置并设置webhook。将安全URL提供给您的机器人应用程序,如果您在计算机上运行而不是在任何服务器上运行,则可以使用localtunnel.me生成一个。您还需要提供“验证令牌”,可以在fbBotToken属性中的的application.properties文件中找到它。

接收消息

Facebook将Callback发送给/webhook,用于您的网页订阅的所有活动。它将POST请求发送到您的/webhook端点。

幸运的是,使用JBot,您不必担心定义自己的处理程序来处理这些POST调用,解析事件等。要从Fb接收事件,您只需要定义带@Controller注释的方法(从这里开始,我们将称之为@Controller)。

这是一个简单的示例,当您的机器人从Facebook 收到MESSAGEPOSTBACK类型的事件时,它会被调用。

@Controller(events = {EventType.MESSAGE, EventType.POSTBACK})
public void onReceiveMessage(Event event) {if ("hi".equals(event.getMessage().getText())) {reply(event, "Hi, I am JBot.");}
}

另一个示例是添加pattern@Controller。添加模式将限制仅在事件文本或事件有效内容(取决于事件类型)与定义的模式匹配时才调用方法。您可以在pattern中指定正则表达式。

@Controller(events = {EventType.MESSAGE, EventType.POSTBACK}, pattern = "^(?i)(hi|hello|hey)$")
public void onGetStarted(Event event) {// quick reply buttonsButton[] quickReplies = new Button[]{new Button().setContentType("text").setTitle("Sure").setPayload("yes"),new Button().setContentType("text").setTitle("Nope").setPayload("no")};reply(event, new Message().setText("Hello, I am JBot. Would you like to see more?").setQuickReplies(quickReplies));
}

如果要处理用户发送的匹配值,可以选择在方法中使用matcher作为正式参数(事件后)。您可以访问matcher.group(0)matcher.group(1)等等。

这里有一点要注意,pattern将针对匹配textpayload根据接收到的事件类型。对于下面的示例,接收的事件将是类型QUICK_REPLY,在这种情况下pattern将与QuickReply中的payload属性匹配,而不是与text属性匹配。

@Controller(events = EventType.QUICK_REPLY, pattern = "(yes|no)")
public void onReceiveQuickReply(Event event) {if ("yes".equals(event.getMessage().getQuickReply().getPayload())) {reply(event, "Cool! You can type: \n 1) Show Buttons \n 2) Show List \n 3) Setup meeting");} else {reply(event, "See you soon!");}
}

您可以查看信使平台当前支持的所有webhook事件。您可能会看到那里没有列出特定的QUICK_REPLY事件类型。这是JBot添加的额外活动,可让您轻松完成任务。

发送消息

就像接收一样,要从机器人向用户发送消息,您需要POST拨打Facebook的Send API。但是,再次使用JBot,您可以通过在@Controller方法中调用reply()方法来简单地进行回复。reply()方法有各种重载版本以满足您的需求。

最简单的例子就是,

reply(event, "Hi, I am Jbot.");

它需要一个事件对象和一个作为回复文本的字符串。

另一个例子,其中JBot回复了两个快速回复按钮

// quick reply buttons
Button[] quickReplies = new Button[]{new Button().setContentType("text").setTitle("Sure").setPayload("yes"),new Button().setContentType("text").setTitle("Nope").setPayload("no")
};
reply(event, new Message().setText("Hello, I am JBot. Would you like to see more?").setQuickReplies(quickReplies));

如果你看到这里,我们已经在两个按钮设置了payload。因此,要知道用户点击了哪个按钮,您可以使用如下所示的事件EventType.QUICK_REPLY@Controller和模式(yes|no)

@Controller(events = EventType.QUICK_REPLY, pattern = "(yes|no)")
public void onReceiveQuickReply(Event event) {if ("yes".equals(event.getMessage().getQuickReply().getPayload())) {reply(event, "Cool! You can type: \n 1) Show Buttons \n 2) Show List \n 3) Setup meeting");} else {reply(event, "See you soon!");}
}

在这个例子中,JBot回复了两个标准按钮

Button[] buttons = new Button[]{new Button().setType("web_url").setUrl("http://blog.ramswaroop.me").setTitle("JBot Docs"),new Button().setType("web_url").setUrl("https://goo.gl/uKrJWX").setTitle("Buttom Template")
};
reply(event, new Message().setAttachment(new Attachment().setType("template").setPayload(new Payload().setTemplateType("button").setText("These are 2 link buttons.").setButtons(buttons))));

最后一个示例显示JBot回复了三个项目列表

Element[] elements = new Element[]{new Element().setTitle("AnimateScroll").setSubtitle("A jQuery Plugin for Animating Scroll.").setImageUrl("https://plugins.compzets.com/images/as-logo.png").setDefaultAction(new Button().setType("web_url").setMessengerExtensions(true).setUrl("https://plugins.compzets.com/animatescroll/")),new Element().setTitle("Windows on Top").setSubtitle("Keeps a specific Window on Top of all others.").setImageUrl("https://plugins.compzets.com/images/compzets-logo.png").setDefaultAction(new Button().setType("web_url").setMessengerExtensions(true).setUrl("https://www.compzets.com/view-upload.php?id=702&action=view")),new Element().setTitle("SimpleFill").setSubtitle("Simplest form filler ever.").setImageUrl("https://plugins.compzets.com/simplefill/chrome-extension/icon-64.png").setDefaultAction(new Button().setType("web_url").setMessengerExtensions(true).setUrl("https://plugins.compzets.com/simplefill/"))
};
reply(event, new Message().setAttachment(new Attachment().setType("template").setPayload(new Payload().setTemplateType("list").setElements(elements))));

这是一个截屏视频,显示了我们讨论的所有示例:

您应该查看Facebook的Send API,了解机器人可以发送的各种回复。例如,您甚至可以向用户发送收据,航空公司登机牌等等。

对话

这是JBot的一个与众不同的功能,您可以直接与机器人交谈并进行对话。请参阅下面的示例,了解机器人如何通过一个接一个地提出一些简单的问题来为您的团队建立会议。

/*** Type "setup meeting" to start a conversation with the bot. Provide the name of the next method to be* invoked in {@code next}. This method is the starting point of the conversation (as it* calls {@link Bot#startConversation(Event, String)} within it. You can chain methods which will be invoked* one after the other leading to a conversation.** @param event*/
@Controller(pattern = "(?i)(setup meeting)", next = "confirmTiming")
public void setupMeeting(Event event) {startConversation(event, "confirmTiming");   // start conversationreply(event, "Cool! At what time (ex. 15:30) do you want me to set up the meeting?");
}
/*** This method will be invoked after {@link FbBot#setupMeeting(Event)}. You need to* call {@link Bot#nextConversation(Event)} to jump to the next question in the conversation.** @param event*/
@Controller(next = "askTimeForMeeting")
public void confirmTiming(Event event) {reply(event, "Your meeting is set at " + event.getMessage().getText() +". Would you like to repeat it tomorrow?");nextConversation(event);    // jump to next question in conversation
}
/*** This method will be invoked after {@link FbBot#confirmTiming(Event)}. You can* call {@link Bot#stopConversation(Event)} to end the conversation.** @param event*/
@Controller(next = "askWhetherToRepeat")
public void askTimeForMeeting(Event event) {if (event.getMessage().getText().contains("yes")) {reply(event, "Okay. Would you like me to set a reminder for you?");nextConversation(event);    // jump to next question in conversation  } else {reply(event, "No problem. You can always schedule one with 'setup meeting' command.");stopConversation(event);    // stop conversation only if user says no}
}
/*** This method will be invoked after {@link FbBot#askTimeForMeeting(Event)}. You can* call {@link Bot#stopConversation(Event)} to end the conversation.** @param event*/
@Controller
public void askWhetherToRepeat(Event event) {if (event.getMessage().getText().contains("yes")) {reply(event, "Great! I will remind you tomorrow before the meeting.");} else {reply(event, "Okay, don't forget to attend the meeting tomorrow :)");}stopConversation(event);    // stop conversation
}

注意:

  • 只有对话中的第一种方法才能定义pattern。注释中的pattern属性对@Controller会话中的其余方法没有影响。
  • 会话中的第一种方法不需要调用nextConversation(event)但其他方法确实需要。
  • @Controllernext属性应该具有需要调用的对话中的下一个方法的名称。
  • 要结束对话,请在控制器方法中调用stopConversation(event)

入门按钮

您可以通过简单地调用setGetStartedButton("hi");“hi”是您的有效负载来设置“开始”按钮。您可以在FbBot.java中看到init()方法。在设置好webhook后取消@PostConstruct注释。

“开始使用”按钮仅向您的机器人新用户显示。了解更多。

问候文本

greeting文本允许您指定人们将在机器人的欢迎屏幕上看到的消息。首次显示与您的机器人交互的人员的欢迎屏幕。您可以将greeting文字设置为:

setGreetingText(new Payload[]{new Payload().setLocale("default").setText("JBot is a Java Framework to help" +" developers make Facebook, Slack and Twitter bots easily. You can see a quick demo by clicking " +"the \"Get Started\" button.")});

您可以为不同的区域设置定义不同的greeting文本。了解更多。

用法

您可以直接克隆此项目并使用jbot-example,也可以将其作为项目中的maven / gradle依赖项包含在内。

Maven

<dependency><groupId>me.ramswaroop.jbot</groupId><artifactId>jbot</artifactId><version>4.0.1</version>
</dependency>

Gradle

dependencies {compile("me.ramswaroop.jbot:jbot:4.0.1")
}

注意:当您将jbot作为依赖项包括在内时,请确保包含me.ramswaroop.jbot自动扫描包。例如,您可以在@SpringBootApplication@ComponentScan中指定scanBasePackages。有关详细信息,请参阅jbot-example。

在生产中部署

您可以使用supervisord或类似工具在生产中部署此应用程序。以下是此应用程序的supervisord.conf示例:

[inet_http_server]
port=127.0.0.1:9001
[supervisord]
logfile=/tmp/supervisord.log
logfile_maxbytes=50MB
logfile_backups=10
loglevel=info
pidfile=/tmp/supervisord.pid
nodaemon=false
minfds=1024
minprocs=200
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=http://127.0.0.1:9001
[program:jbot]
command=mvn spring-boot:run
;directory=/var/www/jbot.ramswaroop.me/jbot/jbot-example/       ; change this
autostart=true
autorestart=true
;user=jbot                                                      ; change this
redirect_stderr=true
stdout_logfile=/tmp/jbot.log

希望我的文档和框架可以帮助您制作机器人。赞助商和贡献者随时欢迎。所有详细信息都可以在项目的README.md文件中找到。

Java制作Facebook Messenger机器人的7个简单步骤(转载)相关推荐

  1. 如何用 Python 和 Flask 建立部署一个 Facebook Messenger 机器人

    这是我建立一个简单的 Facebook Messenger 机器人的记录.功能很简单,它是一个回显机器人,只是打印回用户写了什么. 回显服务器类似于服务器的"Hello World" ...

  2. facebook机器学习_如何为您的页面创建Facebook Messenger机器人

    facebook机器学习 by Paul Pinard 保罗·皮纳德(Paul Pinard) 如何为您的页面创建Facebook Messenger机器人 (How to create a Face ...

  3. Java制作一个盒子程序_编写一个简单的Java程序,模拟计算器的功能。

    提问:编写一个简单的Java程序,模拟计算器的功能. 网友回答: 程序参考: import java.awt.*; import java.awt.event.ActionEvent; import ...

  4. java制作霓虹灯_Vegas教你用超简单方法制作霓虹灯效果

    在各色各样的展会中,各种炫彩华丽的灯光和光影一直都能吸引到人们大量的关注.同样,在视频制作中,光线的气氛渲染也是常用的方法,常用也就代表着效果明显,也是很多刚学视频剪辑小伙伴们想要学习的一种方法. 今 ...

  5. eBay推出Facebook聊天机器人,体验另类购物

    借助语音和图片,该机器人让网上购物变得更为高效. 论起现在哪家机器人最为火爆,估计九成以上的人会说Facebook,毕竟连美国白宫都在Facebook上开发了一个"奥巴马"聊天机器 ...

  6. Facebook Messenger要点燃聊天机器人革命,据说四月就发布!

    不少业界人士猜测,Facebook很快就会推出Messenger聊天机器人服务,最快可能在四月12-13日的F8大会上发布. 对于外界种种猜测,Facebook并没有正面回应,但如果事实真是如此,那么 ...

  7. java mixin_Mixin Messenger 机器人接入指南

    关于 Mixin Messenger Mixin Messenger 是一个开源的端对端加密聊天软件,并且集成了基于 Mixin Network 的多链钱包. 安全:端对端加密保障消息安全,去中心化. ...

  8. webrtc为Google提供动力的技术与视频群聊,Facebook Messenger和不和谐

    9分钟内您需要了解的有关Web RTC的所有信息 (Everything you need to know about Web RTC in 9 minutes) 作者注 (Author's Note ...

  9. Facebook Messenger月用户数不断攀升 突破12亿

    FacebookMessenger月用户数超过12亿 北京时间4月13日消息,Facebook Messenger月用户数超过12亿,而7月时只有10亿. 2014年,Facebook将信息服务分拆出 ...

最新文章

  1. python保存至对应目录_python如何实现复制目录到指定目录
  2. 关于在本地idea当中提交spark代码到远程的错误总结(第二篇)
  3. 计算机的前端总线又称为,《计算机组成原理》复习资料
  4. C语言试题二十三之编写一个函数void function(int tt[m][n],int pp[n]),tt指向一个m行n列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中
  5. python3.7降级3.6_请问一下Mac python3.7.1怎么降低到3.6版本?
  6. 100款机器学习数据集
  7. informix的数据类型列表
  8. Laya.TextInput组件中禁用后改变输入框背景色和文字颜色
  9. Redis——Redis入门和一些笔记
  10. Apache 防止恶意解析
  11. BYOD与企业移动性的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  12. 计算机水平考试试题c,计算机水平考试-初级程序员下午试题模拟6
  13. Ubuntu之输入法
  14. 基于APS排程系统的物料管理有哪些优势?
  15. 软件或开发工具读取EXCEL文件报错ACEODBC.DLL驱动加载失败解决
  16. 对先前的CLAY对百度知道进行的XSS漏洞的payload进行分析
  17. android 换机 iphone8,最好的换机之选?iPhone8 PLUS众测体验
  18. 1997-2020年各省三废排放量和熵值法计算的环境规制综合指数(无缺失值)
  19. Gesture Recognizers与触摸事件分发
  20. 软考考完了,怎么评职称呢?

热门文章

  1. 王者服务器维护5月20日,王者荣耀4月20日更新了什么 王者荣耀4月20日更新公告一览...
  2. nodejs实现加密解密crypto、decipher【附完整代码】
  3. 环世界 仆人职业_仆人,不是领导者,不是管理者
  4. 音视频工程企业专项资质证书
  5. Vue3仿卖座电影开发纪实(一):搭建导航
  6. JavaScript打印星星
  7. 简述网络舆情之海量数据收集流程
  8. elemenet ui中表格表头换行
  9. 谷歌云服务器设置ssh账号,LINUX | 谷歌云开启SSH及设置root密码
  10. 请写出sfr和sbit的语句格式_单片机sfr和sbit关键字,详解