Recued
Menu
← Back to recipes

Mail attention summary

by recued-core v1 7 views

Use “Mail attention summary” in Recued. Answer 'is there anything to attend to in mail?' from limited local metadata before spending AI processing. It reads information without changing data in the connected service.

How it works 163 steps

Inspect the data fetches, transforms, gates, and output this recipe runs.

Process (163 steps)
now_iso date_add
Add 0 seconds to
now_ms date_parse
Parse now iso as a date
exclusive_until math
Calculate: {{step.now_ms}} + 1
bounded_lookback_hours clamp
Clamp setting lookback hours between 1 and 720
bounded_history_days clamp
Clamp setting history days between 1 and 3650
bounded_scan_limit clamp
Clamp setting scan limit between 1 and 500
bounded_history_scan_limit clamp
Clamp setting history scan limit between 1 and 1000
effective_history_scan_limit math
Calculate: max({{step.bounded_scan_limit}}, {{step.bounded_history_scan_limit}})
bounded_relationship_sender_limit clamp
Clamp setting relationship sender limit between 1 and 50
bounded_evaluation_thread_limit clamp
Clamp setting evaluation thread limit between 1 and 50
bounded_row_limit clamp
Clamp setting row limit between 1 and 100
bounded_business_start_hour clamp
Clamp setting business start hour between 0 and 23
bounded_business_end_hour clamp
Clamp setting business end hour between 1 and 24
business_window_valid compare
Check if bounded business start hour is less than bounded business end hour
bounded_sender_burst_window_minutes clamp
Clamp setting sender burst window minutes between 1 and 10080
bounded_sender_burst_count_threshold clamp
Clamp setting sender burst count threshold between 2 and 500
bounded_thread_burst_window_hours clamp
Clamp setting thread burst window hours between 1 and 8760
bounded_thread_burst_count_threshold clamp
Clamp setting thread burst count threshold between 2 and 500
bounded_long_thread_count_threshold clamp
Clamp setting long thread count threshold between 2 and 500
bounded_reply_silence_hours clamp
Clamp setting reply silence hours between 1 and 8760
bounded_large_body_bytes_threshold clamp
Clamp setting large body bytes threshold between 1024 and 1000000000
bounded_many_recipients_count_threshold clamp
Clamp setting many recipients count threshold between 2 and 1000
lookback_since math
Calculate: {{step.now_ms}} - {{step.bounded_lookback_hours}} * 3600000
history_since_raw math
Calculate: {{step.now_ms}} - {{step.bounded_history_days}} * 86400000
history_since math
Calculate: min({{step.lookback_since}}, {{step.history_since_raw}})
sender_burst_since math
Calculate: {{step.now_ms}} - {{step.bounded_sender_burst_window_minutes}} * 60000
thread_burst_since math
Calculate: {{step.now_ms}} - {{step.bounded_thread_burst_window_hours}} * 3600000
reply_silence_ms math
Calculate: {{step.bounded_reply_silence_hours}} * 3600000
recent_raw ?
recent_messages map
Extract from each item
recent_record_count count
Count items in recent messages
recent_limit_reached compare
Check if recent record count is at least bounded scan limit
recent_inbound filter
Filter by condition
new_mail_count count
Count items in recent inbound
new_inbound_threads group_by
Group by thread_key
new_thread_count count
Count items in new inbound threads
new_thread_keys pluck
Extract thread_key from each item
history_raw ?
history_messages map
Extract from each item
history_record_count count
Count items in history messages
history_limit_reached compare
Check if history record count is at least effective history scan limit
history_scan_complete not
Apply not
history_latest_rows unique
Remove duplicates from
current_inbound_latest filter
Filter by condition
waiting_base filter
Filter by condition
waiting_record_ids pluck
Extract record_id from each item
waiting_messages filter
Filter by condition
waiting_thread_count count
Count items in waiting messages
evaluation_rows slice
Take a subset of
evaluated_thread_count count
Count items in evaluation rows
evaluation_record_ids pluck
Extract record_id from each item
evaluation_raw_records filter
Filter by condition
evaluation_messages map
Extract from each item
unevaluated_thread_count math
Calculate: max(0, {{step.waiting_thread_count}} - {{step.evaluated_thread_count}})
evaluation_limit_reached compare
Check if unevaluated thread count is greater than 0
already_answered_count math
Calculate: max(0, {{step.new_thread_count}} - {{step.waiting_thread_count}})
history_thread_rollup group_by
Group by thread_key
history_outbound filter
Filter by condition
outbound_thread_rollup group_by
Group by thread_key
history_inbound filter
Filter by condition
sender_history_rollup group_by
Group by from
sender_burst_messages filter
Filter by condition
sender_burst_rollup group_by
Group by from
thread_burst_messages filter
Filter by condition
thread_burst_rollup group_by
Group by thread_key
waiting_with_new_count enrich_by
Apply enrich_by
waiting_with_history enrich_by
Apply enrich_by
waiting_with_outbound enrich_by
Apply enrich_by
waiting_with_sender_history enrich_by
Apply enrich_by
waiting_with_sender_burst enrich_by
Apply enrich_by
waiting_with_thread_burst enrich_by
Apply enrich_by
waiting_new_count_normalized map
Extract from each item
waiting_history_count_normalized map
Extract from each item
waiting_sender_history_normalized map
Extract from each item
waiting_sender_burst_normalized map
Extract from each item
waiting_thread_burst_normalized map
Extract from each item
waiting_with_to_count map
Extract to from each item
waiting_with_cc_count map
Extract cc from each item
waiting_with_recipient_count map
Extract from each item
waiting_with_reply_received map
Extract last_outbound_at from each item
waiting_with_reply_lag map
Extract from each item
waiting_with_reply_lag_boundary map
Extract reply_lag_ms from each item
waiting_with_reply_after_silence map
Extract from each item
waiting_with_sender_burst_flag map
Extract sender_burst_count from each item
waiting_with_thread_burst_flag map
Extract thread_burst_count from each item
waiting_with_long_thread map
Extract history_message_count from each item
waiting_with_first_seen_raw map
Extract sender_first_at from each item
waiting_with_first_seen map
Extract from each item
waiting_with_unread map
Extract is_read from each item
waiting_with_attachment map
Extract has_attachments from each item
waiting_with_large_body map
Extract size_bytes from each item
waiting_with_many_recipients map
Extract recipient_count from each item
business_window_checks time_within_window
Apply time_within_window
business_window_rows map
Extract from each item
waiting_with_business_window enrich_by
Apply enrich_by
waiting_with_outside_window map
Extract within_business_hours from each item
waiting_with_after_hours map
Extract from each item
senders_with_address filter
Filter by condition
unique_senders unique
Remove duplicates from
unique_sender_count count
Count items in unique senders
relationship_senders slice
Take a subset of
relationship_sender_query_count count
Count items in relationship senders
business_context_checks ?
business_context_rows map
Extract from each item
business_context_success_rows filter
Filter by condition
business_context_success_count count
Count items in business context success rows
business_context_coverage_events_nested map
Extract from each item
business_context_coverage_events flatten
Flatten nested lists in
business_context_coverage_event_count count
Count items in business context coverage events
business_context_coverage_gap_rows filter
Filter by condition
business_context_coverage_gap_count count
Count items in business context coverage gap rows
business_context_failed_count math
Calculate: max(0, {{step.relationship_sender_query_count}} - {{step.business_context_success_count}})
waiting_with_context enrich_by
Apply enrich_by
waiting_with_relationship_level map
Extract from each item
waiting_with_relationship_active map
Extract relationship_level from each item
waiting_with_relationship_historical map
Extract relationship_level from each item
waiting_with_relationship_known map
Extract relationship_level from each item
strong_attention_checks any
Check if any of the conditions are true
strong_attention_rows map
Extract from each item
waiting_with_strong_attention enrich_by
Apply enrich_by
review_checks any
Check if any of the conditions are true
review_rows map
Extract from each item
waiting_with_review enrich_by
Apply enrich_by
classified_rows map
Extract from each item
active_rows filter
Filter by condition
active_count count
Count items in active rows
review_state_rows filter
Filter by condition
review_count count
Count items in review state rows
quiet_rows filter
Filter by condition
quiet_count count
Count items in quiet rows
signal_events_nested map
Extract from each item
signal_events flatten
Flatten nested lists in
active_signal_events filter
Filter by condition
signal_counts group_by
Group by signal
signal_catalog default
Apply default
signal_catalog_with_counts enrich_by
Apply enrich_by
signal_rows map
Extract from each item
signal_table to_table
Format results as a data table
surfaced_rows filter
Filter by condition
surfaced_with_priority map
Extract from each item
surfaced_with_reason map
Extract from each item
surfaced_with_subject_display map
Extract subject from each item
surfaced_with_from_display map
Extract from from each item
surfaced_with_thread_display map
Extract thread_key from each item
surfaced_dated map
Extract received_at from each item
surfaced_sorted sort
Sort by
top_rows slice
Take a subset of
attention_display_rows map
Extract from each item
attention_table to_table
Format results as a data table
evidence_rows map
Extract from each item
business_context_shortfall compare
Check if business context success count is less than unique sender count
missing_sender_rows filter
Filter by condition
missing_sender_count count
Count items in missing sender rows
missing_sender_present compare
Check if missing sender count is greater than 0
context_incomplete any
Check if any of the conditions are true
coverage_partial any
Check if any of the conditions are true
coverage_state ternary
Apply ternary
window_start_text date_format
Format as a date
window_end_text date_format
Format as a date
history_window_start_text date_format
Format as a date
coverage_rows default
Apply default
coverage_table to_table
Format results as a data table
card to_summary
Format results as a summary card
Settings 18 configurable

Configurable at install. Defaults shown — change them anytime in Recued.

mail slug setting = primary
row limit setting = 20
scan limit setting = 500
history days setting = 90
lookback hours setting = 24
business end hour setting = 18
history scan limit setting = 1000
business start hour setting = 8
reply silence hours setting = 48
evaluation thread limit setting = 50
relationship sender limit setting = 50
thread burst window hours setting = 24
large body bytes threshold setting = 1048576
long thread count threshold setting = 12
sender burst window minutes setting = 60
sender burst count threshold setting = 3
thread burst count threshold setting = 4
many recipients count threshold setting = 5

About

Tags

mailemailattentionsummarydigestdeterministicmetadatazero-airead-onlymcpoffice

Details

163 steps 18 configurable settings recipe_id: mail-attention-summary