SMS認証基盤を手軽に自作する C#で作ってみた Twilio編

SMSをC#から送りたい

SMSをプログラム的に送りたい。手軽に作りたい方へ手順をまとめてみました。

Twilioプラットフォームを利用すると、驚くほど簡単にSMSが送れます。それも、無料のトライアルアカウントで、試験できるのでこれは必見です。

Visual Studio 2017を利用しており、C#からコンソールアプリを作ってSMSを送った時のメモです。

Twilioを利用してみる

Twilioでは、SMS送信APIを準備して、簡単に自分のアプリケーションにSMS送信機能を組み込めるように準備があるプラットフォームになっています。

無料でトライアルアカウントも作成できるし、月額無料・初期費用無料なので気軽に試せます。

無料アカウントの作成

Twilioのページで

無料アカウントを作成します。

クレジットカードの登録不要です。

途中から英語だったので、メモ

登録完了

登録が完了すると、ダッシュボードが表示されます。

サンプルを見ながら

手順を追っていきます。

電話番号の取得

電話番号を取得しますが、日本の電話番号だと、Voiceしか有効になっていません。音声通話認証などしか利用できなさそうです。

Buy a Numberページで、COUNTRYを United States にすると、SMSにチェックができるようになります。

この状態でSearchボタンを押すと、利用できる電話番号の一覧が表示されます。

無料枠が500円与えられているので、その枠内で、月額150円ほどの電話番号を購入する事ができます。気に入った番号をBuyします。

C#および.NETでSMSおよびMMSメッセージを送信する

こちらのサンプルコードに従って、実装してみます。

コンソールアプリケーションを作成し、

Nugetします。

Twilio = Twilio REST API helper library

これがSMS送信のためのAPIです。

サンプルコードのまま実装するとこんな感じ

using System;
using Twilio;
using Twilio.Rest.Api.V2010.Account;


class Program
{
    static void Main(string[] args)
    {
        // Find your Account Sid and Token at twilio.com/console
        // and set the environment variables. See http://twil.io/secure
        string accountSid = Environment.GetEnvironmentVariable("SIDをここに");
        string authToken = Environment.GetEnvironmentVariable("AUTHトークンをここに");

        TwilioClient.Init(accountSid, authToken);

        var message = MessageResource.Create(
            body: "This is the ship that made the Kessel Run in fourteen parsecs?",
            from: new Twilio.Types.PhoneNumber("+15017122661"),
            to: new Twilio.Types.PhoneNumber("+15558675310")
        );

        Console.WriteLine(message.Sid);
    }
}

 

この通りに実装すると、[Username can not be null]というエラーメッセージが表示されてSMS送信されません。

なんでかなぁ。Environment.GetEnvironmentVariableで、Stringに格納している文字列がNullになっているので、直接文字列指定してあげるとSMSが送信されました。

using System;
using Twilio;
using Twilio.Rest.Api.V2010.Account;

namespace TwilioSMS
{
    class Program
    {
        static void Main(string[] args)
        {
            TwilioClient.Init("ここにSID", "ここにAuthトークン");

            var message = MessageResource.Create(
                body: "This is the ship that made the Kessel Run in fourteen parsecs?",
                from: new Twilio.Types.PhoneNumber("取得した電話番号"),
                to: new Twilio.Types.PhoneNumber("SMSを送信する電話番号")
            );

            Console.WriteLine(message.Sid);
        }
    }
}

 

SID , AuthToken,取得した電話番号は、Twilio Consoleから確認できます。

こんなメッセージが届きます。

日本語の送信も可能です。

※注意 トライアルアカウントで、SMS送信できる電話番号は、トライアルアカウント作成時に認証した携帯電話番号だけです!

※注意 トライアルアカウントでは文頭に「Sent from your Twilio traial account」という文字列がつきます。

TwilioのRESTAPIとTwilioSMSを使用してワークフローを自動化

.Net のAPIをダウンロードします。

登録初期時点で出てくる、このサンプルコードはTwilioのRESTAPIとTwilioSMSを使用してワークフローを自動化するバケーションレンタルサイトのホームページになっています。

一応動き始めたのでメモしておいたのですが、特に使わなくてもいいように思います。

TwilioのRESTAPIとTwilioSMSを使用してワークフローを自動化するサンプルコード

サンプル

.Net APIをVisualStudioで開きます。先ほどダウンロードした、airtng-csharp-masterフォルダの中[AirTNG.sln]を開きます。

Local.configファイルを追加します

Local.configの中身はこんな感じです。

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.5.1" />
    <httpRuntime targetFramework="4.5.1" />
  </system.web>

  <appSettings>
    <add key="TwilioAccountSid" value="SIDをここに設定" />
    <add key="TwilioAuthToken" value="AuthTokenをここに設定" />
    <add key="TwilioPhoneNumber" value="電話番号を設定" />
  </appSettings>
  
</configuration>

 

SIDとAuthToken、電話番号はダッシュボードにて確認できます

ASP.netからSMS送信してみる

ASP.NET Webアプリケーションを新規作成して、SMSを送ることができるかテストしてみます。

Nuget パッケージの管理でTwilioをインストール

Webフォームを作成する

Webフォームにボタンを配置

ボタンイベントにTwilio送信プロセスを設定

protected void Button1_Click(object sender, EventArgs e)
{
    // Find your Account Sid and Token at twilio.com/console
    // and set the environment variables. See http://twil.io/secure

    TwilioClient.Init("SIDを設定", "AUTHトークンを設定");

    var message = MessageResource.Create(
        body: "日本語送信のテストです",
        from: new Twilio.Types.PhoneNumber("取得した電話番号を設定"),
        to: new Twilio.Types.PhoneNumber("送信先の携帯電話番号を設定")
    );
}

 

Trialアカウントそのままにしておくとアカウント停止状態になる

電話番号を取得してそのままにしておくと、

こんな感じで一時停止状態になってしまいました。

この状態になると、

trial mode のままでは支払いができないようで、Upgrade Nowしなければ引き続きの利用はできないです。

trialで取得した電話番号は、約110円の月額基本料がかかります。これは為替の関係で、140円や150円くらいになる事もあり、トライアルで電話番号を取得しそのまま放置すると、500円のトライアル枠を使い切り、費用が発生するようになります。

*注2:1ドル=110円を想定。実際の為替レートにより変動致します。

無料でもっと試したい

新しいプロジェクトを作成します

すると、また500円の枠がもらえます。テスト開発中はこれでいいかなって感じです。費用をかけずに開発できるのはありがたいです。