Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Where to include SMS-functionality in an MVC application?

I'm planning on rewritting an application that uses Zend Framework and Twilio (for sending and receiving SMS messages). Looking back, I don't think I placed all of the SMS functionality in the right places. This has made upgrading the website difficult.

Currently, I have an SMS controller that handles requests from Twilio (for incoming messages). I implement a finite state machine (yes, in one big action method) that can handle various commands. Responses are sent directly from this controller, but also from the models that my controllers manage. Because of this, I've ended up with duplicated SMS message templates and confusion as to where exactly a message has originated.

How should I have done this? Should incoming SMS messages be parsed and processed in its own model? Currently, I don't have an SMS model - just an SMS controller. Or, what you suggest?

If it matters, I'm planning on rewriting my application using CakePHP.

like image 214
Chris Laplante Avatar asked Oct 08 '22 19:10

Chris Laplante


1 Answers

I've developed more than a few ZF apps that use Twilio. I tend to either use their PHP helper library in the controller, or (if it's anything other than a simple application) wrap their helper in a service class: Application_Service_SMS.

At that point, sending an SMS message should look like this in the controller:

$sms->send($from, $to, $body); //$sms is a service object of the twilio lib

But that's only the sending part of the question, how do you get $body? Since you're running in an MVC framework, my suggestion would be to separate the two layers (model and view), just like you would do at any other point.

If the model determines the content of the messsage, do something like this in your controller:

$this->view->model = $model;
$body = $this->view->render('sms/' . $command . '.phtml'); 

You'll have to make sure the body is less that 160 characters (or split on that, and send multiple messages). And you've made the SMS message editable without changing your model (since the message is really part of the view layer).

And since with Twilio you can send SMS messages as part of a voice call's TwiML, you can also reuse that message template like this:

//inside a TwiML script
<Sms>
  <?php echo $this->partial('sms/cmd.phtml', array('model' => $this->model)); ?>
</Sms>
like image 135
Tim Lytle Avatar answered Oct 13 '22 11:10

Tim Lytle