LoginSignup
3
2

More than 5 years have passed since last update.

Azure Function から Twilio Programmable API を使って SMS 通知を送信する

Last updated at Posted at 2019-02-09

データが格納された時、システムに何かイベントが発生したとき、簡単に携帯にメッセージが送れると便利かな...ということで Azure Function (または Azure Logic App) + Twilio を使って SMS 通知を送る方法を (今更) 解説します。

準備

Twilio アカウント

(無償の) Trial Account でとりあえず大丈夫です。Trial Account の制限 (注意点) として、アカウント作成時に携帯電話 (SMS または 音声) で認証を行う (verification code を取得する) のですが、その認証に利用した携帯電話のみに SMS を送信可能、というところです (その携帯電話以外に送りたい場合は有償版に Upgrade が必要)。

Twilio Phone Number

Twilio Phone と呼ばれる電話番号を取得すると、そちらを発信元として SMS や音声を送受信できます。(今回は SMS 送信のみですが...)
Trial Account でも無料で取得することができます。International SMS / Call にならないように日本の番号を選びましょう。
ただし、SMS を送信したい場合は US (+1) の番号を取得する必要があります。

Twilio SDK

今回は C# を利用します。Visual Studio から Nuget で取得しますので、ライブラリーの個別ダウンロードは不要です。もし内容などを確認したい方はこちらにあります。
Github > Twilio / Twilio-csharp

開発ツール

Visual Studio 2017 or Visual Studio Code (いずれも無償版でOKです。)
Azure Functions Tools (Visual Studio 2017 用 / Visual Studio Code 用) を追加インストールしておきます。

Microsoft アカウント & Azure サブスクリプション

準備方法 をご覧ください

手順

Twilio で 携帯電話に SMS を送るための準備

以下を確認し、ローカルに保存しておきます。
- AccountID
- AuthToken
- Twilio Phone Number (※国番号から。今回は US 番号なので "+1")

Twilio Messaging API の動作確認

Twilio コンソールから SMS 送信確認

アカウントにサインインしていると、AccountID, AuthToken の情報などは自動入力されています。以下の情報を入力 and/or 確認して、SMS を送信します。

  • To : SMS 送信先 (※ Trial Account の場合は、アカウント登録時に使用した携帯電話番号のみ)
  • From : 取得した Twilio Phone の番号
  • Body : SMS で送りたい本文

※ To および From の電話番号は国番号から入力する必要があります。

Rest API ツールから Twilio API の動作確認

Postman などお好みの Rest API テストツールで確認を行います。

Twilio API の Base URL はこちらになります。
https://api.twilio.com/2010-04-01

挙動の確認として、以下のように AccountID と AuthToken をバインドして API 送信が可能です。
https://[AccountID]:[AuthToken]@api.twilio.com/2010-04-01

Account の情報の取得

https://[AccountID]:[AuthToken]@api.twilio.com/2010-04-01/Account

Response 200 が返されれば動作確認は OK です。

SMS 送信

https://[AccountID]:[AuthToken]@api.twilio.com/2010-04-01/Accounts/[AccountID]/Messages
Get の場合、Header に電話番号をバインドします。
- From: 発信元電話番号
- To: 送信先電話番号

Response 200 が返されれば動作確認は OK です。(実際には SMS が送られてこなかったりしますが問題ありません)

C# アプリケーションから Twilio API の動作確認

簡単なコンソールアプリから C# ライブラリーを使った SMS 送信を確認します。
C# コンソールアプリを作成し、NuGet で Twilio というライブラリーを追加します。
Twilio コンソールで表示されるソースコードをコピーすればOKです。
Program.cs は以下のようなコードになります。

Program.cs
using System;
using System.Collections.Generic;
using Twilio;
using Twilio.Rest.Api.V2010.Account;
using Twilio.Types;

namespace HelloTwilio_201902
{
    class Program
    {
        private static string _accountSid = "YOUR_ACCOUNT_SID";
        private static string _authToken = "YOUR_AUTH_TOKEN";

        static void Main(string[] args)
        {
            TwilioClient.Init(_accountSid, _authToken);
            var message = MessageResource.Create(
              to: new PhoneNumber("YOUR_MOBILE_NUMBER"),
              from: new PhoneNumber("YOUR_TWILIO_NUMBER"),
              body: "こんにちは!Twilo から SMS メッセージを送るよ!");
            Console.WriteLine($"Success. message.Sid=" + message.Sid);
            Console.ReadKey(); //SMS 送信した後、ウインドウを開いたままにする

        }
    }
}

Azure Function から Twilio Messaging API で SMS を送る

TimerTrigger と呼ばれる指定した時間に起動する Function を使って SMS を送信してみます。

Visual Studio で新規プロジェクトを作成し、Azure Function を作成します。
Trigger には TimerTrigger を選択します。とりあえずデフォルト (毎時0分から5分ごと) で設定します。

先ほどと同様に、NuGet から Twilio パッケージを追加しておきます。

デフォルトで作成されている Function (functions1.cs) を以下のように書き換えます

functions1
using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
// 追加
using System.Net.Http;
using Twilio;
using Twilio.Rest.Api.V2010.Account;
using Twilio.Types;


namespace AzFuncSMSNotify201902
{
    public static class Function1
    {
        // Twilio アカウント情報、携帯電話情報を仮にこちらで設定します
        private static string _accountSid = "YOUR_ACCOUNT_SID";
        private static string _authToken = "YOUR_AUTH_TOKEN";
        private static string _fromPhoneNumber = "YOUR_TWILIO_NUMBER";
        private static string _toPhoneNumber = "YOUR_MOBILE_NUMBER";

        // HTTP リクエストを送信するための HTTP Client を作成しておきます
        private static HttpClient client = new HttpClient();

        [FunctionName("Function1")]
        public static void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, ILogger log)
        {
            log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");

            // SMS を送信する
            TwilioClient.Init(_accountSid, _authToken);
            var twilioMessage = MessageResource.Create(
                to: new PhoneNumber(_toPhoneNumber),
                from: new PhoneNumber(_fromPhoneNumber),
                body: $"ローカル時間をお知らせします: {DateTime.Now}"
            );

        }
    }
}

こちらをビルドして実行します。携帯電話に SMS メッセージが送られてくれば動作確認完了です。

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2