How do I build a SMS Keyword Response Application?

SMS keyword applications are designed to send customized SMS replies based on the ‘Body’ of the incoming text message.

When an SMS message is received at your Twilio phone number, your application will fetch the ‘Body’ request parameter of the message. Your application will then match the text of your incoming message with the keywords you have listed and send a reply.

The following is a PHP code example of a SMS Keyword Response Application, and you can find some code examples in other languages here. When an animal name messaged to a Twilio phone number, the definition of the animal is replied in response.


/* Include twilio-php, the official Twilio PHP Helper Library,
 * which can be found at


/* Controller: Match the keyword with the customized SMS reply. */
function index(){
	$response = new Services_Twilio_Twiml();
	$response->sms("Reply with one of the following keywords:
monkey, dog, pigeon, owl.");
	echo $response;

function monkey(){
	$response = new Services_Twilio_Twiml();
	$response->sms("Monkey. A small to medium-sized primate that
typically has a long tail, most kinds of which live in trees in
tropical countries.");
	echo $response;

function dog(){
	$response = new Services_Twilio_Twiml();
	$response->sms("Dog. A domesticated carnivorous mammal that
typically has a long snout, an acute sense of smell, and a barking,
howling, or whining voice.");
	echo $response;

function pigeon(){
	$response = new Services_Twilio_Twiml();
	$response->sms("Pigeon. A stout seed- or fruit-eating bird with
a small head, short legs, and a cooing voice, typically having gray and
white plumage.");
	echo $response;

function owl(){
	$response = new Services_Twilio_Twiml();
	$response->sms("Owl. A nocturnal bird of prey with large
forward-facing eyes surrounded by facial disks, a hooked beak,
and typically a loud call.");
	echo $response;

/* Read the contents of the 'Body' field of the Request. */
$body = $_REQUEST['Body'];

/* Remove formatting from $body until it is just lowercase
characters without punctuation or spaces. */
$result = preg_replace("/[^A-Za-z0-9]/u", " ", $body);
$result = trim($result);
$result = strtolower($result);

/* Router: Match the ‘Body’ field with index of keywords */
switch ($result) {
    case 'monkey':
    case 'dog':
    case 'pigeon':
    case 'owl':

/* Optional: Add new routing logic above this line. */