Functie: Custo-manifest (Rainbow Extensions) — gebeurtenissen in de telefonie
Licentie: Alle licenties — Cloud PBX · OmniPCX Enterprise · OXO Connect
Licentiedetails: PBX-gebeurtenisuitbreidingen vormen de enige Custo-manifest-uitbreidingsfamilie die beschikbaar is met een Essential-licentie.
U kunt dit artikel gebruiken om automatische acties te configureren die worden geactiveerd door PBX-gespreksgebeurtenissen. U ziet wanneer elke gebeurtenis plaatsvindt, welke velden verplicht zijn en hoe u de Rainbow-gesprekscontext kunt doorgeven aan uw REST-eindpunt of lokaal script.
Overzicht
Met PBX-gespreksgebeurtenissen kunt u automatische acties activeren wanneer een gesprek begint te rinkelen, wordt beantwoord of wordt beëindigd — zonder handmatige tussenkomst. Deze functie is beschikbaar voor alle Rainbow-licenties voor bedrijven die zijn aangesloten op een Cloud PBX of een Alcatel-Lucent Enterprise PBX (OmniPCX Enterprise of OXO Connect).
Wat u kunt doen met PBX-gespreksgebeurtenissen:
- Een CRM-toepassing (desktop-app of webpagina) automatisch openen wanneer een gesprek binnenkomt of wordt beëindigd
- Informatie over de beller doorsturen naar een REST-API (screen pop, gespreksregistratie, gegevensverrijking)
- Een vervolgactie uitvoeren wanneer het gesprek wordt aangenomen of beëindigd
- Reageren op uitgaande gesprekken om deze te registreren of een workflow te activeren
Soorten PBX-gespreksgebeurtenissen
| Uitbreidingspunt | Wanneer het wordt geactiveerd |
|---|---|
| on-incoming-pbx-call-actions | Een inkomend gesprek begint te rinkelen |
| on-answering-incoming-pbx-call-actions | De gebruiker neemt een inkomend gesprek aan |
| bij-het-beëindigen-van-een-inkomend-pbx-gesprek-acties | Een inkomend of uitgaand gesprek wordt beëindigd |
| acties-bij-beëindiging-van-een-uitgaand-pbx-gesprek | De gebruiker voert een uitgaand gesprek |
| on-makecall-insert-correlator | Bij elke oproep — voegt een correlator in (alleen OXE) |
Een PBX-gebeurtenisactie configureren
Het custo-manifest is een JSON-object met de volgende structuur:
{
"version": "2",
"jsonType": "Rainbow-custo-manifest",
"extension-points": {
"<EXTENSION-POINT-KEY>": [
{
"name": "...",
"command": {
"url": "...",
"params": "...",
"commandType": "rest",
"method": "GET"
},
"icon": "...",
}
]
}
}Algemene regels:
- de versie moet „2“ zijn.
- jsonType moet "Rainbow-custo-manifest" zijn. Binnen een ZIP-bestand geeft dit veld aan welk JSON-bestand het manifest is.
- Elke sleutel onder „extension-points“ is een array — met maximaal 3 acties per uitbreidingspunt.
- Elke actie bevat ten minste een naam (voor gebeurtenissen is dit optioneel) en een geldig commando-object.
Actievelden
| Veld | Positie | Beschrijving |
|---|---|---|
| naam | root | Weergegeven tekst (titel van knop/widget, menulabel). Verplicht, afhankelijk van de EP. |
| pictogram / pictogram-ID | root | Knoppictogram (URL, ${custo.path}\... of ingebouwde sprite). Verplicht voor pictogramknoppen. |
| tooltip | root | Tekst voor de tooltip. Optioneel. |
| command | root | Commando-object (zie §3.2). Altijd verplicht. |
Het command-object
Het command-object is altijd verplicht en bevat ten minste een url. Afhankelijk van het gekozen commandType zijn aanvullende subvelden toegestaan.
"command": {
"url": "{{server}}/your-endpoint",
"params": "user=${localUser.email}",
"commandType": "rest",
"method": "GET",
"header": ["Authorization: Bearer TOKEN"],
"bodyParameters": { "key": "value" }
}| Veld | Wanneer gebruikt u dit? |
|---|---|
| url | Verplicht. Toepassingspad, web-URL, bestand of REST-API. |
| params | Optioneel. Wordt toegevoegd na ? bij GET, of als URL-parameters. Variabelen zijn toegestaan. |
| commandType | Optioneel. Standaard "rest". Waarden: "rest", "file" (afhankelijk van EP). |
| method | Optioneel (alleen indien commandType: "rest"). Waarden: "GET", "POST". |
| header | Optioneel (indien REST). Array van "Header-Name: value"-strings die als HTTP-headers worden ingevoegd. |
| bodyParameters | Verplicht indien method: "POST". JSON-object dat als body wordt verzonden. Variabelen zijn toegestaan. |
Rainbow-variabelen
$Variabelen worden tijdens de uitvoering vervangen door hun werkelijke waarde. Ze kunnen voorkomen in command.url, command.params, command.bodyParameters en in de inhoud die naar de extensie wordt teruggestuurd voor weergave.
Syntaxis
${object.attribute}
${object.attribute.regex(pattern)}
${object.attribute.regex(pattern, replacement)}Beschikbare objecten en attributen
Rainbow-gebruiker (ME)
${localUser.firstName} ${localUser.lastName}
${localUser.email} ${localUser.canonicalNumber}
${localUser.phoneNumber} ${localUser.internalNumber}
${localUser.phonePbx} ${localUser.nickname}
${localUser.loginEmail} ${localUser.id}Beller
${caller.firstName} ${caller.lastName} ${caller.phoneNumber}Gebeld
${called.phoneNumber}Gesprekscontext
${call.callId}
${call.globalCallId} (alleen OXE)
${call.correlator}Contactpersoon (indien geïdentificeerd)
${contact.voornaam} ${contact.achternaam}
${contact.telefoonnummer} ${contact.e-mail}
${contact.bedrijf} ${contact.werknummer}
${contact.mobielnummer} ${contact.privé-nummer}
${contact.privé-mobiel}
${contact.tags} (aaneengeschakeld, gescheiden door komma's)Compatibiliteit — PBX-gespreksgebeurtenissen
| Uitbreidingspunt | Toegestane variabele objecten |
|---|---|
| Gebeurtenissen bij uitgaande gesprekken | localUser, called, call, Contact |
| Gebeurtenissen bij inkomende oproepen (inkomend / opnemen / beëindigen) | localUser, beller, gebelde, gesprek, contactpersoon |
regex-modificator
Past een regex toe op de waarde van de variabele vóór de vervanging:
// Een getal normaliseren — vervang +33 of +1 door 0
"params": "pbx=${localUser.phonePbx.regex(^\+33|^\+1, 0)}"
// E-maildomein vervangen
"params": "byEmail=${localUser.email.regex(alcatel.com, al-enterprise.com)}"
// De laatste 9 cijfers extraheren (geen vervanging = extractie)
"params": "${called.phoneNumber.regex(.{0,9}$)}"Variabele ${time}
Beschikbaar op alle uitbreidingspunten — wordt vervangen op het moment dat de actie wordt uitgevoerd.
| Variabele | Waarde |
|---|---|
| ${time} | Volledige datum en tijd (ISO 8601, bijv. 2026-05-18T15:30:45.123Z) |
| ${time.year} | Jaar — 4 cijfers |
| ${time.month} | Maand — 01-12 |
| ${time.day} | Dag — 01-31 |
| ${time.uur} | Uur — 00-23 |
| ${time.minute} | Minute — 00-59 |
| ${time.second} | Seconde — 00-59 |
| ${time.millisec} | Milliseconden — 000-999 |
// Een logboek-ID samenstellen
"params": "logId=${time.year}-${time.month}-${time.day}_${time.hour}${time.minute}${time.second}"Lokale bronnen — ${custo.path}
Om een manifest met lokale bestanden (pictogrammen of weergavebestanden) te verspreiden:
- Verwijs naar elke bron als ${custo.path}\\bestandsnaam.ext
- Verpak custo-manifest.json en de bronbestanden in een ZIP-bestand (met het manifest in de hoofdmap)
{
"icon": "${custo.path}\\basketball.png",
"command": {
"commandType": "file",
"url": "${custo.path}\\FileDisplay.txt"
},
"responseType": "markdown"
}Gebeurtenisspecifieke velden
| Veld | Beschrijving |
|---|---|
| "filter" | "NoShortNumber" — wordt niet geactiveerd als het nummer van de beller een kort (intern) nummer is |
| "RaiseChangeCall" | false = uitsluitend directe oproepen · true = directe + doorgeschakelde oproepen · "only" = uitsluitend doorgeschakelde oproepen |
Lokale bronnen opnemen (ZIP-archief)
Indien de actie verwijst naar lokale bestanden (pictogrammen of weergavebestanden), dient u het bestand custo-manifest.json samen met deze bestanden in een .zip-archief te verpakken alvorens deze te importeren.
Vereiste ZIP-structuur — het manifest moet zich in de hoofdmap bevinden:
my-manifest.zip
├── custo-manifest.json
├── icon.png
└── display-content.txtHet manifest implementeren
Zodra het manifest is geconfigureerd, implementeert u het via de Rainbow-beheerconsole of lokaal. Zie Een custo-manifest implementeren in Rainbow.
Voorbeelden van configuratie
Een toepassing of script met parameters uitvoeren
Alleen ondersteund door Rainbow Desktop.
Voorbeeld 1 — on-incoming-pbx-call-actions voert een desktoptoepassing (bijv. MicroCRM) uit met een parameter uit params (geen retourwaarde):
{
"version": "2",
"jsonType": "Rainbow-custo-manifest",
"extension-points": {
"on-incoming-pbx-call-actions": [
{
"name": "Exec CRM",
"command": {
"url": "C:\\MyApp\\CustoApp\\MicroCRM.exe",
"params": "-number ${caller.phoneNumber}"
}
}
]
}
}Voorbeeld 2 — on-incoming-pbx-call-actions voert een script (.bat) uit met meerdere parameters uit params (geen retourwaarde):
{
"version": "2",
"jsonType": "Rainbow-custo-manifest",
"extension-points": {
"on-incoming-pbx-call-actions": [
{
"name": "BatScript",
"command": {
"url": "C:\\MyApp\\MyApp.bat",
"params": "IN-COMING canNr:${localUser.canonicalNumber} userIntNr:${localUser.internalNumber}
callerNr:${caller.phoneNumber} FN:${caller.firstName} LN:${caller.lastName}
CorData:${call.correlatorData} Hex:${call.hexCorrelatorData}"
}
}
]
}
}Een webpagina openen met parameters
Ondersteund door Rainbow Desktop en Rainbow Web.
Voorbeeld 1 — on-incoming-pbx-call-actions opent een webpagina met het nummer van de beller als queryparameter (geen retour):
{
"version": "2",
"jsonType": "Rainbow-custo-manifest",
"extension-points": {
"on-incoming-pbx-call-actions": [
{
"name": "Gele Gids",
"command": {
"url": "https://www.pagesjaunes.fr/annuaireinverse/recherche",
"params": "quoiqui=${caller.phoneNumber}&proximite=0"
}
}
]
}
}Voorbeeld 2 — on-incoming-pbx-call-actions opent een webpagina waarbij het nummer van de beller rechtstreeks in de URL is opgenomen (zonder terugkeer):
{
"version": "2",
"jsonType": "Rainbow-custo-manifest",
"extension-points": {
"on-incoming-pbx-call-actions": [
{
"name": "Contactpop-up",
"command": {
"url": "http://localhost:3000/contactShow?phone=${caller.phoneNumber}"
}
}
]
}
}Voer een REST API-aanroep uit met parameters
Ondersteund door Rainbow Desktop en Rainbow Web — vereist dat de API-server reageert op CORS-verzoeken.
Voorbeeld 1 — Wanneer het inkomende gesprek wordt beëindigd, maakt `on-releasing-incoming-pbx-call-actions` een gesprekslogboek aan via een REST GET-aanroep met parameters in `params` (geen retourwaarde):
{
"version": "2",
"jsonType": "Rainbow-custo-manifest",
"extension-points": {
"on-releasing-incoming-pbx-call-actions": [
{
"name": "GetRestApi",
"command": {
"commandType": "rest",
"method": "GET",
"url": "http://localhost:3000/IncidentManager/CreateCallLog",
"params": "byEmail=${localUser.email}&CustomerContact=${caller.phoneNumber}"
}
}
]
}
}Voorbeeld 2 — Wanneer het inkomende gesprek wordt beëindigd, maakt `on-releasing-incoming-pbx-call-actions` een gesprekslogboek aan via een REST POST-verzoek met een JSON-body (zonder retourwaarde):
{
"version": "2",
"jsonType": "Rainbow-custo-manifest",
"extension-points": {
"on-releasing-incoming-pbx-call-actions": [
{
"name": "PostRestApi",
"command": {
"commandType": "rest",
"method": "POST",
"url": "http://localhost:3000/IncidentManager/EndCallLog",
"bodyParameters": {
"caller": "${contact.phoneNumber}",
"user": "${localUser.email}"
}
}
}
]
}
}