これは「関連記事表示 by Vector Search 2.0」のデモサイトです。記事コンテンツはソリューションブログから引用しています。
KARTEのイベントをトリガーにLINEメッセージをリアルタイム送信する

KARTEのイベントをトリガーにLINEメッセージをリアルタイム送信する

こんにちは、Customer Engineerのichiです。好きな福岡のお菓子は「なんばん往来」です。

さて、今回はマーケティング担当者が日々の業務で試行錯誤をしている「ユーザーへのタイムリーな通知」に関するお話です。

KARTEを活用している皆さんの中には、サイトでポップアップやバナーを配信しつつ、LINE公式アカウントからの配信も行っている方が多いのではないでしょうか。ただ、それぞれが個別最適になりがちで、こうしたケースへの対応が難しいと感じることがあるかもしれません。

  • 会員申し込み完了直後に初回購入を訴求したいのに、ユーザーがページを閉じると届けられない
  • 解約を検討しているユーザーをフォローしたいのに、次のサイト訪問まで待つしかない
  • ランクアップをその瞬間に伝えたいのに、購買意欲が高いタイミングを逃してしまう

これらはすべて、サイトを離れたユーザーには届けられないという共通の課題です。

こうした課題は、Craft Functionsを使ってKARTEのイベントをトリガーにサーバーサイドから外部API(LINE Messaging API)を呼び出すことで解決できます。具体的には、次のようにユーザーの行動に応じて、最適なタイミングでLINEメッセージを届けられるようになります。

  • 会員申し込み完了直後に、ページが閉じられた場合でも確実に初回購入訴求ができる
  • 解約を検討しているユーザーに、再訪問を待たずにLINEでフォローアップできる
  • ランクアップした瞬間に、購買意欲の高いタイミングを逃さずLINEで特典情報を届けられる

今回はこうしたKARTEのイベントをトリガーに、CraftFunctionsからLINEメッセージをリアルタイム送信する方法を紹介します。

リアルタイムとは単に速く届けることではなく、ユーザーの行動を捉えて受け取りたいタイミングでメッセージを届けるためのアプローチです。この記事を読み終わる頃には実際に皆さんの手元で設定して動かせるようになっていますので、一緒に進めていきましょう。

アウトプットイメージ

最終的なアウトプットイメージは次の通りです。

一連のフローとしては、KARTEであらかじめ設定したトリガー条件(対象ユーザー・対象イベント)をユーザーが満たした際に、LINEメッセージが届きます。ここでのトリガー条件とは、会員申し込み完了時やランクアップなどを指しています。

LINEメッセージ受信

この例ではシンプルなテキストメッセージを送信していますが、ユーザー情報を埋め込んだパーソナライズメッセージや、画像・スタンプなどリッチな形式のメッセージもカスタマイズ次第で配信可能です(詳細は補足セクションを参照)。

構成図は次の通りです。

LINEメッセージを送信するには、事前にKARTEのユーザーIDとLINEのユーザーIDのマッピングデータを紐付けテーブルにインポートしておく必要があります。

まず、KARTEで設定したトリガー条件を満たした際に、Craft Functions連携接客が発火します。この接客サービスでは、紐付けテーブルに格納された該当ユーザーのline_user_idをユーザー情報変数として参照し、アクション設定で指定したメッセージ内容と合わせてCraft Functionsに渡します。

参考:接客から実行する(サーバーサイドアクション)

次に、ファンクション内では、受け取ったline_user_idとメッセージ文字列を、LINE Messaging APIが求める形式(JavaScriptオブジェクト)に変換します。その後、Craft KVSで1回のトリガーにおける重複実行を防止した上で、LINE Messaging API経由でメッセージを送信します。

なお、LINE Messaging APIの仕様については、LINE Messaging API - プッシュメッセージを送るを参照してください。

注意点

前提として、次の点に注意をしてください。

  • KARTEの接客サービス、紐付けテーブル、KARTE Datahub、Craft Functions、Craft KVSが利用できるKARTEプロジェクトが必要です
  • KARTE CraftはGrowthプラン以上のご契約が対象です
  • LINE公式アカウントが未作成の場合は、LINE Official Account Managerから事前に作成してください
  • LINE公式アカウントの月間送信数はプランにより上限があるため、実施施策に応じて事前に確認してください
  • 本ソリューションは2026年04月時点のAPI仕様を元に実装しています
  • KARTEのユーザーIDとLINEのユーザーIDの紐付けが必須です
    • line_user_idが特定できない場合、LINEメッセージを配信できません
    • 紐付けは手順1で説明する紐付けテーブルを使って事前に設定しておく必要があります
    • 既に紐付けリストがあればそれを利用し、まだリストがない場合はCraft Functionsを使ってLINE IDとWebサイトのユーザーIDを紐付けるも参考にしてください

設定手順

設定の手順は次の通りです。

  1. 紐付けテーブルにKARTEのユーザーIDとLINEのユーザーIDのマッピングデータをインポートする
  2. LINE公式アカウントのチャネルアクセストークンを取得する
  3. チャネルアクセストークンをCraft Secret Managerに登録する
  4. Craft Functionsを作成する
  5. Craft Functions連携接客を作成する

順番に見てみましょう。

1. 紐付けテーブルにKARTEのユーザーIDとLINEのユーザーIDのマッピングデータをインポートする

KARTEのユーザーとLINEのユーザーを紐付けるために、紐付けテーブルを利用します。

一般的には、Datahubジョブフローで自動的に紐付けデータを更新する運用が推奨されますが、今回は検証のため管理画面からCSVファイルをインポートする方法を紹介します。

次のような形式のCSVファイルを用意します。

user_idline_user_id
abc123U1234567890abcdef1234567890abcdef
xyz789U2345678901bcdef02345678901bcdef0
  • user_id: KARTEで計測しているユーザーIDと同じ値(会員ID、顧客番号など)
  • line_user_id: LINE公式アカウントから取得したユーザーID(Uから始まる文字列)

次に、紐付けテーブルにデータをインポートします。

  • [Insight > 紐付けテーブル] から紐付けテーブル一覧画面を開きます
  • [作成] ボタンをクリックし、[CSVから紐付けテーブルを作成] を選択します
  • テーブル名を入力し、用意したCSVファイルをアップロードします
  • 各フィールドのデータ型を確認します(user_id: STRING、line_user_id: STRING)
  • 主キーを選択します(user_idを選択)
  • テーブルを作成します
  • 作成されたテーブルの [データ紐付け] タブを開きます
  • 右上の [編集] をクリックします
  • [紐付けテーブルの有効化] にチェックを入れます
  • 以下の設定を行います
    • 紐付け対象のフィールド: ユーザー情報 > user_id
    • データの追加先: ユーザー情報
  • 右上の [保存] をクリックします

設定が正しく完了していれば、プレビュー画面でデータが確認できます。紐付けたデータは、後述の手順5(接客サービス設定)でユーザー情報変数 line_user_id として利用します。

詳細な手順については、ユーザーにデータを紐付ける(CSVファイルを直接アップロードする場合)を参照してください。

2. LINE公式アカウントのチャネルアクセストークンを取得する

Craft FunctionsからLINE Messaging APIを呼び出す際に、「どのLINE公式アカウントに対して許可されたリクエストか」をLINEのサーバーに証明するために必要なチャネルアクセストークンを取得します。

チャネルアクセストークンはLINE Developersのコンソールから以下の手順で取得可能です。

  • [トップ > プロバイダー名 > チャネル名 > チャネル基本設定] の順に遷移します
  • チャネル基本設定の中にチャネルアクセストークンがあるので、それをコピーしてください
  • チャネルアクセストークンが未発行の場合は、右側のボタンから発行してください

コピーしたチャネルアクセストークンは、後ほどCraft Secret Managerに登録します。

3. チャネルアクセストークンをCraft Secret Managerに登録する

チャネルアクセストークンをCraft Functionsから安全に利用するために、Craft Secret Managerに登録します。

  • [Craft > シークレット] からシークレットを新規作成します
  • [名前] に、わかりやすい名前を入力します
  • コピーしておいたチャネルアクセストークンを [シークレットの値] に入力し、作成してください

シークレット名は、Craft Functions作成時に必要なのでコピーしておいてください。

4. Craft Functionsを作成する

LINE Messaging APIを呼び出すためのCraft Functionsを作成します。作成手順は次の通りです。

  • [すべてのメニュー > Craft > ファンクション] からファンクション一覧画面を開きます

  • [新規作成 > テンプレートから作成] を選択します

  • KARTEのイベントをトリガーにLINEメッセージをリアルタイム送信する」というテンプレートを検索し[取得]ボタンをクリックします

  • [反映] ボタンをクリックします

  • [設定] タブでファンクションのタイプイベント駆動タイプに設定します

  • [変数] タブで次の変数の値を設定してください

    • LOG_LEVEL
      • 出力するログのレベルです
      • ERROR/WARN/INFO/DEBUGから指定します
    • CHANNEL_ACCESS_TOKEN_SECRET
      • 手順3で作成したシークレット名です
  • 適当なファンクション名をつけて [デプロイ] します

なお、テンプレートのソースコードはGitHubで公開されています。

craft-codes/craft-functions/line-messaging-api-push at main · plaidev/craft-codes

5. Craft Functions連携接客を作成する

接客サービスの配信をトリガーに、ファンクションを実行するための接客サービスを作成します。この接客サービスは通常の接客サービスと異なり、ユーザー端末の画面上には表示されず、トリガー条件(対象ユーザー・対象イベント)を設定する役割を持ちます。

  • 接客サービス画面を開きます
  • Craft Functions連携 テンプレートを利用してアクションを追加します

今回は、特定の条件を満たしたユーザーに対してLINEメッセージを送信するため、次のようにCraft接客の配信設定を行います。

  • 「アクション」
    • 配信率: 100%
      • ※ アクションの中身の設定については後述します
  • 「対象ユーザー」
    • 条件を指定してLINEメッセージを送信したいユーザーを絞り込みます
    • ※ 検証中はテスト配信用のセグメントを設定してください
  • 「対象イベント」
    • LINEメッセージを送信したいタイミングに合わせてイベント条件を指定します
    • 例: 特定のページを閲覧した、特定のカスタムイベントが発生した、など
  • 「配信モード」
    • イベント応答配信
  • 「オプション」
    • 同時配信: OK
  • 保存をします

次に、接客サービスに登録したアクションの設定をしていきます。ここで設定した内容がCraft Functions側に渡されます。

紐付けテーブルで紐付けたデータは「ユーザー情報変数」で接客サービス内に埋め込むことができます。その機能を活用して、line_user_id とメッセージ内容をCraft Functions側に渡す設定を行います。

  • 当該接客サービスの編集ボタンを押して、「アクション設定」の各項目を埋めていきます
    • 「ファンクション名」

      • 手順4で作成したファンクションの名称を設定します
    • 「name」

      • 今回は利用しないため任意の値で問題ありません。ここでは「ファンクション名」と同じ値を設定します
    • 「data」

      • JSONでline_user_idmessage を設定します
{
  "line_user_id": "#{line_user_id}",
  "message": "LINEソリューションのテスト配信です"
}
  • 「データ管理」をクリックします

    • ユーザー情報変数を次のとおりに設定します
      • 変数名:line_user_id
      • すべての期間 > ユーザー情報 > line_user_id > 最新の値
  • 保存します

以上で、接客サービスが配信されたタイミングで、Craft Functions側にLINEユーザーIDとメッセージ内容を渡す設定が完了しました。

実際に動かしてみる

実際に動作を確認してみましょう。

まず、接客サービスで設定した配信条件を満たすアクションを実行します(例: 特定のページを閲覧する)。

接客サービスが配信されると、Craft Functionsが実行されます。Craft Functionsの実行ログを確認して、エラーが発生していないか確認しましょう。

  • [Craft > ファンクション] から作成したファンクションを開きます
  • [ログ] タブで実行ログを確認します

正常に実行されていれば、LINE message sent successfully. というログが出力されます。

そして、指定したLINEユーザーにメッセージが届いているか確認します。

LINEメッセージ受信

メッセージが届いていれば、設定は正しく完了しています。

補足

重複実行の防止について

このCraft Functionsテンプレートでは、Craft KVSを使った重複実行防止の仕組みが実装されています。

KARTE Craftの特性上、1回のトリガーに対してファンクションが複数回実行される可能性があります。LINEメッセージの送信のような処理は重複実行が望ましくないため、リクエストIDをキーにしてCraft KVSに書き込むことで、同じリクエストが複数回実行されないように制御しています。

詳細については、以下の記事も参考にしてください。

参考:KARTE Craftでファンクションの重複実行を防ぐ

メッセージ形式のカスタマイズについて

このテンプレートは、シンプルなテキストメッセージの送信に特化した実装になっています。

LINE Messaging APIは、テキストメッセージ以外にも画像、スタンプ、位置情報、フレックスメッセージなど、様々な形式のメッセージ送信に対応しています。これらのメッセージ形式を送信したい場合は、ソースコード内のformatMessages関数をカスタマイズすることで対応できます。

formatMessages関数は、Craft Functionsから受け取ったmessageパラメータを、LINE Messaging APIのmessagesプロパティ形式に変換する役割を持っています。

デフォルトの実装(テキストメッセージ):

function formatMessages(message) {
  return [
    {
      type: 'text',
      text: message,
    },
  ];
}

例えば、画像メッセージを送信したい場合は、次のように変更できます:

function formatMessages(imageUrl) {
  return [
    {
      type: 'image',
      originalContentUrl: imageUrl,
      previewImageUrl: imageUrl,
    },
  ];
}

この場合、接客サービス側のdata設定も、messageではなくimageUrlのようなパラメータ名に変更し、画像URLを渡すように調整してください。

詳細なメッセージタイプの仕様については、LINE Messaging API - メッセージオブジェクトを参照してください。

【参考】テキストと画像を同時に送信する例

例えば、会員申し込み完了直後に、初回購入限定クーポンの画像を一緒に送ることで、サイト上での情報の見落としをカバーしつつ、初回購入を促すアクションも確実に届けられます。

テキストメッセージと画像メッセージを同時に送信したい場合は、formatMessages関数を次のように変更します。

function formatMessages(message, imageUrl) {
  return [
    {
      type: 'text',
      text: message,
    },
    {
      type: 'image',
      originalContentUrl: imageUrl,
      previewImageUrl: imageUrl,
    },
  ];
}

接客サービス側のdata設定:

{
  "line_user_id": "#{line_user_id}",
  "message": "初回購入限定クーポンです!",
  "imageUrl": "https://example.com/coupon.png"
}

imageUrl には、実際に配信したいクーポン画像のURL(HTTPS、JPEG/PNG形式)を指定してください。

実際に送信される例:

テキストとクーポン画像配信例

おわりに

今回はKARTEのイベントをトリガーに、Craft FunctionsからLINEメッセージをリアルタイム送信する方法を紹介しました。

この方法を使えば、冒頭で挙げたユーザーのアクションに即座に反応しないと実現できないような課題を解決できます。ユーザー視点でも、受け取りたいタイミングでメッセージを受け取れたり、フォローが受けられるのはすごく便利で気持ちがいいですよね。

ご紹介した内容が皆さまにとって少しでもお役に立てれば幸いです。ぜひ活用してみてください!