Chat with Java and Servlets
As the Programmable Chat API is set to sunset in 2022, we will no longer maintain these chat tutorials.
Please see our Conversations API QuickStart to start building robust virtual spaces for conversation.
Programmable Chat has been deprecated and is no longer supported. Instead, we'll be focusing on the next generation of chat: Twilio Conversations. Find out more about the EOL process here.
If you're starting a new project, please visit the Conversations Docs to begin. If you've already built on Programmable Chat, please visit our Migration Guide to learn about how to switch.
Ready to implement a chat application using Twilio Programmable Chat Client?
This application allows users to exchange messages through different channels, using the Twilio Programmable Chat API. On this example, we'll show how to use this API capabilities to manage channels and their usages.
For your convenience, we consolidated the source code for this tutorial in a single GitHub repository. Feel free to clone it and tweak as required.
Generate the Token
In order to create a Twilio Programmable Chat client, you will need an access token. This token holds information about your Twilio Account and Chat API keys.
We generate this token by creating a new AccessToken
and providing it with an ChatGrant
. With the AccessToken
at hand, we can use its method ToJWT()
to return its string representation.
We can generate a token, now we need a way for the chat app to get it.
Token Generation Controller
On our controller we expose the endpoint responsible for providing a valid token. Using this parameter:
identity
: identifies the user itself.
It uses tokenGenerator.Generate
method to get hold of a new token and return it in a JSON format to be used for our client.
Now that we have a route that generates JWT tokens on demand, let's use this route to initialize our Twilio Chat Client.
Initialize the Programmable Chat Client
On our client, we fetch a new Token using a POST request to our endpoint.
With the token we can create a new Twilio.AccessManager
, and initialize our Twilio.Chat.Client
.
Now that we've initialized our Chat Client, lets see how we can get a list of channels.
Get the Channel List
After initializing the client, we can call its method getPublicChannelDescriptors
to retrieve all visible channels. The method returns a promise which we use to show the list of channels retrieved on the UI.
Next, we need a default channel.
Join the General Channel
This application will try to join a channel called "General Channel" when it starts. If the channel doesn't exist, we'll create one with that name. The scope of this example application will show you how to work only with public channels, but the Programmable Chat client allows you to create private channels and handles invitations.
Notice we set a unique name for the general channel as we don't want to create a new general channel every time we start the application.
Now let's listen for some channel events.
Listen to Channel Events
Next we listen for channel events. In our case, we're setting listeners to the following events:
messageAdded
: When another member sends a message to the channel you are connected to.typingStarted
: When another member is typing a message on the channel that you are connected to.typingEnded
: When another member stops typing a message on the channel that you are connected to.memberJoined
: When another member joins the channel that you are connected to.memberLeft
: When another member leaves the channel that you are connected to.
We register a different function to handle each particular event.
The client emits events as well. Let's see how we can listen to those events as well.
Listen to Client Events
Just like with channels, we can register handlers for events on the Client:
channelAdded
: When a channel becomes visible to the Client.channelRemoved
: When a channel is no longer visible to the Client.tokenExpired
: When the supplied token expires.
We've actually got a real chat app going here, but let's make it more interesting with multiple channels.
Create a Channel
When a user clicks on the "+ Channel" link we'll show an input text field where it's possible to type the name of the new channel. Creating a channel is as simple as calling createChannel
with an object that has the friendlyName
key. You can create a channel with more options listed on the Channels section of the Programmable Chat documentation.
Next, we will see how we can switch between channels.
Join Other Channels
When you tap on the name of a channel from the sidebar, that channel is set as the selectedChannel
. The selectChannel
method takes care of joining to the selected channel and setting up the selectedChannel
.
At some point your users will want to delete a channel. Let's have a look at how that can be done.
Delete a Channel
Deleting a channel is even more simple than creating one. The application lets the user delete the channel they are currently joined to through the "delete current channel" link. The only thing you need to do to actually delete the channel from Twilio, is call the delete
method on the channel you are trying to delete. Like other methods on the Channel
object, it'll return a promise where you can set the success handler.
That's it! We've just implemented a simple chat application for Java using the Servlet API.
Where to Next?
If you are a Java developer working with Twilio, you might want to check out these other tutorials:
Never miss another server outage. Learn how to build a server notification system that will alert all administrators via SMS when a server outage occurs.
Increase your rate of response by automating the workflows that are key to your business. In this tutorial, learn how to build a ready-for-scale automated SMS workflow, for a vacation rental company.
Protect your users' privacy by anonymously connecting them with Twilio Voice and SMS. Learn how to create disposable phone numbers on-demand, so two users can communicate without exchanging personal information.
Did this help?
Thanks for checking out this tutorial! If you have any feedback to share with us, we'd love to hear it. Tweet @twilio to let us know what you think.
Need some help?
We all do sometimes; code is hard. Get help now from our support team, or lean on the wisdom of the crowd by visiting Twilio's Stack Overflow Collective or browsing the Twilio tag on Stack Overflow.