2016-11-11 2 views
1

У меня есть аккаунт с Twilio, и я использовал его для программной отправки текстовых сообщений через скрипт PHP. Теперь я хочу эту функциональность в службе, которую я пишу. Моя проблема заключается в отсутствии хороших примеров того, как реализовать функциональность на Java. Кажется, что есть только один пример того, что я хочу сделать, но я продолжаю получать ошибки в eclipse (neon), говоря, что в конструкторе для PhoneNumber (String) есть ошибка. Сначала я покажу вам свой код, а затем объясню.Обманутый Twilio API для отправки простого текстового сообщения

У меня есть два класса, один для хранения учетных данных пользователя и один класс для хранения данных получателя сообщения (имя и номер телефона) .... ps простить форматирование.

/** 
* Class contains my credentials with Twilio.com 
* and are read from a file located at /sms_textdata/twiliocredentials.txt 
*/ 
public class SMSCredentials 
{ 
private final String userID; 
private final String accessCode; 
private final String senderNumber; 

public SMSCredentials(String userID, String accessCode, String senderNumber) 
{ 
    this.userID = userID; 
    this.accessCode = accessCode; 
    this.senderNumber = senderNumber; 
} 

public String getUserID() 
{ 
    return userID; 
} 

public String getAccessCode() 
{ 
    return accessCode; 
} 

public String getSenderNumber() 
{ 
    return senderNumber; 
} 
} 



/** 
* A class that models a recipient of a text message 
* Recipient list is located at /sms_textdata/smsrecipients.txt 
*/ 
public class MessageRecipient 
{ 
//first name 
private String name; 
//phone number 
private String phoneNumber; 

public MessageRecipient(String name, String phoneNumber) 
{ 
    this.name = name; 
    this.phoneNumber = phoneNumber; 
} 

public String getName() 
{ 
    return name; 
} 

public String getNumber() 
{ 
    return phoneNumber; 
} 
} 

В третьем классе у меня есть два вышеуказанных класса. Я планирую читать данные учетных данных и данные получателей из двух текстовых файлов.

import java.io.File; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Scanner; 
import com.twilio.Twilio; 
import com.twilio.rest.api.v2010.account.Message; 
import com.twilio.rest.lookups.v1.PhoneNumber; 

/** 
* This class is responsible for sending SMS text messages 
* to a list of recipients. 
*/ 
public class SMSAlert 
{ 
private SMSCredentials credentials; 
private ArrayList<MessageRecipient> recipients; 

public SMSAlert() 
{ 
    this.getCredentials(); 
    this.createRecipientList(); 
} 

/** 
* send a SMS text message to a list of recipients 
*/ 
public void sendSMSTextMessage() 
{ 
    //send messages to a list of recipients 
    Twilio.init(credentials.getUserID(), credentials.getAccessCode()); 

    for(MessageRecipient rec : recipients) 
    { 
     Message message = Message.creator(new PhoneNumber(rec.getNumber()), 
             new PhoneNumber(credentials.getSenderNumber()), 
             " Hey " + rec.getName() + " the garage door is open!") 
             .create(); 
     //System.out.println(message.getSid()); 
    } 
} 

/** 
* create an object containing the credentials required from Twilio.com 
*/ 
private void getCredentials() 
{ 
    String credentialsFile; 
    Scanner credentialIn = null; 
    String id = null; 
    String code = null; 
    String number = null; 

    try 
    { 
     credentialsFile = "~/Documents/twiliocredentials.txt"; 
     credentialIn = new Scanner(new File(credentialsFile)); 

     // as there are only two strings in this file, the loop will execute 
     //only once, and assign the values to a new object of type SMSCredentials. 
     while(credentialIn.hasNext()) 
     { 
      id = credentialIn.next(); 
      code = credentialIn.next(); 
      number = credentialIn.next(); 
     } 

     //create the credentials object from a file 
     credentials = new SMSCredentials(id, code, number); 
    } 
    catch(IOException e) 
    { 
     e.getStackTrace(); 
    } 
    finally 
    { 
     credentialIn.close(); 
    } 
} 

/** 
* create a list of recipients from a file to send text messages to. 
*/ 
private void createRecipientList() 
{ 
    recipients = new ArrayList<MessageRecipient>(); 
    String userFile; 
    Scanner recipientsIn = null; 
    String name; 
    String number; 

    try 
    { 
     userFile = "~/Documents/smsrecipients.txt"; 
     recipientsIn = new Scanner(new File(userFile)); 

     //file format is name : number pair on one line of text 
     //one object is instantiated per line/user 
     while(recipientsIn.hasNext()) 
     { 
      name = recipientsIn.next(); 
      number = recipientsIn.next(); 

      //instantiate and add a user to the list 
      recipients.add(new MessageRecipient(name, number)); 
     }   
    } 
    catch(IOException e) 
    { 
     e.printStackTrace(); 
    } 
    finally 
    { 
     recipientsIn.close(); 
    } 
} 
} 

Ошибка я получаю в затмение от метода sendSMSTextMessage(). Затмение дает мне ошибку:

The constructor PhoneNumber(String) is undefined 

Это проект Maven, и я все мои зависимости ..... Что мне не хватает? У кого-нибудь есть лучший способ отправить несколько текстовых сообщений в Java? Разве у меня нет метода отправки сообщения?

Спасибо за вашу помощь ... мой мозг жареное ....

Mike

+0

прошу игнорировать пути к файлам ..... я пытался выполнить тестирование и ссылался на локальный каталог. – mike

+0

Ява часть проста; глядя на https://twilio.github.io/twilio-java/com/twilio/rest/lookups/v1/PhoneNumber.html, вы можете видеть, что класс PhoneNumber не имеет открытого конструктора (и поэтому нет конструктора, который принимает строку). Теперь, как его создать, это другое дело. Может быть, есть класс строителей? Может быть, это не подходящий класс? кажется, у них есть хотя бы еще один класс PhoneNumber в другом пакете ... – okaram

+0

Быстрый google согласен с тем, что получал @okaram. Необходимо использовать [lookups] (https://www.twilio.com/docs/api/lookups) – JJF

ответ

-1

пожалуйста, проверьте PhoneNumber р должен быть небольшим во всех случаях. phoneNumber является правильным

+0

PhoneNumber - это класс ... не метод. Этот код также был скопирован непосредственно с веб-сайта Twilio, и все, что я изменил, было аргументом конструктора PhoneNumber, изменив («+15556667777») на аргумент, который был вызовом метода, который возвращает строку. – mike

+0

Я не думаю, что это правильно @ bullet89 – JJF

+0

, пожалуйста, проверьте конструктор 'PhoneNumber' string в классе' MessageRecipient'. P должен быть кепкой. –

0

Twilio разработчик евангелист здесь.

Похоже, что вы импортируете неправильное определение PhoneNumber. Вы получаете его от com.twilio.rest.lookups.v1.PhoneNumber, но Twilio guide to sending an SMS message with Java импортирует com.twilio.type.PhoneNumber.

Дайте мне знать, если это поможет вообще.

+0

Благодарим за ответ. Я заметил это вчера вечером и исправил его ... однако у меня все еще возникают проблемы с текущей версией API ... У меня нет компьютера, на котором этот код работает со мной, но я поделюсь с ним Точная проблема, с которой я столкнулся сегодня вечером. С другой стороны, если я использую версию 6 API, все компилируется, но если я попытаюсь выполнить код в среде выполнения, возникает исключение .... что меня смущает, потому что код отлично работает на стенде одно приложение. – mike

+0

Хорошо, лучше, если вы опубликуете новую проблему как новый вопрос, на который я должен скоро взглянуть. Я думаю, что я видел ваш другой вопрос, но я не могу ответить на это сам, поскольку я не регулярно создаю Java-приложения. Я более полезен на стороне API :) – philnash

+0

Фил, я хотел написать вам по электронной почте, но не могу понять, как это сделать на этом сайте. Недавно я опубликовал связанный с этим вопрос по этой же проблеме и надеялся, что вы можете взглянуть на него для меня ... – mike

Смежные вопросы