作为我们项目的一部分,我们需要致电Twilio以获取电话号码的E164格式。为了做到这一点,我按照以下步骤来实现。如果电话号码有效,则下面的步骤正在运行,但是如果电话号码无效且我们将其传递给Twillo,那么它不会返回任何内容并停止该过程。
我知道下面提到的数字无效,但这并不意味着当我尝试使用无效数字进行查找时,它不会返回任何响应。它应该至少返回一个错误,但实际上它不会让我更加困惑。我正在尝试使用IBM websphere服务器。
有人可以帮我修复这个问题,或者有什么办法可以为twilio查找设置请求超时,这样如果twilio查找失败,它将允许其他进程继续。另外,如果我在编码twilio查找时遇到任何错误,请纠正我。
Sample URL "https://lookups.twilio.com/v1/PhoneNumbers/phoneNumber"
Steps Followed:
LookupsClient client = new LookupsClient(ACCOUNT_SID, AUTH_TOKEN);
client.setHttpClient(getProxyClient());
// Twilio Lookup with country code
String twilioURL = createURL(phoneNumber, countryCd);
String twilioE164Number = getTwilioNumber(client, twilioURL);
//Twilio Lookup without country code
StringBuilder appender = new StringBuilder();
appender.append(TWILIO_URL);
appender.append(PLUS);
appender.append(phoneNumber);
String twilioE164Number = getTwilioNumber(client, appender.toString());
//Create lookup URL
private String createURL(String phoneNumber, String countryCode){
StringBuilder appender = new StringBuilder();
appender.append(phoneNumber);
appender.append(QUERY_PARAM);
appender.append(countryCode);
return TWILIO_URL+appender.toString();
}
//Get Twilio E164 Number
private String getTwilioNumber(LookupsClient client,String url){
TwilioRestResponse response;
String twilioResult = "";
try {
response = client.get(url);
String str = response.getResponseText();
//Code for parsing the JSON response and set the twilioResult.
} catch (TwilioRestException e) {
logger.error("TwilioRestException while calling twilio "+e);
}catch(Exception ex){
logger.error("Error in twilio Calling "+ex);
}
return twilioResult;
}
//Get proxy client to set.
private HttpClient getProxyClient() {
HttpHost proxy = new HttpHost(PROXY_HOST, PROXY_PORT);
//new DefaultHttpClient().getParams().setParameter(arg0, arg1)
DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxy);
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),new UsernamePasswordCredentials(ACCOUNT_SID, AUTH_TOKEN));
CloseableHttpClient httpClient = HttpClients.custom()
.setRoutePlanner(routePlanner)
.setDefaultCredentialsProvider(credentialsProvider)
.build();
return httpClient;
}
答案 0 :(得分:2)
v6.3.0的twilio-java有一个LookupsClient有.getPhoneNumber()
方法,允许您传递电话号码,而不是要求您从头开始构建URL。使用LookupsClient而不是vanilla TwilioClient的重点是该类为您完成大部分工作。
在这种情况下你试过client.getPhoneNumber(phoneNumber)
吗? This page还演示了使用该特定端点时应该收到的响应结构。 E164格式的电话号码应该是响应中的phone_number
属性,虽然我使用twilio-python并且我不知道Java库如何公开响应对象以供您使用。
如果您没有得到回复,您可能希望在没有代理配置的情况下尝试发出相同的请求,以确保代理不会导致问题。至于你的超时问题,twilio-java的请求是同步处理的,一种解决方法就是在异步方法调用中包装请求。
希望其中一些可以帮助您诊断问题!