
シェア:
Alex Lakatos は Nexmo の JavaScript デベロッパーアドボケイトです。余暇には Mozilla で Tech Speaker や Reps Mentor としてボランティアをしている。オープンウェブでJavaScriptを開発する彼は、日々その限界を押し広げている。ロンドンでプログラミングをしていないときは、世界中を旅するのが好きなので、空港のラウンジでばったり会うこともある。
Node.jsとAzure FunctionsでSMSメッセージを送受信する方法
このブログ記事は 応用クラウドストーリーイニシアティブの一環です。
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アカウント
Node.jsマシンにインストールされている
Azure Functionsアプリのセットアップ
Azure Functions Appをセットアップする方法はいくつかある。私は Azure ポータル.
Create Azure Functions App
名前は send-receive-smsと名付け、新しいリソースを作成し、ランタイムとしてNode.jsを選択した。デプロイメント、リージョン、プランに関してはデフォルトを選択した。
デプロイが完了したら(通常2分程度)、新しく作成されたリソースに移動し、最初の関数を作成することができます。ウィザードがこのプロセスを手助けしてくれます。 VSコードを開発環境として選択し、デプロイ方法として "Direct publish "を選択した。これで、VS Code for Azureのセットアップ方法が表示された。
Create Azure Function quickstart
セットアップが終わったら、最初の関数、HTTPトリガーを作った。私はこれを inboundしかし、好きな名前を使うことができる。Function "には関数ベースのAPIキーが必要で、"Admin "にはAzureのマスターAPIキーが必要で、"Anonymous "にはAPIキーは必要ない。私は "Anonymous "をセキュリティ・メカニズムとして選択した。これで、デフォルトのテンプレートで新しいファイルが作成された。
Create 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 Function
インバウンドURLの設定
VonageプラットフォームでSMSメッセージを受信するには、Vonage番号を所有している必要があります。お持ちでない場合は Vonageダッシュボード:
Buy 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 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_KEYと NEXMO_API_SECRETを追加し、ローカルマシンからデプロイするたびに更新しています。同様に、これらの値を実際のAPIキーとシークレットに置き換えることもできます。これらの値は、Vonage Dashboardの "Getting Started "ページにあります。 Vonageダッシュボード.
Add 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 Vonage
VonageAPI、Azure Functions、Node.jsを使ってSMSメッセージを送受信する方法を学んでいただけたと思います。