'how to costum meesenjer4j single api for multiple messenger bot

I try to develop an API server with spring boot for multiple Facebook apps or an app with multiple pages like botFule or flowXo

I tried messenger4j. it works for a unique app and unique webhook

    @Bean
public Messenger messenger(@Value("${messenger4j.pageAccessToken}") String pageAccessToken,
                           @Value("${messenger4j.appSecret}") final String appSecret,
                           @Value("${messenger4j.verifyToken}") final String verifyToken) {
    return Messenger.create(pageAccessToken, appSecret, verifyToken);
}


@RequestMapping(method = RequestMethod.GET)
public ResponseEntity<String> verifyWebhook(@RequestParam(MODE_REQUEST_PARAM_NAME) final String mode,
                                            @RequestParam(CHALLENGE_REQUEST_PARAM_NAME) final String challenge,
                                            @RequestParam(VERIFY_TOKEN_REQUEST_PARAM_NAME) final String verifyToken
                                            ) {
    logger.debug("Received Webhook verification request - mode: {} | verifyToken: {} | challenge: {}", mode, verifyToken, challenge);
    try {
        logger.debug("********");
        this.messenger.verifyWebhook(mode, verifyToken);
        return ResponseEntity.ok(challenge);
    } catch (MessengerVerificationException e) {
        logger.warn("Webhook verification failed: {}", e.getMessage());
        return ResponseEntity.status(HttpStatus.FORBIDDEN).body(e.getMessage());
    }
}

/**
 * Callback endpoint responsible for processing the inbound messages and events.
 */
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<Void> handleCallback(@RequestBody final String payload,
                                           @RequestHeader(SIGNATURE_HEADER_NAME) final String signature
                                          // ,@RequestParam(VERIFY_TOKEN_REQUEST_PARAM_NAME) final String verifyToken
                                           ) {
try {
        this.messenger.onReceiveEvents(payload, of(signature), event -> 
  {event.recipientId();
            if (event.isTextMessageEvent()) {
                handleTextMessageEvent(event.asTextMessageEvent());
             }}

Now how can I switch between pages or apps I tried a basic way like that and had error signature verification

          String pageId= j.getAsJsonArray().get(0).getAsJsonObject().get("id").getAsString();
    
    logger.info("pageId {}", j.getAsJsonArray().get(0).getAsJsonObject().get("id"));



if (pageId=="109149861733036" ) {
messenger = Messenger.create("tok1", appSecret1, verifyToken1);
}else 
messenger = Messenger.create("tok2", appSecret1, verifyToken1);

Processing of callback payload failed: pageId"101389035856068" Processing of callback payload failed: Signature verification failed. Provided signature does not match calculated signature.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source