【问题标题】:Facebook Messenger bot object structure for javajava的Facebook Messenger bot对象结构
【发布时间】:2016-08-23 14:16:33
【问题描述】:

有没有人创建了一个开源项目,在 java 中公开了 facebook messenger bot API? (或者我可以转换的另一种语言?)

本质上是堆栈的对象层次结构,位于: https://developers.facebook.com/docs/messenger-platform/send-api-reference

我宁愿不只使用 JsonObjects 等或 Maps 来提取传入的 JSON 聊天消息或构建传出的结构化聊天回复。如果存在这样的开源项目——我还没有找到它。

【问题讨论】:

  • 我遇到了同样的问题,因为我的服务器是 tomcat。我找不到 Pojos 和 fb messenger webhook 合同的任何链接。所以我自己做了。 Here's 您的 java 服务器 webhook 和 fb messenger 之间的合同链接。这是一个成熟的工作 maven 项目,可部署在 jetty 中。
  • TheKosmix,非常感谢。我会检查一下。事实证明,FB Messenger Bot 集成比 Kik 或 Skype 容易得多!谁会呃?

标签: java facebook bots messenger


【解决方案1】:

看看FaceBot。 FaceBot 的目标是让 Facebook 的 Messenger 平台更简单:使用 FaceBot,您只需不到 5 行代码即可设置自己的 Messenger 机器人。

这是一个例子:

public class MyFaceBotBehavior extends AbstractFaceBot {

  public void defineBehavior() {
     // Setting my tokens from Facebook (page token and validation token for webhook).
     FaceBotContext.getInstance().setup("myFacebookPageToken", "myFacebookWebhookValidationToken");

     // Defining a bot which will reply with "Hello World!" as soon as I write "Hi"
     addActionFrame(new MessageEvent("Hi"),
          new MessageAutoReply("Hello World!"));
 }
}

如果您有任何问题或需要帮助,请随时与我联系(我是开发人员)。

【讨论】:

    【解决方案2】:

    使用开源项目messenger4j,您将获得所需的一切。

    这是一个易于使用的 Java 库,用于在 Messenger 平台上构建聊天机器人。

    它提供了丰富的构建器 API 来构建传出消息。 此外,它将入站消息解析为特定的 java 对象并自动检测它们的类型。对于每种消息类型或事件,您都可以注册相应的事件处理程序。

    接收:

    String payload = ... // callback request body
    String signature = ... // 'X-Hub-Signature' request header
    
    // JDK 8 version
    MessengerReceiveClient receiveClient = MessengerPlatform.newReceiveClientBuilder("APP_SECRET", "VERIFICATION_TOKEN")
            .onTextMessageEvent(event ->  System.out.printf("%s: %s", event.getSender().getId(), event.getText()))
            .build();
    
    // JDK 7 version
    MessengerReceiveClient receiveClient = MessengerPlatform.newReceiveClientBuilder("APP_SECRET", "VERIFICATION_TOKEN")
            .onTextMessageEvent(new TextMessageEventHandler() {
                @Override
                public void handle(TextMessageEvent event) {
                    System.out.printf("%s: %s", event.getSender().getId(), event.getText());
                }
            })
            .build();
    
    receiveClient.processCallbackPayload(payload, signature);
    

    发送(简单):

    MessengerSendClient sendClient = MessengerPlatform.newSendClientBuilder("PAGE_ACCESS_TOKEN").build();
    sendClient.sendTextMessage("RECIPIENT_ID", "Hi there, how are you today?");
    

    发送(复杂):

    ReceiptTemplate receipt = ReceiptTemplate.newBuilder("Stephane Crozatier", "12345678902", "USD", "Visa 2345")
            .orderUrl("http://petersapparel.parseapp.com/order?order_id=123456")
            .timestamp(1428444852L)
            .addElements()
                .addElement("Classic White T-Shirt", 50F)
                    .subtitle("100% Soft and Luxurious Cotton")
                    .quantity(2)
                    .currency("USD")
                    .imageUrl("http://petersapparel.parseapp.com/img/whiteshirt.png")
                    .toList()
                .addElement("Classic Gray T-Shirt", 25F)
                    .subtitle("100% Soft and Luxurious Cotton")
                    .quantity(1)
                    .currency("USD")
                    .imageUrl("http://petersapparel.parseapp.com/img/grayshirt.png")
                    .toList()
                .done()
            .addAddress("1 Hacker Way", "Menlo Park", "94025", "CA", "US").street2("").done()
            .addSummary(56.14F).subtotal(75.00F).shippingCost(4.95F).totalTax(6.19F).done()
            .addAdjustments()
                .addAdjustment()
                    .name("New Customer Discount")
                    .amount(20.00F)
                    .toList()
                .addAdjustment()
                    .name("$10 Off Coupon")
                    .amount(10.00F)
                .toList()
            .done()
            .build();
    
    sendClient.sendTemplate("RECIPIENT_ID", receipt);
    

    顺便说一句:我已经完成了。

    【讨论】:

    • “免责声明 - 否认某事,尤其是责任的声明。”你用免责声明否认了什么:我已经建造了它?也许“顺便说一句:我已经建造了它。”会更合适。否则,好的第一个答案!
    • @MikeJRamsey56 谢谢!将“免责声明”更改为“顺便说一句”。这就是我想说的:)
    【解决方案3】:

    我目前正在开发一个名为 JBot 的 java bot 框架,fb 部分目前正在开发中,但 Slack 部分已完成并已被多个开发人员使用。

    【讨论】:

      猜你喜欢
      • 2017-05-26
      • 2017-11-10
      • 2016-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      相关资源
      最近更新 更多