プライベートSMS通信

実際の電話番号を明かさずにSMSをやりとりしたい場合がある。

例えば、タクシー予約サービスを運営している場合、顧客とドライバーが連絡を取り合い、迎車の時間や場所などを調整できるようにしたい。しかし、顧客のプライバシーを守るために、ドライバーには顧客の電話番号を知られたくない。また逆に、顧客にドライバーの電話番号を知られ、あなたのアプリケーションをバイパスして直接タクシーサービスを予約されることも避けたい。

このチュートリアルでは

このチュートリアルは プライベートSMSの使用例.Node.jsとNode Server SDKを使ってSMSプロキシシステムを構築し、仮想電話番号を使って参加者の実際の番号を隠す方法を教えます。

アプリケーションを構築するには、以下の手順を実行する:

前提条件

このチュートリアルを完成させるために必要なもの

  • A Vonageアカウント - APIキーとシークレット、およびバーチャルナンバーをレンタルしてください。
  • A Vonage番号 - で各ユーザーの実番号を隠す。のNumbersを借りることができる。 開発者ダッシュボード.
  • について ソースコード GitHub にあります。 README.
  • Node.js をインストールし、設定する。
  • ングロク - (オプション)で、開発用ウェブサーバをインターネット経由でVonageのサーバにアクセスできるようにします。
  • 米国を拠点とするすべての顧客は、以下を遵守するためにブランドとキャンペーンを登録する必要があります。 10 DLCガイドライン.

基本的なウェブアプリケーションの作成

このアプリケーションでは エクスプレス ルーティングのフレームワークと ノードサーバーSDK SMSの送受信に私たちは dotenv でアプリケーションを構成できるようにする。 .env テキストファイル。

server.js アプリケーションの依存関係を初期化し、Webサーバーを起動します。アプリケーションのホームページのルートハンドラ(/)にアクセスして、サーバーが稼動していることをテストできる。 http://localhost:3000:

require('dotenv').config();
const express = require('express');
const bodyParser = require('body-parser');
const SmsProxy = require('./SmsProxy');

const app = express();
app.set('port', (process.env.PORT || 3000));
app.use(bodyParser.urlencoded({ extended: false }));

app.listen(app.get('port'), function () {
    console.log('SMS Proxy App listening on port', app.get('port'));
});

const smsProxy = new SmsProxy();

app.get('/', (req, res) => {
    res.send('Hello world');
})

のオブジェクトをインスタンス化していることに注意してください。 SmsProxy クラスを使用して、あなたのバーチャル番号に送られたメッセージを、意図した受信者の実際の番号にルーティングする処理を行います。実際のプロキシ処理については SMSのプロキシを初期化する。 nexmo 次のステップで設定するAPIキーとシークレットを使用します。これで、アプリケーションがSMSを送受信できるようになります:

const Nexmo = require('nexmo');

class SmsProxy {

    constructor() {

        this.nexmo = new Nexmo({
            apiKey: process.env.VONAGE_API_KEY,
            apiSecret: process.env.VONAGE_API_SECRET
        }, {
                debug: true
            });
    }
    ...

アプリケーションの設定

をコピーする。 example.env ファイル .env をクリックし、Vonage API キーとシークレット、および Vonage 番号が含まれるように変更してください。この情報は 開発者ダッシュボード:

VONAGE_API_KEY=YOUR_VONAGE_API_KEY
VONAGE_API_SECRET=YOUR_VONAGE_API_SECRET
VONAGE_NUMBER=YOUR_VONAGE_NUMBER

チャットの作成

アプリケーションを使用するには POST にリクエストする。 /chat ルートに、2人のユーザーの実際の電話番号を渡す。(リクエストのサンプルは チャット開始).

のルートハンドラです。 /chat を以下に示す:

app.post('/chat', (req, res) => {
    const userANumber = req.body.userANumber;
    const userBNumber = req.body.userBNumber;

    smsProxy.createChat(userANumber, userBNumber, (err, result) => {
        if (err) {
            res.status(500).json(err);
        }
        else {
            res.json(result);
        }
    });
    res.send('OK');

});

チャット・オブジェクトは createChat() のメソッドを使用する。 smsProxy クラスがある。各ユーザーの実数が格納される:

createChat(userANumber, userBNumber) {
    this.chat = {
        userA: userANumber,
        userB: userBNumber
    };

    this.sendSMS();
}

さて、チャットを作成したので、各ユーザーに相手との連絡方法を知らせる必要があります。

ユーザーの紹介

:このチュートリアルでは、各ユーザーはSMSでバーチャル・ナンバーを受け取ります。本番システムでは、Eメール、アプリ内通知、または事前に定義された番号として提供することができます。

の中で sendSMS() のメソッドを使用する。 smsProxy クラスでは sendSms() メソッドを使って、各ユーザーの実番号からバーチャルナンバーに2つのメッセージを送信する。

sendSMS() {
    /*
        Send a message from userA to the virtual number
    */
    this.nexmo.message.sendSms(process.env.VIRTUAL_NUMBER,
                                this.chat.userA,
                                'Reply to this SMS to talk to UserA');

    /*
        Send a message from userB to the virtual number
    */
    this.nexmo.message.sendSms(process.env.VIRTUAL_NUMBER,
                                this.chat.userB,
                                'Reply to this SMS to talk to UserB');
}

そこで、バーチャル・ナンバーでこれらの着信メッセージを傍受し、意図した受信者のリアル・ナンバーにプロキシする必要がある。

受信SMSの受信

一方のユーザーがもう一方のユーザーにメッセージを送信する場合、ターゲット・ユーザーの実際の番号ではなく、アプリケーションのバーチャル番号に送信することになります。Vonbersは、仮想番号で受信SMSを受信すると、その番号に関連付けられたWebhookエンドポイントにHTTPリクエストを行います:

server.jsのルートハンドラを提供します。 /webhooks/inbound-sms あなたのバーチャルナンバーがSMSを受信したときに、Vonageのサーバーがあなたのアプリケーションに行うリクエストです。私たちは POST を使うこともできる。 GET または POST-JSON.で説明されているように、これはダッシュボードで設定可能です。 アプリケーションをインターネットに公開する.

を取得する。 from そして text パラメータを受け取り、それを SmsProxy クラスを使用して、どの実数に送信するかを決定する:

app.get('/webhooks/inbound-sms', (req, res) => {
    const from = req.query.msisdn;
    const to = req.query.to;
    const text = req.query.text;

    // Route virtual number to real number
    smsProxy.proxySms(from, text);

    res.sendStatus(204);
});

を返す。 204 ステータス (No content)を使用して、メッセージの受信に成功したことを示します。これは重要なステップで、もし私たちが受信を確認しなければ、Vonageのサーバーは何度も配送を試みるからです。

SMSのルーティング方法を決定する

SMSを送信しているユーザーの本当の番号がわかったので、メッセージを相手の本当の番号に転送することができます。このロジックは getDestinationRealNumber() のメソッドを使用する。 SmsProxy クラスである:

getDestinationRealNumber(from) {
    let destinationRealNumber = null;

    // Use `from` numbers to work out who is sending to whom
    const fromUserA = (from === this.chat.userA);
    const fromUserB = (from === this.chat.userB);

    if (fromUserA || fromUserB) {
        destinationRealNumber = fromUserA ? this.chat.userB : this.chat.userA;
    }

    return destinationRealNumber;
}

どのユーザーにメッセージを送るかを決めることができたので、あとは送信するだけです!

SMSのプロキシ

SMSを受信者の実際の電話番号にプロキシする。その from 番号は常にバーチャル番号(ユーザーの匿名性を保つため)であり to はユーザーの実際の電話番号である。

proxySms(from, text) {
    // Determine which real number to send the SMS to
    const destinationRealNumber = this.getDestinationRealNumber(from);

    if (destinationRealNumber  === null) {
        console.log(`No chat found for this number);
        return;
    }

    // Send the SMS from the virtual number to the real number
    this.nexmo.message.sendSms(process.env.VIRTUAL_NUMBER,
                                destinationRealNumber,
                                text);
}

試してみる

アプリケーションをインターネットに公開する

SMS APIは、あなたのバーチャル番号宛てのSMSを受信すると、あなたのアプリケーションに次のようなアラートを送ります。 ウェブフック.Webhookは、Vonageのサーバーがあなたのサーバーと通信するためのメカニズムを提供します。

アプリケーションがVonageのサーバにアクセスできるようにするには、インターネット上で一般に公開されている必要があります。開発とテスト中にこれを実現する一つの方法は ングロクローカルサーバーを安全なトンネルを経由して公衆インターネットに公開するサービス。参照 このブログ記事 をご覧ください。

ダウンロードとインストール ングロクそして次のコマンドで起動する:

ngrok http 3000

これは、ローカルマシンのポート3000で実行されているすべてのWebサイトのパブリックURL(HTTPおよびHTTPS)を作成します。

を使用する。 ngrok ウェブ・インターフェース http://localhost:4040 のURLをメモしておく。 ngrok を提供する。

あなたのところへ アカウント設定 ページにアクセスし、"Inbound Messages "テキストボックスにウェブフック・エンドポイントの完全なURLを入力してください。例えば ngrok その場合、URLは以下のようになる:

https://33ab96a2.ngrok.io/webhooks/inbound-sms

を選択してください。 POST HTTP メソッド" ドロップダウンリストから、Vonage がお客様のアプリケーションがメッセージの詳細を POST をリクエストする。

チャットを開始する

を作る POST リクエストをアプリケーションの /chat エンドポイントに、ユーザーの実数をリクエスト・パラメータとして渡します。

を使うこともできる。 ポストマン または curl コマンドを次のように置き換える。 USERA_REAL_NUMBER そして USERB_REAL_NUMBER あなたのユーザーの実際のNumbersで:

curl -X POST \ 'http://localhost:3000/chat?userANumber=USERA_REAL_NUMBER&userBNumber=USERB_REAL_NUMBER'

チャットを続ける

各ユーザーは、アプリケーションのバーチャル番号からテキストを受け取る。ユーザーがその番号に返信すると、それは相手の実際の番号に届くが、バーチャル番号から来たように見える。

結論

このチュートリアルでは、SMSプロキシを構築して、2人のユーザーが相手の本当の番号を見ることなくSMSをやり取りできるようにする方法を学びました。

次はどこだ?

このサンプル・アプリケーションを拡張して、同じバーチャル番号を使って複数のチャットをホストすることもできます。 SmsProxy.createChat() をインスタンス化し、別の chat オブジェクトを用意することができる。例えば chat に対する userA そして userB 会話するためと userC そして userD.

現在のチャットをすべて確認できるルートを作成し、チャットが終了したら終了させることもできる。

以下のリソースは、このチュートリアルで学んだことの詳細を知るのに役立ちます: