Odly
← All guides

Product Guide

The whole of Odly, in one place

Odly is an intelligent request hub — it unifies messages from every channel (email, Telegram, Slack, chat widget), automatically routes each to the right department, and drafts ready-to-send answers for agents from your knowledge base. This handbook is the whole thing in one place: Part 1 explains how the app fits together (diagrams); Part 2 walks four real journeys end-to-end; Part 3 is the step-by-step tasks, each with a screen mockup.
On this page
Part 1 · How it works

2 · The four roles

Every person has one role. Each rung adds to the one below it. The handbook uses the friendly names; the app shows the system name.

AdminRuns the organization. Users, departments, channels, AI, billing — full control. org_admin
ManagerLeads the team. Everything an agent does, plus assignment, SLA oversight, routing tuning, label management, and KB curation. (Message deletion and user management stay admin-only.) moderator
AgentWorks the inbox. Read, reply, resolve, create tickets, correct routing. No workspace settings. support
Read-onlyLooks, doesn't touch. Views tickets and messages, can request changes. associate

3 · The life of a message

Every conversation moves through these states. You set some; the system sets others as things happen.

LIVE THREAD — ACTIVE & PARKED Opennew — no replies yet On-holdparked by an agent In Progresscustomer replied last Pendingwe replied last Resolveddone — reopenable Closednot customer work park you reply take off hold you reply customer replies resolve & save to KB not customer work customer writes again → re-opens into the flow
You pick (manual):on-holdresolved
Derived — follows who replied last:openin progress (our turn)pending (awaiting the customer)
Set aside — triage piles & marks:spam / filteredsuspiciousneeds routingnot analysed · archived · otherclosed (not customer work)
The endings, from any live state: the decision row under the composer offers Resolve, Resolve & save to KB (only on a thread the customer has written in), Not customer work (→ Closed, never counts as a resolution), and Resolve as spam. The header status chip gives the manual moves: On-hold (park), Resolved, Take off hold, Reopen. And if the customer writes again to a resolved or closed conversation, it re-opens into the flow — as In Progress if your team had answered it, or Open if nobody had yet — so nothing slips through.
Before it ever reaches you: new mail is auto-checked. Suspected junk lands in the Spam pile (to confirm until a person agrees), unanalysed mail waits in Not Analysed, and anything the router can't confidently place gets the needs routing mark (see next diagram).

4 · How the learning engine works

The engine writes new rules by watching how your team works. The loop below shows routing — the mature, fully-automated domain — but the same loop runs for other domains too (spam, detection, and more). Correcting the app isn't just fixing one message; it's training the system.

Incomingmail Rules + learnedrules decide Department queueclear winner Needs Routingno clear winner Agent routes itSelect department… → Route Learning enginespots the pattern Review & approve→ promoted rule unsure assigns dept trains proposes new rule ↑
The takeaway for agents: route mail where it truly belongs, mark true spam, approve good KB answers — consistently. Every one of those is training data. The engine learns across routing, spam, detection, contradiction, KB quality and auto-reply; routing is fully automated today and the rest are progressively coming online.

5 · Message → Ticket → Jira

Most conversations are just answered and resolved. Promote one to a ticket only when it needs tracking — and to Jira only when engineering owns it.

Conversationin the inbox Resolve & save to KBsimple — just answer it Create ticket⋯ menu · needs tracking Push to Jiraengineering owns it Jira issuetwo-way synced comments sync both ways ↔

6 · Your department map

The six departments in your workspace and the kind of mail each owns — with the real categories configured in Odly.

Support

  • Technical Issue
  • How-To Question
  • Setup & Configuration
  • Feature Request
“error”, “not working”, “how do I”, “setup”

Sales

  • Demo Request
  • Pricing Inquiry
  • Product Question
  • Purchase Intent
  • Enterprise Inquiry
“pricing”, “demo”, “quote”, “interested in”

Billing

  • Billing Question
  • Invoice & Receipt
  • Payment Issue
  • Refund Request
  • Subscription Changes
“invoice”, “refund”, “payment”, “cancel subscription”

HR

  • Employee Onboarding
  • Leave & Time Off
  • Payroll & Benefits
  • Performance & Development
  • Employee Relations
  • Policy & Compliance
internal staff — “leave”, “payroll”, “policy”

Infodefault

  • Information Request
  • Account Management (org-wide)
general information & account questions — “what is”, “where can I find”, “update my details” — and the org-wide fallback: anything the router can't confidently place lands here

Marketing

  • Brand Collaboration
  • Influencer & UGC Outreach
  • Marketing Internship
  • Press & Media Inquiry
  • Sponsorship & Partnership
“partnership”, “press”, “sponsor”, “collab”

7 · The inbox at a glance

Where you spend your day. Everything on a conversation card tells you something — here's the anatomy.

Inbox
1ThreadsContactsKanban2Status ▾Priority ▾Department ▾3search id · email · subject
4
Support · email · #SUP-1042 · 2h
Anna Meyer
Can't log in after password reset
5AI SuggestedSLA at riskTechnical Issue
6JS
1
Views. List, a people-centric Contacts view, or a Kanban board — drag is limited (reopen a resolved card to Open, or approve/spam on the Triage tab); statuses otherwise move through replies and the action buttons.
2
Filters. Narrow by status, priority, department, assignee, SLA, labels, channel, AI state.
3
Search. Find by ID, email, subject, or message content.
4
Spine. The colored edge signals status / AI state at a glance.
5
Badges. AI suggestion, SLA flags, category, labels, attachments, ticket link.
6
Assignee. An avatar if claimed, or Claim to take it yourself.

8 · Working a conversation

Open a message and you get the full thread, AI help in the tabs, a composer, and the action buttons.

Conversation
1 Anna Meyer · Can't log in high Dept: Support ▾ ⋯
2SLA
3AICustomerKBFilesActivityNotesConflict
4
Hi, I reset my password but now I just get an error. Help!
Hi Anna — can you tell me the exact error text you see?
5AI suggestion · 86% — “A reset link expires after 30 minutes…” · Tap to insert into reply
Reply as Jamie…
6ReplyInternal noteAttachKBSend ⌘↵
7ResolveResolve & save to KBNot customer workResolve as spam
1
Header. Sender, subject, the status chip (manual moves: On-hold, Resolved, Reopen), priority, category, labels — plus a ⋯ More actions menu (create / add to ticket, merge, reanalyse, check contradiction, mark as lead/suspicious, and — org admins only — Delete message). Change the department with the header's Dept control (tick Create rule to mint a routing rule too).
2
SLA bar. How much time you have before the target is missed.
3
Tabs. AI analysis, Customer info, Files, KB suggestions, Activity, internal Notes, Conflict check. A Lead tab appears only once a message is marked as a lead.
4
Thread. The full back-and-forth; your replies vs the customer's.
5
Suggested reply. A drafted answer on the KB tab — click Use in reply, edit it, then send. The same suggestion also sits inline in the thread as a dashed AI suggestion · N% card (Tap to insert into reply). Nothing goes out on its own.
6
Composer. Switch between Reply and Internal note; Attach files; insert a vetted answer with KB; send with Send / Post note or ⌘↵. Keyboard: R reply, N note, E resolve, J/K next/previous, U read/unread, Esc close.
7
Decision row. Resolve, Resolve & save to KB (only when the customer has written in), Not customer work, Resolve as spam. Tickets are created from ⋯ More actions, not here.
Part 2 · End-to-end scenarios

Four realistic journeys that stitch the individual tasks below into a full story — follow the timeline and see how a conversation moves through its statuses and across the team.

A

A stuck customer gets unblocked

Support · from first email to a saved KB answer

Agent
  1. A customer emails “can't log in after resetting my password.” It's auto-routed to Support and lands in the inbox as open.
  2. You click Claim to own it, open the KB tab, and see a suggested answer about reset links expiring. → Task 1
  3. You click Use in reply, tweak the wording, and Send (⌘↵). Status moves to pending (awaiting the customer).
  4. The customer replies “that worked, thanks!” → in progress (our turn again).
  5. Since this will come up again, you click Resolve & save to KB → resolved, and the answer now powers future AI suggestions. → Task 7
B

A hot lead comes in

Sales · from a chat message to a tracked opportunity

Agent
  1. A visitor asks via the chat widget: “interested in the Enterprise plan for ~40 seats.” The AI auto-marks it a Lead and routes it to Sales.
  2. You open the Lead tab and check the captured name, company, and interest — fixing anything the AI missed. → Task 5
  3. You open ⋯ More actions → Create lead ticket so it's tracked through the pipeline, and reply fast with next steps.
  4. Because it's a large deal, you add an internal Internal note and reassign it to a senior rep via the assignee avatar. → Task 6
  5. Your manager watches enterprise leads under Statistics (Overview, Team Performance, Messages, SLA) and steps in if one stalls.
C

A refund request, handled cleanly

Billing · agent + manager, with an audit trail

Agent → Manager
  1. An email “please refund last month's charge” routes to Billing.
  2. You verify the account and the charge — without promising a refund yet. You keep your reasoning in an Internal note.
  3. You open ⋯ More actions → Create ticket (→ Task 2), set its priority to high, and escalate for approval — captured in the ticket, your notes, and the audit trail.
  4. Your manager reviews and tags the conversation with a Refund pending label (applying labels is a manager / admin action), then approves.
  5. Once approved, you reply confirming the refund and click Resolve & save to KB (or Resolve for a one-off).
D

Mail nobody could place teaches the system

Routing + learning · agent today, manager/admin later, automatic tomorrow

Agent → Admin
  1. An ambiguous email arrives that the router can't confidently place, so it's marked needs routing.
  2. In the Needs Routing queue you read it, pick Billing in the row's Select department… picker, and click Route. → Task 3
  3. You (and teammates) keep routing similar mail the same way. The learning engine notices the pattern.
  4. A manager or admin opens Engine Activity, sees the proposed rule with its evidence, and clicks Accept. → Task 9
  5. From now on, that kind of mail auto-routes to Billing — it never hits Needs Routing again.
Part 3 · Step-by-step tasks · for agents
1

Answer & resolve a customer message

The core loop — you'll do this dozens of times a day.

Agent
  1. In the Inbox, open the conversation. If it's unassigned, click Claim to take ownership.
  2. Read the thread. Open the KB tab for a suggested answer (the AI tab shows the analysis — category, priority, summary).
  3. Click Use in reply on a good suggestion — it drops into the composer as an editable draft. (The same suggestion also sits inline in the thread as a dashed AI suggestion · N% card — Tap to insert into reply.)
  4. Edit it to fit the customer, then click Send (or press ⌘↵).
  5. When it's solved: if the answer is reusable, click Resolve & save to KB (offered only on threads the customer has written in); otherwise Resolve — or Not customer work if it never needed an answer.
Conversation
AIKBNotes
Reply as Jamie…
ReplyInternal noteAttachKBSend ⌘↵
ResolveResolve & save to KBNot customer workResolve as spam
The KB tab — ② the tab ③ Use in reply
Real app — click to zoom: ② the KB tab · ③ Use in reply — the suggestion drops into the composer (steps 2–3)
Nothing is sent automatically — you always edit and send the reply yourself.
Before you send: the Conflict tab (or ⋯ More actions → Check contradiction) flags where your draft or the KB answer contradicts something this customer was already told — worth a glance on anything sensitive.
2

Turn a message into a ticket

When it needs tracking, ownership, or engineering.

Agent
  1. In the conversation, open ⋯ More actions → Create ticket (Create lead ticket on a lead) — it's pre-filled from the message.
  2. Set the Title and Priority; optionally add a Category and Assignee. AI Enhance can polish the description.
  3. To involve engineering, tick Sync to Jira (or Push to Jira later). Synced tickets are then edited in Jira, not Odly.
  4. Track it in the ticket's Comments tab — tick Internal for team-only notes — and add files in Attachments.
Create ticket
TitleLogin error after reset
Descriptionprefilled from the message
PriorityHigh ▾
CategoryTechnical Issue ▾
AssigneeUnassigned ▾
Sync to JiraCreate
The Create Ticket form
Real app — click to zoom: ② the form — Title, Description, Priority… Create ticket saves it
Most messages don't need a ticket — they're just answered and resolved. Reach for a ticket when work spans replies or teams.
3

Route a message from Needs Routing

When the router couldn't decide a department.

Agent
  1. Open Needs Routing from the left menu.
  2. Click a row to read the message if you're unsure where it belongs.
  3. Pick the correct department in the row's Select department… picker.
  4. Click Route — it stays disabled until a department is picked, then moves the thread to that department's queue. If it's junk, click Resolve & move to spam instead.
Needs Routing
routing also mints a content→dept rule
Anna Meyer · Invoice question
Select department… ▾RouteResolve & move to spam
Mara Kováč · Partnership idea
Marketing ▾RouteResolve & move to spam
The Needs Routing page
Real app — click to zoom: the Needs Routing queue — pick a department per row, then Route
Every routing decision trains the learning engine — route accurately and less lands here over time. A toggle at the top of the queue can also mint a content→department rule as you route: leave it on for a pattern, off for a one-off.
4

Handle spam & suspicious mail

When a thread wears the Suspicious mark, or sits filtered in the Spam pile.

Agent
  1. Open the flagged conversation and read it. (Suspicious is a mark on an ordinary thread; filtered junk waits in the Spam pile as to confirm until a person agrees — see §3.)
  2. If it's legitimate, approve it: Not Spam — Approve on a suspicious thread (Not a Threat — Approve on phishing/scam flags), or Approve — Move to Open on a filtered one.
  3. If it's genuine junk, click Resolve & move to spam on a suspicious thread, or Confirm — it is spam in the Spam pile — both record it as confirmed spam.
  4. If it's phishing or a scam, don't just dismiss it — approve only if safe, and escalate the threat to a manager.
Flagged message
Suspiciousspam filter flagged this
Not Spam — ApproveResolve & move to spam
Phishing? escalate — don't just dismiss
The suspicious-thread strip
Real app — click to zoom:② Not Spam — Approve (phishing/scam flags label it Not a Threat — Approve) · ③ Resolve & move to spam for junk
Your spam and approve decisions also train the engine to filter better next time.
5

Handle a sales lead

When a message shows buying interest (or is auto-marked Lead).

Agent
  1. If it isn't flagged already, open ⋯ More actions and choose Mark as lead.
  2. Open the Lead tab and check the captured details (name, email, company…). Edit anything the AI missed.
  3. Open ⋯ More actions → Create lead ticket to track it through the pipeline.
  4. Reply fast with clear next steps — speed wins deals.
Lead tab
NameMara Kováč
Emailmara@arasaka.com
CompanyArasaka
InterestEnterprise plan
⋯ More actions ▾Create lead ticket
The ⋯ menu — Mark as lead
Real app — click to zoom: ① Mark as lead (step 1) — on a lead the menu offers Unmark as lead / Not a lead — close
In Sales, mark leads liberally so nothing slips through.
6

Hand off to a teammate

When someone else should take it, or you need input.

Agent
  1. Switch the composer to Internal note mode and write the context, then Post note — this is internal only, never sent to the customer.
  2. Reassign by clicking the assignee avatar on the conversation and picking a teammate.
  3. If it belongs to another team, change the department with the header's Dept control — tick Create rule to mint a routing rule at the same time.
Hand off
ReplyInternal notePost note
Internal note — only visible to the team…
Assign to
JSMaria K ▾Dept: Support ▾+ Create rule
The composer in INTERNAL NOTE mode
Real app — click to zoom: ① INTERNAL NOTE — POST NOTE sends it to the team only (step 1)
Notes keep the full context for whoever picks the conversation up next.
For managers · knowledge & oversight
7

Grow & tidy the knowledge base

Everyone saves; reviewers (managers & admins) approve what's captured.

Manager · Admin

Where: Knowledge Base (left menu)

  1. Anyone: when resolving, choose Resolve & save to KB to capture the question & answer.
  2. Open Knowledge Base and filter to Pending.
  3. View each entry, then Approve the good ones, Edit the almost-good, Hide the noise, or Reject outright junk.
Knowledge base
AllPendingApprovedHiddenRejected
How to reset a password
quality 86%ApproveEditHideReject
KB filtered to Pending
Real app — click to zoom: ② filter to Pending · ③ Approve on an entry (or Reject / Edit)
A clean, approved KB means better AI-suggested replies for the whole team. Clear the Pending queue weekly.
8

Tune a routing rule

When mail keeps landing in the wrong department.

Manager

Where: Settings → Rules → Routing Rules

  1. Open the routing rules and filter by All / Manual / Auto-learned.
  2. Create or open a rule: pick the target department and a type (Subject Contains, Body Contains, Subject Regex, Sender Email, Sender Domain, Header Match).
  3. Set the value / pattern and example phrases, then adjust the score (higher wins when several rules match).
  4. Toggle Enabled — and disable a Learned rule that's grown too broad (learned rules carry Learned / Promoted badges plus a match count).
Routing rules
AllManualAuto-learned
Billing ▾Subject Contains
“invoice”score 5on
Routing Rules — Add Rule
Real app — click to zoom: ② Add Rule (step 2) — the Auto-learned tab lists engine-made rules
The strongest fix isn't the rules screen — it's the team routing consistently, which is what the engine learns from.
9

Review the learning engine's suggestions

Approve or reject what the engine proposes across its domains.

Manager · Admin

Where: Settings → AI → Engine Activity (and Learning Trust)

  1. Open Engine Activity to see proposals grouped by domain (routing, spam, detection, …) — managers work the queue for the domains they manage, not just admins.
  2. For each, check the summary, confidence, and evidence count.
  3. Click Accept to apply it, or Decline (optionally with a reason).
  4. For a routing conflict, expand the evidence and Edit one rule to tighten it, or Merge the two.
  5. Set how boldly it acts under Learning Trust (admin-only) — Manual, Balanced, or Aggressive.
Engine Activity
AllRoutingSpamDetection
routing “invoice” → Billing
92%14 examplesAcceptDecline
Trust:ManualBalancedAggressive
Settings → AI → Engine Activity
Real app — click to zoom: Engine Activity — pending proposals and recent auto-actions appear here (step 1)
Start in Manual or Balanced; move to Aggressive once you trust what it's proposing.
For admins · setup
10

Connect a mailbox (or other channel)

When adding a source that feeds the inbox.

Admin

Where: Settings → Integrations → Message Sources

  1. Under Message Sources, pick a source card — Email, Gmail, Telegram, Slack, or WhatsApp. (The same tab holds the Jira card used in Task 2, plus AI providers, object storage, and chat widgets.)
  2. Email (IMAP/SMTP): enter host, port, address, password, and TLS. Gmail: use the OAuth sign-in instead.
  3. Choose the search criteria and lookback window, then assign the department(s).
  4. Save — new mail now flows into the inbox. (Telegram uses a bot token; Slack is event-driven via Event Subscriptions; WhatsApp is its own Meta handshake.)
Email source
IMAP hostimap.arasaka.com
Port · TLS993 ·
Addresssupport@arasaka.com
Search · lookbackunread · 30 days
DepartmentSupport ▾
Save
Message Sources — Add Email
Real app — click to zoom: ① Add Email (step 1) — Telegram / Slack / WhatsApp cards sit beside it
Flag a source as a Knowledge Base source to also mine its content for Q&A pairs.
11

Invite a teammate

When adding a new person to your organization.

Admin

Where: Users (left menu)

  1. Open Users and click Invite User.
  2. Enter their email — the Workspace is fixed to the one you're in.
  3. Choose a role — Associate (associate), Support (support), or Moderator (moderator). Org-admin invites are platform-admin only — the dialog notes “Org admins cannot invite other org admins.”
  4. Assign their department(s) and send — they'll get an email to set a password.
Invite user
Emailnew@arasaka.com
WorkspaceArasaka
RoleSupport ▾
DepartmentsSupport ▾
Send invite
Invite User — email, role, departments
Real app — click to zoom: ② Email Address · ③ Role · ④ Departments — Send Invitation mails the link
Give people the minimum departments and role they need; you can always adjust later.
Account security: invited users set their own password from the email link, then enable 2FA under Settings → Profile. Admins can require org-wide 2FA under Settings → Workspace → Authentication (Require two-factor authentication).
12

Set up AI for your organization

To enable suggested replies, analysis, and auto-reply.

Admin

Where: Settings → Integrations → AI Providers (prompts & learning under Settings → AI)

  1. Open Settings → Integrations → AI Providers and choose your AI provider mode. On paid plans, Managed AI is included and on by default — Odly runs the model for you, no key required. On Free (or whenever you'd rather use your own account) switch to Bring your own keys and paste a provider's API key on its card. Providers: OpenAI, Anthropic, DeepSeek, Perplexity, Qwen, AWS Bedrock, Ollama, or a Custom OpenAI-compatible endpoint.
  2. Choose the model for that provider.
  3. Under Settings → AI, review the prompts & model settings the AI uses for analysis and drafting.
  4. Configure Lead qualification (which fields to collect) and Auto-reply (whether AI may draft/send, and its guardrails).
  5. That tab also governs the learning engine — set the Trust Mode (admin-only) and review proposals (see Task 9).
AI settings
ProviderAnthropic ▾
ModelClaude ▾
Auto-reply
Lead qualification
AI Providers — bring your own keys
Real app — click to zoom:① Bring your own keys — paste the provider's key on its card (step 1)
Managed vs. bring-your-own-key: Starter, Pro and Enterprise Cloud include Managed AI — nothing to configure. Free runs on your own provider key. Either way the config is per-organization, and if a trial lapses managed AI falls back to your own key. Without any AI the full manual workflow still works — you just don't get drafted answers.
13

Set your SLA targets

Define the response and resolution times the team is held to.

Admin

Where: Settings → Workspace → SLA Thresholds (admin-only; managers can view)

  1. Open SLA Thresholds.
  2. For Ticket SLA, set a first-response (minutes) and resolution (hours) target for each priority — Critical, High, Medium, Low.
  3. For Message SLA, set a first-response target per channel — email, Telegram, Slack, other.
  4. Save — targets apply to new tickets and messages and drive the SLA breach / at risk flags.
SLA thresholds
PriorityResponse · Resolve
Critical15 min · 4 h
High1 h · 8 h
Medium2 h · 24 h
Settings → Workspace → SLA Thresholds
Real app — click to zoom: SLA Thresholds — per-priority and per-channel targets
Set targets you can actually hit — breaches are only a useful signal if the bar is realistic.
14

Add a department

When you need a new team queue (e.g. a new HR or Marketing desk).

Admin

Where: set up during onboarding — no self-serve screen yet

  1. Decide the essentials: the department name, and which mail, sources, and people belong to it.
  2. Odly has no self-serve “Departments” form today — the six defaults are seeded at signup and your plan budgets how many can be active. Ask your Odly platform contact (a platform admin creates / activates departments in the Platform Console).
  3. Once it exists, link message sources to it and add routing rules & skills that target it.
  4. Grant the right users access to the department (see Task 11).
  5. Heads-up: if you try to add a source with no departments yet, the integration card shows “No active departments. Create one before adding a source.”
Departments
No self-serve form yet
→ contact onboarding
Then, once created:
link sourcesadd rulesgrant users
Keep departments few and non-overlapping — clear boundaries make routing and the learning engine far more accurate.
15

Restore a deleted message

When a conversation was removed and needs to come back.

Platform admin

Where: Settings › System › Deleted Messages (platform admin only)

  1. Deleting a conversation is an org-admin action — ⋯ More actions → Delete message — and it's a soft delete: hidden from the inbox, but recoverable.
  2. To bring one back, ask your platform admin — they open Settings › System › Deleted Messages, find the conversation, and click Restore.
  3. The same surface has a “delete everything older than N days” purge — platform-admin only and irreversible.
Settings › System · Deleted Messages
Anna Meyer · Old newsletter reply
RestorePurge older than…
Workspace admins can't reach Deleted Messages — route restore requests to your platform admin. And if a customer replies to a deleted thread, it resurfaces on its own — so you rarely need a manual restore.
The screen snippets are simplified illustrations, not exact screenshots. Verified against the current app.