Skip to content

HOST

Ruby

The gem mints embed tokens with Bearer host auth. Rails is a controller and a layout. Plain Ruby is the same HTTP call.

1. Run sveda-server

export SVEDA_EMBED_ENABLED=true
export SVEDA_BIND=0.0.0.0:8787
export SVEDA_EMBED_HOST_API_KEY=replace-me
export SVEDA_CORS_ORIGINS=http://127.0.0.1:8000
export DEEPSEEK_API_KEY=sk-...
sveda-server

2. Add gem sveda-ai

From a path checkout until Rubygems: gem "sveda-ai", path: "../sveda-ruby". No Rails required for the gem itself.

gem "sveda-ai"

3. Env

Load .env in config/boot.rb (Rails) or at process start (plain Ruby).

SVEDA_CLIENT_BASE_URL=http://127.0.0.1:8787
SVEDA_CLIENT_HOST_API_KEY=replace-me

4. Plain Ruby

Empty base URL or key raises Sveda::ConfigurationError. Any Rack app can JSON-encode the hash.

session = Sveda::Client.start_host_session(
  base_url: ENV.fetch("SVEDA_CLIENT_BASE_URL"),
  host_api_key: ENV.fetch("SVEDA_CLIENT_HOST_API_KEY"),
  visitor_id: "ruby-host"
)

5. Rails

Keep csrf_meta_tags in the layout so sveda-host.js can send X-CSRF-TOKEN. Hide buttons unless SVEDA_CLIENT_BASE_URL is set.

# config/routes.rb
post "/sveda/session", to: "sveda_sessions#create"

# app/controllers/sveda_sessions_controller.rb
def create
  render json: Sveda::Client.start_host_session(
    base_url: ENV["SVEDA_CLIENT_BASE_URL"].to_s.strip,
    host_api_key: ENV["SVEDA_CLIENT_HOST_API_KEY"].to_s.strip,
    visitor_id: "rails-playground"
  )
rescue Sveda::Error => error
  render json: { message: error.message }, status: :service_unavailable
end

6. Page markup

<html
  lang="en"
  data-sveda-origin="http://127.0.0.1:8787"
  data-sveda-session="/sveda/session"
>
  <body>
    <button type="button" data-sveda-open="js">Open JS chat</button>
    <button type="button" data-sveda-open="iframe">Open iframe chat</button>
    <script type="module" src="/sveda-host.js"></script>
  </body>
</html>

Mint from the host.

Install the language SDK. Expose POST /sveda/session. Open JS chat or an iframe.

Host SDKs