docs: @ResponseBody
      @PostMapping("/webhook")
      public final ResponseEntity setupWebhookEndpoint(@RequestBody Callback callback) {
          try {
              // Checks this is an event from a page subscription
              if (!callback.getObject().equals("page")) {
                  return new ResponseEntity<>(HttpStatus.NOT_FOUND);
              }
              logger.debug("Callback from fb: {}", callback);
              for (Entry entry : callback.getEntry()) {
                  if (entry.getMessaging() != null) {
                      for (Event event : entry.getMessaging()) {
                          if (event.getMessage() != null) {
                              if (event.getMessage().isEcho() != null &&
                                      event.getMessage().isEcho()) {
                                  event.setType(EventType.MESSAGE_ECHO);
                              } else if (event.getMessage().getQuickReply() != null) {
                                  event.setType(EventType.QUICK_REPLY);
                              } else {
                                  event.setType(EventType.MESSAGE);
                                  // send typing on indicator to create a conversational experience
                                  sendTypingOnIndicator(event.getSender());
                              }
                          } else if (event.getDelivery() != null) {
                              event.setType(EventType.MESSAGE_DELIVERED);
                          } else if (event.getRead() != null) {
                              event.setType(EventType.MESSAGE_READ);
                          } else if (event.getPostback() != null) {
                              event.setType(EventType.POSTBACK);
                          } else if (event.getOptin() != null) {
                              event.setType(EventType.OPT_IN);
                          } else if (event.getReferral() != null) {
                              event.setType(EventType.REFERRAL);
                          } else if (event.getAccountLinking() != null) {
                              event.setType(EventType.ACCOUNT_LINKING);
                          } else {
                              logger.debug("Callback/Event type not supported: {}", event);
                              return ResponseEntity.ok("Callback not supported yet!");
                          }
                          if (isConversationOn(event)) {
                              invokeChainedMethod(event);
                          } else {
                              invokeMethods(event);
                          }
                      }
                  }
              }
          } catch (Exception e) {
              logger.error("Error in fb webhook: Callback: {} \nException: ", callback.toString(), e);
          }
          // fb advises to send a 200 response within 20 secs
          return ResponseEntity.ok("EVENT_RECEIVED");
      }