Есть ли причина, по которой мой номер телефона Twilio не будет отвечать на текстовые сообщения даже при получении кода состояния: 200? - PullRequest
0 голосов
/ 18 марта 2019

ВНИМАНИЕ: Когда вы видите postmapping-url-here и MyOwnDefinedEntity там, где я показываю код, это просто означает, что я стараюсь не раскрывать слишком много.

Поэтому я использую Twilio для отправки и получения текстовых сообщений.Я застрял в этой проблеме около 3 дней, и я просто не могу понять, как ее решить.

Я использую Spring Boot в качестве основы приложения, Gradleв качестве инструмента для сборки и VSCode в качестве IDE.Я также использую Ngrok для создания туннеля для localhost:8080 для запуска.

Когда я запускал его как:

public static void main(String[] args) {

}

, он работал отлично, и мой TwilioNumber отправил текст обратно в ответ.

Однако, когда я помещаю его внутрь своей собственной функции, вызываю эту функцию и запускаю ее со всем приложением, я все равно получаю тот же код состояния 200 откогда он работал как main метод, но мой Twilio номер не отправляет мне ответ.

Я пытался использовать @PostMapping и @GetMapping, поскольку я пытался протестировать его дляPOST и GET.

В моем коде отправки и получения с сайта Twilio я попытался использовать application/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:

@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 функцию.Что мне нужно изменить из этого примера при запуске всего приложения?

Заранее спасибо.

1 Ответ

0 голосов
/ 20 марта 2019

Хорошо, так что после 4 дней попыток решить мою проблему, я наконец-то смог найти решение самостоятельно.

Я подумал, что, возможно, это была просто глупая ошибка, которую я никогда не замечал до сих пор, но я чувствую, что это решение было не очень легко придумать. Поэтому я поделюсь с вами своими мыслями.

Перед сопоставлением URL-адреса в моей функции post с пользовательским @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 теперь использует 8070 через туннельный URL Ngrok, а Spring Boot использует 8080. К этому моменту я наконец-то смог успешно получить ответное текстовое сообщение с моего номера Twilio при одновременном запуске Spring Boot.

...