> ## 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.

# Reply to Incoming SMS

> Receive and send automated replies to incoming SMS text messages

## Overview

This guide shows how to receive SMS text messages on a Plivo phone number — something you might want to do to acknowledge a request from a customer, handle opt-ins and opt-outs, or implement an autoresponder application.

You can reply to SMS messages either by using our PHLO visual workflow builder or our APIs. Follow the instructions in one of the tabs below.

<Tabs>
  <Tab title="Using API">
    Here’s how to use Plivo APIs to reply to incoming SMS text messages.

    <h2 id="api-prerequisites">Prerequisites</h2>

    To get started, you need a Plivo account —  [sign up](https://cx.plivo.com/signup) with your work email address if you don’t have one already. 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](/docs/numbers/). If this is your first time using Plivo APIs, follow our instructions to set up a Ruby development environment and a web server and safely expose that server to the internet.

    <h2 id="api-create-a-rails-controller-to-reply-to-messages">Create a Rails controller to reply to messages</h2>

    Change to the project directory and run this command to create a Rails controller to reply to incoming messages.

    ```shell theme={null}
    $ rails generate controller Plivo sms
    ```

    This command generates a controller named plivo\_controller in the app/controllers/ directory and a respective view in app/views/plivo. We can delete the view as we don’t need it.

    ```shell theme={null}
    $ rm app/views/plivo/sms.html.erb
    ```

    Edit app/controllers/plivo\_controller.rb and paste this code in the PlivoController class.

    ```rb theme={null}
    include Plivo
    include Plivo::Exceptions
    include Plivo::XML

    class PlivoController < ApplicationController
      skip_before_action :verify_authenticity_token
    def replysms
    	from_number = params[:From]
    	to_number = params[:To]
    	text = params[:Text]
    	response = Response.new
    	params = {
    		src: to_number,
    		dst: from_number,
    	}
    	message_body = "Thank you, we received your request"
    	response.addMessage(message_body, params)
    	xml = PlivoXML.new(response)
    	puts xml.to_xml
    	render xml: xml.to_xml
    end
    ```

    <h3 id="api-{{'Add a route' | slugify}}">Add a route</h3>

    Edit config/routes.rb and change the line

    ```ruby theme={null}
    Rails.application.routes.draw do
      get 'plivo/sms' 
    end
    ```

    to

    ```ruby theme={null}
    Rails.application.routes.draw do
      post 'plivo/replysms/' => 'plivo#replysms'
    end
    ```

    Start the Rails server

    ```shell theme={null}
    $ rails server
    ```

    You should see your basic server application in action at [http://localhost:3000/plivo/autoresponder/](http://localhost:3000/plivo/autoresponder/).

    Set up ngrok to expose your local server to the internet.

    <Note>
      <strong>Note:</strong>
      For ngrok testing, add this line to config/environments/development.rb.<br />
      `config.hosts << /[a-z0-9-]+\.ngrok\.io/`
    </Note>

    <h2 id="api-create-a-plivo-application-to-reply-to-messages">Create a Plivo application to reply to messages</h2>

    Associate the Rails 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](/docs/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 `https://<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="Create Application" width="1440" height="822" data-path="images/create_reply_sms.png" />
    </Frame>

    <h2 id="api-assign-a-plivo-number-to-your-application">Assign a Plivo number to your application</h2>

    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.

    <Frame>
      <img src="https://mintcdn.com/plivo/NFI9_HRHTMInDf93/images/assign_reply_incoming_sms.png?fit=max&auto=format&n=NFI9_HRHTMInDf93&q=85&s=7f440f6a930c41f1f3393744857b50c3" alt="Assign Phone Number to Reply SMS App" width="1440" height="821" data-path="images/assign_reply_incoming_sms.png" />
    </Frame>

    <h2 id="api-test">Test</h2>

    Send a text message to the Plivo number you specified using any phone. You should receive a reply.
  </Tab>
</Tabs>
