HandbookFoundation42

Integrations & platform.

No school platform lives alone. YESS connects out to video providers, mapping, AI, payment aggregators, and the channels that carry an SMS or a WhatsApp message to a parent's phone. But not every plug is keyed in the same place. Some connections a school owns and configures itself; others — the ones that move money or send a million messages — YESS keys centrally, because the credentials are too sensitive and too regulated to sit on a school dashboard. This handbook draws that line clearly, shows you the connections you control, and explains the delivery spine that decides whether a notification can actually be sent.

  • 3school categories
  • 4outbound channels
  • 1deliverability gate
  • ≈12 minto read

Prologue

Two kinds of plug#

There are two kinds of integration in YESS, and the difference is who holds the keys. A school-managed connection — a Zoom account, an OpenAI key — is something the school owns; you enter its credentials yourself on the integrations hub and switch it on. A platform-managed connection — a payment aggregator, an SMS or WhatsApp provider — is keyed centrally by YESS, never typed into a school dashboard, because those credentials move money or send at a scale that has to be governed, encrypted, and metered for everyone at once.

This is a deliberate design, not a missing feature. A school does not want to hold a payment gateway's secret key, and a regulator does not want it to. So the integrations hub shows you exactly the connections you control, says plainly which ones are platform-managed, and the delivery spine quietly handles the rest.

The plugs you own, keyed by you; the plugs that move money, keyed by the platform — every one of them audited.

Chapter one

The integrations hub#

The hub at /dashboard/integrations is a grid of provider cards grouped into three categories — the connections a school keys itself:

Three categories

  1. 1

    Communication

    Zoom and Microsoft Teams — for schools that run virtual classes on their own meeting accounts rather than YESS Live. Each card collects the provider's client/app id and secret.

  2. 2

    Services

    Google Maps — the mapping key behind transport routes, stop placement, and any address-on-a-map surface. One API key, entered once.

  3. 3

    AI

    OpenAI — the key behind the AI-assisted features a school chooses to power with its own account, including parts of the YELE study room.

Open a card and you get a small form, one field per credential. Any field that is a secret, key, or token renders masked — the value is stored but never shown back in the clear. Save and the connection is written to the integration_configs table, keyed uniquely by school and provider, and the change is recorded in the audit log (provider and on/off state only — never the secret itself).

Zoom, Teams, Google Maps, OpenAI — the connections a school keys itself, each a card you open and configure.

Chapter two

Why payment and messaging are absent#

You will notice the hub has no payment category and no SMS or WhatsApp card. That is intentional, and the page says so with a note rather than leaving a confusing gap.

Payment gateways — Stripe, CamPay, CinetPay, NotchPay, PawaPay, and the mobile-money rails — are configured centrally by YESS, with each school's keys held in an encrypted vault, never entered on a school screen. A school never touches a gateway secret; it simply shares a secure payment link from the finance module, and the platform routes the collection. Messaging providers — the email, SMS, WhatsApp, and push channels — are platform-managed the same way: the accounts (and the deliverability, the templates, the regulatory consent) belong to YESS, so one provider outage or one misconfigured key cannot break messaging for a school that never had visibility into it.

What a school does control on the messaging side is its quota — how much of the shared sending pool it is allowed each month — which it reads (but does not key) from the notifications screen. The rest of this handbook is the spine that turns a notification into a delivered message, and the meter that governs it.

Chapter three

The notification delivery spine#

Every alert YESS sends — a fee receipt, an absence ping, an exam reminder — is a row inserted into the notifications table with a set ofpending channels. What happens next is the platform's job, and it starts with a gate.

The deliverability gate. A database trigger runs the instant a notification is inserted. It checks each external channel against the platform providers and strips out any channel that has no active, secret-configured, un-paused provider. The in-app channel is never queued for external sending (it is the row itself). If nothing is deliverable — a common case on a school whose region has no messaging provider switched on yet — the notification is marked skipped rather than looping forever. The whole gate is exception-guarded, so it can never block the notification from being created.

The dispatcher. A background worker then picks up the deliverable rows, resolves each recipient's preferences (quiet hours, per-event channel choice, WhatsApp consent, push tokens), chooses the default provider for each channel, and sends. A circuit breaker pauses a provider that fails repeatedly; every attempt — delivered, failed, paused, rate-limited, opted-out, deferred — is written to the dispatch log, which is insert-only and pruned on a schedule so it never bloats.

Chapter four

The school's messaging quota#

The one messaging dial a school can read is its quota. Open the notifications screen at /dashboard/notifications and its Quotas tab shows, per channel, the monthly limit and how much of it has been used this period. These figures come from the school_messaging_quotas table; the limits are set by the platform, and the school reads them.

The quota is enforced atomically at send time: the dispatcher acquires a slot before it sends and releases it if the send fails, so two messages firing at once can never push a school past its ceiling. A channel with no limit set is unlimited; a channel at its limit simply stops sending on that channel until the period resets — the meter is a guardrail, not a surprise bill.

Chapter five

When a gateway calls back#

Integration is not only outbound. When a parent pays through a mobile-money link, the aggregator calls YESS back to confirm the payment — and YESS listens. The platform runs server-to-server webhook endpoints for each supported gateway (Stripe, CamPay, CinetPay, NotchPay, PawaPay, and the YELE study-room payments), verifies the callback, and records the payment automatically against the right invoice.

These endpoints are platform-managed and invisible to a school — there is nothing to configure, because the gateway keys that authenticate them are held centrally. The bursar simply sees the payment appear in the finance module the moment the parent completes it, with no manual reconciliation.

What makes it elite

What makes integrations elite#

Six things that make this elite

  1. 1

    A clear line between school and platform keys

    Connections a school owns are keyed by the school; credentials that move money or send at scale are keyed centrally by YESS. The hub says which is which instead of pretending every plug is the same.

  2. 2

    Secrets masked and never echoed

    A key, token, or secret is stored but never shown back in the clear, and the audit log records only the provider and its on/off state — never the credential.

  3. 3

    A deliverability gate at the door

    A database trigger drops any channel with no provider the instant a notification is created, so a school without messaging never accumulates a backlog of undeliverable messages — and the in-app inbox always works.

  4. 4

    Quota enforced atomically

    The school's monthly sending pool is acquired and released per message, so concurrent sends can never breach the ceiling, and a school reads its own usage without being able to overspend.

  5. 5

    Every attempt logged, then pruned

    The dispatch log records every send attempt with a precise status, and a maintenance job prunes it on a schedule — full traceability without unbounded growth.

  6. 6

    Inbound payments reconcile themselves

    Gateway callbacks are verified and recorded against the right invoice automatically, so a mobile-money payment appears in finance the moment the parent completes it.

Planned features

What comes next#

The school integrations hub, the platform credential model, the delivery spine, the deliverability gate, the quota meter, and inbound payment webhooks are live. The honest gaps below are the parts still being built.

Five honest gaps

  1. 1

    A public REST API

    There is no public, key-authenticated API for a school's own developers to read or write YESS data yet — no API-key surface and no external bearer auth. A documented public API is a roadmap item; today every API route is internal, cron, or an inbound gateway callback.

  2. 2

    Outbound webhooks

    The schema reserves a place for a school to register a callback URL and event list, but there is no UI to add one and no delivery worker. Pushing YESS events into a school's own systems is planned, not shipped.

  3. 3

    In-hub connection testing

    Provider cards store a place for a connection-test result, but no test action populates it yet. For now, verify a connection by exercising the feature it powers.

  4. 4

    Self-serve messaging-provider visibility

    Schools read their quota but cannot see which provider carries each channel or its health — surfacing that (read-only) is a planned nicety for support conversations.

  5. 5

    More school-keyed services

    The hub's three categories cover the common cases; additional school-managed services (calendar sync targets, document storage) will be added as schools ask for them.

Adjacent modules

Where integrations connect#

Tutorial

Do it step by step#

Connect a service the school owns, then read the messaging meter the platform manages for you. Four steps — the whole of what a school actually configures.

  1. 1

    Open the hub

    Go to /dashboard/integrations. You need the settings.manage permission. The grid shows the three categories — communication, services, AI — with a connected count at the top.
  2. 2

    Key a connection

    Open the card for the service you own — say OpenAI or Zoom — enter its key or client id and secret (secret fields are masked), and save. The connection is stored against your school and the change is audit-logged, secret excluded.

    There is no payment or SMS card by design — those credentials are platform-managed and never entered on a school dashboard.

  3. 3

    Read your messaging quota

    Open /dashboard/notifications and its Quotas tab to see, per channel, your monthly limit and how much you have used. If a channel shows no provider, messaging is not provisioned for your region yet — a platform setting.
  4. 4

    Point recipients at their preferences

    Tell parents and staff they control their own channels at /portal/notifications/preferences — quiet hours, digest mode, and which events reach them where. The in-app inbox always works, whatever the external channels do.

The connections you own are keyed; the channels that carry your messages are metered and governed — every plug accounted for.