Help & Documentation
Everything you need to know about using Deskcord
Guides
New to Deskcord? Start with Get started, then go through the guides in order: each one ends with a link to the next.
Get started
Add Deskcord to your Discord server, put the widget on your website and send your first test message.
Read the guide →2Set up your Discord server
A Support role and a private channel for your conversations: the setup we recommend, in five minutes.
Read the guide →3Get notified of new conversations
Ping your Support role, or yourself, every time a visitor starts a chat. On desktop and on your phone.
Read the guide →4Make it yours
Your texts, position, theme and colors, the websites the widget works on, and what Pro adds.
Read the guide →5Identify your logged-in users
Your users skip the intro form, show up with their name and avatar, and find their conversations on every device.
Read the guide →Discord Commands
Use these slash commands in your Discord server to manage Deskcord:
/setup
Get your widget embed code
Usage:
/setupReplies with your embed code, visible only to you. Paste it at the end of the <body> of every page where the widget should appear. The reply also has a "Get the AI setup prompt" button. It gives you setup instructions with your app ID already filled in. Paste them into an AI coding assistant, such as Claude Code, Cursor or Codex, and it adds the widget to your site.
/set-destination-channel
Set your default channel for new conversations
Usage:
/set-destination-channelRun it in the text channel that should receive new conversations. It becomes your default channel: each new conversation opens a thread there. On Pro, websites that have their own channel (see /set-allowed-domains) keep using it. The bot needs permission to create threads and send messages in the channel, and it tells you which permissions are missing.
/notifications
Ping your team when a new conversation opens
Usage:
/notifications who:@Support/notifications enabled:false/notificationsFree and Pro. Only members with the Manage Server permission can use it. who is the role or member to ping, such as your support role: each new conversation is then announced in its channel with a mention, the visitor's name, the ticket number and the website, and its thread opens under that message. Whoever replies in the thread joins it, so the visitor's next messages notify them. enabled:false pauses the pings without forgetting who, enabled:true turns them back on. Without options, the command shows your current settings and warns you if the role or member can't see a conversation channel, or if the role can't be mentioned.
Full guide, with team and phone setup →/usage
See your plan and this period's conversations
Usage:
/usageShows your plan, the number of new conversations opened in the current period (for example 12 / 30 on Free), and when the period ends. Periods restart every month on the day you installed Deskcord. Messages in a conversation that's already open never count.
/subscribe
Upgrade to Deskcord Pro
Usage:
/subscribeEvery server starts on the Free plan: 30 new conversations per month, with no card. This command shows two Stripe Checkout buttons: Pro monthly at $4.99 / €4.99 per month, or Pro yearly at $39.99 / €39.99 per year. Checkout charges you in your currency, USD or EUR. Pro has no free trial. If your server is already on Pro, the command points you to /manage-subscription.
/manage-subscription
Manage your Pro subscription
Usage:
/manage-subscriptionGives you a button to the Stripe billing portal. There you can switch between monthly and yearly billing, update your payment method or cancel. If you cancel, your server goes back to the Free plan at the end of the billing period. On Free, the command tells you there's no subscription to manage yet.
/resolve-conversation
Close a customer conversation thread
Usage:
/resolve-conversationMarks the current thread as resolved and closes it. The thread will be archived and the customer will see the conversation as completed in their widget. Use this when a support ticket is finished.
/set-allowed-domains
Choose the websites your widget works on, and their channels
Usage:
/set-allowed-domains add domain [channel]/set-allowed-domains set-channel domain [channel]/set-allowed-domains remove domain/set-allowed-domains listWhile the list is empty, the widget works on any domain. Once you add a domain, it only works on the domains in the list. add allows a domain, like example.com, or *.example.com for every subdomain (but not example.com itself). Free covers 1 website and Pro covers any number. www.example.com is a separate domain from example.com: add both if your site answers on both. They count as the same website on Free. On Pro, the optional channel sends that website's new conversations to their own channel. set-channel changes a website's channel, and leaving channel empty sends its conversations back to your default channel. remove deletes a domain. list shows each domain and the channel its conversations open in. Development domains (localhost, 127.0.0.1, *.local) are always allowed.
/customize-widget
Customize your widget's look and texts
Usage:
/customize-widget [position] [gradient_color] [text_color]Run it without options to open a form with the header title, the header subtitle and the offline message shown when no one's around. On Pro, the form also has the primary color. Options save right away, without the form: position (bottom right or bottom left), gradient_color (second color of the header and chat button gradient) and text_color (header text and chat button icon). Colors take a hex code like #EB459E, or auto to go back to the default, and Discord suggests colors as you type. Custom colors are a Pro feature. On Free, the widget uses the default colors. Colors you set on Pro are kept, and they come back if you upgrade again. You don't need to change your embed code.
/customer-info
See who the customer is, inside a conversation thread
Usage:
/customer-infoRun it inside a conversation thread. The reply is visible only to you. It shows the customer's name, email and ticket number, and whether their user id was verified with identity verification. On Pro, it also lists the customer metadata your website passed to identify(), labelled "Unverified, set by the website".
/email-settings
Email visitors the replies they missed (Pro)
Usage:
/email-settings [enabled] [reply-to]Only members with the Manage Server permission can use it. enabled turns email follow-ups on or off. They're on by default. Turning them off deletes the visitor email addresses kept for them. reply-to sets the address that receives visitors' replies to these emails. Type billing to go back to the billing email of your Pro subscription. Without options, the command shows your current settings. Emails only go out while your server is on Pro.
/identity-verification
Let logged-in users find their chats on any device
Usage:
/identity-verification [enable|rotate|disable]Shows (enable) or replaces (rotate) the secret your server uses to sign your logged-in users' ids. Pass the user and the signature to window.deskcord.identify() and they skip the intro form and find their conversations on every device. Only members with the Manage Server permission can use it, and the secret is only shown to you. Never put it in your website's front-end code.
Full setup guide, with code for every language →/help
List every Deskcord command
Usage:
/helpShows each Deskcord command with a one-line description. The reply is visible only to you.
Frequently Asked Questions
Getting Started
The Get started guide at /help/get-started walks you through it, with screenshots. In short: 1) Click "Add to Discord" and authorize the bot on your server. You start on the Free plan, with no card. 2) Run /set-destination-channel in the channel where new conversations should arrive. We recommend a private #support channel, opened to a Support role: see the Discord server setup guide at /help/discord-server-setup. 3) Run /setup and paste the embed code at the end of the <body> of your pages. Or click "Get the AI setup prompt" in the same reply and paste the prompt into your AI coding assistant. 4) Run /notifications who:@YourSupportRole (or pick yourself) so your team is pinged when a conversation starts. Setup takes about 5 minutes.
Yes, but creating one is free and takes 2 minutes! When you add Deskcord, we'll guide you through the setup. All your customer conversations will happen as threads in your Discord server.
Use the /setup command in your Discord server. Copy the provided script tag and paste it into your website's HTML before the closing </body> tag. The widget will appear automatically.
Yes. Run /setup and click "Get the AI setup prompt". The prompt already contains your app ID. Paste it into Claude Code, Cursor, Codex or another AI coding assistant that can open your website's code. It adds the widget to the layout that renders on every page, identifies logged-in users if your site has them, and tells you which files it edited.
Yes. Run npm install deskcord. The package starts the widget as soon as it loads, so set your settings first, then import it, in client-side code only: window.deskcord = { settings: { app_id: "YOUR_APP_ID" } }; import("deskcord"); The dynamic import() makes sure the settings exist before the widget starts. Don't run it during server-side rendering.
Discord Server Setup
Two things: a Support role for everyone who answers visitors, and a private #support channel that only that role and Deskcord can see. Run /set-destination-channel in #support so conversations open there, then /notifications who:@Support so the role is pinged for each new conversation. The step-by-step guide, with screenshots, is at /help/discord-server-setup.
Both work. A new server keeps support completely apart. On your community server, make the support channel private: only the Support role and Deskcord should see it, so your members don't read visitor conversations.
Everyone who can see the channel the conversations open in: each conversation is a thread in that channel, with the visitor's name and email. That's why we recommend a private channel opened to a Support role only.
In the channel conversations open in: View Channel, Send Messages, Create Public Threads, Send Messages in Threads, Read Message History, Embed Links and Attach Files. Manage Threads is recommended, to close and rename threads when a conversation is resolved. In a private channel, add Deskcord to the channel. /set-destination-channel tells you if anything is missing.
Yes, on Pro. Create a private channel per website, like #support-shop, and link it with /set-allowed-domains add domain:shop.example.com channel:#support-shop. You see at a glance which website a visitor comes from, and you can give each channel its own role so only the right people are pinged. Websites without a channel keep using your default channel.
Using Deskcord
When a customer sends a message, a new thread appears in your Discord server. Simply reply in that thread like any Discord conversation! Your messages are sent instantly to the customer through the widget. You can reply from desktop or the Discord mobile app.
Yes! Just attach images or files to your Discord messages in the customer thread, and they'll be sent through the widget. Customers can also send you images and PDFs (up to 10 MB each): they can attach them, drag and drop them onto the chat, or paste a screenshot.
No. They type their message first; before it's sent, the widget asks for their name and email so your team knows who they are. Logged-in users identified with identify() skip that step entirely.
The first message of each conversation thread shows the customer's name, email and ticket number. Run /customer-info inside the thread to see them again, with whether their user id is verified. On Pro, both also show the customer metadata your website sent with identify().
Run /notifications who:@YourSupportRole (or pick yourself) and Deskcord pings that role or member in Discord each time a conversation starts. After that, the visitor's messages notify whoever replied in the thread, like any Discord thread you're in. You can reply from your phone with the Discord mobile app. See the Notifications questions below and the full guide at /help/notifications.
Absolutely! All messages are stored in Discord threads. You can scroll through the thread to see the entire conversation history. If you cancel Deskcord, all your conversations stay in your Discord server forever.
By default, Deskcord uses your Discord name and profile picture when replying to customers. However, you can set a specific name and profile picture per-server using Discord's Server Profiles feature. This allows you to maintain a professional identity on your support server while keeping your usual online identity on other servers. Learn how to set up a server profile in Discord's documentation.
Notifications
Run /notifications who:@YourSupportRole. Each new conversation is then announced in its channel with a mention of that role, the visitor's name, the ticket number and the website they're on, for example "@Support New conversation #0012 from Jane on shop.example.com". The conversation's thread opens right under that message.
Working alone, pick yourself. Working as a team, create a role (for instance Support) and give it to everyone who answers visitors: you can then add or remove people in Discord without touching Deskcord. Only one role or member can be pinged, and @everyone can't be picked.
Discord only lets the bot ping a role that is mentionable. Open Server Settings → Roles → your role → Display, and turn on "Allow anyone to @mention this role". Or give Deskcord the "Mention @everyone, @here, and All Roles" permission. Run /notifications without options: it warns you when the role can't be mentioned or can't see a conversation channel.
Yes, once you've replied. Discord notifies the members of a thread of every new message, and replying makes you a member. Before replying, click Join Thread in the thread's menu to follow it. The ping itself only covers the start of the conversation.
Yes. The announcement is a regular Discord mention, so it shows up as a push notification in the Discord mobile app, even when the server is muted. Allow Discord's notifications on your phone, and make sure "Suppress All Role @mentions" is off in the server's notification settings if you're pinged through a role.
On Pro, the announcement is posted in the channel the conversation opens in, so it sits next to that website's conversations. The same role or member is pinged for every website, but only people who can see a channel are notified there. Give each website's channel its own permissions to split who handles what.
/notifications enabled:false pauses the pings and remembers who to ping, /notifications enabled:true turns them back on, and /notifications who: with another role or member replaces the current one. Changes apply to conversations that start afterwards.
No. Notifications are included in every plan, Free and Pro. Deskcord only stores the id of the role or member to ping. The announcement stays in your Discord server, like the conversation.
Websites & Channels
Yes, on Pro, with any number of websites. Free covers 1 website. Add each website's domain with /set-allowed-domains add, and check the list with /set-allowed-domains list.
Yes, on Pro. Pick the channel when you add the domain, with /set-allowed-domains add domain:shop.example.com channel:#support-shop, or later with /set-allowed-domains set-channel. Websites without a channel use your default channel, set with /set-destination-channel. The channel is chosen when a conversation starts. Changing it only affects new conversations: open ones stay in their thread. If a website's channel is deleted, or the bot can't see it anymore, its new conversations open in the default channel.
Yes. For the allowed domains, www.example.com and example.com are two different domains. Add both if your site answers on both. On Free, they count as the same website. When you add one, the bot reminds you of the other.
Only the first website in your allowed domains keeps working, with its www. twin. The widget stops working on the others until you upgrade again or remove them. /set-allowed-domains list shows them as paused. Conversations from the website that keeps working open in your default channel.
Email Follow-ups
A Pro feature. When your team replies and the visitor has left without reading it, Deskcord emails them the reply about 5 minutes after the first reply they missed. Replies sent in the meantime go in the same email. If the visitor is back on your site or has read the reply by then, no email goes out. Follow-ups are on by default, and /email-settings turns them off.
The email comes from your Discord server's name. It contains the text of each reply and who wrote it, up to the 10 most recent unread replies. Attachments are named in the email but not included. When the widget sent the visitor's page (widget 1.2 or later), a "Continue the conversation" button links back to it. Every email has an unsubscribe link.
To your reply-to address, not to Discord. By default it's the billing email of your Pro subscription, the one Stripe has. Set another address with /email-settings reply-to:, or type billing to go back to the billing email.
The visitor's email address and the last page they used the chat on (address and path, without the query string). Deskcord stores them only for Pro servers with follow-ups on. The reply text is read from Discord when the email is sent and isn't stored. The address is deleted when the visitor unsubscribes, when you turn follow-ups off, or after 180 days without use.
Customer Metadata
On Pro, add metadata to identify(): window.deskcord.identify({ name, email, metadata: { plan: "pro", signupDate: "2026-01-04", mrr: 49 } }); The details show in the first message of each new conversation and in /customer-info. This needs widget 1.2 or later. Each identify() replaces the previous metadata, and logout() forgets it. On Free, the metadata is ignored, with no error.
Metadata is a flat object. Values are strings, numbers, booleans or null. Strings hold up to 200 characters. You can pass up to 20 keys, of up to 40 characters each, and about 1 KB in total. The widget drops what doesn't fit and logs a warning in the browser console.
Treat it as unverified. userHash only signs the user id, not the metadata, so a visitor can change it in their browser. Discord always labels it "Unverified, set by the website". Don't put secrets in it.
Plans & Billing
Run /manage-subscription in your Discord server, or open the customer portal directly. There you can update your payment method, switch between monthly and yearly billing or cancel. On the portal, enter the email address you used when subscribing, and Stripe sends you a secure login link.
Free: 30 new conversations per month, 1 website and unlimited teammates, with no card and no time limit. The count restarts every month on the day you installed Deskcord, and messages in a conversation that's already open never count. The server owner gets a Discord DM at 80% and 100% of the limit, and /usage shows where you stand. Pro: unlimited conversations, several websites each with its own channel, email follow-ups, customer metadata and custom widget colors. $4.99 / €4.99 per month, or $39.99 / €39.99 per year.
Who can reply is handled entirely by permissions on your Discord server. Deskcord doesn't manage it separately. Anyone who can read and write in your support channels can reply: the default channel set with /set-destination-channel, and on Pro, each website's own channel.
The cleanest way to set this up: create a dedicated channel for support (e.g. #customer-support), make it your default channel, and restrict read/write access on it to the people who handle support. A tidy way to do that is a "Customer Support" role: assign it to your support staff and grant only that role (plus admins) access to the channel. Adding or removing the role is all it takes, with no configuration in Deskcord.
Need a hand setting this up? Reach out to us using the chat widget right here on this page.
Yes. Every server starts on the Free plan, with no credit card and no time limit. Pro has no free trial. Upgrade with /subscribe when you need more.
Your server goes back to the Free plan at the end of the billing period. The widget keeps working, up to 30 new conversations per month, on the first website in your allowed domains. Conversations open in your default channel. Email follow-ups and customer metadata stop, and the widget goes back to the default colors. Your colors are kept for when you upgrade again. Your Discord server and all conversation history stay with you.
Yes. Run /manage-subscription in Discord to open the billing portal and switch.
Widget Customization
Yes. Run /customize-widget to set the header title and subtitle, the offline message shown when no one's around, and the widget position (bottom-left or bottom-right). On Pro, you can also set the primary color, and the header gradient and text colors (e.g. /customize-widget gradient_color:#EB459E text_color:#FFFFFF). Every accent in the widget updates to match, and text automatically stays readable on light colors.
Yes. Add theme: "dark" to the settings in your embed snippet, or theme: "auto" to follow each visitor's system setting. The default is light. The widget can't read your page's colors, so if your site has its own dark-mode switch, call window.deskcord.setTheme("light"), setTheme("dark") or setTheme("auto") when it changes. The widget updates immediately, no reload needed.
Yes. The widget speaks English, French, German, Spanish, Brazilian Portuguese, Italian, Dutch, Polish, Japanese and Turkish. It follows your page's language (the lang attribute of its <html> tag), then the visitor's browser, and falls back to English. To force a language, add locale: "fr" to the settings in your embed snippet, and if your site switches language without a reload, call window.deskcord.setLocale("de"). Only the widget's own texts are translated: your messages and your /customize-widget texts show as you wrote them.
By default, the widget appears as a chat bubble in the bottom-right corner of your website, but you can switch it to bottom-left with /customize-widget. Customers can click it to start a conversation. It's mobile-responsive and works on all devices.
Yes! You can conditionally load the embed script based on your needs. Simply wrap the script tag in your templating logic to control where it appears.
Privacy & Security
All messages live in your Discord server. Deskcord keeps no copy of message content. Deskcord itself keeps an anonymous ID for each visitor. On Pro, it also keeps the visitor's email and last page for email follow-ups, and the latest metadata your site passed to identify().
No! Customers interact through the widget on your website. They never see Discord or need to create an account. It's completely transparent to them.
Deskcord is based in France, so the GDPR applies to it. The privacy policy lists what Deskcord stores, why, for how long, and how to use your rights. Messages stay in your Discord server, where Discord's own terms apply.
Restrict your widget to your own domains with /set-allowed-domains add yourdomain.com. Once the list has a domain, the widget only works on the domains in it. Add www.yourdomain.com too if your site answers on it. Free covers 1 website, and Pro covers several.
Yes. Run /identity-verification enable in Discord to get a secret, have your server sign each logged-in user's id with it, and pass the user to window.deskcord.identify(): they skip the intro form, their avatar shows in Discord, and they find their conversations on every device. Still no message is stored on our servers. Follow the step-by-step guide, with code for every common language and a ready-made prompt for AI coding agents if you don't code.
Troubleshooting
Check that: 1) You've pasted the embed code before </body>, 2) You haven't reached the Free plan's monthly limit (check with /usage; visitors without an open conversation don't see the widget until the reset), 3) If you use /set-allowed-domains, the page's domain is in the list (www. is a separate domain) and, on Free, belongs to your first website, 4) Your browser isn't blocking scripts, 5) You've hard-refreshed the page (Cmd/Ctrl + Shift + R).
Verify that: 1) You haven't reached the Free plan's monthly limit (check with /usage), 2) The widget has the correct app_id in the embed code, 3) Your Discord server is online and the bot has permissions.
Check that: 1) Your server is on Pro, 2) /set-allowed-domains list shows the channel next to the exact domain the visitor used (www. is a separate domain), 3) The channel still exists and the bot can create threads in it. A conversation keeps its thread: a new channel only applies to conversations started afterwards.
Check that: 1) /notifications shows notifications on, with the right role or member, 2) The role is mentionable, or Deskcord has the "Mention @everyone, @here, and All Roles" permission, 3) The role or member can see the channel the conversation opened in, 4) Deskcord can send messages in that channel: if it can't post the announcement, the conversation still opens, without the ping, 5) The people missing the ping don't have "Suppress All Role @mentions" on in the server's notification settings.
Check that: 1) Your server is on Pro, 2) /email-settings shows reply emails on, 3) The visitor left without reading the reply, and stayed away for about 5 minutes, 4) The visitor didn't unsubscribe. The "Continue the conversation" button needs widget 1.2 or later.
Check that: 1) Your server is on Pro, 2) Your site runs widget 1.2 or later, 3) metadata is a flat object within the limits (the browser console warns about anything dropped). Metadata shows at the top of conversations started after identify() was called, and /customer-info always shows the latest.
Use the Deskcord widget on this very website! We dogfood our own product. Click the chat bubble and we'll help you out.
Still need help?
We're here to help! Use the widget on this page or join our Discord community.