Message–Signal Alignment Model (MSAM)
This framework defines a deterministic mapping from a detected signal to the only valid type of outbound opener — and blocks everything else.
It is intentionally rules-based, observable, and non-opinionated.
Purpose
Define a deterministic mapping between:
- the primary signal detected, and
- the only type of message opener that is appropriate.
This framework exists to prevent over-personalization, audits, and generic copy.
It is not a copywriting guide.
It is a message constraint system.
Core Principle (canonical)
A message is only valid if it references the same signal that qualified the prospect.
If the message references anything else, it is misaligned.
Canonical Inputs (from ORF)
This framework assumes you already have, per business:
primary_reason(single enum)evidence(1–3 observable facts)confidence(low / medium / high)
No new data sources are introduced.
Core Output (must always produce)
For each prospect, output:
message_type= enum (defined below)allowed_openers= pattern, not copyforbidden_content= explicit listpersonalization_depth= {none | light | moderate}message_length_target= {short | medium}cta_type= enum
This becomes a guardrail, not a script.
Message Types (authoritative enum)
Exactly five message types are allowed.
Each corresponds to one signal class.
1) Performance-Based Message
Trigger: primary_reason = performance_slow_mobile
Message Type: performance_contextual
Personalization depth: light
CTA type: open_ended_conversation
Allowed opener pattern
Reference observable performance context only (e.g., mobile load, UX friction — not design opinions)
Allowed
- “Noticed mobile load issues on X”
- “Mobile experience seems slower than expected”
Forbidden
- Design critique
- SEO promises
- Conversion advice
- Tools mentioned
2) SEO Structure Message
Trigger: primary_reason = seo_thin_or_missing_service_pages
Message Type: structure_gap
Personalization depth: moderate
CTA type: clarifying_question
Allowed opener pattern
Reference absence or structure, not performance claims
Allowed
- “Noticed there aren’t dedicated pages for X services”
- “Your homepage appears to cover multiple services without separation”
Forbidden
- Rankings
- Traffic claims
- “Fix your SEO”
- Audits
3) Paid Ads Context Message
Trigger: primary_reason = ads_running_weak_landing_page
Message Type: intent_mismatch
Personalization depth: moderate
CTA type: curiosity_prompt
Allowed opener pattern
Reference ad presence + destination mismatch
Allowed
- “Saw active ads pointing to a general page”
- “Traffic seems to be sent without a focused landing context”
Forbidden
- ROAS
- Cost assumptions
- Funnel teardown
- Critique of creatives
4) Conversion Structure Message
Trigger: primary_reason = conversion_no_clear_next_step
Message Type: path_clarity
Personalization depth: light
CTA type: process_question
Allowed opener pattern
Reference navigation or action clarity only
Allowed
- “Couldn’t find a clear next step for visitors”
- “Noticed multiple CTAs competing on the page”
Forbidden
- Design feedback
- Copy rewrites
- “Low conversion rate” claims
5) Hiring / Expansion Message
Trigger: primary_reason = hiring_recent_growth_signal
Message Type: timing_context
Personalization depth: light
CTA type: timing_check
Allowed opener pattern
Reference timing and growth context
Allowed
- “Saw you’re hiring for X recently”
- “Looks like you’re expanding capacity”
Forbidden
- Assumptions about budget
- Claims of readiness
- Urgency framing
Forbidden Global Patterns (critical)
Regardless of message type, never allow:
- Audits (free or paid)
- Guarantees or outcomes
- Tool mentions
- Multi-issue messages
- “We noticed several things…”
- Long explanations
Message Length Rules
short= 2–4 sentencesmedium= 4–6 sentences
No message should exceed this.
If it does, it violates the framework.
Alignment Check (deterministic)
A message is invalid if:
- The opener references a different signal than
primary_reason - More than one issue is mentioned
- Any forbidden content appears
This can be enforced programmatically.
Example (one row)
Input primary_reason: seo_thin_or_missing_service_pages evidence: “No dedicated service pages found” confidence: high Output message_type: structure_gap personalization_depth: moderate message_length_target: short cta_type: clarifying_question forbidden_content: rankings traffic audits
Canonical Axioms
Placement on the site
Canonical URL:
/frameworks/message-signal-alignment
Cross-linked from:
- Leads vs Prospects
- Outbound Relevance Filter
Snippet used on:
- Product pages
- Partner education
Why this is the correct third framework
Strategically
- It prevents agencies from ruining good targeting
- It explains why Zendory lists reduce copy complexity
- It gives creators a strong, repeatable talking point
- It completes the logic chain: classification → selection → communication
Operationally
- You can enforce this in your own pipeline
- You can expose it as guidance without giving scripts
- It differentiates you from list sellers and audit peddlers
Related frameworks
- Leads vs Prospects (classification)
- Outbound Relevance Filter (signal selection)
- Signal Decay Model (freshness and alignment drift)
- Prospecting Cost Curve (relevance → operational cost)
Positioning
Frameworks are: how to think, how to decide, how to reason about outbound.
Zendory is built using these principles, not presented as a perfect implementation of them.