Guia de Integração para VibeCoding
Este documento descreve o processo de integração com o sistema Skia para a realização de chamadas de vídeo com agentes de IA.
Visão Geral do Fluxo
A integração ocorre em duas etapas principais via API para obtenção de um link seguro. Após a obtenção do link, o usuário deve ser direcionado para uma tela de espera antes de iniciar a conferência.
- Autenticação: Obtenção de token JWT.
- Criação de Chamada: Registro da sessão e obtenção do
ClientLink. - Interface do Usuário: Tela com botões de "Iniciar" e "Copiar Link".
Configurações (Variáveis de Ambiente)
Para segurança, as credenciais devem ser armazenadas em variáveis de ambiente (Secrets) no seu projeto.
| Variável | Descrição |
|---|---|
SKIA_CLIENT_ID | ID do cliente fornecido pela Skia |
SKIA_CLIENT_SECRET | Secret do cliente fornecido pela Skia |
SKIA_QUEUE_ID | ID da fila de atendimento (ex: "254") |
SKIA_BASE_URL | https://api.skia.com.br/api |
Implementação da Interface (UX)
Ao obter o ClientLink com sucesso, o sistema deve apresentar uma tela intermediária:
- Informativo: Mensagem avisando que a videoconferência está pronta para iniciar.
- Botão "Iniciar": Direciona o usuário para o link da chamada.
- Nota: Deve ser aberto na mesma aba.
- Botão "Copiar Link": Permite ao usuário copiar a URL para a área de transferência.
Detalhes dos Endpoints
1. Autenticação (Login)
POST [Url Ambiente]/Auth/Login
curl -X POST 'https://api.skia.com.br/api/Auth/Login' \
-H 'Content-Type: application/json' \
-d '{
"ClientId": "SEU_CLIENT_ID",
"ClientSecret": "SEU_CLIENT_SECRET"
}'
info
O token retornado expira em 24 horas.
2. Criar Chamada
POST [Url Ambiente]/Call/Create
Headers Obrigatórios:
| Identificador | Valor |
|---|---|
| Content-Type | application/json-patch+json |
| Authorization | Bearer {TOKEN} |
Exemplo de Payload:
{
"QueueId": "254",
"PersonalData": {
"CPF": "149.482.774-55",
"Cellphone": "44999887766"
},
"Details": [
{ "Key": "Nome", "Value": "João Silva", "ValueKind": "Texto" }
]
}
Exemplo de Código (Edge Function)
Abaixo, um exemplo de implementação utilizando Deno (Supabase/Lovable):
import { serve } from "https://deno.land/[email protected]/http/server.ts";
const corsHeaders = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': 'authorization, x-client-info, apikey, content-type',
};
serve(async (req) => {
if (req.method === 'OPTIONS') return new Response(null, { headers: corsHeaders });
try {
const { cpf, phone, nome } = await req.json();
// Carregando variáveis de ambiente
const SKIA_CLIENT_ID = Deno.env.get('SKIA_CLIENT_ID');
const SKIA_CLIENT_SECRET = Deno.env.get('SKIA_CLIENT_SECRET');
const SKIA_QUEUE_ID = Deno.env.get('SKIA_QUEUE_ID');
// 1. LOGIN
const loginRes = await fetch('https://api.skia.com.br/api/Auth/Login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
ClientId: SKIA_CLIENT_ID,
ClientSecret: SKIA_CLIENT_SECRET
}),
});
const { token } = await loginRes.json();
// 2. CRIAR CHAMADA
const callRes = await fetch('https://api.skia.com.br/api/Call/Create', {
method: 'POST',
headers: {
'Content-Type': 'application/json-patch+json',
'Authorization': `Bearer ${token}`,
'accept': 'text/plain',
},
body: JSON.stringify({
QueueId: SKIA_QUEUE_ID,
PersonalData: { CPF: cpf, Cellphone: phone },
Details: [{ Key: "Nome", Value: nome, ValueKind: "Texto" }]
}),
});
const callData = await callRes.json();
return new Response(JSON.stringify({ success: true, url: callData.ClientLink }), {
headers: { ...corsHeaders, 'Content-Type': 'application/json' }
});
} catch (error) {
return new Response(JSON.stringify({ success: false, error: error.message }), {
status: 500
});
}
});
Pontos de Atenção
| Aspecto | Regra |
|---|---|
| Content-Type | Deve ser application/json-patch+json na criação da chamada. |
| Formato CPF | Enviar com pontuação: XXX.XXX.XXX-XX. |
| Telefone | Enviar apenas números (com DDD). |
| Redirecionamento | Utilize window.location.href para manter a mesma aba. |
Fluxo Resumido
- Frontend: Envia dados do cliente para a Edge Function.
- Edge Function: Autentica na Skia e solicita o link da chamada.
- Frontend: Recebe a URL, exibe a tela de confirmação com as opções de Iniciar ou Copiar.
- Usuário: Clica em iniciar e é redirecionado na mesma aba.