如何在 laravel 中集成 "inbound / recieve message" (nexmo)

How to integrate "inbound / recieve message" in laravel (nexmo)

实际上我使用 nexmo 发送短信 成功了。

目前,我需要 接收短信 功能来进行 GPS 跟踪。我读了这个 nexmo-inbound doc,我有问题:

是免费还是付费?

这是付费服务,但新注册可获得 2.00 欧元的赠金。在您用完初始信用额度之前,我们不需要任何账单信息。 2.00 欧元的费用足以让您使用许多 API,而不仅仅是 SMS。

发送或接收 SMS 有一个(通常)名义成本,但它可能因地区、国家和电信phone 公司而异。对于大多数国家/地区,一条消息的费用应该在 0.0057 欧元左右。

号也是按月租的。这大约是每月 0.90 欧元(同样,取决于 telephone 号码和功能的区域)。

如何在 Laravel

中进行设置

我们确实提供了一个 Laravel 软件包,实际上它刚刚发布了 2.0.0 版的新版本 - nexmo/laravel (https://github.com/nexmo/nexmo-laravel)。这提供了一种从服务容器中获取客户端并设置外观的简单方法。直接用的话也可以用nexmo/client

首先,我们需要一个控制器。我们将创建一个可以发送 SMS 的控制器(作为演示),然后创建一个控制器来接收 SMS。我要在 app/Http/Controllers/SmsController.php:

中创建 SmsController
# app/Http/Controllers/SmsController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class SmsController extends Controller
{
    public function send()
    {
    }

    public function receive()
    {
    }
}

然后我们将在routes/web.php中注册这些路由:

Route::get('/sms/send', 'SmsController@send');
Route::get('/sms/receive', 'SmsController@receive');

发送短信非常简单。您可以从服务容器中获取我们的对象并通过一次调用发送。我们可以将 class 更改为此(将 TO_NUMBER 替换为您想要获取消息的任何 phone 号码):

class SmsController extends Controller
{
    public function send()
    {
        $nexmo = $this->app->make(\Nexmo\Client::class);
        $message= $nexmo->message()->send([
            'to' => TO_NUMBER,
            'from' => 'Acme Inc',
            'text' => 'A text message sent using the Nexmo SMS API'
        ]);
        $response = $message->getResponseData();

        return response()->json($response);
    }

    public function receive()
    {
    }
}

如果您访问 http://localhost/sms/send,它应该会向您配置的任何号码发送短信。

接收文本不需要我们的SDK,您只需要有一个可以接收请求的端点即可。首先,让我们改变我们的 receive() 方法来工作:

use Illuminate\Http\Request;

class SmsController extends Controller
{
    public function send()
    {
        $nexmo = $this->app->make(\Nexmo\Client::class);
        $message= $nexmo->message()->send([
            'to' => TO_NUMBER,
            'from' => 'Acme Inc',
            'text' => 'A text message sent using the Nexmo SMS API'
        ]);
        $response = $message->getResponseData();

        return response()->json($response);
    }

    public function receive(Request $request)
    {
        $smsFrom = $request->query('msisdn');
        $smsMessage = $request->query('text');

        return response()->json(['from' => $smsFrom, 'message' => $smsMessage]);
    }
}

您可以点击 https://localhost/sms/receive?msisdn=15555551234&text=Hello%20World 并且您应该得到类似于以下内容的输出:

{
    "from": "15555551234",
    "message": "Hello World"
}

现在我们需要告诉 Nexmo 将 SMS 消息发送到哪里。在 Nexmo 仪表板上,转到 "Numbers," 然后 "Your Numbers." 在 "Manage" 下单击齿轮图标。在顶部的文本框中,输入一个全球可达的地址(即:localhost 将不起作用),例如“http://example.com/sms/receive" or "http://example.ngrok.io/sms/receive”,然后单击"OK" 保存。

如果您向您的 Nexmo 号码发送短信,它应该会尝试访问配置的端点,并且您的应用程序可以根据需要处理传入的数据。

如果您没有可在 Internet 上访问的测试服务器,我们建议 ngrok. It is a free program that will expose your local development environment through a reachable address. We have a writeup here

可在 https://developer.nexmo.com/messaging/sms/overview 找到 SMS 系统的完整文档。 PHP 示例在技术上位于 Slim 中,但直接使用 SDK,因此其中没有任何 Slim 特定的块。

您需要一个帐户才能使用该系统,因此您可以在 https://dashboard.nexmo.com/sign-up 注册。您将获得 2.00 欧元的起始费用,这足以租用一个号码并开始发送和接收消息。