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