Chame seus scripts e flows
Um app chama os mesmos endpoints que qualquer outro sistema: publique um script ou flow, ligue o endpoint, e a página envia o formulário para /exec/<projeto>/<caminho>.
- Chamar um endpoint de uma página com o helper ou com fetch
- Ler a requisição num script que declara request
- Saber por que uma cópia baixada continua funcionando
Um formulário que roda um flow
Publique o flow que registra uma confirmação e ligue o endpoint dele com o caminho rsvp e acesso Público. Depois, no app:
<form id="rsvp">
<input name="name" placeholder="Your name" required>
<button>Confirm</button>
</form>
<p id="done" hidden>See you there!</p>
<script src="/_waiso.js"></script>
<script>
document.querySelector('#rsvp').addEventListener('submit', async (e) => {
e.preventDefault()
const name = new FormData(e.target).get('name')
await waiso.call('rsvp', { name }) // POST /exec/<project>/rsvp
document.querySelector('#done').hidden = false
})
</script>/_waiso.js é servido em todo endereço de app. Ele conhece o projeto do app e o endereço da plataforma, então waiso.call(caminho, corpo) é tudo que a página precisa; ele devolve o output da execução (ou lança o erro da recusa).
Sem o helper
// Without the helper: the endpoint's address, as any caller uses it.
const res = await fetch('https://waiso.dev/exec/p_1a2b3c/rsvp', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ name: 'Ana' }),
})
const { output } = await res.json()A parte do projeto no endereço é o id público dele (mostrado na página de API), nunca o nome. A resposta é o mesmo JSON que qualquer chamador recebe: output traz o que o script ou flow devolveu, status diz como a execução terminou, e uma recusa traz um code como invalid_args quando falta um campo obrigatório.
Prefira endpoints síncronos para o que o visitante espera — a resposta volta na mesma chamada. Para trabalho longo, um endpoint assíncrono responde um runId na hora e a página pode consultar depois.
O que o script recebe
Os campos do formulário chegam como parâmetros do script, como em qualquer chamada. Um script que também declara um parâmetro request recebe a própria chamada — método, caminho, query, cabeçalhos e corpo — com credenciais mascaradas:
def main(name: str, request: dict):
# request = {method, path, query, headers, body} as the call arrived
origin = request["headers"].get("origin", "")
return {"saved": name, "from": origin}Um flow recebe o mesmo objeto por uma etapa de pré-processamento, como em qualquer endpoint. Use para ler uma query string, um cabeçalho que sua página envia ou a origem da chamada — nunca para confiar em quem é o visitante; para isso, veja o login abaixo.
Uma cópia hospedada em outro lugar
Endpoints respondem a qualquer endereço, então o zip que você Baixa funciona em qualquer hospedagem: o helper continua chamando este projeto, e nada na página aponta para waisoapps.app.
1<h1>Bruna & Talisson</h1>2<form id="rsvp">3 <input name="name" placeholder="Seu nome">4 <button>Confirmar presença</button>5</form>6<script src="/_waiso.js"></script>É também por isso que não há nada especial a aprender: um app é uma página, o trabalho é um script ou um flow, e a ponte entre os dois é o mesmo endpoint que você daria a um sistema parceiro ou a uma planilha. Mude o flow e toda página que o chama ganha o comportamento novo na próxima chamada, sem publicar o app de novo.
Mantenha sob controle
- Um endpoint público pode ser chamado por quem ler a página: dê a ele um limite de chamadas por minuto na página de API.
- Cada chamada é uma execução do seu plano, como qualquer outra chamada.
- Para páginas que só algumas pessoas devem usar, veja Login por um flow.