セグメントトラッキングテーマコンポーネント

このテーマコンポーネントを使用すると、サイトの利用状況に関するデータを Segment に送信できます。

このコンポーネントは、ユーザーが最初にサイトにログインした際に segment.identify を呼び出すことをサポートしています。SSO を使用しているサイトの場合、ユーザーの Discourse ID または external_id を Segment に送信できます。このコンポーネントでは、Discourse の最新ページ、カテゴリ一覧、カテゴリページ、タグページ、トピックページの表示をトラッキングできます。また、トピックや投稿の作成、いいね、フラグ、ブックマークのトラッキングも可能です。

インストール

コンポーネントをインストールするには、Installing a theme or theme component のガイドに従ってください。Git リポジトリから直接インストールするには、https://github.com/scossar/discourse-segment-theme-component を使用します。また、こちら からダウンロードすることもできます。

設定

segment write key 設定に Segment の書き込みキーを追加します。その後、トラッキングしたいイベントを選択してください。

このコンポーネントは、サイトのコンテンツセキュリティポリシーを拡張し、https://cdn.segment.com/analytics.js/ を追加します。

コンポーネントに関連する問題や、Segment に送信されるデータを改善する方法について、お気軽にお知らせください。

「いいね!」 13

これを作成してくれてありがとう、最高だね!匿名ユーザーのデータも送信されるの?

匿名ユーザーに対しては Segment の page メソッドが呼び出されますが、identify メソッドはログイン済みのユーザーに対してのみ呼び出されます。

「いいね!」 1

こんにちは!

この話題にあまりに遅れてしまい恐縮ですが、もし可能であればお願いしたいことがあります。

Discourse にログインしているユーザーに対して、ユーザーID の他にメールアドレスも表示できるようにしていただけないでしょうか?

Segment では、自社のウェブサイト上の同じユーザーかもしれない Discourse のデータとユーザーデータを統合し、どのユーザーが Discourse を利用し、またウェブサイトを閲覧しているかを把握しようとしています。しかし現在、Discourse のユーザーID とウェブサイトのユーザーID が一致しないため、ユーザーを紐付けることができていません。

Discourse とウェブサイトでメールアドレスが一致すれば、それらを紐付けることができるため、非常に助かります。

ご検討いただけますでしょうか?よろしくお願いいたします。

「いいね!」 2

素晴らしいプラグインです、@simon さん、ありがとうございます!数ヶ月間利用していますが、時々 topic_created イベントが見逃されているようです。これらの不具合に明確なパターンは見つけられなかったので、ここに投稿させていただきました。何か心当たりはありますか?エラーを確認できるログなどはありますか?

「いいね!」 1

技術的には可能です。ただし、ペイロードにメールアドレスを追加することについては、セキュリティやプライバシーの懸念があります。少し検討し、Discourse チームに意見を聞いてみます。もしペイロードにメールアドレスが追加される場合、デフォルトでメールアドレスを含めないようにするテーマ設定が用意されます。

これについて調査します。もしパターンが見つかれば、お知らせください。

来週に時間を見つけて、このコンポーネントのテストを行い、いくつかの更新を行う予定です。それが完了したら、私の個人の GitHub リポジトリから Discourse の GitHub リポジトリへ移動させます。

「いいね!」 1

@simon さん、ありがとうございます!本当に助かりました :slight_smile:

@simon セキュリティに関する懸念については、おっしゃる通りだと理解し、同意します。ただし、私はこのデータを取得している Discourse の管理者であるため、提供された ID を使ってユーザーレコードにアクセスし、その ID をメールアドレスと関連付けることで、同じユーザーのメールを同様に取得することは可能です。すでに利用可能ですが、手動での作業が必要です。

また、組織内の他者と話し合った結果、OAuth の設定が完了するまで待ってから、ユーザーが当社のシステムと Discourse システムの両方に同じ ID でログインできるようにする方針になる可能性があります。

いずれにせよ、コミュニティ内の他の誰かに対してそのような解決策が利用できない場合に備え、この機能があれば便利だと考えています。

ありがとうございます。

これは理想的なアプローチのようです。Segment テーマコンポーネントを更新し、認証プロバイダーから提供される provider_uid を含めるオプションを追加することができます。

この件を提起してくださり光栄です。Segment トラッキングコンポーネントには現在、DiscourseConnect を使用しているサイト向けにユーザーの external_id を追加するオプションがあります。確認したところ、DiscourseConnect の古い設定名である enable_sso をチェックしていることがわかりました。これは enable_discourse_connect に変更する必要があります。明日に修正いたします。

「いいね!」 2

どうもありがとうございます。provider_uid フィールドがあると非常に助かります。これにより、ユーザーが Segment に送信された後、当サイトと Discourse の両方でのユーザーのアクションを関連付けることが可能になるはずです。

お手数をおかけしますが、よろしくお願いいたします。

Discourse サイトの認証プロバイダとして DiscourseConnect が有効な場合、external_id を基にしたユーザー追跡に関する問題を修正しました。

これまで、トピックの作成が時折追跡されない原因を特定できていません。私自身は問題なく動作しています。

「トピックブックマーク」イベントに使用される名前を更新しました。以前、Segment に送信されていたイベント名は「スレッドブックマーク」でした。その理由については覚えていません。「トピックブックマーク」に変更しても、誰かの分析に問題が生じないことを願っています。

Segmentのデバッグ画面を確認したところ、identifyコールで送信されていたのはユーザーIDとIPアドレスのみでした。identifyコールにメールアドレスも渡すことは可能でしょうか?

identify 呼び出し時にメールアドレスを渡すという要望が 2 つ寄せられています。それについて何らかの対応ができるか確認いたします。

ユーザーのメールアドレスを含める設定を追加しました:

この設定を有効にすると、ユーザーのメールアドレスが identify 呼び出しと共に送信されます。Discourse サイトのテーマコンポーネントを最新バージョンに更新すれば、この設定を利用できるようになります。

テスト中に発見した軽微な問題として、設定が無効の場合、セッション期間中、現在のユーザーのメールアドレスが Segment に表示され続けてしまうことがあります。これは Segment 側の処理方法に起因するものです。設定が無効になると、Discourse は即座にユーザーのメールアドレスを Segment に送信しなくなります。

provider_uid を Segment に渡すというリクエストについては忘れたわけではありませんが、今回の検討の中で、他の識別子を Segment に渡すことも有用ではないかと考えました。具体的には、ユーザーの nameusernameidentify 呼び出しに含めることについてです。

「いいね!」 3

タイミングが素晴らしく助かりました、@simon さん、ありがとうございます。

名前とユーザー名についても、確かにそれらも役立ちます。長期的な解決策としては、ベースに含まれるすべてのデータと、Discourse で作成された追加のユーザーフィールドをプッシュする方法を実装することになります。

その理由として、一部の宛先では特定のデータが必要になる場合があります。Discourse 内でペイロードを構築するための UI があると非常に役立ちます。たとえそれがセグメントのドキュメントにある標準フィールドに限定されたものであっても構いません https://segment.com/docs/connections/spec/identify/

「いいね!」 1

返信が遅くなり申し訳ありません。さらに調査しました。Discourse は provider_uid をクライアントに送信しないため、現在、テーマコンポーネントを通じて provider_uid を設定することはできません。将来的にはサイト設定で有効にできるかもしれませんが、機能させるにはコア Discourse コードに変更を加える必要があります。

「いいね!」 1

問題ありません。フォローアップしていただき、また、この件を調べていただきありがとうございます。DiscourseのユーザーをDiscourseと当社のサイトの両方で接続する別の方法が見つかることを願っています。

「いいね!」 1