为什么我的 Twilio phone 号码即使收到状态码 200 也不会回复短信?

Is there a reason why my Twilio phone number won't respond to text messages even when getting the status code: 200?

TO NOTE: When you see postmapping-url-here and MyOwnDefinedEntity down where I show the code, it just means I'm trying not to reveal too much.

所以我正在使用 Twilio 发送和接收短信。我已经被这个问题困扰了大约 3 天了,我似乎无法弄清楚如何解决它。

我使用 Spring Boot 作为应用程序框架,Gradle 作为构建工具,VSCode 作为 IDE。我也在使用 Ngroklocalhost:8080 到 运行 创建隧道。

当我运行它作为:

public static void main(String[] args) {

}

它运行完美,我的 Twilio 号码发回了一条短信作为回应。

然而,当我把它放在它自己的函数中,调用那个函数,并用整个应用程序 运行 它时,我仍然得到与它工作时相同的 200 状态代码作为 main 方法,但我的 Twilio 号码没有给我回短信。

我已经尝试使用 @PostMapping@GetMapping,因为我已经尝试对 POSTGET 进行测试。

在我从 Twilio 站点发送和接收代码时,我尝试使用 application/xmlapplication/json 作为响应类型。

这是我目前的一些代码:

public static void TwilioRespondToSMS() {
        get("/", (req, res) -> "");
        post("/<postmapping-url-here>", (req, res) -> {
            res.type("application/xml");
            Body body = new Body
                    .Builder("This is a response to your text message")
                    .build();
            Message sms = new Message
                    .Builder()
                    .body(body)
                    .build();
            MessagingResponse twiml = new MessagingResponse
                    .Builder()
                    .message(sms)
                    .build();
            return twiml.toXml();
        });            
    }

这是main代码:

@SpringBootApplication
public class ApplicationServerClass {

    public static void main(String[] args) {
        SpringApplication.run(ApplicationServerClass.class, args);
        //TwilioRespondToSMS();
    }

    // Whatever other code ...

}

我也试过将我的函数放在:

@Bean
    public CommandLineRunner commandRunner() {
        return (args) -> {
            TwilioRespondToSMS();
            // Whatever other code ...
        }
    }

这里是 @PostMapping 函数:

@CrossOrigin(origins = "http://localhost:4200")
    @PostMapping("/<postmapping-url-here>")
    public ResponseEntity<MyOwnDefinedEntity> getMyOwnDefinedEntity(@PathVariable Long id) {
        log.debug("REST request to get MyOwnDefinedEntity : {}", id);
        Optional<MyOwnDefinedEntity> myOwnDefinedEntity = myOwnDefinedEntityRepository.findById(id);
        //if(myOwnDefinedEntity.isPresent())
        return new ResponseEntity<MyOwnDefinedEntity>(MyOwnDefinedEntity.get(), HttpStatus.OK);
    }

Twilio 站点的示例将其显示为 main 函数。 运行在整个应用程序中使用该示例时,我需要更改什么吗?

提前致谢。

好的,在尝试解决我的问题 4 天之后,我终于能够自己想出一个解决方案。

我想这可能只是一个愚蠢的错误,直到现在我才注意到,但我觉得这个解决方案不是很容易想出。所以我要分享我是如何想到这个的。

在将我的 post 函数中的 URL 映射到自定义 @PostMapping 方法之前,我实际上得到了 404 的状态代码,因为它无法识别任何POST 请求 URL 映射到。

我认为正确的解决方案是使用定制的 @PostMapping,但这只会导致我的 Java Spark 使用相同的端口:8080 作为我的端口 Spring Boot 应用程序 运行 开启。这就是为什么我没有收到来自我的 Twilio 号码的任何短信,即使我收到了 200 的状态代码。

下面是我解决问题的方法:

First, I removed my custom @PostMapping function

@PostMapping("/<postmapping-url-here>")
    public ResponseEntity<MyOwnDefinedEntity> getMyOwnDefinedEntity(@PathVariable Long id) {
        log.debug("REST request to get MyOwnDefinedEntity : {}", id);
        Optional<MyOwnDefinedEntity> myOwnDefinedEntity = myOwnDefinedEntityRepository.findById(id);
        //if(myOwnDefinedEntity.isPresent())
        return new ResponseEntity<MyOwnDefinedEntity>(MyOwnDefinedEntity.get(), HttpStatus.OK);
    }

I kept my function inside of:

@Bean
    public CommandLineRunner commandRunner() {
        return (args) -> {
            TwilioRespondToSMS();
            // Whatever other code ...
        }
    }

最后,在我的 TwilioRespondToSMS() 中,我添加了:port(8070);,或任何其他不是 8080.

的端口号

在这种情况下,Java Spark 现在通过 Ngrok 隧道 URL 使用 8070Spring Boot 使用 8080。至此,我终于成功地能够同时从我的 Twilio 号码收到回复短信 运行 Spring Boot