Today we're going to answer a fun question: how do you turn a handful of isolated text messages to and from the same party into a true conversation?
The problem here? SMS is a stateless protocol. You're going to need some way to remember state between each exchanged message.
Luckily for us, building traditional web applications has this same hurdle, as HTTP is also a stateless protocol. This problem has been solved for web applications through the use of HTTP cookies and, rather than reinvent that old wheel, the Twilio Messaging API uses the same solution.
This guide will show you how to use Programmable Messaging (link takes you to an external page) to do this. We'll use Python, the Flask (link takes you to an external page) framework, and the Twilio Python SDK.
If you haven't written your own SMS webhooks with Python before, you may want to first check out our guide, Receive and Reply to SMS and MMS Messages in Python.
Ready to go? Let's get started!
(information)
InfoTwilio Conversations, a more recent product offering, is an omni-channel messaging platform that allows you to build engaging conversational, two-way messaging experiences. Be sure to check out our Conversations product to see if it's a better fit for your needs.
Just like in web applications, a cookie is a small file that your application can store on Twilio's servers to keep track of information, such as a username or account.
For Twilio Programmable Messaging, cookies are scoped to the "conversation" between two parties — you can have a unique cookie for each To/From phone number pair. For example, you can store a unique cookie for any messages sent between 415-555-2222 and 415-555-1111, which will be different than the cookie used between 415-555-3333 and 415-555-1111.
In a web app, you write a cookie to keep "statefulness" between separate requests from the same browser.
Similarly, SMS messages are independent communications between two parties, so Twilio allows you to tie them together as a logical session via cookies. This means you can use server-side sessions to keep track of application state between requests. (How cool is that?)
Twilio will expire the cookies for that conversation after four hours of inactivity, as if the user "closed the browser."
The cookies let you share state across multiple messages allowing you to treat separate messages as a conversation, and store data about the conversation in the cookies for future reference.
You can store the data directly in a cookie, or you can use a session state management framework. We'll use Flask's built-in session library for this example.
Now let's try using session counters to see if a particular user has messaged us before. If they're a new sender, we'll thank them for the new message. If they've sent us messages before, we'll specify how many messages we've gotten from them.
1from flask import Flask, request, session
2from twilio.twiml.messaging_response import MessagingResponse
4# The session object makes use of a secret key.
5SECRET_KEY = 'a secret key'
7app.config.from_object(__name__)
9# Try adding your own number to this list!
17@app.route("/", methods=['GET', 'POST'])
19"""Respond with the number of text messages sent between two parties."""
21counter = session.get('counter', 0)
24# Save the new counter value in the session
25session['counter'] = counter
27from_number = request.values.get('From')
28if from_number in callers:
29name = callers[from_number]
34message = '{} has messaged {} {} times.' \
35.format(name, request.values.get('To'), counter)
37# Put it in a TwiML response
38resp = MessagingResponse()
44if __name__ == "__main__":
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4