TheSkinnyAI FAQ
Table of Contents
Getting Started
Setup & Coaching
- Site Analysis: We will analyze your site to understand its structure and content.
- Consultation & Coaching: We work with you to ensure the tone, style and content match your goals perfectly.
- Testing: We perform positive and negative testing to ensure the assistant is working as expected.
- Integration: While integration onto your site is one line of code, we will help your team get it right.
Settings tab
- Site URL: Your site’s base URL (read‑only).
- Starting URL: The first page to crawl (you can change this anytime).
- Do Not Crawl URLs: Paths or full URLs to exclude from discovery and crawling.
Content tab
- Critical Instructions: Non‑negotiable guidance the assistant must follow. if you want to add a link to responses, add something like, "If the user asks for meeting or call, direct them to http://theskinnyai.com/schedule"
- Tone: Desired voice and style (e.g., professional, friendly, concise).
- Primary Facts: Key facts the assistant can rely on.
My Skinny tab
- Button Text: The label shown on your widget button.
- Fill/Text Color: Brand colors for the button and chat.
- Position: Corner placement or Advanced (mount into your own element).
- Embed Script: Copy/paste this snippet to install the widget on your site. Important: allow scripts and connections to
https://theskinnyai.com in your CSP.
Teams & Roles
- Roles: Owner, Admin, Editor (per‑tenant).
- Capabilities:
- Owner/Admin: invite, revoke, remove members; change roles (Owner safeguards apply).
- Editor: full dashboard except Team & Billing tabs.
- Seat cap: Up to 5 seats per tenant (Active members + Pending invites).
- Safeguard: You cannot demote or remove the last remaining Owner.
- Team management: Members table shows email, role, status, joined date.
Invitations
- Invite links: Send via email; you can also copy the accept link.
- Existing users: If signed in with the invited email, invites are auto‑accepted.
- New users: Create an account from the invite; after confirmation, land in the dashboard (no setup wizard for invitees).
- Re‑send / Revoke: Re‑send from the Pending Invites list or revoke to free a seat.
- Expiry: Invites expire after 7 days (configurable).
Multi‑tenant
- Tenant switcher: Visible when you belong to multiple tenants; persists your selection.
- Scoped data: All tabs reflect the currently selected tenant.
- No memberships: If you have no assigned tenants, dashboard tabs are hidden.
Reporting
Usage
Shows overall activity including total chats and a time‑series chart. Use the date range to narrow to recent periods.
History
This is where your new leads will be listed.
This also lists recent conversations with sentiment, lead confidence, latency, request ID, model, and message count. Click a row to see the transcript.
Analysis & Reports
- QA Flags: Highlights concerning responses with examples (Date, Request, Response). Up to 20 examples are shown.
- Date filters: Date‑only pickers use UTC 00:00 (start) and 23:59 (end) for clarity.
- Exports: Download JSON, RTF, or Print (PDF). Report title: “TheSkinnyAI Analysis Report”.
History Exports
- PDF/RTF: Export session lists; optionally include full transcripts.
- Transcript format: Matches the chat details dialog; local timestamps; clear role labels (User/SkinnyAI).
- Message count: Tracked per session and reflected in reports.
Billing
- Visibility: The Billing tab is hidden for Editors.
- Management: Owners (and Admins where applicable) can access the billing portal and subscription settings.
- Trials & plans: Trial status and plan details appear in the Billing tab when available.
Security & Permissions
- Role‑based access: All operations are gated by your tenant role (Owner/Admin/Editor).
- Membership validation: Access to tenant data requires an active membership for that tenant.
- Ownership safeguards: Prevent removing/demoting the last Owner of a tenant.
- Automatic language detection: The assistant adapts to the user’s language automatically.
- CSP/Headers: Allow scripts and connections to
https://theskinnyai.com in your Content Security Policy. See troubleshooting pages for CSP/CORS tips.
- Cross‑platform: Works across modern browsers and devices; embed with a single script tag.
Troubleshooting
Widget button position looks better in different corners by device
Many sites prefer the chat button in different corners depending on screen size: top‑left on desktop, bottom‑left on tablets, and bottom‑right on mobile. You can implement this responsively by setting the widget’s data-position at load time based on media queries.
Example (site‑specific embed logic):
<script>
// Decide button position by viewport width
var pos = 'top-left';
try {
var isMobile = window.matchMedia('(max-width: 575.98px)').matches;
var isTablet = window.matchMedia('(min-width: 576px) and (max-width: 1199.98px)').matches;
if (isMobile) pos = 'bottom-right';
else if (isTablet) pos = 'bottom-left';
} catch (e) {}
var s = document.createElement('script');
s.src = 'https://theskinnyai.com/chatbot-widget.js';
s.dataset.tenantId = 'YOUR_TENANT_ID';
s.dataset.name = 'Ask Skinny';
s.dataset.position = pos; // top-left | top-right | bottom-left | bottom-right
document.body.appendChild(s);
</script>
If you use data-target to mount inside your own element, the widget won’t float; position that container with your CSS instead of data-position.
Custom Launching TheSkinnyAI
If you want to hide the default launcher and trigger the chat from your own buttons/links, mount the widget into a hidden target and open it programmatically.
Embed with hidden target:
<div id="skinny-mount" style="display:none"></div>
<script
src="https://theskinnyai.com/chatbot-widget.js"
data-tenant-id="YOUR_TENANT_ID"
data-target="skinny-mount"
data-name="Ask Skinny"
data-theme="dark">
</script>
Add open/close helpers and your triggers:
<script>
function openSkinny(scope){
try{
var host = scope
? document.querySelector('[data-skinny-button][data-skinny-scope="'+scope+'"]')
: document.querySelector('[data-skinny-button]');
var btn = host && host.shadowRoot && host.shadowRoot.querySelector('.btn');
if(btn) btn.click();
}catch(e){}
}
function closeSkinny(scope){
try{
var panel = scope
? document.querySelector('[data-skinny-panel][data-skinny-scope="'+scope+'"]')
: document.querySelector('[data-skinny-panel]');
var x = panel && panel.shadowRoot && panel.shadowRoot.querySelector('.close');
if(x) x.click();
}catch(e){}
}
</script>
<!-- Your custom UI -->
<a href="#" onclick="openSkinny();return false;">Chat with us</a>
<button onclick="closeSkinny()">Close Chat</button>
Tip: Use data-scope on the embed to control multiple widgets independently (pass the same scope to openSkinny/closeSkinny).