Ein Facebook-Messenger-BOT | Komentor

Nun, dieses Mal möchte ich Ihnen zeigen, wie Sie einen funktionierenden Facebook-Bot erstellen können. In diesem Fall werde ich Java als Backend-Sprache verwenden.
Also brauchen wir zuallererst die nächsten Elemente, um zu beginnen:

  • Eine Facebook-Seite
  • Facebook-Anwendung
  • Java-Projekt
    Nun, ich denke, ich muss Ihnen nicht sagen, wie man eine Facebook-Seite erstellt, also lassen Sie uns eine Facebook-Anwendung erstellen und konfigurieren.
    Gehen Sie auf die Seite: Facebook-Entwickler und füge eine neue Anwendung hinzu, meine Anwendungen sind: > tk-bot
    Jetzt müssen wir ein Token für unsere Backend-Anwendung erstellen, dazu müssen wir die Messenger-Anwendung hinzufügen und auf die Registerkarte Einstellungen zugreifen, die Seite auswählen und ein neues Token generieren, das Token sieht so aus:
    DeepinScreenshot_select-area_20180806164154.png
    Kopieren Sie dieses Zugriffstoken in eine Datei, auf die Sie jetzt zugreifen können start.spring.io und konfigurieren Sie eine Anwendung mit den nächsten Abhängigkeiten: Web, Lombok und laden Sie sie herunter.
    Codezeit ….
    Jetzt haben wir fast alles für unseren Chatbot. Fügen wir einen neuen Controller in unserem Java-Projekt hinzu. Der Code lautet:
@RestController()
@RequestMapping("webhook")
public class WebHook {

    private final String PAGE_TOKEN ="THIS_IS_THE_TOKEN_YOU_COPIED_BEFORE";
    private final String VERIFY_TOKEN="A_SECRET_VERIFY_TOKEN";
    //this is for reply messages
    private final String FB_MSG_URL="
            + PAGE_TOKEN;

  //logger to watch whats happening in our bot
    private final Logger logger = LoggerFactory.getLogger(WebHook.class);
    private final RestTemplate template = new RestTemplate();


  //This is necessary for register a webhook in facebook 
    @GetMapping()
    @ResponseStatus(HttpStatus.OK)
    public String get(@RequestParam(name = "hub.verify_token")String token,
                    @RequestParam(name = "hub.challenge")String challenge){
        if(token!=null && !token.isEmpty() && token.equals(VERIFY_TOKEN)){
            return challenge;
        }else{
            return "Wrong Token";
        }
    }

  //This method  reply all messages with: 'This is a test message'
    @PostMapping
    @ResponseStatus(HttpStatus.OK)
    public void post(@RequestBody FacebookHookRequest request){
        logger.info("Message from chat: {}",request);
        request.getEntry().forEach(e->{
            e.getMessaging().forEach(m->{
                String id = m.getSender().get("id");
                sendReply(id,"This is a test message");
            });
        });
    }

    private void sendReply(String id,String text){
        FacebookMessageResponse response = new FacebookMessageResponse();
        response.setMessage_type("text");
        response.getRecipient().put("id",id);
        response.getMessage().put("text",text);
        HttpEntity<FacebookMessageResponse> entity = new HttpEntity<>(response);
        String result = template.postForEntity(FB_MSG_URL,entity,String.class).getBody();
        logger.info("Message result: {}",result);

    }
}

Sie müssen auch die nächsten Klassen hinzufügen: FacebookEntry.java,FacebookHookRequest.java,FacebookMessage.java,FacebookMessageResponse.java,FacebookMessaging.java Dies sind für eine Empfangsanfrage von Facebook 😄:

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class FacebookEntry implements Serializable {
    private String id;
    private Long time;
    private List<FacebookMessaging> messaging = new ArrayList<>();

}

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class FacebookHookRequest implements Serializable {
    private String object;
    private List<FacebookEntry> entry = new ArrayList<>();
}


@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class FacebookMessage implements Serializable {
    private String mid;
    private Long seq;
    private String text;
}

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class FacebookMessageResponse implements Serializable {
    private String message_type;
    private Map<String,String> recipient = new HashMap<>();
    private Map<String,String> message = new HashMap<>();
}


@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class FacebookMessaging implements Serializable {
    private Map<String,String> sender;
    private Map<String,String> recipient;
    private Long timestamp;
    private FacebookMessage message;
}

Jetzt haben Sie das gesamte Backend für Antwort-Dummies-Nachrichten, stellen Sie diese mit bereit Heroku
Die Befehle dafür lauten:

$ heroku create
$ git init
$ git add .
$ git commit -m 'Hook for facebook'
$ git push heroku master

Und wenn die Anwendung läuft, öffnen Sie die Anwendungskonfiguration in Facebook und konfigurieren Sie einen Web-Hook, der die URL Ihrer Heroku-Instanz und den Pfad enthält: /Webhook
DeepinScreenshot_select-area_20180806165823.png
Außerdem müssen Sie die Optionen auswählen:
DeepinScreenshot_select-area_20180806165955.png
Und klicken Sie auf Speichern.
Mit diesen Konfigurationen haben Sie also alles Notwendige, um Ihren Bot wie folgt zu testen:
DeepinScreenshot_select-area_20180806170152.png
Und wenn Sie zu den Heroku-Protokollen gehen, sehen Sie das nächste Protokoll:
DeepinScreenshot_select-area_20180806170346.png

Jetzt können Sie ein NLP-Gefällt mir hinzufügen mit.ai um Benutzerabsichten zu erfassen und Regeln mit DROOLS für kontextbezogene Konversationen hinzuzufügen

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *