Home > Backend Development > PHP Tutorial > Hello, Laravel? Communicating with PHP through SMS!

Hello, Laravel? Communicating with PHP through SMS!

William Shakespeare
Release: 2025-02-09 11:21:14
Original
619 people have browsed it

This Laravel weather app, initially designed for voice calls, now supports SMS communication. This enhancement involves adding routes, modifying the service layer, and creating an SMS controller to handle incoming text messages.

Hello, Laravel? Communicating with PHP through SMS!

Route Additions:

The routes/web.php file is updated to include an SMS route group:

Route::group(['prefix' => 'sms', 'middleware' => 'twilio'], function () {
    Route::post('weather', 'SmsController@showWeather')->name('weather');
});
Copy after login

This /sms/weather route handles all incoming SMS messages, leveraging Twilio's POST requests.

Service Layer Modification:

The app/Services/WeatherService.php file's getWeather method is revised to accommodate SMS:

public function getWeather($zip, $dayName, $forSms = false) {
    // ... (Existing code to retrieve weather data remains unchanged) ...

    $weather = $day->name;
    $weather .= ' the ' . $tsObj->format('jS') . ': ';

    $response = new Twiml();

    if ($forSms) {
        $remainingChars = 140 - strlen($weather);
        // ... (Condensed weather forecast for SMS, limited to 140 characters) ...
        $response->message($weather);
    } else {
        // ... (Existing code for voice responses remains unchanged) ...
    }

    return $response;
}
Copy after login

The key change is the addition of $forSms parameter. If true, the forecast is shortened to fit within SMS character limits.

SMS Controller:

A new SmsController.php is created in app/Http/Controllers:

<?php
namespace App\Http\Controllers;

use App\Services\WeatherService;
use Illuminate\Http\Request;
use Twilio\Twiml;

class SmsController extends Controller
{
    // ... (Constructor and dependencies remain the same) ...

    public function showWeather(Request $request)
    {
        $parts = $this->parseBody($request);

        switch ($parts['command']) {
            case 'zipcode':
                // ... (Handle zipcode input) ...
                break;
            case 'day':
                // ... (Handle day of week input) ...
                break;
            case 'credits':
                // ... (Handle credits request) ...
                break;
            default:
                // ... (Handle default/unknown input) ...
                break;
        }

        return $response;
    }

    private function parseBody($request)
    {
        // ... (Parses the SMS body to determine user intent) ...
    }
}
Copy after login

This controller's showWeather method uses parseBody to interpret the SMS message and calls getWeather with appropriate parameters. parseBody identifies zip codes, days of the week, and credit requests.

Twilio Configuration:

Update your Twilio phone number settings to point the SMS webhook to your application's /sms/weather endpoint (using your Ngrok URL).

Hello, Laravel? Communicating with PHP through SMS!

App Usage:

Send an SMS with a zip code to your Twilio number to receive the weather forecast. Subsequent messages can specify a day of the week or request credits.

Hello, Laravel? Communicating with PHP through SMS! Hello, Laravel? Communicating with PHP through SMS! Hello, Laravel? Communicating with PHP through SMS! Hello, Laravel? Communicating with PHP through SMS!

This enhanced Laravel application demonstrates a robust and flexible way to handle both voice and SMS interactions using Twilio. The code provides a clear example of how to extend the functionality to support a new communication channel. Remember to replace placeholder comments with the actual code from the original response.

The above is the detailed content of Hello, Laravel? Communicating with PHP through SMS!. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template