タグ分析の「有効・解除済み」について
タグ付与、解除の現在のステータスと、過去の履歴となります。
タグ付与時は「有効」となり、削除すると「解除済み」となります。
タグの付与と解除が1セットで、一度タグ解除したタグを新たに付与すると、
新しい行に有効データとして記録されます。

また有効なタグのみ表示させたい場合は、絞り込み機能で「現在有効なタグのみ表示」にチェックを入れてください。
チェックボックスの複数選択でそれぞれにタグを付与する方法
■目的
複数選択のチェックボックスで、選択項目それぞれにタグを付与します。

チェックボックスの作成方法はこちら>

■セット所要時間
30分


■サンプルコード
フォームサンプルページ>
フォームサンプルページダウンロード>
※ソースコード確認方法
windows:Ctrl + U 
mac  :option + command + U 


■セットの流れ
チェックボックスが選択されたタイミングでid="add_tags"のvalueにタグを格納します。
フォームが送信されると格納されたタグが付与されます。
タグコードに本番用のタグコードをご設定ください。

<script>
//チェックボックス選択
$(function () {
	$('.trigger input').on('change', function () {
		tags = [];//空の配列

		$('.trigger input:checkbox:checked').each(function() {
			var val = $(this).val();

			if(val == '自分にピッタリな商品だと思ったから'){
				tags.push('タグコード1');
			}
			else if(val == '有名人・雑誌・TVなどの影響を受けたから'){
				tags.push('タグコード2');
			}
			else if(val == '友人知人の紹介だから'){
				tags.push('タグコード3');
			}
			else if(val == '試してみたかったから'){
				tags.push('タグコード4');
			}
		});

		//送信用にタグを格納
		document.getElementById("add_tags").value = tags;

		//ボタン表示
		if ($('.btn.entry').css('display') == 'none') {
			$('.btn.entry').show();
			scrollNext('#scrollAnchor');
		}
	});
});
</script>

ガイドの内容はあくまでもサンプルになります。
そのまま使用できない場合は対応するフォームにあわせての編集をお願いします。 
表示設定が正常にできない場合、ソースチェックの有償サポートも行っております。
ご希望の場合は設定代行バナー、もしくはお問い合わせLINE、チャットワークよりご依頼をお願いします。
タグの表示順について
■タグリスト
初期表示は該当会員数の多いい順、同一の該当会員数の場合は作成日時が新しい順

■1:1トーク
作成日時が新しい順

■会員リスト
タグ付与された順

■ステップメッセージ
タグ付与された順

■タグ絞り込み
タグ追加した順

■タグサジェスト
タグリストの順番と同じ
(※初期表示は該当会員数の多いい順、同一の該当会員数の場合は作成日時が新しい順)
機能改善#043┃各種メッセージ作成画面でタグの作成ができるようになりました!

各種メッセージ作成画面でタグの作成ができるようになりました!

これにより「ステップメッセージ作成前にタグを作り忘れた」「ステップメッセージ作成時に急にタグが必要になった」というケースを解消できるため、作業効率をアップさせることができます。


▼作成画面でタグ作成ができる対象メッセージ

・一斉配信メッセージ(高度な設定)
 ・応答メッセージ(高度な設定)
 ・ステップメッセージ(トリガータグ、シナリオ>高度な設定)
 ・リマインドメッセージ(シナリオ>高度な設定)
 ・ブロック解除時メッセージ(高度な設定)


▼作成手順
①「配信後、会員にタグを追加」にチェック

②タグを作成


➂タグ名を入力

④保存する


⑤作成したタグがプルダウンで選択できるようになります

2つのタグがどちらも付与された時にステップメッセージ送信をする方法

2つ以上のタグがどちらも付与された時にメッセージを送ることが可能です。
これにより2つ以上の特定条件で絞り込みができるため、よりユーザーの趣味趣向や段階に合わせたメッセージ送信が可能になりCVRアップに繋げることができます!

※このガイドで説明する設定方法は、2つのタグ【A】と【B】どちらのタグが先に付与されるか順番が決まっていない場合のメッセージ送信方法になります。


▼使用例

・「【A】流入経路別にタグ」+「【B】本人確認確認フォーム回答済みタグ」のどちらも付いたときにステップメッセージを送る。
・「【A】流入経路別タグ」+「【B】商品Aタグ」のどちらも付いたときにステップメッセージを送る。



▼設定方法
【A】【B】のタグが付いたときに【C】のタグが付与され、【C】のタグが付与された際にステップメッセージが配信されるように設定します。

①【A】【B】2つ以上のタグがすべて付与された時に付与されるタグを作成
 ┗タグの作成方法はこちら>



②【A】【B】2つ以上のタグがすべて付与された時に【C】タグが付与されるように設定
 タグの自動設定では「すべてを満たした場合」にチェックし「自動で追加」に設定する。
 ┗タグの自動設定方法はこちら>




➂【C】タグをトリガーにしてステップメッセージを送信
 ┗タグトリガーステップメッセージの作成方法はこちら>



▼補足
タグの自動設定の更新は30分に1回のため、【A】【B】2つのタグが付いてから【C】タグが付くまで約30分かかります。
 ┗タグの自動設定の更新頻度はこちら>

解約休止フォームの作成方法

(1)下記より解約休止フォームのテンプレートをダウンロード
ダウンロードはこちらから>

↓↓↓

(2)フォーム送信時のタグの設定
ダウンロードしたファイルを解凍し、index.htmlの「タグコード」部分を商品ごとに管理画面で設定したタグコードに変更

フォームの編集方法タグの作成につきましてはこちら>
タグ設定の詳細はこちら>


↓↓↓

(3)フォームの編集
フォームの内容を変更する場合はindex.html,complete.htmlを編集してください。

ラジオボタンの作り方>
チェックボックスの作り方セレクトボックスの作り方マイクロコピーの追加画像の追加方法htmlファイルの詳細の説明はこちら>

↓↓↓


(4)LIFFの作成
LIFFの作成についてはこちら>

↓↓↓


(5)作成したLIFFにファイルをアップロード
アップロードについてはこちら>

↓↓↓


(6)スマホよりテスト送信を行い、意図した挙動になっているかご確認下さい。
フォームのテスト送信方法
上記以外にも多数のテンプレートをご用意しております。
スクロールタイプ、ポップアップバナー、チャット型などをご希望の場合は下記よりダウンロードしてください。
テンプレート>
一斉配信やステップ配信のタグ絞込みを使った際はいつのタイミングでタグを保持している人を絞り込んでますか?

■50人以下
・一斉配信の予約配信日時の時点で指定のタグが付いてる人に配信

■50人以上
・一斉配信の予約配信日時から30分前時点でタグが付与されていた人 かつ 予約配信日時迄にタグが付与された人


例)

8月1日AM10:00に配信予約がされていた際は8月1日AM10:00時点にタグが付いてる人を対象とします。

※フラグなどの絞り込みも同じタイミングになりますが、「除く」に関しては配信日時の30分前の情報が最新となり絞り込まれます。

特定のタグが付いているユーザーを会員リストで絞り込みしてリッチメニュー変更する方法

①タグ追従設定(リッチメニュー)の設定
 タグ追従設定の設定方法はこちら>

②特定のタグが何かを確認する
 例:本人確認フォーム入力後に付与されるタグ、解約休止申請フォーム送信時に付与されるタグ

➂会員リストから「②」のタグで絞り込みをし一括タグ変更によりリッチメニュー変更する。
 一括タグ変更方法はこちら>

【広告】LPからの計測で、流入元を問わずコード別でクリック数、LCVを計測する方法
マイページやサンクスページなど、固定の経路で流入してくる場合などに使用できます。
通常のLPからの計測の応用版になります。

LPからの計測設定についてはこちら>

上記の設定に加えて、計測タグの下に下記コードを追加してください。
※広告コードは指定のものに変更
  <script>
    paramobj['ecaiad'] = '広告コード';
  </script>
設置例)
※キャンペーンURLを使用しても、しなくてもクリックが1で計測されます。

新機能#033┃タグ追従リッチメニューに絞り込み機能が付きました!

付与されたタグを起点にリッチメニューを自動で変更する「タグ追従リッチメニュー」に絞り込み機能が付きました!



これによりタグ起点でリッチメニューを変更したいのだが、特定のこの人だけは変えちゃダメだ!という設定ができるようになります。

↓↓↓

使用例)

リッチメニューを変えたくないオファーをしているユーザーがいた際に、除外設定でその方のリッチメニューのみ変更しないという設定が可能になります!

新機能#69┃1つのタグ自動設定で複合した条件をOR条件で設定できるようになりました!

■目的
1つのタグ自動設定で複数の複合条件を設定できるようになりました!
これにより、タグ自動設定の運用幅が広がり効率良く自動タグ付けをすることが可能になります。

—使用例—

・「商品ID+定期ステータス」の条件を複数の商品ID分設定
・「商品ID+購入回数」の条件を複数の商品ID分設定



■セット所要時間
3分

■セット方法
※複合した条件をOR条件はタグ自動設定の「いずれかを満たした場合」を選択した場合のみ利用可能です
タグ自動設定の設定方法はこちら>

①「いずれかを満たした場合」を選択

②+ルールを追加


➂「+」をクリック


④条件内容を設定する(最大5件まで条件追加が可能です)


■補足
・継続ステータスを選択する場合は「のみ」を選択することを推奨します ※「含む」は選択しない
 ※複数の定期を購入しているユーザーがいた際に「含む」の場合は正しくステータス反映ができなくなってしまうためです

ステップメッセージの配信対象者がいる状態で、セットしているメッセージ編集をしてもメッセージは送られるか?

ステップメッセージの配信対象者がいる状態で、セットしているメッセージ編集をしてもメッセージは送られます。

▼シーン
タグトリガーステップメッセージで5通のシナリオが登録されていたとして、「トリガータグ」が付いて1通目・2通目まで送られた状態で3通目のメッセージ編集をしたとします。
元のメッセージが「3通目です」から、「3通目変更後です」に変更したとしても、変更後のメッセージが配信されます。
また、ステップメッセージの編集画面を開いた状態のままでも3通目以降のメッセージは送られます。


■補足
本当に送られるかどうかのテストをする際はシナリオの時間を短くすることで、短時間で挙動確認ができます。
 ┗例:1通目0分後、2通目2分後、3通目4分後でセットする

新機能#75┃誕生月・誕生日ごとに自動でタグ付与することが可能になりました!

■目的
誕生月・誕生日ごとに自動でタグ付与することが可能になりました!
自動でタグ付与ができるようになったことで、タグ付与に使っていた作業時間を削減することができます。

誕生月・誕生日ごとにタグを付与しておくことで、一斉配信メッセージ送信時の絞り込みによって誕生日メッセージを送ることが可能です。
誕生日や記念日など毎年決まった日にメッセージ予約する方法はこちら>

▼使用例

・4月生まれのお客様に「4月」というタグを自動付与
・3月1日〜6月1日生まれの方に「春生まれ」というタグを自動付与


▼仕様
自動タグ付与時に参照とする生年月日は、ECAIの会員情報に紐付いた生年月日となります。

ECAIの会員情報情報に生年月日を紐付けする方法は「手動」「フォーム入力」「カート連携」の3パターンあります。
 ┗手動入力方法はこちら>
 ┗フォーム入力方法はこちら>
 ┗カート連携方法はこちら>
 
生年月日カート連携により反映できるのはecforce・リピスト・サブスクストア・楽楽リピートのみとなります。
※Shopify・楽天RMSからは生年月日のカート連携取得はできません


■セット所要時間
3分

■セット方法
①各月や各日のタグを作成
 ┗タグの作成方法はこちら>

②会員

➂タグリスト


④付与したいタグの「自動設定」をクリック

⑤「誕生日」を選択
※「誕生月」を選択した場合月ごとの指定はできず、毎月1日0時0分にその月の生まれの会員に自動でタグを付与もしくは解除するという仕様になります

⑥期間を指定
 ┗5月生まれを指定したい場合は「05/01~05/31」にする
 ┗3月1日〜6月1日生まれを指定したい場合は「03/01~06/01」にする
※1980年4月1日〜1989年3月31日までのように西暦を含めた期間指定はできませんためご注意ください

⑦保存する


▼補足
・タグの自動設定の更新頻度15分に1回です。15分におおよそ10,000件の自動タグ付与・削除が可能です。
 ┗タグの自動設定は毎時00分と15分と30分と45分に更新されます

機能改善#063┃タグの自動設定の更新頻度が15分に短縮されました!

■目的
タグの自動設定の更新頻度が15分に短縮されました!
これにより、カート連携によって取得された情報を条件にした自動タグ付与の時間を短縮できるため、カート連携情報を元にしたメッセージをより早くより正確にユーザーへ配信することが可能になります。

タグ自動設定の設定方法はこちら>

タグの自動設定の更新頻度15分に1回です。
15分におおよそ10,000件の自動タグ付与・削除が可能です。
※タグの自動設定は毎時00分と15分と30分と45分に更新されます


■セット所要時間
無し

■補足
・サーバーの混雑状況により自動タグ付与・削除の件数前後します。
・タグの自動設定を設定した順に自動付与・削除をします。
 (さらに該当者のECAI IDの若い順に自動付与・削除します)
・タグの自動設定をしているタグの数によって自動タグ付与・削除までの時間が前後します。
・カート情報をトリガーにタグの自動設定をする場合、確認工程が遅いため15分で処理しきれずにタグ付与・削除に大幅に時間がかかる場合があります。

ポイント機能の使い方例
【基本機能】

ポイント数に応じてタグを一斉付与する方法>

ポイント数に応じてタグを一斉削除する方法>

自動でポイント付与・削減する方法>

ユーザー側でポイントを確認する方法>

ポイント数に応じて自動でタグを付与する方法>



【活用事例】

ポイント数に応じてサービスや商品をプレゼントする方法>

新機能#59┃会員リストの絞り込みで、タグ付与日時での絞り込みができるようになりました!
■目的
会員リストの絞り込みで、タグ付与日時での絞り込みができるようになりました。
これにより、より細かいセグメント分けが可能になりますので、配信内容の効果を上げることができます。

■セット所要時間
3分

■セットの流れ

(1)会員 > 会員リスト > 条件で絞り込み
↓↓↓


(2)絞り込み
①他の会員情報で絞り込む
②条件タグを設定
③タグ付与日時を設定
④絞り込み
ステップメッセージのトリガーとなっているタグを解除したが、再度ステップメッセージが送信される

解除後に「タグを手動で付与した」または「自動付与設定で付与された」ことが原因と考えられます。

タグに自動付与設定がされている場合は、解除をしても条件が一致している会員にはまた自動で付与されます。

「タグの自動設定でタグの追加または解除の設定方法」はこちら

RPA(自動解約処理)で解約不可時にタグ付与ができる条件

解約不可時にタグ付けをするには、基本条件で設定できる内容が条件となります。
「基本条件」で設定できない内容については解約不可時にタグ付けはできません。

▼基本条件設定例

・次回配送予定日から〇日以前は解約不可
・お届け回数〇回以前は解約不可
・対応状況〇〇〇の際対応不可
 ┗RPA設定画面のプルダウンで設定できる対応状況のみ設定が可能
・決済状況〇〇〇の際対応不可
・読み込み〇〇〇に〇〇〇が記載されていたら解約不可



▼補足
商品の受け取りをしていないユーザー以外は解約不可にしその際にタグを付ける。のような設定はできません。
※「配送番号が追跡サイトに反映されていない」「配送番号がカート側に入っていない」などが基本条件によって判定できないためです

タグトリガーステップメッセージの再配信方法

特定のユーザーのみにタグトリガーステップメッセージを送る方法は、1:1トーク画面にて対象ユーザーのトリガータグを「削除→保存→付与→保存」することで再度ステップメッセージを最初から配信することができます。

1:1トーク画面での会員へのタグの付与、削除方法はこちら>


▼補足
・LINE公式アカウントの配信数上限などで配信できなかったメッセージのみ送る場合などは、対象のメッセージのみ1:1トークで個別に配信してください。

指定のタグが付いていないと、フリーメッセージ許可しない方法
応答メッセージのターゲット指定でタグ除外設定を行います。
友だち登録したユーザーがフリーメッセージを送った後にブロックしてしまうのを防ぐことができます。


(1)メッセージ > 応答メッセージ > 追加
※応答メッセージの作成方法はこちら>
(2)応答メッセージ設定
①任意の管理名入力
②ステータスはオン
③キーワード設定はなし(チェックしない)
↓

④ターゲット 絞り込みにチェック
⑤タグの除外設定
※ここで設定したタグが付いていない人に対して、応答メッセージを送ります。
※本人確認フォームで付与するタグを指定
↓

⑥メッセージテキストを入力
┗⑤のタグが付いていないユーザーにこのメッセージが流れます。
⑦保存
お客様からメッセージが送信されたタイミングでタグ付与する方法

■目的
お客様からメッセージが送信されたタイミングでタグ付与し、メッセージ送信者として識別させる。

■セット所有時間
5分

■セット箇所
応答メッセージの高度な設定「配信後、会員にタグを追加」にチェックを入れタグ選択することで、メッセージ送信後にタグを追加することが可能。

応答メッセージの作成方法はこちら>

カート連携により、複数顧客番号が反映されているものは全ての顧客番号に紐づく購入情報を取得しにいってますか?

下記画像のようにカート連携により複数顧客番号が反映されている場合、全ての顧客番号に紐づく購入情報を取得します。

顧客番号が複数存在し何種類か商品を購入していて、それらの商品が自動設定によりタグ付与される設定をしていると、購入している商品全てのタグが付与されます。

▼対応カート

・ecforce
・リピスト(プレックス)
・サブスクストア
・楽楽リピート
・Shopify


▼複数顧客番号が反映

フォーム離脱時にタグを付与する方法
フォーム離脱時にタグを付与する方法になります。
オリジナルフォームの編集が必要となりますので

下記フォームサンプルページのソースコードと併せてご確認いただくとわかりやすいです。
フォームサンプルページ>
ダウンロード>

※ソースコード確認方法
windows:Ctrl + U
mac  :option + command + U



 Javascriptのコードにおいて予め「AddTag」をcallしてタグをセットした上で、「AddTagProc」をcallしてください。
 例:AddTag("タグコード");
 例:AddTagProc();

フォームを閉じるときは「liffclose」をcallしてください。
例:liffclose();


【設定方法の詳細】

(1)「AddTag()」「AddTagProc()」「liffclose()」関数についてはbody終了タグ上部にまとめて記述しておく
※記述がない場合はコピペしてください。
	<!-- 削除禁止 -->
	<script>
		function AddTag(TagCode) {
			$("#addtag").val(TagCode);
		}
		function AddTagProc() {
			var uid = $("#useridfield").val();
			var fid = $("#fid").val();
			var tag = $("#addtag").val();
			var botid = $("#bot_id").val();
			$.ajax({
				type: "POST",
				url: "/api/tag/add",
				dataType: 'json',
				data: {
					"uid": uid,
					"fid": fid,
					"bot_id": botid,
					"tag_code": tag
				},
				success: function (j_data) { },
				error: function (XMLHttpRequest, textStatus, errorThrown) {
				},
				complete: function () { }
			});
		}

		function liffclose() {
			liff.closeWindow();
		}
	</script>
	<!-- 削除禁止 -->

↓

(2)付与されるタグを格納するinputを設置
<!-- 削除禁止 --><input type="hidden" id="addtag"><!-- 削除禁止 -->

↓

(3)離脱時(設問選択時)に設定した関数3つをcall
※タグコードは実際のものに置き換える
	<script>
	$(function () {
		$('.q :radio').on('change', function () {
			if ($('.q :radio:checked').val() == '継続する') {
				AddTag('タグコード');//タグ設定
				AddTagProc();//タグ送信
				liffclose();//LIFF閉じる
			}
		});
	});
	</script>

↓

(4)記述が終わりましたら、付与したタグの動作確認を行ってください。
付与したタグの動作確認方法>

タグ別に応答メッセージの内容を分ける方法

同じキーワードの応答メッセージを2つ作成することで、タグ別に応答メッセージの返信内容を分けることが可能です。

応答メッセージの新規作成はこちら>

▼手順
 例:Aタグがついてる人はメッセージXを、Bタグがついてる人はメッセージYを送信

①同じキーワードの応答メッセージを2つ用意します。

②1つ目に「Aタグ」を入れ、メッセージXの内容をセットします。


➂2つ目に「Bタグ」を入れ、メッセージYの内容をセットします。




▼補足
それぞれのタグを付与しメッセージ発言をして、希望する内容が返ってくるか確認しご使用ください。

フォーム送信時に選択内容によってタグを付与する方法
■目的
フォーム送信時に選択内容によってタグを出し分けて付与する方法の説明になります。
フォーム送信時に処理を行うため、最終的な回答に対してタグを付与することができます。


■セット所要時間
20分

下記フォームサンプルページのソースコードをご参照ください。
フォームサンプルページ>
フォームサンプルページダウンロード>

※ソースコード確認方法
windows:Ctrl + U
mac  :option + command + U

■セットの流れ
サンプルフォームでは質問1で選択された商品によってそれぞれにタグが付与されます。

(1)index.htmlファイルに送信時に関する処理を追加
すでに記載がある場合は、内容を修正して設定を進めてください。

① 質問1の回答を取得
② 回答に合わせて、タグを付与
※タグコード部分に、作成したタグを設定してください。
$(function () {
	$('.btn-submit').on('click', function () {
		if ($("#form-name").validationEngine('validate')) {
			//連打防止ローディング
			$('.btn').hide();
			$('.loading').show();

			//質問1のvalue取得
			var product = $('.item :radio:checked').val();

			//タグの出し分け
			switch (product){
				case '商品1':
					$('#add_tags').val('タグコード1');
					break;
				case '商品2':
					$('#add_tags').val('タグコード2');
					break;
				case '商品3':
					$('#add_tags').val('タグコード3');
					break;
				case '商品4':
					$('#add_tags').val('タグコード4');
					break;
			}
			//return false;//コメントアウト外すと送信されません
		}
	});
});


(2)送信後、対象会員に選択ごとにタグが付与されていれば完成です。
ガイドの内容はあくまでもサンプルになります。  そのまま使用できない場合は対応するフォームにあわせての編集をお願いします。   表示設定が正常にできない場合、ソースチェックの有償サポートも行っております。  ご希望の場合は設定代行バナー、もしくはお問い合わせLINE、チャットワークよりご依頼をお願いします。
新機能#40┃タグの自動設定でAタグが付いたら自動でBタグを付与。という設定ができるようになりました!

タグの自動設定でトリガータグAが付いたら自動でBタグを付与。という設定ができるようになりました!

今まではトリガータグAが付いたら自動でBタグを解除しかできませんでした。

▼設定箇所
タグの自動設定方法はこちら>

機能改善#058┃パックメッセージ名とタグ名を見切れないようように改善しました!

■目的
今までは「各種メッセージ設定」と「1:1トーク」でパックメッセージ名とタグ名が見切れてしまい確認作業が発生してしまっていました。
この機能改善によって正確な「パックメッセージ名」と「タグ名」を確認できるので、確認による作業コストを削減することができます!

■セット時間
無し

■表示
下記赤枠のように長い「パックメッセージ名」「タグ名」でも見切れずに全表示できるようになりました。

—パックメッセージ—


—タグ名—

何かしらのアクションがあったユーザーに対してステップメッセージを送信させない方法
■目的
ステップメッセージの途中で何かしらのアクションがあったユーザーに対してはそのステップメッセージを送信させたくない時に使用します。

■セット所要時間
5分

■セットの流れ
仮にアクションが応答メッセージだった場合は以下の方法となります。

(1)
ユーザーから発言があった際に応答メッセージにて自動返信をする
この際にタグを付与するようにします。
(2)
ステップメッセージの設定で(1)のタグが付与されたユーザーを除くようにする
計測タグに使用しているjqueryが使用できない時の回避策
■目的
広告運用において計測タグに使用しているjqueryが原因で広告の審査に影響が出てしまうことを回避できます

■セット所要時間
10分

■セットの流れ
LP計測の際に設置するトラッキングコードは使用せず、以下のトラッキングコードを使用します。
こちらはjqueryを使用せずに作られたコードになります。

設置方法につきましては下記を参照してください。
広告リストのLPクリック数、LCV(友だち登録数)の設定>

★①には管理画面に使用されているURLのサブドメイン部分を指定して下さい。
例)https://demo.ecai.jp/ですとdemoの部分

★②にはLPからの計測に記載されている友だち登録のURLを指定して下さい。

〈設置するトラッキングコード〉
※</body>の閉じタグの直上に設置
<script>
    var cookiedomain = getDomain(document.domain);
    var paramobj = {};

    // クエリパラメータから `ecaiad` を取得し、Cookieに設定
    if (typeof getParam('ecaiad') !== 'undefined') {
      document.cookie = 'ecaiad=' + getParam('ecaiad');
    }

    // Cookieを配列として取得
    var arr = getCookieArray();

    document.addEventListener('DOMContentLoaded', function () {
      // クエリパラメータのチェックとオブジェクトの作成
      if (getParam('ecaiad')) paramobj['ecaiad'] = getParam('ecaiad');
      if (getParam('tcd')) paramobj['tcd'] = getParam('tcd');
      if (getParam('ccid')) paramobj['ccid'] = getParam('ccid');
      if (getParam('coid')) paramobj['coid'] = getParam('coid');
      if (getParam('csid')) paramobj['csid'] = getParam('csid');

      // HTML要素 #cv の値を取得
      var cvElement = document.getElementById('cv');
      if (cvElement) {
        paramobj['cv'] = cvElement.getAttribute('value');
      }

      // 現在のURLを取得
      if (window.location.href) {
        paramobj['url'] = window.location.href;
      }

      // パラメータオブジェクトが存在する場合、クエリ文字列を作成
      if (Object.keys(paramobj).length > 0) {
        var query = '?' + Object.entries(paramobj).map(function (e) {
          return `${e[0]}=${e[1]}`;
        }).join('&');

        // 外部スクリプトの読み込み
        var script = document.createElement('script');
        script.src = "https://★①.ecai.jp/aclog" + query;
        document.head.appendChild(script);
      }
    });

    // URLから指定されたクエリパラメータを取得
    function getParam(name, url) {
      if (!url) url = window.location.href;
      name = name.replace(/[\[\]]/g, "\\$&");
      var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
        results = regex.exec(url);
      if (!results) return null;
      if (!results[2]) return '';
      return decodeURIComponent(results[2].replace(/\+/g, " "));
    }

    // ドメイン名を抽出
    function getDomain(url) {
      var arr_uri = url.match(/^(.*?)([a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})[\:[0-9]*]?([\/].*?)?$/i);
      return arr_uri[2];
    }

    // Cookieを配列形式で取得
    function getCookieArray() {
      var arr = {};
      if (document.cookie !== '') {
        var tmp = document.cookie.split('; ');
        for (var i = 0; i < tmp.length; i++) {
          var data = tmp[i].split('=');
          arr[data[0]] = decodeURIComponent(data[1]);
        }
      }
      return arr;
    }


    // URLSearchParams を使ってクエリパラメータを取得
    var params = (new URL(document.location)).searchParams;
    var adCode = params.get("ecaiad");
    var url = "★②";

    // adCode が存在する場合、リンクを更新
    if (adCode) {
        // 指定された href を持つすべての <a> 要素を取得
        var targets = document.querySelectorAll("a[href='" + url + "']");
        for (var i = 0; i < targets.length; i++) {
            targets[i].href = url + adCode; // href を更新
        }
    }
  </script>