CiviMailのトークンを含むURLを追跡する

CiviMailが埋め込みURLを追跡することは可能ですか?たとえば、連絡先IDとチェックサムトークンが含まれているURLがあります。メールからURLをクリックしたユーザーの数を確認する必要があります。

URL to track –
https://site-name/info?cid1=&cs=

現在、CiviMailのコードでは、トークン化されたURLのトラッキングは考慮されておらず、
civicrm_mailing_trackable_url テーブルには挿入されません。

SEについても同様の質問があります –
追加されたトラッキングリンクトークンを使用
していますが、トークン化されたURLごとに異なるトラックリンクを提供するように思われます。受信者の数が多い場合は苦痛です。例えば10kのコンタクトには10​​kのトラッキング可能なリンクがあり、データベースのサイズがかなり大きくなります。

Our thought now is to cut the URL till a token is reached and
consider this for tracking. For eg, if the original URL is
https://site-name/info?cid1=&cs=, we need to
modify the functionality to track only
https://site-name/info and if such url is hit by the
user, the click counter should be incremented.

上記を続行するには、部分リンクを civicrm_mailing_trackable_url
テーブルに保存し、メインのHTML
URLをトラッキング可能なリンクに置き換えます。ユーザーがメール内でこのURLにヒットした場合、元のページをナビゲートするために部分URLに追加するデータがないため、主な問題が発生します。

可能な解決方法はありますか?

ベストアンサー

URL文字列のトークン化されていない部分を追跡するために、コア関数
getTokenData()を変更することでこれを実現しました。たとえば。質問に投稿されたURLで

https://site-name/info?cid1=&cs=

  • Grab the main URL before the ?
    (https://site-name/info) and get the trackable url of
    this string from
    CRM_Mailing_BAO_TrackableURL::getTrackerURL()
    function.
  • This enters the URL in
    civicrm_mailing_trackable_url table.
  • Replace the HTML with this trackable URL so that main URL that
    is sent is in the form –
    http://site-name/sites/all/modules/civicrm/extern/url.php?u=13&qid=17&cid1=&cs=,
    i.e, trackable url + query string from the original URL
    string.
  • When the user clicks the link in the mail, user gets navigated
    to trackable URL and is redirected to the original URL from
    civicrm_mailing_trackable_url table.
  • The extra query string automatically gets appended to the main
    URL.

上記のコードは、私たちのために正しく動作しており、 https:// site-name/info
というURLがロードされると、各クリックを追跡します。

拡張子のファイルをオーバーライドします。サンプルコードの差分は次のようになります –

$ git diff CRM/Mailing/BAO/Mailing.php
diff --git a/CRM/Mailing/BAO/Mailing.php b/CRM/Mailing/BAO/Mailing.php
index 3a0f08048c..f2501a0b91 100644
--- a/CRM/Mailing/BAO/Mailing.php
+++ b/CRM/Mailing/BAO/Mailing.php
@@ -1348,6 +1348,21 @@ ORDER BY   civicrm_email.is_bulkmail DESC
       elseif (preg_match('/^href[ ]*=[ ]*"/', $url)) {
         $url .= '"';
       }
+      if (!empty($token_a['embed_parts'][0])) {
+        $string = ' ' . $token_a['embed_parts'][0];
+        $start = 'http';
+        $end = '?';
+
+        $ini = strpos($string, $start);
+        if ($ini != 0) {
+          $ini += strlen($start);
+          $len = strpos($string, $end, $ini) - $ini;
+
+          $partialLink = "http" . substr($string, $ini, $len);
+          $trackableLink = CRM_Mailing_BAO_TrackableURL::getTrackerURL($partialLink, $this->id, $event_queue_id);
+          $url = str_replace("{$partialLink}?", "{$trackableLink}&", $url);
+        }
+      }
       $data = $url;
      //CRM-20206 Fix ampersand encoding in plain text emails
       if (empty($html)) {

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です