問題点
InnovaShoes は、オンラインストアを通じて製品を販売する靴のメーカーです。同社は、最先端のテクノロジーを備えた男性用ランニングシューズの、新しい商品を立ち上げる予定です。この商品の立ち上げの一環として、InnovaShoesは、フィットネスに関心を示している既存の男性顧客を対象としたマーケティングキャンペーンを開始します。このキャンペーンには3つの目標があります。
- オンラインストアの男性顧客に、新しいランニング シューズの予約注文メールを送信します。さらに、20~40 歳の男性は、プレミアムフィットネス製品を購入するための関心と、ゆとりある収入との両方を持っている可能性が高いため、これらのユーザーを年齢とフィットネスへの関心によって分類したいと考えています。
- そして、登録しても戻ってこない登録ユーザーを把握し、彼らが戻ってくるように特別なディスカウントを提供しようと考えています。
- 最後に、顧客の多くがTwitterを使用していることを知っているので、InnovaShoesはこのソーシャルネットワークを使用する顧客が、自社についてどのように感じているかをさらに理解したいと考えています。
InnovaShoesは、マーケティングキャンペーンを実行するために、オンラインストアのユーザーに関する必要な情報を収集したいと考えており、このデータを収集するのに最適な時期は登録時とログイン時であると考えています。そこでID管理、特にAuth0が役に立ちます。
ソリューション
InnovaShoesが顧客のことを知れば知るほど、カスタマーエクスペリエンスをカスタマイズして、より多くの価値をもたらすことができます。ソーシャルログインにより、会社はFacebook、Twitter、およびその他のソーシャルネットワークによって収集されたデータを活用し、顧客の知識を高め、顧客を個人として扱うことができます。アプリケーションへのソーシャルログインの追加は Auth0 を使用すると非常に簡単で、顧客データを取得するための出発点として最適です。ソーシャルログインには、次のような利点があります。
- より良い品質のメールアドレス :ソーシャルネットワークプロバイダーは責任を持って、ユーザーのEメールの確認を行います。プロバイダーがこの情報を共有すると、一部のユーザーがWebアプリケーションに登録するときに使用するサブのアドレスではなく、実際のメールアドレスを御社は取得できます。
- より詳細なユーザープロファイルへのアクセス:ソーシャルネットワークプロバイダーは、多くの場合、場所、興味、誕生日など、ユーザーに関する追加情報を提供してくれます。このデータを使用して、パーソナライズされた関連性の高いコンテンツをユーザーに発信することができます。
- 最新のプロファイル:多くの場合、ユーザーはアクセスの少ないWebサイトではプロファイルを更新しませんが、ソーシャルネットワークのプロファイルは最新の状態に保っています。ソーシャルログインにより、顧客に関するより正確な情報を得ることができます。
- より良いログインセキュリティ :ユーザーがユーザー名とパスワードをいくつも作成する必要がない場合、例えば自分のID情報を保存している数少ないソーシャルネットワークなどのためには、彼らは推測しにくいパスワードと多要素認証を使いことでしょう。顧客は延々とあるアカウントのユーザー名とパスワードにうんざりしています。そのため、顧客は「Facebook でログイン」します。
この情報は、ユーザーに関するデータと人口統計を取得するのに非常に役立ち、ターゲットを絞ったマーケティングキャンペーンや製品管理の決定に役立ちます。
ユーザー分析を取得するにはどうすればいいか?
Auth0には、「ルール」と呼ばれる強力な機能 (すべての認証の一部として実行されるJavascript コードの小さなスニペット) が含まれており、必要に応じてプラットフォームを拡張し、高度な機能を実装できます。InnovaShoesの実装の秘訣は、この拡張性にあります。
ユーザーがソーシャルログインを使用してオンラインストアに登録すると、InnovaShoesはFullContactなどのサービスの APIを呼び出すルールを使用して、ユーザーの情報 (場所、年齢、性別、所得層、ソーシャルネットワークのメンバーシップなど) を拡張できます。 それに加えて、ソーシャルネットワークの API を呼び出して、趣味、「いいね」、ソーシャルグラフなどでユーザーのプロファイルを強化します。強力なサードパーティのソーシャル分析APIにアクセスするための、ルールを作成しましょう。たとえば、@InnovaShoes に言及しているユーザーのツイートを評価する感情分析サービスを呼び出します。御社の好みの分析プラットフォームにユーザーの情報を保存する、別のルールをもう1つ作成しましょう。それが、データウェアハウス(DWH) に保存され、BI 製品スイートで分析されているか、Hadoop ベースのビッグデータ分析プラットフォームにストリーミングされているか、フルテキストインデックス サービスに読み込まれるかどうか、SaaS 分析製品に抽出されるかどうかは関係ありません。御社のデータサイエンティストやマーケティングチームが必要とするものは何でもです。
次のスニペットは、Auth0のユーザー プロファイルの基本情報を示しています。
{
'email': 'johndoe@gmail.com',
'email_verified': false,
'updated_at':'2016-01-18T19:42:13.322Z',
'picture': 'https://s.gravatar.com/avatar/1fda90f0e712deed531294cd044a2d05?s=480&r=pg&d=https%3A%2F%2Fcdn.auth0.com%2Favatars%2Fkl.png',
'user_id': 'auth0|569d401336afe17803eba2ba',
'name': 'johndoe@gmail.com',
'nickname': 'johndoe',
'identities': [
{
'user_id': '569d401336afe17803eba2ba',
'provider': 'auth0',
'connection': 'Username-Password-Authentication',
'isSocial': false
}
],
'created_at':'2016-01-18T19:42:11.846Z',
'last_ip':'174.66.196.104',
'last_login':'2016-01-18T19:42:13.322Z',
'logins_count':1,
'blocked_for': []
}
この情報の一部が、キャンペーンにすぐに役立つことに注目してください。たとえば、「last_login」プロパティを使用することでInnovashoesは、ユーザーがしばらくログインしていないことを判断し、ユーザーがストアに戻った場合にオファーを送信できます。
FullContact API を使用して、メールアドレスに関連付けられたソーシャルネットワークなど、ユーザーに関する拡張情報を取得できます。これを行うには、Auth0管理ダッシュボードで新しいルールを作成するときに、FullContactテンプレートを使用します。
この情報を組み合わせると、キャンペーンに必要なより複雑な分析を実行するのに役立ちます。たとえば、フィットネスに関心のある(Facebook ) 20歳から40歳の男性 (FullContact) が顧客の誰であるかを把握するなどです。この拡張プロファイルを使用すると、データベースまたはインデックス作成/検索サービス (ElasticSearch など) に接続して、登録ユーザーのデータを保存できます。これは、ルールを使用して行うことも、またはこの例に示すように、 cronジョブを使用して別のプロセスで行うこともできます。ユーザーの情報をルールから保存する場合は、リアルタイムで分析を取得できます。一方、cronジョブを使用すると、ジョブの実行と同じ頻度でしか分析を取得できません。何百万人ものユーザーがいる場合、リアルタイムの情報を保存すると大きな負荷がかかり、サービスがそれを処理できない可能性があることを考慮して、ケース/ニーズに最適なアプローチを決定する必要があります。
この情報は、Azure Stream Analytics 、RapidMiner 、Hadoopインスタンスなどの、SaaS分析プロバイダー、または任意の場所に直接送信することもできます。
ユーザーがログインするたびに、そのイベントはエンゲージメントの強力なシグナルとなります。Auth0ルールを使用して各認証イベントを分析システムに記録し、これらのイベントをショッピングカートのアイテム、訪問したページ、残されたコメントなど、他のシグナルと関連付けることで、ユーザーの好みや関心についてさらに詳しく知ることができます。これは「発展的な発見」であり、ユーザーに情報を求めたり、ユーザーの行動を観察することにより、ユーザーの包括的なプロファイルを長期にわたって構築していく強力な方法です。
必要な情報を保存すると、読みやすいフォームに分析を成形するウィジェットを備えた、ダッシュボードを作成できます。次のリポジトリには、Auth0のユーザープロファイルに直接アクセスする、シンプルなダッシュボードのソースコードが含まれており、独自のプロファイルを作成するための出発点として使用できます。
マーケティング指標の専門家であるデータサイエンティストは、独自のニーズに基づいて、ユーザーデータと派生分析を視覚化するための、自分自身が好む独自の方法を持っている場合があります。Auth0のAPI駆動型で拡張が容易なプラットフォームは、単純か複雑かに関係なく、あらゆる分析プラットフォームに適合しています。Auth0 は、IDプラットフォームの一部として、事前に構築された柔軟性のない分析や、視覚化などの負担をおかけしません。分析および意思決定支援ツールはこれらの分野の専門家に任せていますが、数行のJavascriptだけでこれらの最善のソリューションと統合しています。
サンプル分析ダッシュボード
最後に、ユーザーのTwitterハンドル (使用可能な場合) をAPI に送信するルールをもう1つ追加して、@InnovaShoesについて語っているユーザーのツイートを検索し、そのセンチメントを評価します。この情報を使用して、マーケティング部門は、会社について否定的な感情をツイートしたユーザーにメールを送信して、状況を修正しようとすることができます。
ほぼリアルタイムの統計を取得するには、オープンソースの RabbitMQなどのキューコンポーネントを使用して、高頻度の認証イベントをバッファリングし、それにログイン情報を送信するルールを設定します。その後、キューは情報をデータウェアハウス、分析プラットフォーム、またはSaaS分析ソリューションにプッシュします。これを次の図に示します。
リアルタイム分析によるユース ケース アーキテクチャ
結論
Auth0は強力な認証プラットフォームであり、分析エンジンではないため、すぐに精巧な分析を行うことはできません。しかし、Auth0のルール エンジンは、認証イベントから必要なデータを簡単に抽出し、ユーザーが登録して認証するときに Web APIを介して、ユーザープロファイルデータを強化する柔軟性を提供いたします。この強力なリアルタイム機能により、想像できるあらゆる分析シナリオを実装できます。Auth0にはカテゴリ別に分類された、増え続けるルールテンプレートのリストが含まれています。高度なユーザー分析を通じて、顧客にさらにパーソナライズされたエクスペリエンスを提供するパワーをお届けします。ソーシャルログインをアプリケーションに追加するには数分ですみ、ユーザーに関する豊富な最新情報を提供できます。両方の機能を組み合わせることで、ユーザーを引き付ける新しい方法を発見する可能性は無限に広がります。
テンプレートを使用して新しいルールを作成する
さっそく試してください!Auth0には、最大 7,000人のアクティブユーザーと2つのソーシャルIDプロバイダーをサポートする永久無料プランなど、すべてのニーズに対応するプランがあります。詳細については、価格ページをご確認ください。質問やご要望がある場合はAuth0営業チームにお問い合わせください。
付録 A:プロトタイプコード
この使用例で説明されているロジックを実装するのに役立つ、サンプルコードスニペットを次に示します。
プロフィールの強化のルール
FullContact APIを呼び出してユーザープロファイルを強化するルールは、次のコードで確認できます。
function (user, context, callback) {
const FULLCONTACT_KEY = configuration.FULLCONTACT_KEY;
// skip if no email
if (!user.email) return callback(null, user, context);
// skip if fullcontact metadata is already there
if (user.user_metadata && user.user_metadata.fullcontact) return callback(null, user, context);
request.get('https://api.fullcontact.com/v2/person.json', {
qs: {
email: user.email,
apiKey: FULLCONTACT_KEY
},
json: true
}, (error, response, body) => {
if (error || (response && response.statusCode !== 200)) {
// swallow fullcontact api errors and just continue login
return callback(null, user, context);
}
// ここに到達すると、FullContactが情報を返したことを意味し、それをメタデータに追加します
user.user_metadata = user.user_metadata || {};
user.user_metadata.fullcontact = body;
auth0.users.updateUserMetadata(user.user_id, user.user_metadata);
context.idToken['https://example.com/fullcontact'] = user.user_metadata.fullcontact;
return callback(null, user, context);
});
}
これは、Auth0が提供するFullContactテンプレートの簡易版です。このバージョンには、エラーをログに記録するためのSlack統合がありません。
前のコードに見られるように、ユーザーに関する情報が見つかると、それが user.user_metadata.fullcontact プロパティに追加されます。
強化されたユーザープロファイルから、ユーザーの年齢を取得する関数を作成する方法
次のコードは、ユーザーの強化されたプロファイルからユーザーの年齢を取得するメソッドを作成する方法を示しています。同様の方法で、ユーザーに関する他の情報を取得できます。
function getAge(user) {
if (user.age) {
return user.age;
}
var fullContactInfo = user.user_metadata.fullContactInfo || user.app_metadata.fullContactInfo;
if (fullContactInfo && fullContactInfo.age) {
return fullContactInfo.age;
}
if (fullContactInfo && fullContactInfo.demographics && fullContactInfo.demographics.age) {
return fullContactInfo.demographics.age;
}
if (fullContactInfo && fullContactInfo.demographics && fullContactInfo.demographics.birthDate) {
return moment().diff(fullContactInfo.demographics.birthDate, 'years');
}
if (user.dateOfBirth) {
return moment().diff(user.dateOfBirth, 'years');
}
if (user.birthday) {
return moment().diff(user.birthday, 'years');
}
return null;
}
ユーザーの Twitterハンドルを取得して、センチメントAPIに送信するルール
次のルールは、ユーザーのTwitterハンドルを取得し、そのデータをセンチメントAPIに送信する方法を示しています。このプロセスが実行できるのは、1人のユーザーにつき1回だけです。 そのため、ユーザーが処理されるときに、sentiment_initialized 変数をTrueに設定しています。
function (user, context, callback) {
user.app_metadata = user.app_metadata || {};
if (user.app_metadata.sentiment_initialized) {
return callback(null, user, context);
}
var twitterHandle = getTwitterHandle(user);
if (!twitterHandle) {
return callback(null, user, context);
}
// アプリのシークレットを保護するには、SSL経由でリクエストを行う必要があります。
request.post({
url: 'https://innovashoes.com/twittersentiment',
json: {
twitterHandle: twitterHandle,
secretToken: configuration.TWITTER_SECRET_TOKEN
},
timeout:15000
}, function(err, response, body){
if (err) return callback(new Error(err));
user.app_metadata.sentiment_initialized = true;
auth0.users.updateAppMetadata(user.user_id, user.app_metadata)
.then(function(){
callback(null, user, context);
})
.catch(function(err){
callback(err);
});
});
}
function getTwitterHandle(user) {
var fullContactInfo = user.user_metadata.fullContactInfo || user.app_metadata.fullContactInfo;
if (fullContactInfo && fullContactInfo.socialProfiles) {
for (var key in fullContactInfo.socialProfiles) {
if (fullContactInfo.socialProfiles[key].type === 'twitter'){
return fullContactInfo.socialProfiles[key].username;
}
}
}
return null;
}
ダッシュボードのサンプルコード
ダッシュボードのサンプルコードは、このリポジトリにあります。これを出発点として使用し、独自のものを作成できます。リードミーファイルには、例を実行するための情報が記載されています。ここでライブバージョンを表示できます。