Menu

Rate this page:

Thanks for rating this page!

We are always striving to improve our documentation quality, and your feedback is valuable to us. How could this documentation serve you better?

Chat with PHP and Laravel

Download the Code

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 features to manage channels and to show it's usages.

Properati built a web and mobile messaging app to help real estate buyers and sellers connect in real time. Learn more here.

Let's get started!

Token Generation

In order to create a Twilio Programmable Chat client, you will need an access token. This token holds information about your Twilio Account and Programmable Chat API keys.

We generate this token by creating a new AccessToken and providing it with an IpMessagingGrant. The new AccessToken object is created using your Twilio credentials.

With Laravel we must create a provider that will inject the AccessToken object in the controller, the same goes for IpMessagingGrant inside TwilioIPMGrantProvider.php. We'll see how to use these objects in the next step.

Loading Code Sample...
      
      
          
          
          
          
        
      app/Providers/TwilioAccessTokenProvider.php

      Generate an Access Token

      app/Providers/TwilioAccessTokenProvider.php

      We can generate a token, now we need a way for the chat app to get it.

      Token Generation Controller

      Token Generation Controller

      On our controller we expose the endpoint responsible for providing a valid token using the provided parameters

      • device: identifies the device being used
      • identity: identifies the user itself

      Once we have used the AccessToken object to generate a token we can use the AccessToken's method token.toJWT() to get the token as a String. Then we just return the token as a JSON encoded string.

      Loading Code Sample...
          
          
              
              
              
              
            
          app/Http/Controllers/TokenController.php

          Token Generation Controller

          app/Http/Controllers/TokenController.php

          Now that we have a route that generates JWT tokens on demand, let's use this route to initialize our Twilio IP Messaging Client.

          Initialize the IP Messaging Client

          Initializing the Programmable Chat Client

          Our client fetches a new Token by making a POST request to our endpoint.

          With the token we can create a new Twilio.AccessManager that is used to initialize our Twilio.Chat.Client.

          Loading Code Sample...
              
              
                  
                  
                  
                  
                
              public/js/twiliochat.js

              Initialize the IP Messaging Client

              public/js/twiliochat.js

              Now that we've initialized our IP Messaging Client, lets see how we can get a list of channels.

              Get the Channel List

              Getting the Channel List

              After initializing the client we can call the getPublicChannels method to retrieve all visible channels. This method returns a promise which we use to show the list of channels retrieved on the UI.

              Loading Code Sample...
                  
                  
                      
                      
                      
                      
                    
                  public/js/twiliochat.js

                  Get the Channel List

                  public/js/twiliochat.js

                  Next, we need a default channel.

                  Join the General 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 handle invitations.

                  Notice: we set a unique name for the general channel since we don't want to create a new general channel every time we start the application.

                  Loading Code Sample...
                      
                      
                          
                          
                          
                          
                        
                      public/js/twiliochat.js

                      Join the General Channel

                      public/js/twiliochat.js

                      Now let's listen for some channel events.

                      Listen to 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.

                      Loading Code Sample...
                          
                          
                              
                              
                              
                              
                            
                          public/js/twiliochat.js

                          Listen to Channel Events

                          public/js/twiliochat.js

                          The client emits events as well. Let's see how we can listen to those events as well.

                          Listen to Client Events

                          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.
                          Loading Code Sample...
                              
                              
                                  
                                  
                                  
                                  
                                
                              public/js/twiliochat.js

                              Listen to Client Events

                              public/js/twiliochat.js

                              We've actually got a real chat app going here, but let's make it more interesting with multiple channels.

                              Create a Channel

                              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.

                              Loading Code Sample...
                                  
                                  
                                      
                                      
                                      
                                      
                                    
                                  public/js/twiliochat.js

                                  Create a Channel

                                  public/js/twiliochat.js

                                  Next, we will see how we can switch between channels.

                                  Join Other 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.

                                  Loading Code Sample...
                                      
                                      
                                          
                                          
                                          
                                          
                                        
                                      public/js/twiliochat.js

                                      Join Other Channels

                                      public/js/twiliochat.js

                                      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

                                      Delete a Channel

                                      Deleting a channel is easier than creating one. The application lets the user delete the channel they are currently on 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.

                                      Loading Code Sample...