> ## Documentation Index
> Fetch the complete documentation index at: https://plivo.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Started with PHP

> Send your first SMS using PHP with Plivo APIs and SDKs

<Tabs>
  <Tab title="PHP Server">
    # Get Started with PHP Using PHP Server

    ## Sign up for a Plivo account

    When you [sign up with Plivo](https://cx.plivo.com/signup), we give you a free trial account and free credits to experiment with and learn about our services. You can [add a number](https://cx.plivo.com/phone-numbers) to your account to start testing the full range of our voice and SMS service features.

    Follow these steps to get a free trial account:

    1. [Sign up](https://cx.plivo.com/signup) with your work email address.
    2. Check your inbox for an activation email message from Plivo. Click on the link in the message to activate your account.
    3. Enter your mobile number to complete the phone verification step.

    ### Sign up with your work email address

    <Frame>
      <img src="https://mintcdn.com/plivo/Ac6PoKJHHxDx1U63/images/signup.png?fit=max&auto=format&n=Ac6PoKJHHxDx1U63&q=85&s=56190e6fffc6ae0c70dba8c7c69f435b" alt="" width="1440" height="900" data-path="images/signup.png" />
    </Frame>

    If you have any issues creating a Plivo account, please contact our [support team](https://support.plivo.com/hc/en-us/) for assistance.

    To get started, try sending an SMS message either by using our API and XML documents, or via {/* [PHLO](/phlo/) */}, our visual design tool, which allows you to create message flows using an intuitive canvas and deploy them with few clicks

    <Tabs>
      <Tab title="Using API">
        ## Install PHP and the Plivo PHP SDK

        You must set up and install PHP and Plivo’s PHP SDK before you send your first SMS message.

        ### Install PHP

        Follow the official PHP instructions to download and install PHP on [macOS](https://php.net/manual/en/install.macosx.php), [Windows](https://www.php.net/manual/en/install.windows.php), or [Debian Linux](https://www.php.net/manual/en/install.unix.debian.php), or use your favorite package manager to install PHP on any Linux distro.

        ### Install Composer

        We recommend using Composer, a dependency manager for PHP, as the package manager for your PHP projects.

        <Tabs>
          <Tab title="macOS">
            * Download the latest version of [Composer](https://getcomposer.org/download/).
            * Run this command in Terminal to run Composer.

              ```bash theme={null}
                $ php ~/Downloads/composer.phar --version
              ```

              **Note:** PHAR (PHP archive) is an archive format for PHP that can be run on the command line.
            * Make it executable.

              ```bash theme={null}
              $ cp ~/Downloads/composer.phar /usr/local/bin/composer
              $ sudo chmod +x /usr/local/bin/composer
              ```

              Move the file to bin directory.
            * To check whether the path includes /usr/local/bin, type

              ```bash theme={null}
              $ echo $PATH
              ```

              If the path is different, update it.

              ```bash theme={null}
              $ export PATH = $PATH:/usr/local/bin
              $ source ~/.bash_profile
              ```

              **Note:** If your path doesn’t include /usr/local/bin, we recommend adding it so that you can access it globally.
          </Tab>

          <Tab title="Linux">
            * Download the Composer installer.

              ```bash theme={null}
              $ curl -sS https://getcomposer.org/installer | php
              ```
            * Make the composer.phar file executable.

              ```bash theme={null}
              $ chmod +x composer.phar
              ```

              **Note:** PHAR (PHP archive) is an archive format for PHP that can be run on the command line.
            * Make Composer globally available for all system users.

              ```bash theme={null}
              $ mv composer.phar /usr/local/bin/composer
              ```
          </Tab>

          <Tab title="Windows">
            * Download and run the [Windows Installer](https://getcomposer.org/download/) for Composer.

              **Note:** Allow the installer to make changes to your php.ini file.
            * If you have any terminal windows open, close them all and open a fresh terminal instance.
            * Run the Composer command.

              ```bash theme={null}
                $ composer -V
              ```
          </Tab>
        </Tabs>

        ### Install the Plivo PHP SDK

        Create a project directory and change into it.

        ```bash theme={null}
        $ mkdir myphpapp
        $ cd myphpapp
        ```

        To install the most recent release of the Plivo PHP SDK, run

        ```bash theme={null}
        $ composer require plivo/plivo-php
        ```

        Alternatively, download the [source](https://github.com/plivo/plivo-php/) and run

        ```bash theme={null}
        $ composer install
        ```

        This command generates autoload files, which you can include in your PHP source code to start using the SDK.

        ```php theme={null}
        <?php
        require 'vendor/autoload.php'
        ```

        Once you’ve set up your development environment, you can start sending and receiving messages using our APIs and XML documents. Here are three common use cases to get you started.

        ## Send your first outbound SMS/MMS message

        You must have a Plivo phone number to send messages to the US or Canada; you can rent a Plivo number from Phone Numbers > [Buy Numbers](https://cx.plivo.com/phone-numbers) on the Plivo console or via the [Numbers API](/numbers/api/phone-number/#buy-a-phone-number).

        ### Set up a PHP server

        Create a file called `SendMessage.php` and paste into it this code.

        <Tabs>
          <Tab title="SMS">
            ```php theme={null}
            <?php
            require 'vendor/autoload.php';
            use Plivo\RestClient;

            $client = new RestClient("<auth_id>","<auth_token>");
            $message_created = $client->messages->create(
                [
                    "src" => "<sender_id>",
                    "dst" => "<destination_number>",
                    "text"  =>"Hello, from PHP Server!",
                 ]
            );
            print_r($response);
            ?>
            ```
          </Tab>

          <Tab title="MMS">
            ```php theme={null}
            <?php
            require 'vendor/autoload.php';
            use Plivo\RestClient;

            $client = new RestClient("<auth_id>","<auth_token>");
            $client->client->setTimeout(40);

            $mediaURLs = ['https://media.giphy.com/media/26gscSULUcfKU7dHq/source.gif'];
            $mediaIDs = ['801c2056-33ab-499c-80ef-58b574a462a2'];
            $response = $client->messages->create(
                [
                    "src" => "<sender_id>",
                    "dst" => "<destination_number>",
                    "text"  =>"Hello, MMS from PHP Server!",
                    "type" => "mms",
                    "media_urls" => $mediaURLs,
                    "media_ids" => $mediaIDs
                 ]
            );
            print_r($response);
            ?>
            ```
          </Tab>
        </Tabs>

        Replace the auth placeholders with your authentication credentials from the [Plivo console](https://cx.plivo.com/home). Replace the phone number placeholders with actual phone numbers in [E.164 format](https://en.wikipedia.org/wiki/E.164) (for example, +12025551234). In countries other than the US and Canada you can use a [sender ID](/messaging/concepts/sender-id-usage/) for the message source.

        <Note>
          **Note:** We recommend that you store your credentials in the `auth_id` and `auth_token` environment variables to avoid the possibility of accidentally committing them to source control. If you do this, you can initialize the client with no arguments and Plivo will automatically fetch the values from the environment variables. You can use `$_ENV` or `putenv/getenv` to store environment variables and fetch them when initializing the client.
        </Note>

        ### Test

        Save the file and run it.

        ```bash theme={null}
        $ php SendMessage.php
        ```

        ## Receive your first inbound SMS/MMS message

        To receive incoming messages, you must have a Plivo phone number that supports SMS; you can rent numbers from the [Numbers](https://cx.plivo.com/phone-numbers) page of the Plivo console or by using the [Numbers API](/numbers/).

        ### Set up a PHP server

        Create a file called `receive_sms.php` and paste into it this code.

        <Tabs>
          <Tab title="SMS">
            ```php theme={null}
            <?php
            require 'vendor/autoload.php';

            $from_number = $_REQUEST["From"];
            $to_number = $_REQUEST["To"];
            $text = $_REQUEST["Text"];

            echo("Message received - From $from_number, To: $to_number, Text: $text");
            ```
          </Tab>

          <Tab title="MMS">
            ```php theme={null}
            <?php
            require 'vendor/autoload.php';

            $from_number = $_REQUEST["From"];
            $to_number = $_REQUEST["To"];
            $text = $_REQUEST["Text"];

            echo("Message received - From $from_number, To: $to_number, Text: $text");
            ```
          </Tab>
        </Tabs>

        In the folder where the file resides, run

        ```bash theme={null}
        $ php -S localhost:8000
        ```

        You can choose to run it on any other port that your machine has access to. You should see your basic server application in action at [http://localhost:8000/receive\_sms.php](http://localhost:8000/receive_sms.php).

        ### Expose your local server to the internet

        To receive incoming messages, your local server must connect with Plivo API services. For that, we recommend using [ngrok](https://ngrok.com/download), which exposes local servers running behind NATs and firewalls to the public internet over secure tunnels. Using ngrok, you can set webhooks that can talk to the Plivo server.

        <Frame>
          <img src="https://mintcdn.com/plivo/M2NzHE_bNZbCm0gd/images/ngrok-diagram.png?fit=max&auto=format&n=M2NzHE_bNZbCm0gd&q=85&s=b2ef4b4d52c133d126fd0d4303c33a61" alt="" width="1626" height="601" data-path="images/ngrok-diagram.png" />
        </Frame>

        Install ngrok and run it on the command line, specifying the port that hosts the application on which you want to receive messages (8000 in this case):

        ```bash theme={null}
        $ ./ngrok http 8000
        ```

        This starts the ngrok server on your local server. Ngrok will display a forwarding link that you can use as a webhook to access your local server over the public network.

        <Frame>
          <img src="https://mintcdn.com/plivo/M2NzHE_bNZbCm0gd/images/ngrok.png?fit=max&auto=format&n=M2NzHE_bNZbCm0gd&q=85&s=ce35ccb7eebdb2af565a2a3a2cf2be18" alt="" width="786" height="238" data-path="images/ngrok.png" />
        </Frame>

        Now people can send messages to your Plivo number.

        ### Create a Plivo application to receive messages

        Associate the controller you created with Plivo by creating a Plivo application. Visiting Messaging > [Applications](https://cx.plivo.com/xml-applications) and click **Add New Application**. You can also use Plivo’s [Application API](/account/api/application/#create-an-application).

        Give your application a name — we called ours `Receive SMS`. Enter the server URL you want to use (for example `https://<yourdomain>.com/receive_sms/`) in the `Message URL` field and set the method to `POST`. Click **Create Application** to save your application.

        <Frame>
          <img src="https://mintcdn.com/plivo/2OFvQXVNT3srKLUy/images/create_SMS_app.jpg?fit=max&auto=format&n=2OFvQXVNT3srKLUy&q=85&s=665006f2112a8e6113716029adfbf2a7" alt="" width="1440" height="785" data-path="images/create_SMS_app.jpg" />
        </Frame>

        ### Assign a Plivo number to your application

        Navigate to the [Numbers](https://cx.plivo.com/phone-numbers) page and select the phone number you want to use for this application.

        From the Application Type drop-down, select `XML Application`.

        From the Plivo Application drop-down, select `Receive SMS` (the name we gave the application).

        Click **Update Number** to save.

        <Frame>
          <img src="https://mintcdn.com/plivo/NFI9_HRHTMInDf93/images/assign_SMS_app.jpg?fit=max&auto=format&n=NFI9_HRHTMInDf93&q=85&s=94324dc41c7e8ade7a60c98e5fe20094" alt="" width="1440" height="785" data-path="images/assign_SMS_app.jpg" />
        </Frame>

        ### Test

        Send a text message to the Plivo number you specified using any phone.

        ## Reply to an incoming SMS/MMS message

        To receive incoming messages, you must have a Plivo phone number that supports SMS; you can rent numbers from the [Numbers](https://cx.plivo.com/phone-numbers) page of the Plivo console or by using the [Numbers API](/numbers/).

        ### Set up a PHP server

        Create a file called `reply_to_sms.php` and paste into it this code.

        ```php theme={null}
        <?php
        require 'vendor/autoload.php';
        use Plivo\XML\Response;

        function sendResponseWithPlivo()
        {
            $from_number = $_POST["From"];
            $to_number = $_POST["To"];
            $response = new Response();
            $params = array(
                'src' => $to_number,
                'dst' => $from_number
            );
            $message_body = "This is an automatic response";
            $response->addMessage($message_body, $params);
            return $response->toXML();
        }
        header("Content-type: text/xml; charset=utf-8");
        echo sendResponseWithPlivo();
        ```

        If you haven’t done so already, [expose your local server to the internet](/sdk/server/set-up-php-dev-environment-api-messaging/#ngrok-setup).

        ### Create a Plivo application to reply to messages

        Associate the controller you created with Plivo by creating a Plivo application. Visiting Messaging > [Applications](https://cx.plivo.com/xml-applications) and click **Add New Application**. You can also use Plivo’s [Application API](/account/api/application/#create-an-application).

        Give your application a name — we called ours `Reply Incoming SMS`. Enter the server URL you want to use (for example `http://<yourdomain>.com/replysms/`) in the `Message URL` field and set the method to `POST`. Click **Create Application** to save your application.

        <Frame>
          <img src="https://mintcdn.com/plivo/2OFvQXVNT3srKLUy/images/create_reply_sms.png?fit=max&auto=format&n=2OFvQXVNT3srKLUy&q=85&s=0371a975aa748267124e9ea9debc7a0f" alt="" width="1440" height="822" data-path="images/create_reply_sms.png" />
        </Frame>

        ### Assign a Plivo number to your application

        Navigate to the [Numbers](https://cx.plivo.com/phone-numbers) page and select the phone number you want to use for this application.

        From the Application Type drop-down, select `XML Application`.

        From the Plivo Application drop-down, select `Reply Incoming SMS` (the name we gave the application).

        Click **Update Number** to save.

        ### Test

        Send a text message to the Plivo number you specified using any phone. You should receive a reply.

        ## More use cases

        We illustrate [more than a dozen use cases](/messaging/use-cases/send-an-sms/php/) with code for both API/XML and PHLO on our documentation pages.
      </Tab>
    </Tabs>
  </Tab>

  <Tab title="PHP Laravel">
    # Get Started with PHP Using PHP Laravel Framework

    ## Sign up for a Plivo account

    When you [sign up with Plivo](https://cx.plivo.com/signup), we give you a free trial account and free credits to experiment with and learn about our services. You can [add a number](https://cx.plivo.com/phone-numbers) to your account to start testing the full range of our voice and SMS service features.

    Follow these steps to get a free trial account:

    1. [Sign up](https://cx.plivo.com/signup) with your work email address.
    2. Check your inbox for an activation email message from Plivo. Click on the link in the message to activate your account.
    3. Enter your mobile number to complete the phone verification step.

    ### Sign up with your work email address

    <Frame>
      <img src="https://mintcdn.com/plivo/Ac6PoKJHHxDx1U63/images/signup.png?fit=max&auto=format&n=Ac6PoKJHHxDx1U63&q=85&s=56190e6fffc6ae0c70dba8c7c69f435b" alt="" width="1440" height="900" data-path="images/signup.png" />
    </Frame>

    If you have any issues creating a Plivo account, please contact our [support team](https://support.plivo.com/hc/en-us/) for assistance.

    To get started, try sending an SMS message either by using our API and XML documents, or via {/* [PHLO](/phlo/) */}, our visual design tool, which allows you to create message flows using an intuitive canvas and deploy them with few clicks.

    <Tabs>
      <Tab title="Using API">
        ## Install PHP and the Plivo PHP SDK

        You must set up and install PHP and Plivo’s PHP SDK before you send your first SMS message.

        ### Install PHP

        Follow the official PHP instructions to download and install PHP on [macOS](https://php.net/manual/en/install.macosx.php), [Windows](https://www.php.net/manual/en/install.windows.php), or [Debian Linux](https://www.php.net/manual/en/install.unix.debian.php), or use your favorite package manager to install PHP on any Linux distro.

        ### Install Composer

        We recommend using Composer, a dependency manager for PHP, as the package manager for your PHP projects.

        <Tabs>
          <Tab title="macOS">
            * Download the latest version of [Composer](https://getcomposer.org/download/).
            * Run this command in Terminal to run Composer.

              ```bash theme={null}
                $ php ~/Downloads/composer.phar --version
              ```

              **Note:** PHAR (PHP archive) is an archive format for PHP that can be run on the command line.
            * Make it executable.

              ```bash theme={null}
              $ cp ~/Downloads/composer.phar /usr/local/bin/composer
              $ sudo chmod +x /usr/local/bin/composer
              ```

              Move the file to bin directory.
            * To check whether the path includes /usr/local/bin, type

              ```bash theme={null}
              $ echo $PATH
              ```

              If the path is different, update it.

              ```bash theme={null}
              $ export PATH = $PATH:/usr/local/bin
              $ source ~/.bash_profile
              ```

              **Note:** If your path doesn’t include /usr/local/bin, we recommend adding it so that you can access it globally.
          </Tab>

          <Tab title="Linux">
            * Download the Composer installer.

              ```bash theme={null}
              $ curl -sS https://getcomposer.org/installer | php
              ```
            * Make the composer.phar file executable.

              ```bash theme={null}
              $ chmod +x composer.phar
              ```

              **Note:** PHAR (PHP archive) is an archive format for PHP that can be run on the command line.
            * Make Composer globally available for all system users.

              ```bash theme={null}
              $ mv composer.phar /usr/local/bin/composer
              ```
          </Tab>

          <Tab title="Windows">
            * Download and run the [Windows Installer](https://getcomposer.org/download/) for Composer.

              **Note:** Allow the installer to make changes to your php.ini file.
            * If you have any terminal windows open, close them all and open a fresh terminal instance.
            * Run the Composer command.

              ```bash theme={null}
                $ composer -V
              ```
          </Tab>
        </Tabs>

        ### Install Laravel and create a Laravel project

        Install Laravel.

        ```shell theme={null}
        $ composer require laravel/installer
        ```

        Create a project directory and change into it.

        ```shell theme={null}
        $ mkdir mylaravelapp
        $ cd mylaravelapp
        ```

        Create a Laravel project.

        ```shell theme={null}
        $ composer create-project laravel/laravel quickstart --prefer-dist
        ```

        This command creates a quickstart directory with the necessary folders and files for development.

        To install the most recent release of the Plivo PHP SDK, run

        ```bash theme={null}
        $ composer require plivo/plivo-php
        ```

        Alternatively, download the [source](https://github.com/plivo/plivo-php/) and run

        ```bash theme={null}
        $ composer install
        ```

        This command generates autoload files, which you can include in your PHP source code to start using the SDK.

        ```php theme={null}
        <?php
        require 'vendor/autoload.php'
        ```

        Once you’ve set up your development environment, you can start sending and receiving messages using our APIs and XML documents. Here are three common use cases to get you started.

        ## Send your first outbound SMS/MMS message

        You must have a Plivo phone number to send messages to the US or Canada; you can rent a Plivo number from Phone Numbers > [Buy Numbers](https://cx.plivo.com/phone-numbers) on the Plivo console or via the [Numbers API](/numbers/api/phone-number/#buy-a-phone-number).

        ### Create a Laravel controller

        Run this command in the project directory.

        ```sh theme={null}
        $ php artisan make:controller SMSController
        ```

        This command generates a controller named SMSController in the app/http/controllers/ directory. Edit app/http/controllers/SMSController.php and paste into it this code.

        <Tabs>
          <Tab title="SMS">
            ```php theme={null}
            <?php
            namespace App\Http\Controllers;
            require '../../vendor/autoload.php';
            use Plivo\RestClient;
            use Illuminate\Http\Request;

            class SMSController extends Controller
            {
                public function sendSMS()
                {
                    $client = new RestClient("<auth_id>","<auth_token>");
                    $response = $client->messages->create(
                        [  
                            "src" => "<sender_id>",
                            "dst" => "<destination_number>",
                            "text"  =>"Hello, from PHP Laravel!",
                         ]
                  );
                    header('Content-Type: application/json');
                    echo json_encode($response);
                }
            }
            ?>
            ```
          </Tab>

          <Tab title="MMS">
            ```php theme={null}
            <?php
            namespace App\Http\Controllers;
            require '../../vendor/autoload.php';
            use Plivo\RestClient;
            use Illuminate\Http\Request;

            class SMSController extends Controller
            {
                public function sendMMS()
                {
                    $client = new RestClient("<auth_id>","<auth_token>");
                    $mediaURLs = ['https://media.giphy.com/media/26gscSULUcfKU7dHq/source.gif'];
                    $mediaIDs = ['801c2056-33ab-499c-80ef-58b574a462a2'];
                    $response = $client->messages->create(
                        [  
                            "src" => "<sender_id>",
                            "dst" => "<destination_number>",
                            "text"  =>"Hello, from Laravel!",
                            "type" => "mms", 
                            "media_urls" => $mediaURLs, 
                            "media_ids" => $mediaIDs
                         ]
                    );
                    header('Content-Type: application/json');
                    echo json_encode($response);
                }
            }
            ?>
            ```
          </Tab>
        </Tabs>

        Replace the auth placeholders with your authentication credentials from the [Plivo console](https://cx.plivo.com/home). Replace the phone number placeholders with actual phone numbers in [E.164 format](https://en.wikipedia.org/wiki/E.164) (for example, +12025551234). In countries other than the US and Canada you can use a [sender ID](/messaging/concepts/sender-id-usage/) for the message source.

        <Note>
          **Note:** We recommend that you store your credentials in the `auth_id` and `auth_token` environment variables to avoid the possibility of accidentally committing them to source control. If you do this, you can initialize the client with no arguments and Plivo will automatically fetch the values from the environment variables. You can use `$_ENV` or `putenv/getenv` to store environment variables and fetch them when initializing the client.
        </Note>

        ### Add a route

        Edit routes/web.php and add this line at the end of the file.

        ```php theme={null}
        Route::match(['get', 'post'], '/sendSMS', 'SMSController@sendSMS');
        ```

        <Note>
          **Note:** If you’re using Laravel 8, use the fully qualified class name for your controllers — for example:

          ```php theme={null}
          Route::match(['get', 'post'], '/sendSMS', 'App\Http\Controllers\SMSController@sendSMS');
          ```

          To disable CSRF verification, add the route of the application to the `except` array in app/Http/Middleware/VerifyCsrfToken.php.
        </Note>

        ### Test

        Run your code.

        ```sh theme={null}
        $ php artisan serve
        ```

        ## Receive your first inbound SMS/MMS message

        To receive incoming messages, you must have a Plivo phone number that supports SMS; you can rent numbers from the [Numbers](https://cx.plivo.com/phone-numbers) page of the Plivo console or by using the [Numbers API](/numbers/).

        ### Set up a Laravel controller

        Edit app/http/controllers/SMScontroller.php and paste into it this code in the `SMSController` class after the `sendSMS` function.

        <Tabs>
          <Tab title="SMS">
            ```php theme={null}
            <?php

            namespace App\Http\Controllers;
            require '../../vendor/autoload.php';
            use Plivo\RestClient;
            use Plivo\XML\Response;
            use Illuminate\Http\Request;

            class VoiceController extends Controller
            {
                // Send outbound SMS
                public function sendSMS()
                {
                    .......
                }

               // Receive incoming SMS
                public function receivesms()
                {
                     $from_number = $_REQUEST["From"];
                     $to_number = $_REQUEST["To"];
                     $text = $_REQUEST["Text"];
                     echo("Message received - From $from_number, To: $to_number, Text: $text");
                }
            }
            ```
          </Tab>

          <Tab title="MMS">
            ```php theme={null}
            <?php

            namespace App\Http\Controllers;
            require '../../vendor/autoload.php';
            use Plivo\RestClient;
            use Plivo\XML\Response;
            use Illuminate\Http\Request;

            class VoiceController extends Controller
            {
                //Send outbound SMS
                public function sendSMS()
                {
                    .......
                }

               // Receive incoming SMS
                public function receivesms()
                {
                     $from_number = $_REQUEST["From"];
                     $to_number = $_REQUEST["To"];
                     $text = $_REQUEST["Text"];
                     $media_url = $_REQUEST["Media0"];
                     echo("Message received - From $from_number, To: $to_number, Text: $text, Media: $media_url");
                }
            }
            ```
          </Tab>
        </Tabs>

        ### Add a route

        Edit routes/web.php file and add this line at the end of the file.

        ```php theme={null}
        Route::match(['get', 'post'], '/receivesms', 'SMSController@receivesms');
        ```

        Run your code.

        ```sh theme={null}
        $ php artisan serve
        ```

        You should see your basic server application in action at [http://localhost:8000/receivesms/](http://localhost:8000/receivesms/).

        ### Expose your local server to the internet

        To receive incoming messages, your local server must connect with Plivo API services. For that, we recommend using [ngrok](https://ngrok.com/download), which exposes local servers running behind NATs and firewalls to the public internet over secure tunnels. Using ngrok, you can set webhooks that can talk to the Plivo server.

        <Frame>
          <img src="https://mintcdn.com/plivo/M2NzHE_bNZbCm0gd/images/ngrok-diagram.png?fit=max&auto=format&n=M2NzHE_bNZbCm0gd&q=85&s=b2ef4b4d52c133d126fd0d4303c33a61" alt="" width="1626" height="601" data-path="images/ngrok-diagram.png" />
        </Frame>

        Install ngrok and run it on the command line, specifying the port that hosts the application on which you want to receive messages (8000 in this case):

        ```bash theme={null}
        $ ./ngrok http 8000
        ```

        This starts the ngrok server on your local server. Ngrok will display a forwarding link that you can use as a webhook to access your local server over the public network.

        <Frame>
          <img src="https://mintcdn.com/plivo/M2NzHE_bNZbCm0gd/images/ngrok.png?fit=max&auto=format&n=M2NzHE_bNZbCm0gd&q=85&s=ce35ccb7eebdb2af565a2a3a2cf2be18" alt="" width="786" height="238" data-path="images/ngrok.png" />
        </Frame>

        Now people can send messages to your Plivo number.

        ### Create a Plivo application to receive messages

        Associate the controller you created with Plivo by creating a Plivo application. Visiting Messaging > [Applications](https://cx.plivo.com/xml-applications) and click **Add New Application**. You can also use Plivo’s [Application API](/account/api/application/#create-an-application).

        Give your application a name — we called ours `Receive SMS`. Enter the server URL you want to use (for example `https://<yourdomain>.com/receive_sms/`) in the `Message URL` field and set the method to `POST`. Click **Create Application** to save your application.

        <Frame>
          <img src="https://mintcdn.com/plivo/2OFvQXVNT3srKLUy/images/create_SMS_app.jpg?fit=max&auto=format&n=2OFvQXVNT3srKLUy&q=85&s=665006f2112a8e6113716029adfbf2a7" alt="" width="1440" height="785" data-path="images/create_SMS_app.jpg" />
        </Frame>

        ### Assign a Plivo number to your application

        Navigate to the [Numbers](https://cx.plivo.com/phone-numbers) page and select the phone number you want to use for this application.

        From the Application Type drop-down, select `XML Application`.

        From the Plivo Application drop-down, select `Receive SMS` (the name we gave the application).

        Click **Update Number** to save.

        <Frame>
          <img src="https://mintcdn.com/plivo/NFI9_HRHTMInDf93/images/assign_SMS_app.jpg?fit=max&auto=format&n=NFI9_HRHTMInDf93&q=85&s=94324dc41c7e8ade7a60c98e5fe20094" alt="" width="1440" height="785" data-path="images/assign_SMS_app.jpg" />
        </Frame>

        ### Test

        Send a text message to the Plivo number you specified using any phone.

        ## Reply to an incoming SMS/MMS message

        To receive incoming messages, you must have a Plivo phone number that supports SMS; you can rent numbers from the [Numbers](https://cx.plivo.com/phone-numbers) page of the Plivo console or by using the [Numbers API](/numbers/).

        ### Update the Laravel controller

        Edit app/http/controllers/SMSController.php and paste into it this code in the `SMSController` class after the receivesms function.

        ```php theme={null}
        <?php
        namespace App\Http\Controllers;
        require '../../vendor/autoload.php';
        use Plivo\RestClient;
        use Plivo\XML\Response;
        use Illuminate\Http\Request;

        class VoiceController extends Controller
        {
            // Send outbound SMS
            public function sendSMS()
            {
                ...... . .
            }

            // Receive incoming SMS
            public function receivesms()
            {
                ......... .
            }
            
            // Reply to incoming SMS
            public function replysms()
            {
                $number = $_POST["From"];
                $response = new Response();
                $params = array(
                    'src' => "<sender_id>",
                    'dst' => $number
                );
                $message_body = "This is an automatic response";
                $response->addMessage($message_body, $params);
            
                Header('Content-type: text/xml');
                return $response->toXML();
            }
        }
        ```

        ### Add a route

        Edit routes/web.php and add this line at the end of the file.

        ```php theme={null}
        Route::match(['get', 'post'], '/replysms', 'SMSController@replysms');
        ```

        If you haven’t done so already, [expose your local server to the internet](/sdk/server/set-up-php-dev-environment-api-messaging/#ngrok-setup).

        ### Create a Plivo application to reply to messages

        Associate the controller you created with Plivo by creating a Plivo application. Visiting Messaging > [Applications](https://cx.plivo.com/xml-applications) and click **Add New Application**. You can also use Plivo’s [Application API](/account/api/application/#create-an-application).

        Give your application a name — we called ours `Reply Incoming SMS`. Enter the server URL you want to use (for example `http://<yourdomain>.com/replysms/`) in the `Message URL` field and set the method to `POST`. Click **Create Application** to save your application.

        <Frame>
          <img src="https://mintcdn.com/plivo/2OFvQXVNT3srKLUy/images/create_reply_sms.png?fit=max&auto=format&n=2OFvQXVNT3srKLUy&q=85&s=0371a975aa748267124e9ea9debc7a0f" alt="" width="1440" height="822" data-path="images/create_reply_sms.png" />
        </Frame>

        ### Assign a Plivo number to your application

        Navigate to the [Numbers](https://cx.plivo.com/phone-numbers) page and select the phone number you want to use for this application.

        From the Application Type drop-down, select `XML Application`.

        From the Plivo Application drop-down, select `Reply Incoming SMS` (the name we gave the application).

        Click **Update Number** to save.

        ### Test

        Send a text message to the Plivo number you specified using any phone. You should receive a reply.

        ## More use cases

        We illustrate [more than a dozen use cases](/messaging/use-cases/send-an-sms/php/) with code for both API/XML and PHLO on our documentation pages.
      </Tab>
    </Tabs>
  </Tab>
</Tabs>
