Getting started with Twilio on Google App Engine for PHP
This guest post was written by Keith Casey, Sr. Developer Evangelist for
Twilio
Cross-posted from the Google Cloud
Platform Blog
I’ve wanted to explore
Google App
Engine for years. Between its SLA, automatic scaling, and queuing system, it has
always been compelling. Unfortunately, since my Python skills are somewhere between “Hello
World” and “OMG What did I just do!?” I decided to save myself the embarrassment. When Google
announced PHP support for App Engine, I was both ecstatic and intrigued about what might be
possible. To get something running in just a few minutes, I decided to use our Twilio PHP
helper.
When experimenting with a new Platform as a Service, there are nuances of which you should be
aware like dealing with a virtualized file system and needing a separate service for email.
However, the remaining nuances are usually pretty minimal and required only the “tweaking of
my module” rather than a heavy “rebuilding of my app”.
Knowing that up front, let’s dig in.
Set up the PHP on App Engine environment
First, check out and follow
Google’s
Getting started with PHP on Google App Engine to set up your local environment.
Their instructions will cover setting up the SDK, connecting to your account, and some details
on debugging. It should set up your environment under http://localhost:8080/ which serves as
the root of your application.
Upgrade your Twilio Helper library
Next, with respect to
Twilio’s PHP Helper
library, we’ve taken care of the nuances for you, the most important one of which
involved falling back to PHP’s Streams when cUrl isn’t available. In your case, simply upgrade
the library to v3.11+ or install it for the first time. You can use the library to send
text messages and make
phone calls exactly as you would in any other
PHP environment:
<?php
// Include the Twilio PHP library
require "Services/Twilio.php";
// Set your AccountSid and AuthToken from www.twilio.com/user/account
$AccountSid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
$AuthToken = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY";
// Instantiate a new Twilio Rest Client
$client = new Services_Twilio($AccountSid, $AuthToken);
// Make an array of people we know, to send them a message:
$people = array(
"+14158675309" => "Curious George",
"+14158675310" => "Boots",
"+14158675311" => "Virgil",
);
// Loop over all our friends:
foreach ($people as $number => $name) {
$sms = $client->account->sms_messages->create(
"YYY-YYY-YYYY", // Change the 'From' number to a Twilio number you've purchased
$number, // the number we are sending to - Any phone number
"Hey $name, Monkey Party at 6PM. Bring Bananas!" // the sms body
);
echo "Sent message to $name"; // Display a confirmation message
}
If you’re interested in the the specific changes for our library, you can explore the
relevant pull requests here and here. I also have an article
called “Preparing your PHP for App Engine” in next month’s php|architect
magazine.
URL Routing in PHP
Within App Engine, the entire routing system is powered by the app.yaml file. If you’re
familiar with development using frameworks like Zend or Symfony, defining your routes will
come naturally and may be marginally more difficult than copy/paste. If you’re only familiar
with doing non-framework development in PHP, you’ll have to define a route for each and every
PHP file the user accesses. In Google’s example “hello world” app, your app.yaml file should
should begin with something like this:
application: examplehelloworld
version: 1
runtime: php
api_version: 1
threadsafe: true
handlers:
- url: .*
script: main.php
The request handlers are the important part. If you’re using an MVC framework or OpenVBX,
you’ll most likely have one primary element mapping your index.php file and a set of elements
for static assets like JavaScript, CSS, and images.
Alternatively, if you’re not using a using a framework, app.yaml will map different URL
patterns to individual PHP scripts, like this:
application: examplehelloworld
version: 1
runtime: php
api_version: 1
threadsafe: true
handlers:
- url: /images
static_dir: images
- url: /send-sms
script: send-sms.php
- url: /make-call
script: make-call.php
- url: .*
script: index.php
Within those individual PHP scripts, no changes are necessary, so our make-call.php is
straightforward and identical to our quickstart:
<?php
require 'Services/Twilio.php';
include 'credentials.php';
$client = new Services_Twilio($AccountSid, $AuthToken);
$call = $client->account->calls->create(
'1512-555-1212', // From this number
'17035551212', // Send to this number
'http://twimlets.com/echo?Twiml=%3CResponse%3E%3CSay%3EHello%20Monkey!%3C%2FSay%3E%3C%2FResponse%3E&'
);
print $call->sid;
Also, the send-sms.php can be the same as our normal quickstart:
<?php
require 'Services/Twilio.php';
include 'credentials.php';
$client = new Services_Twilio($AccountSid, $AuthToken);
$call = $client->account->sms_messages->create(
'1512-555-1212', // From this number
'17035551212', // Send to this number
'Hello monkey!!'
);
print $call->sid;
Now you can access your scripts via http://localhost:8080/make-call.php and
http://localhost:8080/send-sms.php respectively. If the file is one that doesn’t need to be
accessible publicly, such as your credentials.php file, it shouldn’t have a listing.
Voila. You now have your first PHP application on Google App Engine!
I hope this is helpful as you test and deploy your PHP applications on Google App Engine. If
you have any tips, feedback, suggestions, or just a good joke please let me know via
email or Twitter:
@CaseySoftware.
Keith Casey currently
serves as a Developer Evangelist for Twilio to get good tools to good developers so they can
change how businesses communicate. In his spare time, he is a core contributor to web2project,
works to build and support the Austin technology community, blogs occasionally at CaseySoftware.com and is completely fascinated by
monkeys.
Posted by Ashleigh Rentz, Editor
Emerita