我的 Twilio 电话号码即使在收到状态码:200 时也不会回复短信,有啥原因吗?

Posted

技术标签:

【中文标题】我的 Twilio 电话号码即使在收到状态码:200 时也不会回复短信,有啥原因吗?【英文标题】:Is there a reason why my Twilio phone number won't respond to text messages even when getting the status code: 200?我的 Twilio 电话号码即使在收到状态码:200 时也不会回复短信,有什么原因吗? 【发布时间】:2019-08-08 11:24:38 【问题描述】:

注意:当您在我显示代码的位置看到postmapping-url-hereMyOwnDefinedEntity 时,这仅表示我试图不透露太多。

所以我使用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 函数。与整个应用程序一起运行该示例时,我需要对其进行更改吗?

提前致谢。

【问题讨论】:

"当我运行它时:"这里是什么?你能发布你如何启动 SpringBoot 应用程序和你的控制器和 spring 配置。 好吧,当我使用main 运行它时,我只需按下Run 按钮,我的Twilio 号码就会成功回复我。但是,当我将其从main 中取出时,将其放入自己的方法中,并在整个应用程序中运行它,通过执行./gradlew bootRun,我仍然得到200 的状态代码,但随后Twilio 不再给我回短信。 恐怕很难帮助您,除非您在此处指定“it”和“that”功能的含义。最好的方法是你到目前为止尝试过的源代码,包括spring boot app starter、控制器以及你如何调用Twillio api。 我将编辑我的问题以显示我目前掌握的一些内容。 老实说,如果您愿意发布您的代码,我会提供帮助的。我不想做猜测工作并弄清楚自己。你说的是一个例子?哪一个?请更具建设性,遵循 *** 上的指南,了解如何提出明确的问题。 【参考方案1】:

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

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

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

我认为正确的解决方案是使用定制的@PostMapping,但这只是导致我的Java Spark 使用相同的端口:8080 作为我的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 现在通过Ngrok 隧道 URL 使用8070,而Spring Boot 使用8080。至此,我终于能够在运行Spring Boot 的同时成功地从我的Twilio 号码中获得回复短信。

【讨论】:

以上是关于我的 Twilio 电话号码即使在收到状态码:200 时也不会回复短信,有啥原因吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用Twilio SMS API,我可以在一个帖子中指定多个目标手机吗?

Twilio:我可以进行 OUTBOUND 电话会议吗?

Twilio 加入 Google Hangouts 电话会议

使用 Twilio 和 Zapier 更改 Wordpress 帖子状态

Twilio 测试电话号码不起作用

Twilio 应用程序 - 更新通话资源结束通话