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>