Instalação
Inclua o script do widget e adicione a tag <ws-motor> na página. O elemento se posiciona automaticamente fixo na base da janela.
<!-- Carrega o custom element (registra <ws-motor>) -->
<script type="module" src="/caminho/para/ws-motor.js"></script>
<ws-motor
api-key="SUA_API_KEY"
hotel-id="23099"
webhook="ID_DO_WEBHOOK"
engine="omnibees"
collect-contact-data
></ws-motor>
position: fixed; bottom: 0 e ocupa toda a largura. Reserve espaço na base da sua página (ex.: padding-bottom no <body>) para o conteúdo não ficar escondido atrás dele. Em telas < 768px ele aparece como um botão “Reservar agora” que abre uma bottom sheet.
Atributos
Configuração via atributos HTML. Todos são opcionais, mas api-key, hotel-id e webhook são necessários para o fluxo completo de reserva.
| Atributo | Tipo | Padrão | Descrição |
|---|---|---|---|
api-key |
string | "" |
Enviado no header x-api-key para o webhook da Innsights. |
hotel-id |
string | "" |
Identificador do hotel. Usado como q na engine omnibees e como companyId na engine hbook. |
webhook |
string | "" |
ID do webhook. A reserva é enviada para https://api.innsights.com.br/webhooks/{webhook}. |
engine |
string | "omnibees" |
Estratégia do motor de reservas: omnibees, foco ou hbook. Valor desconhecido cai em omnibees. |
engine-url |
string | "" |
URL base do motor. Obrigatório apenas para a engine foco. |
collect-contact-data |
boolean | ausente | Se presente, abre uma etapa que coleta nome, e-mail e telefone antes de enviar/redirecionar. Sem ele, usa dados anônimos. |
Engines de reserva
A engine define para onde o hóspede é redirecionado após a reserva. Cada engine monta a URL a partir dos dados preenchidos.
omnibees (padrão)
Usa hotel-id e o código promocional digitado. Redireciona para o motor Omnibees.
https://book.omnibees.com/hotelresults?q={hotel-id}&CheckIn=DDMMYYYY
&CheckOut=DDMMYYYY&ad={adultos}&ch={criancas}&ag={idades}&Code={promo}
foco
Usa engine-url como base. Barra final duplicada é removida.
{engine-url}/search/{checkin}/{checkout}/{adultos-idade1-idade2}
# ex.: https://chapadaindaia.com.br/search/2026-06-10/2026-06-12/2-3-5
hbook
Usa hotel-id como companyId. Datas em DD/MM/YYYY e um parâmetro childrenage por criança.
https://hbook.hsystem.com.br/Booking?companyId={hotel-id}
&checkin=02/07/2026&checkout=03/07/2026
&adults=2&children=2&childrenage=8&childrenage=2
Evento
Ao confirmar a reserva, o widget dispara reservation-submit (com bubbles e composed), permitindo interceptar o payload completo.
document.querySelector('ws-motor').addEventListener(
'reservation-submit',
(event) => {
console.log(event.detail)
// { name, email, phone, checkin, checkout, adults,
// childrens, ages, utm_source, utm_medium, utm_campaign,
// utm_term, utm_content, source_page, source_form, shubid }
}
)
Os parâmetros utm_*, source_page e shubid são coletados automaticamente da URL e dos cookies da página.
Estilização
Toda a aparência é controlada por CSS Custom Properties definidas no seletor ws-motor. Sobrescreva apenas as que quiser — as demais mantêm o padrão.
Barra e controles — --ws-element-*
| Variável | Padrão | Aplica-se a |
|---|---|---|
--ws-element-bg | #ffffff | Fundo da barra |
--ws-element-border | #e5e7eb | Borda superior da barra |
--ws-element-divider | #e5e7eb | Divisores entre os controles |
--ws-element-control-bg | #ffffff | Fundo dos controles (datas, hóspedes, promo) |
--ws-element-control-border | #d1d5db | Borda dos controles |
--ws-element-control-text | #111827 | Texto dos controles |
--ws-element-control-height | 44px | Altura dos controles e botões |
--ws-element-input-bg | #ffffff | Fundo dos inputs de texto |
--ws-element-button-bg | #111827 | Fundo do botão “Reservar agora” |
--ws-element-button-text | #ffffff | Texto do botão principal |
--ws-element-text | #111827 | Texto geral do widget |
--ws-element-muted-text | #374151 | Texto secundário / legendas |
--ws-element-icon-color | #171717 | Cor dos ícones da barra |
--ws-element-range-bg | #e5e7eb | Fundo de faixas |
--ws-element-disabled-text | #9ca3af | Texto de itens desabilitados |
--ws-element-border-soft | #f3f4f6 | Bordas suaves internas |
Popover de hóspedes — --ws-popover-*
| Variável | Padrão | Aplica-se a |
|---|---|---|
--ws-popover-bg | #ffffff | Fundo do popover |
--ws-popover-border | #e5e7eb | Borda do popover |
--ws-popover-text | #111827 | Texto do popover |
--ws-popover-muted-text | #6b7280 | Texto secundário (subtítulos dos steppers) |
--ws-popover-icon-color | #171717 | Ícones dos botões +/− dos steppers |
Calendário — --ws-calendar-*
| Variável | Padrão | Aplica-se a |
|---|---|---|
--ws-calendar-bg | #ffffff | Fundo do calendário |
--ws-calendar-border | #e5e7eb | Borda e rodapé do calendário |
--ws-calendar-text | #111827 | Texto dos dias |
--ws-calendar-muted-text | #6b7280 | Legendas e dias fora do mês |
--ws-calendar-hover-bg | #f3f4f6 | Hover sobre os dias |
--ws-calendar-selected-bg | #111827 | Dia de check-in / check-out selecionado |
--ws-calendar-selected-text | #ffffff | Texto do dia selecionado |
--ws-calendar-range-bg | #e5e7eb | Faixa entre check-in e check-out |
Exemplo de tema
O tema aplicado no widget ao vivo (fixo na base desta página). Copie e ajuste as cores para a sua marca.
ws-motor {
--ws-element-bg: #002925;
--ws-element-border: #003b35;
--ws-element-divider: #003b35;
--ws-element-control-bg: #ffffff26;
--ws-element-control-border: #414141;
--ws-element-control-text: #ffffff;
--ws-element-input-bg: #ffffff;
--ws-element-button-bg: #ff7a00;
--ws-element-button-text: #ffffff;
--ws-element-icon-color: #ffffff;
--ws-element-text: #f3f3f3;
--ws-calendar-selected-bg: #ff7a00;
--ws-calendar-selected-text: #341e0a;
--ws-calendar-range-bg: #fbdcbf;
}
<ws-motor> abaixo está usando exatamente este tema. Interaja com datas, hóspedes e o botão para ver as variáveis em ação.