Customer sign-in

Your customers sign in once: with your app.

One workspace identity secret recognises your signed-in users in the chat widget and the help portal. Portal single sign-on sends them from your app straight in, already signed in. Free on every plan.

No credit card. Email, live chat, portal and knowledge base included.

  • No credit card
  • Free on every plan
  • Identity providers on Premium

One secret

For the chat widget and the portal

Single use

Sign-in tokens expire within five minutes

One record

Chat and portal land on the same customer

PHP, Node.js, Python, Ruby

Copyable snippets in the guide

How it works

No second account for your customers.

One workspace identity secret

It lives under Settings > Customer sign-in and works for every live chat channel and the portal. Rotate it any time: the previous secret keeps working for 24 hours.

Verified chat

Your server signs the user id with the secret, and the widget passes the signature along. Your team sees who they are talking to; anything unsigned stays an unverified claim.

Portal single sign-on

Your server signs a short-lived token and sends the browser to your portal, where the customer arrives signed in. Choose single sign-on only, single sign-on with email and password, or email and password.

One customer record

A signed chat and a portal sign-in for the same user land on the same customer, and a signed chat folds that browser's earlier anonymous chat in.

Safe by design

Tokens are single use, expire within five minutes and are signed with a key derived from your secret, so a widget signature can never double as a portal sign-in.

"Continue with" your identity provider

Add Okta, Auth0, Microsoft Entra ID, Keycloak or any other OpenID Connect provider, and customers get a "Continue with" button on the portal sign-in page.

For developers

A few lines on your server.

Sign the user id with your identity secret and print the hash into your page. The guide has the portal token and the redirect contract too.

function zonoWidgetHash(string $secret, ?string $userId, ?string $email = null): string
{
    // The user id as a string, or the lowercased, trimmed email when there is no id.
    $id = trim((string) $userId);
    $identifier = $id !== '' ? $id : mb_strtolower(trim((string) $email));

    return hash_hmac('sha256', $identifier, $secret);
}

// $userHash = zonoWidgetHash(getenv('ZONO_IDENTITY_SECRET'), (string) $user->id);

For your customers, not your agents

Customer sign-in and identity providers sign in the people you support. Single sign-on for your own support agents is not available yet.

FAQ

Questions, answered

Customer sign-in

Sign customers in with your own app.
Free on every plan.

No credit card. Email, live chat, portal and knowledge base included.