Koppla in din presentation

Privat Ätkomst för din agent

Öppna ”Anslut din presentationsagent” i vĂ€rdpanelen. Skapa en lĂ€snyckel, eller tillĂ„t Ă€ven styrning. Kopiera den en gĂ„ng till din servers hemlighetshantering. Nyckeln gĂ€ller en omröstning, upphör efter 1 timme till 30 dagar (24 timmar som standard) och kan Ă„terkallas nĂ€r som helst.

Det privata API:et anvÀnds mellan servrar. LÀgg aldrig nyckeln i webblÀsarens JavaScript, en URL, ett publikt repo eller ett publikt WebSocket-subprotokoll. Anrop med webblÀsarens Origin nekas. VÀrdkakor och deltagarkakor ger inte Ätkomst till detta API.

// Node.js backend. Set these in your secret manager.
const code = process.env.POODLEPOLL_CODE;
const headers = {
  Authorization: 'Bearer ' + process.env.POODLEPOLL_TOKEN,
  'Content-Type': 'application/json',
};
const endpoint = 'https://poodlepoll.conzeon.dev/api/integrations/' + code;
const response = await fetch(endpoint, { headers });
if (!response.ok) throw new Error('Poll API: ' + response.status);
const state = await response.json();

// Requires session:control. Also: start, pause, close, mode, reveal, winner.
const saved = await fetch(endpoint, {
  method: 'POST', headers,
  body: JSON.stringify({ action: 'activate', questionId: 'q1' }),
});
if (!saved.ok) throw new Error('Poll control: ' + saved.status);

Privat WebSocket-flöde (Node.js)

import WebSocket from 'ws';
const socket = new WebSocket(
  'wss://poodlepoll.conzeon.dev/api/live/agent?code=' + process.env.POODLEPOLL_CODE,
  { headers: { Authorization: 'Bearer ' + process.env.POODLEPOLL_TOKEN } },
);
socket.on('message', raw => {
  const event = JSON.parse(raw.toString());
  if (event.type === 'snapshot') updatePrivateDashboard(event.state);
});
socket.on('error', () => showDisconnected());
socket.on('close', code => {
  clearPrivateDashboard();
  // 1008: revoked/expired/denied. Stop; obtain a new key from the owner.
  // 1012/1013 or network failure: retry with backoff + jitter.
});

Det privata flödet innehÄller Àven opublicerade sammanrÀknade svar, men aldrig deltagaridentiteter, enskilda röster eller dolt quizfacit. Det Àr skrivskyddat: skicka kommandon via HTTP. Behörigheten kontrolleras före varje ögonblicksbild, med avstÀmning varje sekund. Befintliga anslutningar stÀngs vid Äterkallning eller utgÄng. AnropsgrÀnser ger 429 och Retry-After; försök senare, inte i en loop.

Publika resultat i dina bilder eller pÄ din hemsida

AnvÀnd det publika flödet i presentationens JavaScript: det behöver ingen hemlighet och skickar bara resultat du har visat. Aktivera extern anslutning i vÀrdpanelen och ange hemsidans exakta ursprung, till exempel https://example.com. Ursprungsregler skyddar webblÀsaranslutningar; de Àr inte autentisering för hemlig information. BehÄll agentens privata flöde pÄ din server.

const code = 'YOUR_CODE';
let stopped = false;
let socket;
function connect() {
  socket = new WebSocket('wss://poodlepoll.conzeon.dev/api/live/socket?code=' + code);
  socket.onmessage = ({ data }) => {
    const event = JSON.parse(data);
    if (event.type === 'snapshot') renderPublicResults(event.state);
    if (event.type === 'unavailable') showReconnecting();
  };
  socket.onclose = ({ code }) => {
    clearResults();
    if (code === 1008 || stopped) return;
    setTimeout(() => { if (!stopped) connect(); }, 2000 + Math.random() * 1000);
  };
}
connect();
function disconnect() { stopped = true; socket.close(); }

ErsÀtt föregÄende tillstÄnd vid varje ögonblicksbild. En frÄgas results Àr null medan resultatet Àr dolt, annars en lista med id och count. total Àr antalet svar. Rensa dolda diagram direkt. Quizfacit visas först efter publicering. Data som redan visats eller kopierats kan inte tas tillbaka.

PoodlePoll — Samla gĂ€nget. FĂ„nga rummet.