如何设置 Twilio To phoneNumber 获取此号码作为 Spring Boot 中的用户输入

Posted

技术标签:

【中文标题】如何设置 Twilio To phoneNumber 获取此号码作为 Spring Boot 中的用户输入【英文标题】:How to set the Twilio To phoneNumber getting this number as a user input in Spring Boot 【发布时间】:2019-11-14 20:57:15 【问题描述】:

“我正在实现一个注册机制,其中我的字段中有一个电话号码属性。如何在使用 Twilio 注册期间向用户输入的这个电话号码发送消息?”

这用于在成功创建帐户后向用户发送 Twilio SMS 通知。下面是我的代码是如何实现的。

private static final String ACCOUNT_SID = "ACd176f3083e1333d14939fe6f27d90a99";
private static final String AUTH_ID = "4e3327cb4efbe3ecd8e893d809533763";

public void sendSMS() 
    try 
        User user = new User();
        Twilio.init(ACCOUNT_SID, AUTH_ID);

        Message.creator(new PhoneNumber(user.getPhoneNumber()), new PhoneNumber("+12029151841"),
                "Your account has been created succesfuly.").create();

    
    catch (TwilioException e) 
        System.out.println("An error occured from twillio."+e.getMessage());
    


@PostMapping(value="/registerUser")
public ModelAndView registerUser(@Valid User user, BindingResult bindingResult, ModelAndView modelAndView)

//skipped other is statements for checking possible errors.
else
        //set a user to disabled by default before activation thru email.
        user.setEnabled(false);

        //save a user in the database.
        userService.save(user);

        //generating the confirmation token

        ConfirmationToken confirmationToken = new ConfirmationToken(user);
        confirmationTokenRepository.save(confirmationToken);

        //sending the email message

        SimpleMailMessage simpleMailMessage =   new     SimpleMailMessage();
        simpleMailMessage.setTo(user.getEmail());
        simpleMailMessage.setSubject("Complete your registrations");
        simpleMailMessage.setFrom("devkibuchi2018@gmail.com");
        simpleMailMessage.setText("To activate your account, please     click here : "
        +"http://localhost:8080/activate-    account?token="+confirmationToken.getConfirmationToken());

        emailSenderService.sendEmail(simpleMailMessage);
        modelAndView.addObject("Email ", user.getEmail());

        //send also an sms message using Twilio.
        sendSMS();

        modelAndView.setViewName("successfulRegistration");

    

    return modelAndView;

用户输入电话号码的 Thymeleaf 片段。

<form action="#" th:action="@/registerUser" th:object="$user"  method="post" >
 <div class="form-group">
    <label th:for="phoneNumber">Phone Number: </label>
    <input class="form-control" th:field="*phoneNumber" />
    <br>
    <label th:for="phoneNumber" th:if="$#fields.hasErrors('email')" th:errors="*phoneNumber" required="required"
           class="btn btn-danger">
    </label>

</div>
</form>

我希望系统获取电话号码并将其设置为 Twilio 到 phoneNumber。但是,我有这个错误:

twillio 发生错误。需要“收件人”电话号码。

【问题讨论】:

嘿,快来投反对票吧。我正在提交代码,因为它没有提交。我的可乐在上面。 @SumitBadaya 调试你的代码user.getPhoneNumber() 它一定是给你null。这就是您的代码中的问题。 用户对象正在获取用户正在使用电话号码的百里香叶表单字段输入的电话号码。它不为空,因为它也在数据库中提交。 【参考方案1】:
User user = new User();
        Twilio.init(ACCOUNT_SID, AUTH_ID);

        Message.creator(new PhoneNumber(user.getPhoneNumber())

用户对象的 phoneNumber 为空,因为您从未在代码中的任何位置设置它。 所以你在这里得到空指针异常user.getPhoneNumber()

如果你这样写:

User user = new User();
user.setPhoneNumber("+12541254122");
        Twilio.init(ACCOUNT_SID, AUTH_ID);

        Message.creator(new PhoneNumber(user.getPhoneNumber()), new PhoneNumber("+12029151841"),
                "Your account has been created succesfuly.").create();

那么它应该在没有空指针异常的情况下工作


以下代码将起作用。

public void sendSMS(User user) 
    try 

        Twilio.init(ACCOUNT_SID, AUTH_ID);

        Message.creator(new PhoneNumber(user.getPhoneNumber()), new PhoneNumber("+12029151841"),
                "Your account has been created succesfuly.").create();

    
    catch (TwilioException e) 
        System.out.println("An error occured from twillio."+e.getMessage());
    


@PostMapping(value="/registerUser")
public ModelAndView registerUser(@Valid User user, BindingResult bindingResult, ModelAndView modelAndView)

//skipped other is statements for checking possible errors.
else
        //set a user to disabled by default before activation thru email.
        user.setEnabled(false);

        //save a user in the database.
        userService.save(user);

        //generating the confirmation token

        ConfirmationToken confirmationToken = new ConfirmationToken(user);
        confirmationTokenRepository.save(confirmationToken);

        //sending the email message

        SimpleMailMessage simpleMailMessage =   new     SimpleMailMessage();
        simpleMailMessage.setTo(user.getEmail());
        simpleMailMessage.setSubject("Complete your registrations");
        simpleMailMessage.setFrom("devkibuchi2018@gmail.com");
        simpleMailMessage.setText("To activate your account, please     click here : "
        +"http://localhost:8080/activate-    account?token="+confirmationToken.getConfirmationToken());

        emailSenderService.sendEmail(simpleMailMessage);
        modelAndView.addObject("Email ", user.getEmail());

        //send also an sms message using Twilio.
        sendSMS(user);

        modelAndView.setViewName("successfulRegistration");

    

    return modelAndView;

【讨论】:

为什么电话号码字段为空时,为什么要为空且不允许用户提交表单? 它为空,因为您正在通过编写 User user = new User(); 创建新的 user 对象,并且您没有在它的任何属性中设置任何值。我建议你先学习基础知识。 现在检查我编辑的答案。它应该可以正常工作。您需要在 sendms 函数中传递您的用户对象,而不是在 sendms 函数中创建新的用户对象。 谢谢一百万......它真的很有效。哎呀,兄弟,我的票数不到 15 ……当我获得这样的特权时,我会重新访问

以上是关于如何设置 Twilio To phoneNumber 获取此号码作为 Spring Boot 中的用户输入的主要内容,如果未能解决你的问题,请参考以下文章

如何设置 twilio 通话记录?

rails 新建user的phonenumber字段

解决Twilio本地Postman请求时报错SSL certificate problem: unable to get local issuer certificate

当应用程序在前台时收到 Twilio 通知警报

使用 Twilio + Flask + Ngrok + Python (2.7) 在本地主机上出现 404 错误

使用 Twilio 发送 Apple 静默推送通知