Customer portal

What your customers can do on the portal: Cfx.re sign-in, replies, favorites, ticket participants, invite links, and closure requests.

The customer portal is the customer-facing side of Joely: a branded space where your customers open tickets, follow the conversation, and check their purchases. It lives on your project's own portal URL and uses your project's theme.

Signing in

Customers sign in with their Cfx.re account (the same account they use on the FiveM forums), no password to create, no separate registration. The first sign-in on a project's portal automatically registers them as a customer of that project.

Customer accounts are completely separate from staff accounts, even when the same person has both.

Tickets

Creating a ticket

Customers open tickets from the portal, with a subject and a first message. If the project has Tebex stores connected, they can link the ticket to one of their purchased packages, so staff immediately see which product the request is about.

Replying and editing

  • Customers can reply on any ticket status except Closed, including Resolved, which is the built-in way of saying "this is not actually fixed".
  • Customers can edit their own messages, with the same rule: allowed everywhere except on a closed ticket.
  • Customers can react to messages in the thread.

For the full status-by-status rules, see Ticket statuses.

A direct ticket link sends a customer straight to the ticket form for one script of one order, without going through the portal's package picker. You can put it anywhere you talk to buyers: a purchase email, a script's README, an in-game error message.

Building the link. Add two query parameters to the /open-ticket page of your portal:

https://{your-slug}.joely.io/open-ticket?orderId={transaction id}&scriptId={package id}

If your portal does not use a subdomain, the same page lives at /portals/{your-slug}/open-ticket?orderId=...&scriptId=....

  • orderId is the Tebex transaction id of the purchase (for example tbx-...), as shown on the payment in your Tebex creator panel. Letters, digits, - and _ only, up to 64 characters.
  • scriptId is the Tebex package id of the script: the number in the package's URL on your store (/package/5170201). It must be a positive whole number.

Both parameters are required. A link with a missing or malformed parameter shows an "Invalid ticket link" page that points the customer back to the portal.

What the customer sees:

  1. Sign-in. The page asks them to sign in with Cfx.re, then brings them back to the same link.
  2. Purchase check. Joely checks, on the server and against your Tebex store, that the order belongs to the signed-in Cfx.re account and that the script is part of that order. The link itself proves nothing: changing the ids in the URL cannot reveal someone else's order. Each failure has its own message:
    • Wrong account? The order was not found on the signed-in Cfx.re account.
    • Script not in this order. The order is theirs, but it does not include this script.

    Both messages come with a Sign out and switch account button. Since Cfx.re signs people back in automatically, the page then reminds them to sign out on the Cfx.re forum first if they want to use another account.
  3. The form. Once both checks pass, the page shows the order and script, then the ticket form: subject, description, and the custom fields that apply to this script. The checks run again when the form is submitted, and the new ticket is linked to the verified order and script. The customer then lands on their ticket.

If the customer already has an open ticket they created about this script, a prompt opens over the form with that ticket's number and subject. View ticket takes them to it. Open a new ticket closes the prompt and leaves them on the form, and so does closing the prompt any other way. Opening a second ticket stays possible: the prompt only points them to the one they already have.

The link needs at least one Tebex store connected to the project, since that is where purchases are checked. It works on every plan.

Favorites

Customers can mark tickets as favorites to find them quickly. When a ticket is resolved or closed, it is automatically removed from favorites.

Requesting closure

When a customer considers their issue solved, they can request closure. The ticket moves to Pending closure immediately and a satisfaction survey is offered right away. If staff scheduled a future closure instead, the customer can close the ticket immediately rather than waiting. See Ticket lifecycle.

The request is always available from the ticket sidebar. It is also suggested right above the reply box when closing looks like the next step: the ticket is Resolved, Required test or Awaiting customer, or the customer gave a thumbs up to the AI's answer and nobody wrote since. A scheduled closure shows its date and the "Close now" action in the same place.

The ticket creator can bring other customers into a ticket:

  1. The creator (or an existing participant) generates a secure invite link from the ticket.
  2. Anyone who opens the link can see basic invite info; joining requires signing in with a Cfx.re account.
  3. Joining automatically registers the invitee as a customer of the project and adds them to the ticket as a participant.

Participants can read and reply to the ticket just like the creator. A few rules:

  • Only the creator can remove a participant.
  • Participants can leave a ticket on their own (the creator cannot leave their own ticket).
  • Someone who left on their own can rejoin through the invite link, as long as it is still valid.
  • When the creator removes a participant, the current invite link is revoked immediately and the removed person cannot rejoin. The creator can generate a new link to invite someone else.
  • Invite links expire 7 days after they are created — asking for the link again mints a fresh one.
  • Invite links stop working once the ticket is resolved or closed.
  • Participants get the same reply notifications as the creator — a portal alert, and a Discord DM on each staff reply if they linked their Discord account (see Notifications below).

Purchases

When the project has Tebex stores connected, customers can browse their own purchases on the portal and use them when opening tickets.

Notifications

  • On the portal: a notification bell aggregates mentions and pending satisfaction surveys across projects.
  • On Discord: if the project has the Discord integration and the customer linked their Discord account, they receive a DM for each new public reply on their tickets, with a preview and a link back to the portal. They can answer straight from the DM, with its Reply button or Discord's own reply feature: the answer is posted to the ticket like one typed on the portal. See Discord integration.

Leaving a project

Customers can leave a project from the portal at any time. Their tickets remain with the project, and they can come back later by signing in again.