我的Twilio电话号码即使收到状态码200也不响应,是有原因的吗?

时间:2019-03-18 06:15:14

标签: java spring-boot twilio ngrok

  

要注意::当我在显示代码的位置看到postmapping-url-hereMyOwnDefinedEntity时,仅表示我不打算过多透露信息。

因此,我正在使用Twilio发送和接收短信。我已经在这个问题上停留了大约3天了,但是我似乎无法找出解决方法。

我使用Spring Boot作为应用程序框架,使用Gradle作为构建工具,使用VSCode作为IDE。我还使用Ngrok创建了一个隧道,供localhost:8080运行。

当我以a:身份运行时

public static void main(String[] args) {

}

它工作得很好,我的Twilio号也发回了短信。

但是,当我将其放在其自己的函数中,调用该函数,并在整个应用程序中运行它时,从200用作{{1} }方法,但我的main号码没有给我发短信。

我已经尝试使用Twilio@PostMapping,因为我已经尝试同时测试@GetMappingPOST

GET网站的发送和接收代码中,我尝试使用Twilioapplication/xml作为响应类型。

这是到目前为止我拥有的一些代码:

application/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

Twilio网站上的示例将其显示为@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); } 函数。在整个应用程序中运行该示例时,我需要对该示例进行任何更改吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

好的,经过4天的尝试解决我的问题,我终于能够自己提出解决方案。

我认为这可能只是一个愚蠢的错误,直到现在我还没有发现,但是我觉得这种解决方案并非易事。因此,我将分享我的想法。

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

我认为正确的解决方案是使用定制的@PostMapping,但这只是导致我的Java Spark使用相同的端口:8080与我的{{1 }}应用程序正在运行。这就是为什么即使我收到的状态代码为Spring Boot,也没有从Twilio号码收到任何文本的原因。

因此,我改正了此问题以解决问题:

  

首先,我删除了自定义的200函数

@PostMapping
  

我将函数保留在以下位置:

@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);
    }

最后,在我的@Bean public CommandLineRunner commandRunner() { return (args) -> { TwilioRespondToSMS(); // Whatever other code ... } } 内,添加了TwilioRespondToSMS()或任何其他非port(8070);的端口号。

在这种情况下,8080现在通过Java Spark隧道URL使用8070,而Ngrok使用Spring Boot。至此,我终于可以同时运行8080的同时从我的Twilio号码中成功获得一条回复短信。