フォーム読み込み中
Google Cloud のデータプラットフォーム「 Looker 」のカスタムアクション を活用することで、データ分析結果を基にアクションを自動化することが可能になります。
また、外部の API を活用することで様々なシステムと連携でき、シームレスなデータ活用も実現できます。データを活用して対象者を絞り、消費者にとって身近なコミュニケーションツールである LINE に対してメッセージが送信できるようになると、プロモーション活動をより効果的に行うことができます。
本記事では Looker のアクション機能を実装して、Explore での分析によって抽出された顧客に対し、LINE 公式アカウントを通じてメッセージを送信するユースケースを解説します。
データ分析や LINE 公式アカウントを活用したプロモーション活動に関心がある方は、ぜひご一読ください。
Looker は、Google Cloud が提供する「データプラットフォーム」です。
集計前のデータ定義の作成、データの集計、ダッシュボードやレポートといったデータの可視化までの一連のデータ分析プロセスをカバーする機能を備えています。
Looker の機能概要については、ソフトバンクのテックブログ「データプラットフォーム「Looker」 の機能紹介」記事を参照してください。
今回は BigQuery にテスト用のテーブルを作成して、分析によって抽出されたユーザーに対し、LINE 公式アカウントを通じてメッセージを送信するアクション機能を実装しました。
本記事では、まず前半では、完成イメージとして完成したシステムの操作手順を紹介し、後半で本アクションを構築するためのシステム構成と手順を詳しく解説していきます。
前半では、「単一の ID に送信する手順」と、「絞り込んだ複数の ID に送信する手順」の2パターンの操作手順を紹介します。それぞれ基本的な流れは同じですが、 Looker Explorer 上での最初の操作が異なりますのでご確認ください。
後半で、本アクションを構築するためのシステム構成と手順を詳しく解説していきます。
ここから完成イメージとして、完成したシステムの操作例を紹介します。
まず Looker で指定した条件(例:LINE ID の登録がある、売上が 10 万円以上、等)を基に抽出した顧客に対して、個別にメッセージを送信するアクションの動作を確認します。
Explore でターゲットを絞りこみます。
LINE を送信したいユーザーの LINE ID が記載されたセルをクリックし、今回実装したアクションである「 LINE 公式 」をクリックします。(後半で説明しますが、/list エンドポイントで LINE 公式というメニューが出てくるように設定しています。)
ポップアップが表示されるので、LINE 公式アカウントから通知したいメッセージを入力し、送信をクリックします。(/form エンドポイントでテキストボックスが出てくるように設定しています。)
対象の LINE に、LINE 公式アカウントからメッセージが送信されます。(/execute エンドポイントで実行する処理を指定しています。)
次に、Lookerで抽出した顧客に対して、一括でメッセージを送信するアクションの動作を確認します。
Explore でターゲットを絞りこみます。
設定 > 送信 を選択します。
「 LINE 公式 」を選択し、メッセージに送信したい文面を入力し、送信をクリックします。
表示されている LINE ID 全てに対し、公式 LINE アカウントからメッセージが送信されます。
※テスト用に同じ LINE ID を使用したため、今回は1つの LINE に2件のメッセージが送信されています。
ここまでで完成イメージが理解いただけたかと思います。ここからは実装する方法を解説していきます。
Explore での分析によって抽出された顧客に対し、Looker のアクション機能を使って、LINE 公式アカウントを通じてメッセージを送信します。
本アクションでは、Looker Action API とLINE公式アカウントのMessaging APIを利用しています。Looker Action API については以前の「【Looker x GenAI】Looker と生成 AI で実現するパーソナライズドマーケティング:カスタム Action で顧客体験を向上」記事でも紹介しているので、こちらも併せてご確認ください。
データベース(BigQuery)には、送信する LINE ID が格納されている状態を前提としています。LINE ID の取得方法については公式ドキュメント「ユーザーIDを取得する」をご確認ください。
サーバー側では、Looker Action API を使用してカスタム Action を作成します。Action API は、Looker からのアクションを受け入れる Incoming Webhook のような API です。Looker Action API の詳細は公式ドキュメント「アクション ハブを介したデータ共有」を参照してください。本カスタム Action は、以下の3つのエンドポイントで構成されます。
本アクションでは execute エンドポイントで LINE Messaging API を使用するため、LINE 公式アカウント側での設定も必要です。LINE 公式アカウントのチャネルアクセストークン(長期)を取得して、execute エンドポイントに設定します。こうすることで execute エンドポイントが LINE 公式アカウントと連携でき、Looker で絞り込んだ LINE ID へメッセージを届けることが出来ます。
LINE Messaging API は、LINE が提供している LINE 公式アカウントのオプション機能です。無料で利用開始することができ、毎月一定数のメッセージを無料で送信することができます。詳細は公式ドキュメント「 Messaging APIの概要 」をご確認ください。
では、順を追って詳細を見ていきましょう。
このエンドポイントではアクション定義を作成し、レスポンスとして返します。
form / execute エンドポイントについてもここで定義します。
def action_list(request):
"""Return action hub list endpoint data for action"""
auth = authenticate(request)
if auth.status_code != 200:
return auth
response = {
'label': 'LINE Official',
'integrations': [{
'name': 'LINE公式',
'label': 'LINE公式',
'supported_action_types': ['cell','query'],
"required_fields": [{"tag":"cell_id"}],
"icon_data_uri": icon_data_uri,
'form_url': BASE_DOMAIN + 'form',
'url': BASE_DOMAIN + 'execute',
'supported_formats': ['json'],
'supported_formattings': ['formatted'],
'supported_visualization_formattings': ['noapply'],
'params': []
}]
}
print('returning integrations json')
return Response(json.dumps(response), status=200, mimetype='application/json')
'supported_action_types' には 'cell' と 'query' を指定し、セルからの実行と Explore からの実行を可能にしています。
また、セルからの実行を有効化するため、Looker 上で対象のセルを判別するためのタグとして "required_fields" に任意のタグ { "tag" : "cell_id" } を指定しています。この例では LookML で "cell_id" が付与されたフィールドに対して、アクションが実行できるようになります。
アクション実行画面でユーザーが入力するフォームを定義します。
def action_form(request):
"""Return form endpoint data for action"""
auth = authenticate(request)
if auth.status_code != 200:
return auth
response = [
{
'name': 'message',
'label': 'メッセージ',
'description': '送信メッセージを入力してください',
'type': 'textarea',
'required': True
}]
print('returning form json: {}'.format(json.dumps(response)))
return Response(json.dumps(response), status=200, mimetype='application/json')
本アクションでは、'required' に True を指定することで対象の LINE ユーザーに送信するメッセージを必須で入力するようにしています。
以下が execute エンドポイントの全体像になります。 execute エンドポイントでは、エンドポイント宛にアクション実行時に選択されたセルの情報( cell )もしくは分析結果( query )の情報が送信されます。 execute エンドポイントでは、送信されたデータを基に LINE Messaging API へのリクエストを送信します。
なお、今回は Google の Cloud Run 関数上で作成しているため、LINE Messaging API を利用する際のチャネルアクセストークン "CHANNEL_ACCESS_TOKEN" と、Big Query 上で LINE ID が格納されているカラム名 "LINE_ID_COLUMN" については、ランタイム環境変数として設定しています。詳細は公式ドキュメント「環境変数を構成する」をご確認ください。
def action_execute(request):
"""Generate a response from Generative AI Studio from a Looker action"""
auth = authenticate(request)
if auth.status_code != 200:
return auth
request_json = request.get_json()
attachment = request_json['attachment']
action_params = request_json['data']
form_params = request_json['form_params']
print(action_params)
print(form_params)
configuration = linebot.v3.messaging.Configuration(
host = "https://api.line.me"
)
# access_tokenを設定
configuration = linebot.v3.messaging.Configuration(
access_token=os.environ.get("CHANNEL_ACCESS_TOKEN")
)
message = '{\"to\":\"\",\"messages\":[{\"type\":\"text\",\"text\":\"\"}]}'
message_dict = json.loads(message)
#query処理
try:
all_data = sanitize_and_load_json_str(attachment['data'])
print(f"all_data {all_data}")
except Exception as e:
body = 'Warn: Attachment Data loading Error: ' + str(e)
print(body)
try:
for key in all_data:
if not key[os.environ.get("LINE_ID_COLUMN")] is None:
print(os.environ.get("LINE_ID_COLUMN"))
message_dict['to'] = key[os.environ.get("LINE_ID_COLUMN")]
message_dict['messages'][0]['text'] = form_params['message']
with linebot.v3.messaging.ApiClient(configuration) as api_client:
api_instance = linebot.v3.messaging.MessagingApi(api_client)
push_message_request = linebot.v3.messaging.PushMessageRequest.from_dict(message_dict)
api_response = api_instance.push_message(push_message_request)
print("The response of MessagingApi->push_message:\n")
pprint(api_response)
return Response(status=200, mimetype='application/json')
except Exception as e:
body = 'Warn: Attachment Data loop Error: ' + str(e)
print(body)
#cell処理
message_dict['to'] = action_params['value']
message_dict['messages'][0]['text'] = form_params['message']
with linebot.v3.messaging.ApiClient(configuration) as api_client:
api_instance = linebot.v3.messaging.MessagingApi(api_client)
push_message_request = linebot.v3.messaging.PushMessageRequest.from_dict(message_dict)
try:
api_response = api_instance.push_message(push_message_request)
print("The response of MessagingApi->push_message:\n")
pprint(api_response)
except Exception as e:
print("Exception when calling MessagingApi->push_message: %s\n" % e)
return Response(status=200, mimetype='application/json')
それでは、LINE Messaging API を使用して 上記の query 処理と cell 処理を作成する方法を確認していきましょう。
本アクションは、LINE の Messaging API を使用して LINE 公式アカウントからメッセージ通知を行います。Messaging API の詳細は公式マニュアル「 Messaging API 」を参照してください。それでは、Messaging API の実装を確認していきましょう。
LINE Developers コンソールで対象の LINE 公式アカウントを開き、Messaging API > チャネルアクセストークンからチャネルアクセストークン(長期)を取得します。
チャネルアクセストークンは、 execute エンドポイントで利用しますので、Cloud Run 関数の環境変数へ設定をおこないます。
Messaging API を利用することで、form で取得したメッセージを、分析結果に含まれる LINE ID に送信する事ができます。以下、execute エンドポイントから該当するコードの抜粋となります。
query 処理では分析結果から LINE ID を特定するため、LINE ID が記載されるカラム名を指定することで、対象の全ての LINE ID に対してメッセージを送信する処理を作成することができます。
#Query処理
try:
all_data = sanitize_and_load_json_str(attachment['data'])
print(f"all_data {all_data}")
except Exception as e:
body = 'Warn: Attachment Data loading Error: ' + str(e)
print(body)
try:
for key in all_data:
if not key[os.environ.get("LINE_ID_COLUMN")] is None:
print(os.environ.get("LINE_ID_COLUMN"))
message_dict['to'] = key[os.environ.get("LINE_ID_COLUMN")]
message_dict['messages'][0]['text'] = form_params['message']
with linebot.v3.messaging.ApiClient(configuration) as api_client:
api_instance = linebot.v3.messaging.MessagingApi(api_client)
push_message_request = linebot.v3.messaging.PushMessageRequest.from_dict(message_dict)
api_response = api_instance.push_message(push_message_request)
print("The response of MessagingApi->push_message:\n")
pprint(api_response)
return Response(status=200, mimetype='application/json')
except Exception as e:
body = 'Warn: Attachment Data loop Error: ' + str(e)
print(body)
以下、execute エンドポイントから該当するコードの抜粋となります。
cell 処理では、query 処理と違い、 LINE ID が記載されたセルからアクションを起動するため、メッセージを1回送信する処理のみを作成します。
#Cell処理
message_dict['to'] = action_params['value']
message_dict['messages'][0]['text'] = form_params['message']
with linebot.v3.messaging.ApiClient(configuration) as api_client:
api_instance = linebot.v3.messaging.MessagingApi(api_client)
push_message_request = linebot.v3.messaging.PushMessageRequest.from_dict(message_dict)
try:
api_response = api_instance.push_message(push_message_request)
print("The response of MessagingApi->push_message:\n")
pprint(api_response)
except Exception as e:
print("Exception when calling MessagingApi->push_message: %s\n" % e)
return Response(status=200, mimetype='application/json')
完成したら、完成イメージのように実行して動作確認をしてみてください。
本記事では、Looker と LINE 公式アカウントによるメッセージ送信処理について解説しました。データを活用して対象者を絞り、消費者にとって身近なコミュニケーションツールである LINE に対してメッセージが送信できるようになると、プロモーション活動をより効果的に行うことができます。
Looker ではこのように外部の API を活用することで、様々なシステムと連携でき、シームレスなデータ活用を実現します。Looker とそのアクション機能を活用し、より便利にデータを活用できないか検討してみてはいかがでしょうか。
Looker は定義から集計、可視化の一連のデータ分析プロセスをカバーする BI ツールを超えるデータプラットフォームです。ソフトバンクは、顧客のニーズに合わせて柔軟なサポートを提供し、Looker を活用したデータドリブンな企業変革を支援しています。
Google サービスを支える、信頼性に富んだクラウドサービスです。お客さまのニーズにあわせて利用可能なコンピューティングサービスに始まり、データから価値を導き出す情報分析や、最先端の機械学習技術が搭載されています。
MSP(Managed Service Provider)サービスは、お客さまのパブリッククラウドの導入から運用までをトータルでご提供するマネージドサービスです。
条件に該当するページがございません