Röstagent med tjeckiskt nummer i din Lovable-app
Lovable bygger appar på React med en Supabase-backend - anrop till volais REST-API hör därför hemma på servern, i en enda Edge Function, inte i appen i webbläsaren.
1Spara API-nyckeln som Supabase-secret
I det Supabase-projekt som Lovable skapade för appen läggs miljövariabeln VOLAI_API_KEY till med nyckelns värde (portalen, avsnittet API och MCP). Lägg den aldrig i frontendkoden eller i repot - den som såg nyckeln skulle kunna göra av med saldot i ditt namn.
2Anropa volai från en Edge Function
Skapa en Edge Function som tar emot en förfrågan från appen och som ENDAST själv anropar https://volai.cz/v1/messages med rubriken Authorization: Bearer ${VOLAI_API_KEY}. På samma sätt kan en funktion byggas för POST /v1/calls (samtal via röstagenten).
// supabase/functions/send-sms/index.ts
Deno.serve(async (req) => {
const { to, body } = await req.json();
const res = await fetch("https://volai.cz/v1/messages", {
method: "POST",
headers: {
Authorization: `Bearer ${Deno.env.get("VOLAI_API_KEY")}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ to, body }),
});
return new Response(await res.text(), { status: res.status });
});3Anropa funktionen från användargränssnittet
Från en komponent i appen anropas Edge Function via supabase.functions.invoke(...) - nyckeln stannar på servern och appen skickar bara to och meddelandets text.
const { data, error } = await supabase.functions.invoke("send-sms", {
body: { to: "+420777123456", body: "Objednavka je pripravena." },
});4Ställ in en webhook så att appen får veta samtalets resultat
Skapa en andra Edge Function som tar emot en händelse (call.completed, call.failed, call.no_answer, call.missed, message.sent, message.received) och skriver den till en tabell i Supabase - därifrån läser appen den via Realtime eller en vanlig fråga. Spara adressen via PUT /v1/webhook; ett tomt fält events skulle betyda absolut alla händelser, så räkna hellre upp dem. Som standard släpper Supabase bara in förfrågningar med en nyckel i rubriken Authorization till en Edge Function och svarar annars med 401: stäng av verify_jwt för den här funktionen och verifiera händelsen med signaturen Volai-Signature, eller skicka nyckeln i en egen rubrik via fältet headers.
curl -X PUT https://volai.cz/v1/webhook \
-H "Authorization: Bearer vk_TVUJ_KLIC" \
-H "Content-Type: application/json" \
-d '{"url": "https://tvuj-projekt.supabase.co/functions/v1/volai-webhook", "events": ["call.completed", "message.sent"]}'5Valfritt: låt Lovable AI lägga till volai på egen hand
Lovable kan vid bygget av appen även nå ett externt verktyg via en egen MCP-server (Custom MCP servers / Custom connectors i integrationsinställningarna). Serverns adress är https://volai.cz/mcp, autentiseringen Authorization: Bearer vk_TVUJ_KLIC - de exakta knapparna i Lovables gränssnitt ändras snabbare än den här sidan, aktuell anvisning finns på docs.lovable.dev/integrations.
Vad du kan göra med det
Bekräftelse-sms efter beställning eller bokning
En e-handel eller bokningsapp från Lovable anropar efter betalning sin egen Edge Function, som skickar ett bekräftelse-sms med beställningens uppgifter.
Röstagent som svarar i telefonen åt appen
Appen köper ett telefonnummer och skapar en agent via REST (eller så ställs de in manuellt i portalen) - appens kunder ringer sedan till ett riktigt tjeckiskt nummer, inte till en annan plattform.
Lovable AI lägger själv till samtal och sms i appen
Vid bygget av appen kan Lovable AI nå volai via Custom MCP - funktionen beskrivs med ord („lägg till en knapp som ringer kunden“) och AI:n väljer själv rätt verktyg.
Vanliga frågor
- Kan volais API anropas direkt från appens frontendkod?
- Nej. API-nyckeln hör inte hemma i webbläsaren - den som öppnar utvecklarkonsolen skulle kunna se den och göra av med ditt saldo. Gå alltid via en Edge Function eller en annan serverroute som håller nyckeln enbart i backend.
- Finns det en inbyggd volai-koppling för Lovable?
- Ännu inte - de inbyggda kopplingarna i Lovable är alltid partnerskap (så fungerar till exempel den för ElevenLabs). I dag går vägen via REST från en Edge Function, eller via den allmänna Custom MCP-server som beskrivs ovan.
- Hur vet appen att ett samtal har avslutats, utan ständig avfrågning?
- Webhooken
call.completedskrivs till en Supabase-tabell från en Edge Function och appen läser ändringen via Supabase Realtime - ingen polling. - Vad kostar det att driva appen?
- Samma taxor som i prislistan, inget påslag för Lovable: sms 1,36 kr (≈ 0,62 SEK), utgående samtal 0,92 kr/min (≈ 0,42 SEK), röstagent därutöver 2,50 kr/min (≈ 1,14 SEK). Den exakta prislistan finns på
/cenik.