Install Twilio Java Helper Library
- To interact with Twilio's API from within Java, you need to use the Twilio Java helper library. Add the Twilio library to your project using Maven or Gradle.
<dependency>
<groupId>com.twilio.sdk</groupId>
<artifactId>twilio</artifactId>
<version>8.28.1</version>
</dependency>
Initialize Twilio Client
- Initialize your `TwilioRestClient` with your Account SID and Auth Token. These credentials can be found in the Twilio Console.
import com.twilio.Twilio;
import com.twilio.type.PhoneNumber;
import com.twilio.rest.api.v2010.account.Call;
import com.twilio.rest.api.v2010.account.Call.Status;
Twilio.init("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN");
Make a Phone Call
- Create a new call by specifying the `from` and `to` phone numbers and provide a URL to your TwiML Bin or XML endpoint for the call instructions.
Call call = Call.creator(
new PhoneNumber("+1234567890"), // To number
new PhoneNumber("+0987654321"), // From number
new com.twilio.type.Twiml("<Response><Say>Hello, this is a test call!</Say></Response>")
).create();
System.out.println(call.getSid());
Receive a Phone Call
- To receive calls, configure your Twilio number's voice URL to point to a webhook endpoint in your application that returns valid TwiML instructions.
- Set up a web server endpoint to handle the incoming call. For instance, using Spring Boot:
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.twilio.twiml.voice.Say;
import com.twilio.twiml.voice.VoiceResponse;
@RestController
public class TwilioController {
@RequestMapping(value = "/voice", method = RequestMethod.POST, produces = "application/xml")
public String handleVoiceCall() {
Say say = new Say.Builder("Hello, thanks for calling!").build();
VoiceResponse response = new VoiceResponse.Builder().say(say).build();
return response.toXml();
}
}
End a Call Programmatically
- To end an active call, use the call SID and update its status to `completed`.
Call call = Call.updater("CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
.setStatus(Status.COMPLETED)
.update();
System.out.println(call.getStatus());
Monitor Call Events
- Twilio can send HTTP requests to your application when call status updates occur. Configure your webhook to handle statuses like `ringing`, `completed`, or `failed`.
- Here's how you might set up a simple logging endpoint:
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TwilioWebhookController {
@RequestMapping("/events")
public void handleTwilioEvents(@RequestBody String payload) {
System.out.println("Received event: " + payload);
}
}
Conclusion
- With these steps, you have implemented core functionalities of the Twilio Programmable Voice API using Java. Make sure to handle additional post-call actions such as logging or data processing to suit your application needs.