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

# Recieve SMS Messages

> Handle incoming SMS text messages on a Plivo phone number

## Overview

This guide shows how to receive SMS text messages on a Plivo phone number. Typical use cases for receiving messages include opt-in and opt-out messages and other customer interactions.

You can start receiving 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 receive SMS text messages.

    <h2 id="api-how-it-works">How it works</h2>

    <Frame>
      <img src="https://mintcdn.com/plivo/7-odxN9fJG_Dg1dt/images/receive-sms-api.jpg?fit=max&auto=format&n=7-odxN9fJG_Dg1dt&q=85&s=43b2a5d94fae3d8c539bf9941938f800" alt="Receive SMS" width="1446" height="774" data-path="images/receive-sms-api.jpg" />
    </Frame>

    <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 Python development environment.

    <h2 id="api-create-a-flask-application-to-receive-messages">Create a Flask application to receive messages</h2>

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

    ```py theme={null}
    from flask import Flask, request

    app = Flask(__name__)

    @app.route('/receive_sms/', methods=['GET', 'POST'])
    def inbound_sms():

        from_number = request.values.get('From')
        to_number = request.values.get('To')
        text = request.values.get('Text')
        print('Message received - From: %s, To: %s, Text: %s' %(from_number, to_number, text))
        
        return 'Message Recevived'

    if __name__ == '__main__':
        app.run(host='0.0.0.0', debug=True)
    ```

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

    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](/docs/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="Create Application" width="1440" height="785" data-path="images/create_SMS_app.jpg" />
    </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 `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="Assign Phone Number to Receive SMS App" width="1440" height="785" data-path="images/assign_SMS_app.jpg" />
    </Frame>

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

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