Paid add-on. Marketing is licensed separately from the open-source packages. See pricing
AI features
The AI subject-line assistant and account briefings included with Odden Marketing, how to turn them on with your own Anthropic key, and what the model is sent.
Odden Marketing includes AI features. They are part of the package: there is nothing extra to buy or install, and they need no separate license. They run on your own Anthropic key, so nothing about them is billed by Odden, and with no key every feature falls back to a built-in version.
| Feature | What it does | Without a key |
|---|---|---|
| AI subject lines | The AI Copy Assistant in the campaign editor suggests subject lines for a topic, tone, and audience. | Suggestions from a fixed set of phrases |
| AI account briefing | A short written summary at the top of a contact or company: what has happened recently and what needs attention. | A rule-based summary |
The subject lines work wherever Marketing is installed. The briefing also uses deals when getodden/crm-sales is installed, and tickets when getodden/crm-service is.
Turn it on
Set your key in the environment:
ODDEN_AI_API_KEY=sk-ant-...That is all. The panel (getodden/crm-filament) asks the container for the AI implementations, so the AI Copy Assistant and the AI Briefing start using the model with no change to your code.
| Setting | Env | Default |
|---|---|---|
odden-pro.ai.api_key |
ODDEN_AI_API_KEY |
none: AI off |
odden-pro.ai.model |
ODDEN_AI_MODEL |
claude-haiku-4-5-20251001 |
odden-pro.ai.base_url |
ODDEN_AI_BASE_URL |
https://api.anthropic.com |
odden-pro.ai.timeout |
ODDEN_AI_TIMEOUT |
20 seconds |
odden-pro.ai.max_calls_per_hour |
ODDEN_AI_MAX_CALLS_PER_HOUR |
60 (per workspace) |
odden-pro.ai.cache_minutes |
ODDEN_AI_CACHE_MINUTES |
60 |
odden-pro.ai.briefing_detail |
ODDEN_AI_BRIEFING_DETAIL |
titles |
Publish the config file with php artisan vendor:publish --tag=odden-pro-config. On a multi-tenant host such as Odden Cloud the settings are read on every call, so each workspace's own key is the one used.
What the model is sent
- Account briefing: the record's scores, counts of deals and tickets, and the type, title, and date of its 15 most recent activities. Never the record's name, email address, or phone number: the model writes
{{subject}}and the name is put in afterwards. Withbriefing_detail=notesit also gets the first 300 characters of each activity's text, which makes a better briefing and also sends whatever people wrote there. Leave it ontitlesunless the owner of the key is comfortable with that. - Subject lines: the topic, tone, and audience typed in the panel.
Text from the CRM is passed as data inside tags, and the instructions tell the model never to follow instructions found in it. Customers write some of that text, so the model never decides anything: the briefing's sentiment badge stays the built-in rule-based one, and everything the model writes is stripped to plain text and length-limited before it is shown.
When AI is not used
Any of these returns exactly what the built-in version would have: no key set, the hourly cap reached, the provider unreachable or slow, an error or a refused key, or a reply that is not the expected JSON. The panel never shows an AI error. A failure is logged, never with the key.
Cost protection
The key belongs to you, so there are two guards on it: an hourly cap per workspace (max_calls_per_hour), and a briefing cache keyed on everything sent to the model, so an unchanged record is not summarised twice.