Twilio Segmentを利用した顧客リーチのパーソナライズ

August 23, 2021
執筆者
Evan Weiss
Twilion

TwSegmentPersonalizeCustReachJP

この記事はHeather Hargreavesこちらで公開した記事(英語)を日本語化したものです。

ユーザーを、彼らが好んで使用するチャネル上で自動的に検出し、そのチャネル上でコミュニケーションを取りたいですか?この記事では、SendGridProgrammable SMSProgrammable VoiceSegment FunctionsSegment Personasを使用して、ユーザーの好むチャネルを計測し、パーソナライズする方法について説明します。

ユーザーの好むコミュニケーションチャネルを計測・カスタマイズする理由

この記事では、Twilio SendGridで配信されたメールを開封したか、Twilioからの通話に応答したか、Twilioから送信されたSMSメッセージに応答したかといったイベントデータをTwilio Segmentに送信する方法を紹介します。

Segment Functionsを使用してSegmentでキャプチャされたイベントから、Computed Traitを計算します。さらにComputer Traitからエンゲージメントに最も利用されたチャネルが特定され、そのチャネルがユーザーの好むチャネルとして設定されます。今後通知を送信する際、アプリケーションによりユーザーの好むチャネルが確認され、SMS、メール、通話のどの方法でユーザーが通知を受信するかが選択されます。ユーザーの好むチャネルがまだ存在しない場合、ユーザーの好むチャネルを決定できるレベルのエンゲージメントが得られるまで、通知はランダムに計算されたチャネル上で送信されます。

この記事では、過去のエンゲージメントに基づいて、お客様の好むチャネルで通知をパーソナライズする方法について説明します。

必要条件

このチュートリアルには以下が必要となります。

  • Node
  • Npm
  • SendGridアカウント - アカウントをお持ちでない場合は、こちらから作成できます。
  • Twilioアカウント - アカウントをお持ちでない場合は、こちらから作成できます。
  • Segmentアカウント - アカウントをお持ちでない場合は、こちらから作成できます。
    • また、FunctionsとPersonas Advancedにアクセスする必要があります。

SegmentのFunctionsとPersonas Advancedについては、Twilio側で機能を有効化する必要があります。適宜お問い合わせください。

顧客が好むチャネル上でパーソナライズされたメッセージを送信

設定が完了し、アカウントを作成すると、メッセージングの構築を開始できます。必要な手順は、以下のとおりです。

ソリューションの概要

TwSegmentPersonalizeCustReachOverviewJP

Nodeサーバーの設定

まず、Nodeサーバーを設定します。

ターミナルでプロジェクトを配置するディレクトリに移動し、コマンドmkdir channel-optimizationで新規ディレクトリを作成します。プロジェクトのルートディレクトリに移動し、コマンドtouch index.js .envで2つのファイルを作成します。さらに、コマンドnpm initでNodeアプリを開始します。そして、コマンドnpm install --save express twilio @sendgrid/mail analytics-node dotenvでライブラリをインストールします。

使用しているコードエディターでchannel-optimizationフォルダーを開きます。さらにindex.jsを開き、GitHubからこのコードを貼り付けます。

貼り付けたコードですが、対象ユーザーについて「好みのチャネル」設定があるかどうかをSegment Profile APIを使用してチェックします。好みのチャネル設定がある場合は、そのチャネルで通知が送信されます。チャネル設定がない場合は、ユーザーが通知を受信するチャネルとして、SMS、音声通話、メールのいずれかがランダムに選択されます。またこのコードでは、TwilioとTwilio SendGridのAPIを使用して、通知をメール、SMS、音声通話として送信します。

次に、.envファイルを開き、以下のコードを貼り付けます。

PORT=3000
TWILIO_ACCOUNT_SID=
TWILIO_AUTH_TOKEN=
SENDGRID_API_KEY=
SEGMENT_KEY=
PHONE_NUMBER=
EMAIL=
TWILIO_PHONE_NUMBER=
SGEMAIL=
SEGMENT_CALL_SOURCE_FUNCTION_URL=
SEGMENT_PERSONAS_SPACE_ID=
SEGMENT_PROFILE_API_TOKEN=

TwilioコンソールからTwilioのアカウントSIDと認証トークンの値を取得し、それらをTWILIO_ACCOUNT_SID変数とTWILIO_AUTH_TOKEN変数に記載します。SendGridSegmentについても同じようにアカウントレベルの資格情報を取得し、SendGrid APIキーをSENDGRID_API_KEY変数に記載し、SegmentキーをSEGMENT_KEY変数に記載します。Segment書き込みキーを取得するには、Segment Connectionsでソース「Node.js」を作成し、「Channel Optimization」などの名前を付けます。チャネルが作成されると、Segmentの管理画面上で書き込みキーが表示されます。詳細については、Segmentのドキュメントをご確認ください。さらにPHONE_NUMBER変数とEMAIL変数に、このデモでTwilioの通知を受け取りたい電話番号とメールアドレスを記載します。Twilioコンソールで電話番号を購入し、その番号をTWILIO_PHONE_NUMBER変数の値として追記します。

自分のメールアドレスと電話番号で、実際に動作するかを確認することをお勧めします。

次に、SendGridの送信元メールアドレスをSGEMAIL変数に記載します。自分のメールアドレスか、ドメイン認証設定が完了している場合には当該ドメインのアドレス、のいずれかを指定できます。

次に、Segmentの管理画面に移動します。[Personas] に移動し、[Settings](設定)、[API Access](APIアクセス)の順にクリックします。[Generate Token](トークンを生成する)をクリックし、「Channel Optimization App」などの名前を付けます。

トークンをコピーし、.envファイルのSEGMENT_PROFILE_API_TOKEN変数に貼り付けます。Segment管理画面に戻り、[Personas] の  [API Access] に移動します。スペースIDをコピーし、.envファイルのSEGMENT_PERSONAS_SPACE_ID変数値として記載します。SegmentのスペースIDの確認については、次のスクリーンショットをご確認ください。

TwSegmentAPIAccessJP

SEGMENT_CALL_SOURCE_FUNCTION_URL変数は空白のままにしておきます。この部分については、Segmentワークスペースの設定後に説明します。

Segmentワークスペースの設定

SegmentのFunctionsとPersonas Advancedについては、Twilio側で機能を有効化する必要があります。

次のセクションでSegmentワークスペースを設定しますが、まずは「SMSに返信した」や「メールを開封した」などTwilioからのコミュニケーションに対するエンゲージメントイベントを処理するSegment Functionsを3つ設定します。

[Connections](接続) > [Sources](ソース)に移動し、[Create New Source](ソースを新規作成)をクリックします。その上で、ページ上部の [Functions] をクリックし、次に [+ New Function](ファンクションを新規追加)をクリックし、「Source」がファンクションの種別として選択されていることを確認します。次に、ファンクションのボイラープレートコードを削除し、SMSイベントを処理する次のコードを追記します。

/**
 * Handle incoming HTTP request
 *
 * @param  {FunctionRequest} request
 * @param  {FunctionSettings} settings
 */
async function onRequest(request, settings) {
    // Get request body
    let body = request.json();

    // Confirm that the message was received successfully
    if (body.SmsStatus != 'received') {
        return;
    }

    // Grab user's phone number from the Twilio webhook
    let from = body.From;

    // Create Segment event payload
    let event_payload = {
        event: 'Notification Engaged',
        anonymousId: from,
        properties: { phone: from, channel: 'SMS' }
    };

    // Send Segment event
    Segment.track(event_payload);
}

[Configure](設定)をクリックし、ソースに「Twilio SMS」という名前を付けます。

ファンクションが保存された後、カタログをクリックし、[+ Connect Source](ソースに接続)を選択します。ファンクションが接続された後、 “https://fn.segmentapis.com/?b=” で始まるWebhook URLが提示されるので、URLをメモ帳に保存します。これはSMSイベントハンドラー用であり、後でTwilioコンソール画面のWebhookの設定に使用します。

同じソースファンクションの設定をさらに2回繰り返します。1つはEmailイベントの処理用、もう1つはVoiceイベントの処理用です。Emailソースファンクションには、次のコードを使用します。

/**
 * Handle incoming HTTP request
 *
 * @param  {FunctionRequest} request
 * @param  {FunctionSettings} settings
 */
async function onRequest(request, settings) {
    // Grab the request body
    let body = request.json()[0];

    // Confirm that this is an 'email open' event
    if (body.event != 'open') {
        return;
    }

    // Grab user's email from the Twilio webhook
    let email = body.email;

    // Create Segment event payload
    let event_payload = {
        event: 'Notification Engaged',
        anonymousId: email,
        properties: { email: email, channel: 'EMAIL' }
    };

    // Send Segment event
    Segment.track(event_payload);
}

Voiceソースファンクションには、次のコードを使用します。

/**
 * Handle incoming HTTP request
 *
 * @param  {FunctionRequest} request
 * @param  {FunctionSettings} settings
 */
async function onRequest(request, settings) {
    // Get request body
    let body = request.json();

    // Confirm that this is a "call answered" event
    if (body.CallStatus != 'in-progress') {
        return;
    }

    // Grab user's phone number from the Twilio webhook
    let called = body.Called;

    // Create Segment event payload
    let event_payload = {
        event: 'Notification Engaged',
        anonymousId: called,
        properties: { phone: called, channel: 'CALL' }
    };

    // Send Segment event
    Segment.track(event_payload);
}

このデモでは、Emailソースファンクションは、簡素化の観点からSendGridのメール開封イベントのみを処理するように構成されています。一方、メールに対するクリックや購読解除など、SendGridのWebhookイベントの一部またはすべてに対応させたい場合は、こちらのSegment SendGridソースファンクションを使用するようにしてください。

カタログ上で区別できるように、各々のファンクションには「Twilio Email」や「Twilio Voice」などの名前を付けておきます。設定後に提示されたURLは必ず記録しておいてください。

Segmentのソースファンクション機能の詳細については、こちらのドキュメントをご確認ください。TwilioやSendGridはWebhookイベントを受信した後、各ソースファンクションに追加したコードが動作し、Segmentイベントに当該エンゲージメントイベントがプッシュされ、「Notification Engaged」(通知エンゲージメント)イベントに加えて、ユーザーがエンゲージメントに利用したチャネルが記録されます。

Twilioコンソールに移動し、電話番号の管理画面に移動します。.envファイルで先ほど使用した電話番号を確認し、その番号の詳細設定画面へ移動します。着信メッセージのWebhookの箇所(「A MESSAGE COMES IN」セクション)にSegmentのSMSソースファンクションのURLを貼り付けます。SMS通知への応答があると、そのWebhookイベントがSegmentに送信され、Segmentイベントとして追跡されます。

TwWebhook2SegmentJP

音声通話に対するll応答イベントについて同様に設定するには、Nodeアプリケーションの.envファイルに戻ります。SEGMENT_SOURCE_FUNCTION_URL変数に、SegmentのVoiceソースファンクションのURLを記載します。前提として、Programmable Voice APIのステータスコールバックイベントで、ユーザーがNodeアプリから架電された電話に応答した際に「Notification Engaged」(通知エンゲージメント)というイベントをSegmentに送信しています。

またSendGridの管理画面を開き、[Settings](設定)> [Mail Settings](メール設定)に移動し、[Event Webhook](イベントWebhook)をクリックします。SegmentのEmailソースファンクションのURLをHTTP Post URLの箇所に貼り付け、エンゲージメントデータのセクションの [Opened](開封済み)のみを選択します。ユーザーがメールを開くと「Notification Engaged」(通知エンゲージメント)というイベントがSegmentに送信されます。

TwSegmentWebhook2SegmentJP

Segment PersonasのComputed Traitの作成

前述のようにWebhookを設定し、エンゲージメントメトリックスがTwilioとSendGridからSegmentに送信されることにより、これらのイベントを使用してSegment内でPersonasのComputed Traitを作成されるようになります。Computed Traitでは、ユーザーがエンゲージメントに最も頻繁に利用したチャネルを「好みのチャネル」として設定できます。

SegmentでComputed Traitを作成する前に、ある程度の量のイベントをSegmentに送信する必要があります。まず、アプリケーションのルートディレクトリでターミナルコマンドnode index.jsにより、Nodeアプリケーションを実行します。

.envファイルに設定した電話番号やメールアドレスに、SMSメッセージ、メール、電話が来るようになります。「電話に応答」、「メールを開く」、「SMSに確認返信」のいずれかの操作を行うと、Segmentアカウントに入るイベントをソース接続のDebuggerのタブの箇所で確認できます。すべてのイベントには「Notification Engaged」(通知エンゲージメント)という名前が付けられている一方、各ソースファンクションがユーザーのエンゲージメントチャネルをComputed Traitとして通知されるので、異なる通知エンゲージメントとして追跡されます。

サーバーを数回再起動し、さらに多くのイベントをSegmentに送信します。5回以上実行しましょう。この操作を完了後、Segmentの管理画面に移動し、次に [Personas] に移動します。左側メニューバーの [Settings](設定)を選択し、次に上部メニューバーの [Sources](ソース)を選択します。前の手順で作成したEmail、Voice、SMSのソースを、同じく前の手順で作成したNodeアプリケーションソースと接続します。この設定のスクリーンショットは、次のようになります。(日本語編集上の補足: 管理画面上の「左」「上」等の方向性について、現行画面では少し異なりますので、上記記載では現行画面に沿うように意訳しました。)

TwSegmentConnectedSourcesJP

次に、[Personas] > [Profiles] から [Computed Traits] タブを選択し、[New Computed Trait] をクリックします。[Most frequent](最も頻度の高いもの)を選択します。次に、[Event Name](イベント名)として [Notification Engaged](通知エンゲージメント)を選択し、[Minimum frequency](最低頻度)を3に設定します。

このデモでは最低3つの [Notification Engaged](通知エンゲージメント)イベントを使用して、ユーザーがメール、SMS、電話のどのチャネルを最も頻繁に使用しているかを計算します。(もちろん変更も可能です。)

ユーザーに好みのチャネルのComputed Traitを割り当てた後は、ユーザーはそのチャネルで通知を受信します。例えば、ユーザーの好みのチャネルが「メール」の状況では、NodeアプリケーションがPersonas Profile APIを使用してSegmentに確認を入れますので、チャネルがランダムに選択されるのではなく「メール」チャネルが選択されます。もちろん対象となるSegmentアカウントの管理画面、Personasの区画で、ユーザーのComputed Traitを目視確認することも可能です。

顧客の好みの通知チャネルの計算〜テストとトラブルシューティング

これで、ユーザーが好む通知用チャネルを算出するアプリを構築しました。以下では、さらなる応用シナリオと、発生し得る問題についてふれます。

さらに興味深い結果を得る方法

Nodeアプリケーションサーバーを数回再起動し、Computed Traitを入手します。次に、Nodeアプリのユーザー名とユーザーIDを変更し、追加ユーザーを作成します。

Segmentにイベントが表示されない場合〜トラブルシューティング

ソースファンクションが正しく設定されていること、そしてVoice用のソースファンクションのURLが.envファイルに追加されていることを確認します。同様に、Email用のソースファンクションのURLがSendGrid管理画面のEvent Webhookとして追加されていること、そしてSMS用のソースファンクションのURLがTwilioコンソール画面の着信メッセージ用のWebhookとして電話番号の設定データとして追加されていることを確認します。

最後に、Segment管理画面のソースファンクションのDebugger(デバッガ)タブを確認することで、それらイベントのSegment側での着信を二重チェックできます。

SMS、メール、電話が着信されない場合のトラブルシューティング

  • Twilioの電話番号とSendGridの送信者メールアドレスが.envファイルに追加されていることを確認します。
  • 電話番号とメールアドレスが.envファイルに追加されていることを確認します。

次のレベルへ

  • Twilio Flexインスタンスを作成します。次にユーザーの好むチャネルを読み込むFlexプラグインを作成し、エージェントがそのチャネルで通知を送信できるようにします。
  • Segmentに分析系のDestination(宛先)を設定します。分析ツールにコンバージョンイベントが送信され、ユーザーを横断してどのチャネルのパフォーマンスが最も高いかを測定します。

計算されたユーザーの好みのチャネルに関する通知の配信

これで、Segment、Twilio、SendGridへの接続が完了しました。このデモアプリでユーザーがエンゲージメントに利用したチャネルを追跡し、Segment Computed Traitを割り当てることにより、ユーザーの好みのチャネルを自動的に選択できます。これは、ユーザーや顧客との1対1のコミュニケーションをパーソナライズする効果的な方法です。

この方法を一度習得すれば、Segment Computed Traitをどのように活用できるかを検討し、TwilioとSendGridのコミュニケーションをさらに向上できます。コミュニケーションの未来を構築しましょう!

Heatherは、Twilioのシニアソリューションエンジニアを務めており、A/Bテストやパーソナライゼーションを通じて、人々や製品チームによる最適な構築を支援しています。連絡先: hhargreaves [at] twilio.com

Evanは、B2B SaaSの幅広い経験を持つソリューションエンジニアです。Mixpanel設立時のセールスエンジニアとして、分析でのキャリアをスタートさせました。Optimizelyでは、東京支店を立ち上げた2名の市場参入チームに属していました。日本からの帰国後は製品管理部門に移動し、Optimizelyで分析製品に携わりました。その後、Stripeでホスティング型決済インターフェイスを担当しました。Evanは、製品マネージャーとして、Segmentの既存顧客と見込み客に、知識を共有することを楽しんでいます。