これは「関連記事表示 by Vector Search 2.0」のデモサイトです。記事コンテンツはソリューションブログから引用しています。
Craft Cross CMSで公開したコンテンツをアクションテーブルに同期する

Craft Cross CMSで公開したコンテンツをアクションテーブルに同期する

こんにちは、Customer Engineerのichiです!最近はメスカルバーに入り浸っています!100%アガベ!

さて、今回はCraft Cross CMSで管理しているコンテンツを、KARTEのアクションテーブルにリアルタイムで自動同期する仕組みについてご紹介します。

ECサイトの運用において、コンテンツ管理担当者がCMSで記事やバナーを公開したのに、マーケティング担当者がそれを使ってKARTEで接客サービスを配信できるのは翌日以降のデータ連携後になってしまうといったタイムラグや、都度エンジニアにマスターの更新を依頼する部門間の連携コストに悩まされていませんか?

今回の仕組みを使えば、Craft Cross CMSの公開ボタンを押すだけで、即座にアクションテーブルに情報が同期され、こうした一連の課題を解決できます。

アクションテーブルにデータが同期されるメリットが特に活きる例として、ECサイトにおける「セール対象商品」や「期間限定商品」などの情報を扱うシーンが挙げられます。CMS側で公開・非公開を切り替えるだけで、接客サービスの表示内容も即座に同期されるため、「終了後なのにバナーが出続けている」といった事故を防ぎ、常に鮮度の高い情報だけをユーザーに届ける運用が実現できます。

上記の実現にあたり、すでにアクションテーブルで運用している施策のデータ入稿フロー(CSV等)をそのままCMSに置き換えたり、KARTE Blocksのダイナミックブロック機能と連携させたりと、既存の仕組みや他機能を最大限に活用できる点も大きな強みです。

アウトプットイメージ

今回の記事では、Craft Cross CMSで「商品情報」を入稿し、それをアクションテーブルに自動連携するシーンを想定します。

「商品情報をいち早く正確にユーザーに知らせたい」というニーズは、ECサイトの運営において最もポピュラーかつ、情報の鮮度が求められるものだからです。Craft Cross CMSの手軽な入稿体験と、接客サービスでの即時活用を両立させる理想的なケーススタディとして、今回はこの構成で解説します。

最終的なアウトプットイメージは次の通りです。CMSでコンテンツを作成・公開します。

すると、アクションテーブルに対象のデータが自動的に追加・更新されます。

また、CMS側でコンテンツを下書き(非公開)にすると、アクションテーブルからも対象のデータが自動的に削除されます。これにより、常に「現在公開中のコンテンツ」だけがアクションテーブル上に存在する状態となります。

構成図は次の通りです。

Craft Cross CMS側の対象モデルでコンテンツが公開されると、Hookの仕組みでCraft Functionsが実行されます。そのファンクション内で、次のような処理が実行されます。

  • CMSからコンテンツの中身を取得
  • アクションテーブルのカラム定義に合わせてデータを成形
  • アクションテーブルにレコードを作成・更新

この一連の処理には、次のAPI群が使われています。

  • Get a content
    • Craft Cross CMSからコンテンツの中身を取得
  • Upsert records
    • アクションテーブルへのレコード追加・更新
  • Delete records
    • アクションテーブル上のレコードを削除

注意点

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

  • API v2、Craft Functions、Craft Cross CMSが利用できるKARTEプロジェクトが必要です

設定手順

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

  1. API v2 アプリを作成する
  2. API v2 アプリの アクセストークンを Craft Secret Manager に登録する
  3. Craft Cross CMSのモデルを作成する
  4. アクションテーブルを作成する
  5. Craft Functionsを作成する
  6. CMS更新時のHookを設定する

1. API v2 アプリを作成する

Craft Functionsから各機能にアクセスするためのAPI v2アプリを作成します。

  • [ストア > API v2設定] からアプリを新規作成します

  • [アプリタイプ] を token に設定します

  • 必要なscopeを追加してください

    • beta.cms.content.get
    • beta.action.actionTable.records.upsert
    • beta.action.actionTable.records.delete
  • アプリを保存し、一度だけ表示されるアクセストークンをメモしておきましょう

2. API v2 アプリの アクセストークンを Craft Secret Manager に登録する

API v2 アプリのアクセストークンをCraft Functionsから安全に利用するために、Craft Secret Manager に登録します。

  • [Craft > シークレット] からシークレットを新規作成します

  • [名前] に、わかりやすい名前を入力します

  • メモしておいたAPI v2 アプリのアクセストークンを [シークレットの値] に入力し、作成してください

  • シークレット名は、Craft Functions作成時に必要なのでメモしておきましょう

3. Craft Cross CMSのモデルを作成する

アクションテーブルに同期するコンテンツの構造を定義するため、Craft Cross CMSでモデルを作成します。

  • [Craft > CMS > コンテンツ設定] の [モデルを追加]から、モデル作成画面を開きます
  • itemsなど適当なモデル名で、次の例のようなフィールドをもつモデルを作成してください
  • 「フィールドID」が、そのままアクションテーブルのカラム名として扱われます。後ほど作成するアクションテーブルのカラム名と一致させてください
表示名フィールドIDタイプ
タイトルtitleテキスト
詳細文descriptionテキスト
画像image画像
リンクURLlink_urlテキスト
  • JSONプレビューの中にあるmodelIdの値をコピーしておきます
    • 例: a1234567890b2345678901c3

4. アクションテーブルを作成する

CMSのコンテンツデータをレコードとして同期するためのアクションテーブルを作成します。手順は以下の通りです。

  • [Action > アクションテーブル > 作成 > 空のテーブルを作成]からアクションテーブルを新規作成します

    • アクションテーブルID: 任意の文字列を指定します
    • 主キー: content_id (文字列) を指定します
  • [テーブル情報 > スキーマの管理]から以下のようにカラムを追加します

    • content_id 以外のカラム名は、手順3で作成したCMSの「フィールドID」と完全に一致させてください

今回使用するフィールドの例は次の通りです。

フィールド名フィールドの種類説明
content_id文字列コンテンツID(主キー)
title文字列タイトル
description文字列詳細文
image文字列画像URL
link_url文字列リンクURL

5. Craft Functionsを作成する

CMS更新を検知してコンテンツをアクションテーブルに同期するためのファンクションを作成します。

  • [Craft > ファンクション > 新規作成 > テンプレートから作成] を選択します

  • Craft Cross CMSのコンテンツをアクションテーブルに連携する 」というテンプレートを検索し[取得]ボタンをクリックします

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

  • [設定 > ファンクションのタイプ] で「イベント駆動タイプ」を選択します

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

変数名設定例説明
LOG_LEVELWARN出力するログのレベルです。ERROR/WARN/INFO/DEBUGから指定します
TARGET_MODEL_IDa1234567890b2345678901c3同期対象となるCraft Cross CMSのモデルIDです(手順3でメモした値)
ACTION_TABLE_IDitem_table同期先のアクションテーブルIDです(手順4で作成したID)
KARTE_APP_TOKEN_SECRETKARTE_APP_TOKENAPI v2アプリのtokenを登録したシークレット名です(手順2でメモした値)
TARGET_CMS_FIELDStitle,description,image,link_urlアクションテーブルに同期する対象のCMS側フィールド名をカンマ区切りで指定します
  • 適当なファンクション名をつけて [デプロイ] します

補足

対応しているCMSのフィールド種類について

今回のCraft Functionsのテンプレートは、以下のフィールドタイプに対応しています。

  • フィールドの値がそのまま同期されるフィールド
    • テキスト、数字、日付、選択、チェックボックス、選択、参照
  • 自動的にURLが抽出されて同期されるフィールド
    • 画像、ファイル

上記以外の種類のフィールドは、同期対象に設定することはできません。対応させる場合は、下記のテンプレートのコードを参考にカスタマイズを行ってください。

craft-codes/craft-functions/xcms-hook-to-action-table at main · plaidev/craft-codes

6. CMS更新時のHookを設定する

CMSのコンテンツが公開・非公開された際に自動でCraft Functionsを起動するため、作成したAPI v2アプリの設定でHook v2を設定します。

  • [ストア > API v2設定] から作成したアプリを選択します
  • [hook設定 > 編集] をクリックします
  • [トリガー設定] で次のトリガーを追加してください
    • KARTE CMS: コンテンツの公開時
    • KARTE CMS: コンテンツの非公開時
  • [チャネル設定 > Craft > hook status > 有効にする] にチェックを付け、作成したファンクションを選択します
  • アプリ設定を保存します

実際に動かしてみる

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

「コンテンツ公開時」の動作確認

  • Craft Cross CMSの対象モデルで、コンテンツを新規作成し、公開します

  • 少し待って、アクションテーブルに対象のデータが追加されていることを確認します

「コンテンツ非公開時」の動作確認

  • Craft Cross CMS側で、先ほど公開したコンテンツを下書き(非公開)にします
  • 少し待って、アクションテーブルから対応するデータ(同じ content_id のレコード)が削除されていることを確認します

うまく動作しない場合は、ファンクションのログにエラーが出ていないか、あるいはアクションテーブルの content_id が正しく「主キー」に設定されているかを確認してみてください。

まとめ

今回は、Craft Functionsを使ってCraft Cross CMSのコンテンツをアクションテーブルにリアルタイム同期する方法を紹介しました。

この仕組みを導入すれば、コンテンツ管理者がCMSで「公開」ボタンを押した瞬間に、その情報が接客サービスで利用可能になります。

これまでは翌日以降のデータ連携を待っていた「新商品の告知」や「緊急のキャンペーンバナー」なども、思い立ったその瞬間にユーザーへ届けることができるようになります。

情報の鮮度が命である施策実施において、このスピード感は大きな武器になるはずです。ぜひ試してみてください!