kind: analytics-messkanon
id: warpgogol-messkanon
version: 1.0.0
rfc: RFC-0305

meta:
  title: Warpgogol Messkanon
  description: Tool-independent analytics vocabulary for thin Warpgogol sites.
  status: active
  changelog:
    - version: 1.0.0
      date: 2026-07-06
      summary: Initial RFC-0305 contact-outcome vocabulary.

principles:
  measureOutcomesNotBehavior: true
  noPii: true
  noBehavioralSessionReplay: true
  defaultConsentLevel: bannerfrei

events:
  - semanticId: contact.phone_click
    category: contact
    action: phone_click
    nameValues: [header, footer, sticky, contact_page]
    goalEligible: true
    goalKey: anfrage_telefon
    payload:
      required: [placement]
      properties:
        placement:
          type: enum
          values: [header, footer, sticky, contact_page]
  - semanticId: contact.form_submit
    category: contact
    action: form_submit
    nameValues: [kontaktformular, send_message, lead_form]
    goalEligible: true
    goalKey: anfrage_formular
    payload:
      required: [formId]
      properties:
        formId:
          type: string
  - semanticId: contact.whatsapp_click
    category: contact
    action: whatsapp_click
    nameValues: [sticky, footer, contact_page]
    goalEligible: true
    goalKey: anfrage_whatsapp
    payload:
      required: [placement]
      properties:
        placement:
          type: enum
          values: [sticky, footer, contact_page]
  - semanticId: contact.email_click
    category: contact
    action: email_click
    nameValues: [footer, impressum, contact_page]
    goalEligible: true
    goalKey: anfrage_email
    payload:
      required: [placement]
      properties:
        placement:
          type: enum
          values: [footer, impressum, contact_page]
  - semanticId: contact.route_click
    category: contact
    action: route_click
    nameValues: [anfahrt, map, footer]
    goalEligible: false
    payload:
      required: [placement]
      properties:
        placement:
          type: enum
          values: [anfahrt, map, footer]

kpis:
  - id: visits_30d
    source: matomo.report
    report: VisitsSummary.get
    period: last_30_days
  - id: anfragen_30d
    source: messkanon.goals
    goals: [anfrage_telefon, anfrage_formular, anfrage_whatsapp, anfrage_email]
    period: last_30_days
  - id: top_source_30d
    source: matomo.report
    report: Referrers.getAll
    period: last_30_days
  - id: anfrage_by_channel_30d
    source: messkanon.goals
    goals: [anfrage_telefon, anfrage_formular, anfrage_whatsapp, anfrage_email]
    period: last_30_days
  - id: kontaktbilanz_quarter
    source: messkanon.goals
    goals: [anfrage_telefon, anfrage_formular, anfrage_whatsapp, anfrage_email]
    period: quarter

campaignParameters:
  allowed: [utm_source, utm_medium, utm_campaign, utm_content, utm_term]
  forbidPii: true

dimensions:
  visit:
    - name: client_id
      required: true
      valueSource: fleet.clientSemanticId
    - name: messkanon_version
      required: true
      valueSource: ontology.analytics.messkanon.version
    - name: consent_level
      required: true
      valueSource: constant.bannerfrei
  action:
    - name: site_type
      required: true
      valueSource: system.growth.vendor.options.siteType
    - name: page_type
      required: true
      valueSource: page.context.pageType
    - name: surface_module
      required: false
      valueSource: page.context.surfaceModule
    - name: pseo_industry
      required: false
      valueSource: page.context.pseo.industry
    - name: pseo_city
      required: false
      valueSource: page.context.pseo.city
    - name: pseo_demand
      required: false
      valueSource: page.context.pseo.demand
    - name: pseo_locale
      required: false
      valueSource: page.context.pseo.locale
    - name: pseo_arm
      required: false
      valueSource: page.context.pseo.arm
    - name: pseo_experiment
      required: false
      valueSource: page.context.pseo.experiment
    - name: pseo_substance_band
      required: false
      valueSource: page.context.pseo.substanceBand
    - name: pseo_link_model
      required: false
      valueSource: page.context.pseo.linkModel
