送信し、ノード、nexmo、およびfirebase関数でSMSメッセージを受信する


Firebaseプラットフォームでは、開発者がアプリケーションのバックエンドを迅速に構築できます.また、それを使用するのも楽しいです.このチュートリアルでは、いくつかのSMSのメッセージングのためのそれを使用して起動したいNexmo . このウォークスルー後、SMSメッセージログを作成することができますし、送信者への応答を使用してFirebase Functions そして、Nexmo SMS APIと並んでFirestore.

始める前に


あなたが行くためにいくつかの項目が必要になります-ので、瞬間を取ると、これらの両方の準備ができていることを確認します.
  • Firebase
  • Nexmo
  • Firebaseの設定


    最初のステップはFireBaseプロジェクトをセットアップすることです.FireBaseコンソールを使用して新しいプロジェクトを設定する手順を次に示します.

    FireBaseプロジェクトを作成する

  • 移動するFirebase console
  • プロジェクトを追加
  • 名前を追加して
  • Google Analyticsをオンにし、続行をクリックします(必須ではありません)
  • をクリックし、[プロジェクトの作成]をクリックします
  • プロジェクトを作成するビットを待ちます
  • 課金タイプを下に設定します⚙️ -> 使用方法と請求-詳細&設定する炎.あなたが行くプランは、サードパーティAPIを使用する必要があります.Googleとの請求に関する詳細についてはhere .

  • 設定するGoogle Cloud Platform (GCP) resource location イン⚙️ -> Project Settings
  • Firebaseツールのインストール


    Firebaseで行う必要がありますほとんどすべてのコマンドラインから直接提供するツールセットを使用して行うことができます.
  • NPMでFireBaseツールをインストールします
  •  npm install -g firebase-tools
    
  • Firebaseへのログインfirebase login . ログインプロセスは認証用ブラウザを開きます.
  • ローカル環境の設定


    FireBase関数を記述するにはいくつかの初期化作業が必要です.
  • プロジェクトフォルダを作成するmkdir nexmo-project && cd nexmo-project
  • firebase関数の初期化firebase init functions
  •      ######## #### ########  ######## ########     ###     ######  ########
         ##        ##  ##     ## ##       ##     ##  ##   ##  ##       ##
         ######    ##  ########  ######   ########  #########  ######  ######
         ##        ##  ##    ##  ##       ##     ## ##     ##       ## ##
         ##       #### ##     ## ######## ########  ##     ##  ######  ########
    
    You're about to initialize a Firebase project in this directory:
    
     /your_folders/your-project-name
    
    
    === Project Setup
    
    First, let's associate this project directory with a Firebase project.
    You can create multiple project aliases by running firebase use --add,
    but for now, we'll just set up a default project.
    
    ? Please select an option: (Use arrow keys)
    ❯ Use an existing project
     Create a new project
     Add Firebase to an existing Google Cloud Platform project
     Don't set up a default project
    
    既にダッシュボードにプロジェクトを作成したので、選択できますUse an existing project これは、希望するプロジェクトを選択するプロンプトが表示されます.あなたがこれをしなかったならばCreate a new project そして、それを作成するユニークな名前を与えます.あなたはまだ場所と請求を更新するコンソールに行く必要がありますが、FireBaseプロジェクトを作成する別のオプションです.
  • 作成したプロジェクト名を選択します
  • を選択
  • あなたが望むならば、eslintのためにYを選んでください
  • すべての依存関係をインストールする
  • これらのステップは、FireBase関数をビルドし、すべての依存関係をインストールするために必要なフォルダーとファイルを作成します.NPMが完了すると、functions ディレクトリとオープンindex.js お気に入りのエディタでコードを追加を開始します.

    最初の関数


    あなたが作成する最初の機能は、キャプチャし、Nexmoから着信SMSメッセージをログに記録するフックとして動作します.
    The index.js ファイルには、必要なコードがいくつかあります.すべてを削除し、次のコードを追加するには、先頭に開始します.
    const functions = require('firebase-functions');
    const admin = require('firebase-admin'); 
    
    // Initialize Firebase app for database access
    admin.initializeApp();
    
    呼び出しadmin.initializeApp(); 関数を読み込み、FireBaseリアルタイムデータベースに書き込むことができます.次に、次のメソッドを使用して関数を作成します.
    // This function will serve as the webhook for incoming SMS messages,
    // and will log the message into the Firebase Realtime Database
    exports.inboundSMS = functions.https.onRequest(async (req, res) => {
      await admin.database().ref('/msgq').push(req.body);
      res.send(200);
    });
    
    The inboundSMS メソッドはHTTPSリクエストをリッスンします.firebase関数はreq.body そして、/msgq ログとしてのリアルタイムデータベースのオブジェクト.
    我々は使用しているのでreq.body , WebhookはAである必要がありますPOST Method . あなたが好むならばGET NEXMOウェブフックのための方法req.query , とgetメソッドは同じように動作します.
    ファイルを保存するように書かれたコードがあるので、この関数をFireBaseに配備します.
    firebase deploy --only functions
    
    === Deploying to 'nexmo-project'...
    
    i deploying functions
    Running command: npm --prefix "$RESOURCE_DIR" run lint
    
    > functions@ lint /Users/kellyjandrews/Google Drive/Apps/nexmo-project/functions
    > eslint .
    
    ✔ functions: Finished running predeploy script.
    i functions: ensuring necessary APIs are enabled...
    ✔ functions: all necessary APIs are enabled
    i functions: preparing functions directory for uploading...
    i functions: packaged functions (38.78 KB) for uploading
    ✔ functions: functions folder uploaded successfully
    i functions: creating Node.js 8 function inboundSMS(us-central1)...
    ✔ functions[inboundSMS(us-central1)]: Successful create operation.
    Function URL (inboundSMS): https://us-central1-nexmo-project.cloudfunctions.net/inboundSMS
    
    ✔ Deploy complete!
    
    Project Console: https://console.firebase.google.com/project/nexmo-project/overview
    
    出力からの重要な部分はFunction URL (inboundSMS) . このURLはNEXMOのウェブフックをセットアップする必要があります.

    NEXMOの設定


    Nexmoを設定するにはいくつかの簡単な手順があります-すべてのコマンドラインから行われます.
  • CLIをインストールする
  •  npm install -g nexmo-cli
    
  • APIキーと秘密をダッシュボードから設定しますhttps://dashboard.nexmo.com/getting-started-guide
  • 新しい電話番号を購入する
  •  nexmo number:buy --country_code US
    
  • このコマンドは、米国で最初の利用可能な電話番号を取得します.NEXMO番号の詳細については、[数ドキュメンテーション]を見ることができますhttps://developer.nexmo.com/numbers/overview
  • タイプを確認し
  • このコマンドを使用して、ウェブフックに電話番号をリンクします
  •  nexmo link:sms YOUR_NUMBER YOUR_FUNCTION_URL
    
    メッセージを取得していることを確認するには、新しい関数をテストし、完全に提供するために数秒のプロセスを与えます.
    携帯電話をつかむし、電話番号にメッセージを送信します.FireBaseコンソールを開き、database ページを参照してください.

    着信メッセージをログする方法があるので、受信メッセージで何かをする機能を書くことができます.

    送信関数の作成


    これまで、あなたはインバウンドSMSメッセージを取り込むためのNexmo電話番号にリンクされているFirebase機能を作成しました.FireBase機能は、データベースの更新に反応することができます.新しいエントリで、コードは元のテキストのエコーを送信します.
    依存関係リストにnexmoを追加して起動しますfunctions ディレクトリ
    npm i nexmo --save
    
    FireBase設定に次の環境変数を追加します
    firebase functions:config:set nexmo.api_key="YOUR_KEY" nexmo.api_secret="YOUR_SECRET"
    
    次はオープンindex.js 追加nexmo 先頭の要件に、環境変数をインポートしてnexmoを初期化します.
    const functions = require('firebase-functions');
    const admin = require('firebase-admin');
    const Nexmo = require('nexmo');
    
    // Initialize Firebase app for database access
    admin.initializeApp();
    
    // get Firebase environment variables for Nexmo
    const {
      api_key,
      api_secret
    } = functions.config().nexmo;
    
    // Initialize Nexmo with application credentials
    const nexmo = new Nexmo({
      apiKey: api_key,
      apiSecret: api_secret
    });
    
    これで、FireBaseのレスポンスを送信するための新しい関数を作成できます.
    // This function listens for updates to the Firebase Realtime Database
    // and sends a message back to the original sender
    exports.sendSMS = functions.database.ref('/msgq/{pushId}')
      .onCreate((message) => {
        const { msisdn, text, to } = message.val();
        // the incoming object - 'msisdn' is the your phone number, and 'to' is the Nexmo number
        // nexmo.message.sendSms(to, msisdn, text);
        return nexmo.message.sendSms(to, msisdn, `You sent the following text: ${text}`, (err, res) => {
          if (err) {
            console.log(err);
          } else {
            if (res.messages[0]['status'] === "0") {
              console.log("Message sent successfully.");
            } else {
              console.log(`Message failed with error: ${res.messages[0]['error-text']}`);
            }
          }
        })
      });
    
    新しい機能は、新しいメッセージを監視します/msgq データベースオブジェクト.トリガされると、完全なnexmoオブジェクトはmessage . このオブジェクトはmsisdn , これは発信元電話番号です-この場合、あなたのto 番号は、あなたが購入したNexmo仮想番号です.
    手で電話番号だけでなく、テキストメッセージを使用すると、今何かの数を行うことができます.あなたは、キーワードに基づいて特定のデータに応答するルックアップテーブルを作成することができます、別のシステムに転送したり、我々のケースでは、元のメッセージを送信します.
    コマンドラインから再びfirebase関数を展開します.
    firebase deploy --only functions
    
    グラブあなたの携帯電話、別のメッセージを送信し、あなたは何かのように見える応答バックを取得する必要がありますYou sent the following text: Test message .

    包む


    これで、このチュートリアルのすべての手順が完了しました.あなたは完全なコードを見ることができますGithub .
    メッセージを送受信する最初のステップが完了した今、私の次のいくつかの記事は、この概念を取り、テキストメッセージを介して私のホームオートメーションのいくつかを制御するためにそれを展開します.私は、あなたが私に私にメッセージを送って、私に知らせさせることを計画するものを聞くのが好きです.

    更なる読書

  • 開発者向けのドキュメントをチェックアウトhttps://developer.nexmo.com
  • Nexmo SMS機能についての詳細https://developer.nexmo.com/messaging/sms/overview
  • Firebase関数から始めるhttps://firebase.google.com/docs/functions/get-started
  • 郵便Send and Receive SMS Messages with Firebase Functions 最初に現れたNexmo Developer Blog .