Skip to main content
Most problems come down to one of a few things: Feddy hasn’t been set up yet when something tries to open it, the project ID doesn’t match, or a feature needs a setting that isn’t on. Find your symptom below.

iOS

Possible cause: configure hasn’t run yet. The console shows [Feddy] present() called before configure(projectId:).Solution: Call Feddy.configure in your app’s init (SwiftUI) or in application(_:didFinishLaunchingWithOptions:) (UIKit), so it runs before any screen can call present().
Possible cause: .feddyUnreadBadge() only draws inside a List, Form, or TabView. Anywhere else it does nothing.Solution: Use FeddyUnreadDot for a marker you place yourself, or read the count from FeddyUnread.shared. See Unread badge.Another possible cause: the SDK stops checking for replies while the app is in the background, so the badge can be stale for a moment after the user comes back.Solution: Call Feddy.refresh() when the app becomes active.Also keep in mind that only opening a conversation clears its count. Opening Feddy doesn’t.
Possible cause: The image picker needs iOS 16. On iOS 15 the attachment row isn’t shown.Another possible cause: Attachments are a paid-plan feature.Only PNG, JPEG, and WebP images are accepted, up to 5 per message.

Web

Possible cause: init was called without a project ID. The console shows [Feddy] init requires a projectId.Solution: Pass projectId to Feddy.init, copied from Settings → Install.Another possible cause: The script never loaded. In the console, typeof Feddy should print "object"; if it prints "undefined", check the script tag’s URL and that nothing is blocking it.Another possible cause: You passed launcher: false, which turns off the floating button. Nothing is drawn until you call Feddy.open() from your own element.Note that init only takes effect once per page load. To start over, reload the page.
Possible cause: Feddy.onUnreadCountChanged was assigned after the count changed, so the first update was missed.Solution: Assign it right after init. The widget checks every 45 seconds and whenever the tab becomes visible, and calls your function each time the number changes.Also keep in mind that only opening a conversation clears its count. Opening Feddy doesn’t.
Possible cause: The widget follows the browser’s language and falls back to English for languages it doesn’t ship.Solution: Pass locale to init to force one, for example 'ja' or 'zh-TW'. Text you wrote in the dashboard, such as topics and the fallback message, uses your translation when one exists for the user’s language and your default text otherwise.

Inbox and email

Possible cause: The project ID in your code doesn’t match the one under Settings → Install. A wrong ID fails silently for the user.Another possible cause: You’re looking at a different project. Check the project picker in the dashboard sidebar.Another possible cause: A development build is still pointed at a local server through apiUrl (web) or apiURL (iOS).Solution: Compare the IDs character by character, and make sure production builds use the default server.
Possible cause: Anything over the limits is dropped without an error: more than 20 keys, a key over 40 characters, a value over 255 characters, nested objects or lists, or more than 8 KB in total. On iOS, a value that isn’t a String, Bool, a number, or a Date is dropped on the device.Another possible cause: Each identify call replaces the whole set. A key you left out of the latest call is gone.Solution: Keep attributes flat and within the limits, and send every attribute you want to keep on each call. See Identify users.
Possible cause: The widget only asks when your project has a verified email domain, and only once per device.Solution: Verify a domain under Settings → Email domain, or pass email in identify so there’s nothing to ask for.
Possible cause: All three must be true: Feddy has an email for the contact, your project’s email domain is verified, and your plan includes email to users.Solution: Check each one under Settings → Email domain and the contact’s Details panel. Replies still appear in the app either way.
Possible cause: One of your answers matched more broadly than you meant it to, or a source says something you didn’t mean users to read. Milo only ever uses your answers, your sources, and your About your app text, so the cause is in there.Solution: Open the conversation: Based on under the reply links the page it used. Fix the answer or the page, or set the source to Team only, then ask the same question on the phone under Settings → Milo AI → Settings to confirm the change before users see it.

Still stuck?

Use the chat button in the bottom-right corner of your dashboard. It’s Feddy’s own widget, going to the same kind of inbox you’re setting up, and a real person answers.