https://a.storyblok.com/f/270183/95035/80e886b213/e_sms-messages_azure_1200x600-1.jpg

Node.jsとAzure FunctionsでSMSメッセージを送受信する方法

最終更新日 November 11, 2020

所要時間:1 分

このブログ記事は 応用クラウドストーリーイニシアティブの一環です。

WebhookはAPIの世界ではますますポピュラーになってきており、Vonageでもかなりの数のAPIで使用している。そのため、私はかなりの数のWebhookを書くことになる。私はNode.jsのファンなので、以前はそのほとんどをExpressで書いていた。ウェブサーバーを立ち上げて、それをどこかにデプロイするのは面倒だったので、代替手段を探し始めました。Serverlessは良い選択肢の1つとして私のリサーチで何度も出てきたので、Azure Functionsを使ってみようと思った。 Azure FunctionsとNode.jsを使ってSMSメッセージを送受信しようと考えた。

SMSにはVonageの SMS APIを使えば、世界中どこでも大量のSMSを送受信できる。バーチャル電話番号を取得したら、APIを使って送信メッセージ("送信")と受信メッセージ("受信")を管理できる。

この記事では、以下の方法で SMS メッセージを送受信する方法を学びます。 Node.jsとAzure Functions アプリ.

このチュートリアルのコードは GitHub.

前提条件

始める前に、あなたが持っていることを確認してください:

Azure Functionsアプリのセットアップ

Azure Functions Appをセットアップする方法はいくつかある。私は Azure ポータル.

Create Azure Functions AppCreate Azure Functions App

名前は send-receive-smsと名付け、新しいリソースを作成し、ランタイムとしてNode.jsを選択した。デプロイメント、リージョン、プランに関してはデフォルトを選択した。

デプロイが完了したら(通常2分程度)、新しく作成されたリソースに移動し、最初の関数を作成することができます。ウィザードがこのプロセスを手助けしてくれます。 VSコードを開発環境として選択し、デプロイ方法として "Direct publish "を選択した。これで、VS Code for Azureのセットアップ方法が表示された。

Create Azure Function quickstartCreate Azure Function quickstart

セットアップが終わったら、最初の関数、HTTPトリガーを作った。私はこれを inboundしかし、好きな名前を使うことができる。Function "には関数ベースのAPIキーが必要で、"Admin "にはAzureのマスターAPIキーが必要で、"Anonymous "にはAPIキーは必要ない。私は "Anonymous "をセキュリティ・メカニズムとして選択した。これで、デフォルトのテンプレートで新しいファイルが作成された。

Create Azure Function templateCreate Azure Function template

SMSメッセージを受信する

Webhook関数を作成する

と一致するように関数の内容を置き換えた。 SMSを受信するコードスニペットのコードスニペットと同じです。これはリクエストのボディとクエリパラメータを組み合わせ、コンソールにログを記録します。これは、VonageプラットフォームでSMSメッセージを受信するために使用できるシンプルなWebhookです。

module.exports = async function(context, req) {
    const params = Object.assign(req.query, req.body);

    if (params.text) {
      context.log("SMS received", params);
    }

    context.res = {};
  };

デプロイ機能

VonageはパブリックURLにアクセスできる必要があるため、Azureを使って関数をデプロイした。これはVS Codeでできる。デプロイが完了すると、関数のライブURLが返ってくる。 https://send-receive-sms.azurewebsites.net/api/inbound.

Deploy Azure FunctionDeploy Azure Function

インバウンドURLの設定

VonageプラットフォームでSMSメッセージを受信するには、Vonage番号を所有している必要があります。お持ちでない場合は Vonageダッシュボード:

Buy Vonage Phone NumberBuy Vonage Phone Number

Vonageの電話番号がSMSメッセージを受信すると、VonageはそのメッセージをNexmoダッシュボードで指定したWebhookに渡します。ここではAzure Functionを受信Webhookとして使用します。WebhookのURLを設定するには、Nexmoダッシュボードの電話番号の横にある小さな歯車のアイコンに進みます。 Nexmoダッシュボードの電話番号の横にある小さな歯車のアイコンからをクリックし、"Inbound Webhook URL "フィールドにAzureファンクションのデプロイ後に取得したURLを入力します。 https://send-receive-sms.azurewebsites.net/api/inbound).

Set Inbound Webhook URL on the Vonage DashboardSet Inbound Webhook URL on the Vonage Dashboard

携帯電話からVonageの電話番号にSMSを送ると、Azureのファンクションログに表示されるので、動作テストができます。

SMSメッセージの送信

SMSメッセージのログを取るだけでなく、SMSメッセージにも反応するようにしたい。

SMSメッセージの送信にVonage Node.js SDKを使うので、Azure関数にインストールする必要がある。関数のトップレベルのフォルダには package.jsonファイルがあります。そのため、ターミナルでそのフォルダに移動して npm install nexmoを使用すると、Azureファンクション内のVonage SDKにアクセスできるようになります。

また、Vonage SDKを初期化し、SMSメッセージを絵文字に変換し、SMSとして元の送信者に送り返す関数も更新しました。

module.exports = async function(context, req) {
  const Nexmo = require("nexmo");

  const nexmo = new Nexmo({
    apiKey: process.env["NEXMO_API_KEY"],
    apiSecret: process.env["NEXMO_API_SECRET"]
  });

  const params = Object.assign(req.query, req.body);

  if (params.text) {
    var response = [];

    // transform inbound SMS into emojis
    for (let i = 0; i < params.text.length; i++) {
      const emoji = String.fromCodePoint(127715 + params.text.charCodeAt(i));
      response.push(emoji);
    }

    // send SMS back with emojis
    nexmo.message.sendSms(
      params.to,
      params.msisdn,
      response.join(""),
      {
        type: "unicode"
      },
      (err, responseData) => {
        if (err) {
          context.log(err);
        } else {
          if (responseData.messages[0]["status"] === "0") {
            context.log("Message sent successfully.");
          } else {
            context.log(
              `Message failed with error: ${responseData.messages[0]["error-text"]}`
            );
          }
        }
      }
    );
  }

  context.res = {};
};

私のコードがVonage SDKを初期化していることにお気づきだろう。 process.env["NEXMO_API_KEY"]そして process.env["NEXMO_API_SECRET"].Azure Function AppにはApplicationの設定があり、そこに私の NEXMO_API_KEYNEXMO_API_SECRETを追加し、ローカルマシンからデプロイするたびに更新しています。同様に、これらの値を実際のAPIキーとシークレットに置き換えることもできます。これらの値は、Vonage Dashboardの "Getting Started "ページにあります。 Vonageダッシュボード.

Add Application Settings in AzureAdd Application Settings in Azure

SMSを送信するためのSDKメソッド、 nexmo.message.sendSms()は、送信者ID、受信者の電話番号、テキストメッセージ、オプションをパラメータとして受け取ります。オプションに {type: "unicode"}をオプションに追加しています。また、APIリクエストが完了したときに呼び出されるコールバックも受け取ります。

レスポンス・データには、送信されたすべてのメッセージの配列と、そのステータスに関する情報が含まれる。たいていの場合、その配列の要素は1つですが、SMSが160文字より長かった場合は、マルチパートのSMSに分割され、その配列には送信された各パートのデータが含まれます。メッセージのステータスが 0 ならば SMS は正常に送信されたことになり、そうでなければメッセージのエラーデータはメッセージの error-textプロパティにあります。

私のテキストには絵文字が入っているので、オプション・オブジェクトでタイプ unicodeとしてネットワークに送信されます。 ?.

試してみる

携帯電話からVonage番号にSMSメッセージを送信します。テキスト文字を絵文字に変換したSMSメッセージが返ってくるはずです。もし Hello World!をSMSで送信すると、🌷🍈🌃🍈🍗🍗🍈🍕🍈🌑が返ってくるはずです。

Received SMS message with VonageReceived SMS message with Vonage

VonageAPI、Azure Functions、Node.jsを使ってSMSメッセージを送受信する方法を学んでいただけたと思います。

シェア:

https://a.storyblok.com/f/270183/384x384/dabe7c5397/laka.png
Alex Lakatosヴォネージの卒業生

Alex Lakatos は Nexmo の JavaScript デベロッパーアドボケイトです。余暇には Mozilla で Tech Speaker や Reps Mentor としてボランティアをしている。オープンウェブでJavaScriptを開発する彼は、日々その限界を押し広げている。ロンドンでプログラミングをしていないときは、世界中を旅するのが好きなので、空港のラウンジでばったり会うこともある。