C#でRCSとSendGridを活用したプロモーションキャンペーンを作成する方法

March 31, 2026
執筆者
レビュー担当者

AI生成による要約
  • RCSとSendGridを組み合わせることで、チャネルの境界を超えた一貫性のあるマーケティングキャンペーンを展開できます。
  • インタラクティブなメッセージにはRCSを、メールの自動送信にはSendGridを、それぞれ設定します。
  • これら2つのチャネルを.NETアプリケーションに組み込むことで、一貫性のあるメッセージ配信を実現できます。

この要約は、AIにより生成されました。

C#でRCSとSendGridを活用したプロモーションキャンペーンを作成する方法

2026年、顧客の関心を獲得し、それを維持し続けることは、かつてないほど難しくなっています。現代のプロモーションキャンペーンは、単にSMSやメールを送信して終わりではありません。それは、多様なチャネルが巧みに連携し合う「綿密に構成されたダンス」のようなものです。SMSもメールも、それぞれがマーケティング施策を広めるための重要な手段です。より大きなインパクトを生み出すには、メールテンプレートとRCSリソースを効果的に組み合わせ、ブランド全体で一貫した世界観を演出することが大切です。

この短いチュートリアルでは、Twilio SendGridとRCSを.NET 10と組み合わせ、一貫性のあるマーケティングキャンペーンを構築する方法を解説します。RCSを使用したアプローチと同じスタイルのメール配信を実装し、効果的に顧客へアプローチする手法を身に付けることができます。さぁ、始めましょう。

RCSとは?

RCSカードは、リッチメディアやインタラクティブな要素を組み込めるメッセージです。RCSは、ブランド名と認証済みの送信者ID、タイトル、画像、インタラクティブなコンテンツなどの機能をサポートすることで、従来のSMSを強化し、消費者にとってより魅力的でインタラクティブなメッセージ体験を提供します。

RCSを使用したことがない方は、事前にメッセージングチャネルのRCSとSMSの違いについて解説した記事をご覧ください。

なお、RCSメッセージングは対応デバイスおよび対応キャリアでのみご利用いただけます。受信者の環境がRCSに対応していない場合、Twilioはテンプレートのtwilio/textセクションで設定されたフォールバック用のテキストメッセージ(SMS)を自動的に配信します。

SendGridとは?

SendGridは、Twilioが提供するメール配信プラットフォームです。SendGridを活用することで、効果的なメールマーケティングキャンペーンを簡単に設計、自動化、配信することができます。シンプルなトリガーによる自動配信はもちろん、ドラッグ&ドロップ形式のテンプレートエディタを使って簡単に直感的なマーケティングメールを作成できます。

これらの2つのサービスは、クロスチャネルマーケティングキャンペーンにおいて、相互に連携して効果的に機能します:

  • RCS(リッチコミュニケーションサービス): RCSは、SMSの機能を拡張したものです。高解像度のカルーセル表示、「返信候補」ボタン、信頼性を高める認証済み送信者ブランディングなどを実現でき、即座にクリックを促したい場面に最適です。
  • SendGrid: 一方で、長文のストーリーをじっくり伝えるにはメールが適しています。RCSの写真で興味を惹きつけた後は、メールを通じてカタログの全ラインナップやブランドの想い(「当社について」といったストーリー)を届けます。

RCS/SendGridキャンペーンの作成

まず、以下を準備してください。

  • Twilioアカウント(サインアップはこちら)
  • SendGridアカウント(同一のTwilioアカウントを使用可能)
  • RCSサービスが利用できない場合のSMS送信用のTwilio電話番号
  • RCSメッセージを受信できるデバイス
  • 開発マシンにインストール済みの.NETフレームワーク

RCS送信者のセットアップ

このチュートリアルは、「How to Send an RCS Message with C# .NET and Twilio」(TwilioとC# .NETを用いたRCSメッセージの送信方法)をベースにしています。そのチュートリアルでは、RCS送信者のセットアップ手順について、スクリーンショットを使って詳しく解説しています。このチュートリアルを進める前に、画面例に従ってTwilio RCSダッシュボードでRCS送信者をセットアップしてください。事前準備として、RCS送信者用のロゴ画像とテスト用デバイスを用意してください。チュートリアル後半のテストまで続けられるよう、デバイスをRCSテスターとしてセットアップしておきましょう。

SendGridダイナミックテンプレートの設定

RCSのデザインに合わせて、SendGridでダイナミックテンプレートを作成します。SendGridダッシュボードにログインし、メニューの[Email API]>[Dynamic Templates](ダイナミックテンプレート)に移動します。識別しやすいテンプレート名を入力したら、[Create](作成)をクリックします。ここでの目的は、RCSメッセージとSendGridメールの双方が持つデザイン構造を、プログラム側から一貫して呼び出して利用できるように、ダイナミックテンプレートを構築することです。[Create a Dynamic Template](ダイナミックテンプレートの作成)というボタンをクリックしてください。テンプレートに覚えやすい名前を設定したら、次のステップへ進みます。

テンプレートの作成が完了したら、テンプレート名の横にある矢印アイコンをクリックして詳細パネルを開きます。ここに、テンプレートIDが表示されます。このID番号は後ほどメール送信アプリケーションで使用しますので、控えておきます。

続いて、メールデザインを構築するため、[Add Version](バージョンの追加)を選択します。次に、[Blank Template](空白のテンプレート)を選択します。テンプレートの作成方法は、コード編集、またはドラッグ&ドロップのいずれかを選択できます。このチュートリアルでは、ドラッグ&ドロップエディターとHandlebarsテンプレート機能を組み合わせることで、ダイナミックテンプレートを作成します。

[Design](デザイン)を選択すると、メールテンプレートが開きます。メールのSubject(件名)に{{subject}}と入力して、プレースホルダーをプログラムで生成する動的な値に置き換えます。同様に、Preheader(プリヘッダー)には{{preheader}}を選択します。

プレースホルダーと任意のカスタムテキストを組み合わせてテンプレートの本文を作成します。画像を追加する場合は、Imageモジュールを配置し、選択してその画像のHTMLを編集します。画像のURLを、図のように変数{{image_url}}に置き換えます。

example code for the image replacement
example code for the image replacement

このチュートリアルでは、必要に応じてボタンを追加するオプションもあります。ボタンのエレメントをメールテンプレート内にドラッグ&ドロップし、ボタンのテキストとして{{button_text}}、ボタンのURLとして{{button_url}}と入力します。

設定が完了すると、SendGridテンプレートは以下のような表示になります。

the sendgrid template with all placeholders
the sendgrid template with all placeholders

テンプレートを保存します。

1つのダイナミックテンプレートIDに対して、複数のバージョンを保存することもできます。コードソリューションが意図通りに動作するよう、先ほど作成したテンプレートが「有効」に設定されていることを確認してください。

RCSとSendGrid用の.NETアプリケーション

.NETアプリケーションでこれら2つの要素を連携させることで、メールとRCSの同時送信を実現します。

IDEを開き、新しい.NET Web APIアプリケーションを作成することから始めます。

mkdir RcsEmailSender
cd RcsEmailSender
dotnet new console
dotnet new sln
dotnet sln add RcsEmailSender.csproj

プロジェクトには、以下のNuGetパッケージが必要となります:

dotnet add package SendGrid
dotnet add package Twilio
dotnet add package Microsoft.Extensions.Configuration
dotnet add package Microsoft.Extensions.Configuration.Json
dotnet add package Microsoft.Extensions.Configuration.EnvironmentVariables

このプロジェクトでは、複数の環境変数を使用します。このチュートリアルでは、これらの変数がファイル「appsettings.json」に追加されます。このファイルをプロジェクトフォルダに作成します。以下の行を追加し、各プレースホルダーを実際の環境やアプリケーションに合わせた設定値に置き換えてください。

{
 "MessageServices": {
   "Twilio": {
     "AccountSid": "YOUR_TWILIO_ACCOUNT_SID",
     "AuthToken": "YOUR_TWILIO_AUTH_TOKEN",
     "FromNumber": "+15551234567"
   },
   "SendGrid": {
     "ApiKey": "YOUR_SENDGRID_API_KEY",
     "FromEmail": "no-reply@example.com",
     "FromName": "Example Sender",
     "TemplateId": "d-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
   },
   "Recipients": {
     "PhoneNumber": "+15557654321",
     "Email": "recipient@example.com"
   }
 }
}

TwilioアカウントSIDと認証トークンは、Twilioダッシュボードにあります。送信元番号は、RCSの送信者の番号です。また、SendGridを利用してメールを送信するには、予めメール送信権限を付与したSendGrid APIキーを作成しておく必要があります。カスタムキーを作成する場合は、メール送信権限があることを確認してください。ダイナミックテンプレートIDを取得するには、SendGridダッシュボードに移動し、作成したテンプレートからIDを取得します。FromEmailは検証済みの送信者のメールアドレスで、FromNameは人間が読み取れる任意の値に設定できます。Recipients(受信者)には、テストに使用する電話番号とメールアドレスを追加します。

.NETプロジェクトで環境変数のセキュリティを守る方法は複数ありますが、このデモでは、シンプルなアプローチを採用しています。環境変数を含むコードは、GitHubやその他のソース管理システムに絶対にチェックインしないでください。環境変数の設定方法については、こちらの記事をご覧ください。安全な管理方法やベストプラクティスについても詳しく解説しています。

これで、プロジェクトにコードを追加する準備ができました。

最初のステップは、RCSとメールが使用するモデルを作成することです。

本格的なアプリケーション構成では、モデルを専用のフォルダに配置しますが、今回はデモなので、必要なモデルをまとめて管理する簡易的なファイルを作成します。

ファイル「Models.cs」を作成し、このコードを追加します:

using System;
namespace RcsEmailSender
{
   // Configuration class for storing API keys and credentials
   public class MessageServiceConfig
   {
       public string TwilioAccountSid { get; set; } = string.Empty;
       public string TwilioAuthToken { get; set; } = string.Empty;
       public string TwilioFromNumber { get; set; } = string.Empty;
       public string SendGridApiKey { get; set; } = string.Empty;
       public string SendGridFromEmail { get; set; } = string.Empty;
       public string SendGridFromName { get; set; } = string.Empty;
       public string SendGridTemplateId { get; set; } = string.Empty;
       public string RecipientPhoneNumber { get; set; } = string.Empty;
       public string RecipientEmail { get; set; } = string.Empty;
   }
   // Consolidated message model for both RCS and Email
   public class MessageContent
   {
       public string Title { get; set; } = string.Empty;
       public string Body { get; set; } = string.Empty;
       public string ImageUrl { get; set; } = string.Empty;
       public string ButtonText { get; set; } = string.Empty;
       public string ButtonUrl { get; set; } = string.Empty;
   }
}

モデルファイルを保存します。

次に、プロジェクトのプログラムロジックに注目します。「Program.cs」ファイルを開き、既存のコードを以下のコードに置き換えます:

using Microsoft.Extensions.Configuration;
using SendGrid;
using SendGrid.Helpers.Mail;
using Twilio;
using Twilio.Rest.Api.V2010.Account;
using Twilio.Types;
namespace RcsEmailSender
{
   class Program
   {
       static async Task Main(string[] args)
       {
           // Set up configuration system
                var configuration = new ConfigurationBuilder()
               .SetBasePath(Directory.GetCurrentDirectory())
               .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
               //.AddEnvironmentVariables("RCS_EMAIL_") // Allows overriding with environment variables prefixed with RCS_EMAIL_
               .Build();
           // Load config from configuration
           var config = new MessageServiceConfig
           {
               TwilioAccountSid = configuration["MessageServices:Twilio:AccountSid"] ?? string.Empty,
               TwilioAuthToken = configuration["MessageServices:Twilio:AuthToken"] ?? string.Empty,
               TwilioFromNumber = configuration["MessageServices:Twilio:FromNumber"] ?? string.Empty,
               SendGridApiKey = configuration["MessageServices:SendGrid:ApiKey"] ?? string.Empty,
               SendGridFromEmail = configuration["MessageServices:SendGrid:FromEmail"] ?? string.Empty,
               SendGridFromName = configuration["MessageServices:SendGrid:FromName"] ?? string.Empty,
               SendGridTemplateId = configuration["MessageServices:SendGrid:TemplateId"] ?? string.Empty,
               RecipientPhoneNumber = configuration["MessageServices:Recipients:PhoneNumber"] ?? string.Empty,
               RecipientEmail = configuration["MessageServices:Recipients:Email"] ?? string.Empty
           };

まず、先ほど作成した「appsettings.json」ファイルからAPIキーなどのセキュリティ情報を取得します。コメントアウトされているコード行を追加することで、代わりに環境変数を使用するよう変更することも可能です。これらの値をすべて収集すると、アプリケーションはそのモデルをもとにMessageServiceを生成します。

ここで、以下のコードブロックを追加します:

var messageContent = new MessageContent
           {
               Title = "Owl Air Elite Status",
               Body = "Congratulations! You've reached Elite status. Add code ELITE10 for 10% off your next flight. Book at twilio.com or call +15551234567",
               ImageUrl = "https://rcs-4036.twil.io/image.png", // Image URL for testing
               ButtonText = "Book Now",
               ButtonUrl = "https://twilio.com"
           };

これは、RCSメッセージを作成するブロックです。テスト用URLを、送信したい画像のURLに置き換えるか、Twilioのロゴ画像を使用する場合はそのままにしてください。

続いて、「Program.cs」に以下のコードブロックを追加します:

try
           {
               //Send RCS message
               var rcsResult = await SendRcsMessage(config, messageContent);
               Console.WriteLine($"RCS message sent: {rcsResult}");
               // Send Email
               var emailResult = await SendEmailWithDynamicTemplate(config, messageContent);
               Console.WriteLine($"Email sent: {emailResult}");
           }
           catch (Exception ex)
           {
               Console.WriteLine($"Error sending messages: {ex.Message}");
           }
       }

ここでは、実際にRCSメッセージとメールを送信する処理を行っています。このコードでは両方のコンテンツを取得し、メールの動的テンプレートとRCSへそれぞれ配信します。

最後に、「Program.cs」に以下のブロックを追加します:

static async Task<string> SendRcsMessage(MessageServiceConfig config, MessageContent content)
       {
           TwilioClient.Init(config.TwilioAccountSid, config.TwilioAuthToken);
           var message = await MessageResource.CreateAsync(
               body: $"{content.Title}\n\n{content.Body}\n\nClick here: {content.ButtonUrl}",
               from: new PhoneNumber(config.TwilioFromNumber),
               to: new PhoneNumber(config.RecipientPhoneNumber),
               mediaUrl: new List<Uri> { new Uri(content.ImageUrl) } 
           );
           return message.Sid;
       }
       // Method to send email using SendGrid with dynamic template
       static async Task<bool> SendEmailWithDynamicTemplate(MessageServiceConfig config, MessageContent content)
       {
           // Initialize SendGrid client
           var client = new SendGridClient(config.SendGridApiKey);
           var from = new EmailAddress(config.SendGridFromEmail, config.SendGridFromName);
           var to = new EmailAddress(config.RecipientEmail);
           var msg = new SendGridMessage();
           msg.SetFrom(from);
           msg.AddTo(to);

           msg.SetTemplateId(config.SendGridTemplateId);
           // Define template data with proper naming that matches the SendGrid template
           var templateData = new
           {
               subject = content.Title,
               preheader = "Special offer inside!", // Optional preheader text
               title = content.Title,
               body_text = content.Body,
               image_url = content.ImageUrl,
               button_text = content.ButtonText,
               button_url = content.ButtonUrl,
               sender_name = config.SendGridFromName
           };
           msg.SetTemplateData(templateData);
           // Send the message
           var response = await client.SendEmailAsync(msg);
           return response.IsSuccessStatusCode;
       }
   }
}

このコードでは、先ほどRCSとメール用に設定したダイナミックテンプレートのプレースホルダーを取得し、値を割り当てています。すべてが正しく設定されていれば、アプリケーションを実行できます。

dotnet run

アプリケーションは、メールとRCSメッセージの両方を送信します。メールのフォーマットは先ほど設定したダイナミックテンプレートと同様で、RCSメッセージにも同じ情報と画像が適用されます。

example of sent RCS
example of sent RCS

トラブルシューティング

アプリケーションでエラーや問題が発生した場合は、以下の項目を確認してください。

まず、ユーザーアカウントでRCS送信が許可されていること、およびお使いのデバイスでRCSが受信可能であることを確認してください。その際、受信デバイスを「RCSテスター」として設定しておく必要があります。RCSの一括送信を行う場合、国や地域によっては事前の審査や認証が必要になりますので、ご注意ください。

また、画像が正しくレンダリングされない場合は、画像のURLが公開URLであることを確認してください。サポートされているカード機能については、TwilioCardコンテンツテンプレートのドキュメントをご覧ください。

SendGridのメールが送信されない場合は、SendGridダッシュボードを確認してください。送信者または送信者DNSを検証する必要があります。メールログを確認し、配信ステータスやエラーコードの有無をチェックしてください。

メールが想定どおりに表示されない場合は、テンプレート自体で調整を行います。SendGridでDesign Editorを使用する際のヒントをご覧ください。

次のステップ

このチュートリアルでは、統合キャンペーンの一環として連携するRCSメッセージとSendGridメールの作成方法を学びました。このアプリケーションの今後のアップデートで、メールとRCSのデザインをカスタマイズするためのテンプレートが追加される可能性があります。もう一つの改善策として、キャンペーンの配信タイミングをずらす方法が考えられます。メールとRCSを同時に送信するのではなく、ユーザーがRCSに反応しなかった場合にのみメールを配信する形です。これにより、ユーザーの反応が良いプロモーションスタイルを検証するA/Bテストの際、メールの重複送信を防ぐことができます。

RCSで実現できるその他の機能については、以下のTwilioの記事をご覧ください。

ともに、コミュニケーションの未来を構築しましょう。

Amanda Langeは、テクニカルコンテンツ専門の.NETエンジニア。C#や.NETプログラミングを活用した、画期的な開発手法を発信します。お問い合わせは、amlange [ at] twilio.comまでお願いします。