Sign inGet Started

Referentie voor voice-sequence-nodes

Waarschuwing: Voice-sequences zijn in preview. Stappen, entry-data en het formaat van de sequencedefinitie kunnen veranderen op manieren die bestaande sequences en API-verzoeken breken.

Gebruik deze referentie om de sequence.definition te schrijven die je meestuurt met Oproep aanmaken. Bird voert een inline definitie eenmalig uit en slaat deze niet op. Wil je een sequence bewaren, maak deze dan in de dashboard-editor.

Definitie

VeldWaarde
schema_version1.
expression_environment"bird.cel.v1".
nodesArray van node-objecten. De volgorde van de array heeft geen effect op de uitvoering.
settingsLaat het weg of stuur {}. Een niet-leeg object geeft unsupported_contract; een waarde die geen object is, geeft invalid_envelope.
presentationOptionele editorindeling en labels. Heeft geen effect op de uitvoering, maar telt mee voor de maximale grootte.

Elke node heeft deze velden:

VeldWaarde
idUniek binnen de definitie. Begint met een kleine letter, daarna kleine letters, cijfers of _, maximaal 64 tekens.
typeEen nodetype van deze pagina, zoals voice.say.
type_version1 voor elk nodetype op deze pagina, behalve 3 voor voice.dial.
configConfiguratie die de vorm van het knooppunt vastlegt, zoals gedeclareerde outcomes. Gebruik {} als het knooppunt er geen heeft.
inputWaarden die het knooppunt gebruikt bij uitvoering. Gebruik {} als het knooppunt er geen heeft.
connectionsMap van een outcome-naam naar { "node_id": "<target>", "port": "input" }.

Verbindingen mogen geen lus vormen en elk knooppunt moet bereikbaar zijn vanuit een entry. Een outcome die niet in connections staat, is niet verbonden. Niet-verbonden outcomes beëindigen de run normaal, tenzij een knooppunt anders aangeeft.

Waarden en expressies

De meeste velden accepteren letterlijke JSON. Velden met binds accepteren ook $expr of $template; velden met expr accepteren alleen $expr:

  • {"$expr": "trigger.data.customer_name"} retourneert een getypeerde waarde.
  • {"$template": ["Hello ", {"$expr": "trigger.data.customer_name"}, "."]} geeft tekst terug. Templates zijn arrays; {{name}} blijft letterlijke tekst.

Expressies gebruiken CEL en kunnen deze waarden lezen:

WaardeInhoud
trigger.dataDe entry-data, overeenkomend met het data_schema van de entry.
trigger.node_idHet ID van de entry die dit bezoek heeft gestart.
trigger.typeHet type van de entry die dit bezoek heeft gestart, zoals trigger.start_call.
steps.<id>.outputOutput van een eerder voltooide node in dit bezoek.
variables.<key>Waarden opgeslagen door een data.set-node in dit bezoek.
execution.id, execution.started_atHet run-ID en de starttijd ervan. Gebruik string(execution.started_at) in spraak.
execution.callDe id, session_id van het gesprek en de oorspronkelijke partijen orig en dest, die elk null kunnen zijn.

Controleer optionele waarden voordat je ze uitleest, bijvoorbeeld has(trigger.data.name) ? trigger.data.name : 'caller'. De macro has is beschikbaar; map, filter, all, exists en exists_one niet.

Entry

trigger.start_call

Waar een gesprek begint. entry_node_id in het verzoek Oproep aanmaken benoemt deze node.

VeldWaarde
config.data_schemaOptioneel JSON Schema (draft 2020-12) objectschema voor trigger_data. Alleen lokale $ref wordt ondersteund. Zonder dit schema accepteert de entry alleen {}.
Outcomeevent.

Entry-data is beperkt tot 16 KiB.

Spraak en audio

voice.say

VeldWaarde
input.textVereist, binds. Uit te spreken tekst, maximaal 160 bytes.
input.languageVereist. Taalcode voor spraak, zoals en.
Outcomenext.

voice.play

VeldWaarde
input.asset_idVereist. ID van een audio-asset dat beschikbaar is in deze werkruimte. Een niet-beschikbaar asset kan het gesprek laten mislukken wanneer de stap wordt uitgevoerd.
Outcomenext.

voice.tone

VeldWaarde
input.frequency_hzVereist. 100 tot 3000.
input.duration_msVereist. 1 tot 10000.
Outcomenext.

logic.pause

Wacht terwijl het gesprek verbonden is.

VeldWaarde
input.duration_msVereist. 1 tot 60000.
Outcomenext.

Toetsenbordinvoer

voice.gather

Speelt prompts af, die door een toetsdruk worden onderbroken, en verzamelt toetsenbordcijfers.

VeldWaarde
input.promptsVereist. Maximaal 4 prompts. Elk is {"type": "say", "text", "language"}, {"type": "play", "asset_id"}, {"type": "tone", "frequency_hz", "duration_ms"} of {"type": "pause", "duration_ms"}, met dezelfde limieten als de bijbehorende node. De duur van tonen en pauzes samen is maximaal 60.000 ms. Prompt text binds.
input.max_digitsVereist. 1 tot 32.
input.timeout_secondsVereist. Seconden wachten op de eerste toets, 1 tot 10.
input.inter_digit_timeout_secondsVereist. Seconden wachten tussen toetsen, 1 tot 5.
input.finish_on_keyVereist. Een van 0–9, *, #, A–D die de invoer beëindigt, of null.
input.matchesVereist. Map van een outcome-naam naar de exacte cijfers die deze selecteren, zoals {"hours": "1"}. Namen en cijfers moeten uniek zijn. Een naam kan niet input, timeout of fallback zijn. Cijfers zijn maximaal max_digits lang en mogen geen finish_on_key bevatten.
input.privateOptioneel, standaard false. Bij true kunnen latere stappen de cijfers niet lezen en worden ze weggelaten uit de trace.
OutcomesElke naam in matches, timeout wanneer er geen toets wordt ingedrukt, en fallback voor alle andere invoer.
Outputdigits en reason: initial_timeout, max_digits, finish_key of inter_digit_timeout.

Logica en data

logic.branch

Controleert voorwaarden op volgorde en volgt de eerste die waar is.

VeldWaarde
config.casesVereist. Minimaal één {"port": "<name>", "when": {"$expr": "<boolean>"}}.
config.default_portVereist. Naam van de outcome wanneer geen case waar is.
OutcomesElke port in cases, en default_port.
Outputbranch: de geselecteerde outcome-naam.

data.set

Slaat waarden op voor latere stappen in hetzelfde bezoek.

VeldWaarde
inputObject met waarden die elk binds ondersteunen. Elke sleutel wordt variables.<key>. Elke waarde wordt berekend op basis van de variabelen zoals ze waren vóór deze node.
Outcomenext.
OutputHet opgeslagen object.

Gesprekken en doorverbindingen

voice.dial

Belt een telefoonnummer of een nummer op een van de inkomende SIP-trunks van je werkruimte, of laat een belgroep overgaan, en verbindt dit met het huidige gesprek. Gebruik type_version 3.

VeldWaarde
input.typeVereist. pstn om een telefoonnummer te bellen, sip_trunk om een nummer te bellen via een van je inkomende SIP-trunks, of ring_group om de online leden van een belgroep te laten overgaan.
input.pstnVereist als type pstn is, en anders weggelaten. Object met dest en optioneel orig.
input.sip_trunkVereist als type sip_trunk is, en anders weggelaten. Object met trunk_id, dest en optioneel orig.
input.ring_groupVereist wanneer type ring_group is, en anders weggelaten. Object met ring_group_id.
trunk_idVereist in sip_trunk. ID van een inkomende SIP-trunk in je werkruimte, zoals spt_01jzj6c0p4f8b3x2m9k7q5r1tw. Alleen een letterlijke waarde.
ring_group_idVereist in ring_group. ID van een belgroep in je werkruimte, inclusief de standaardgroep, zoals vrg_01jzj6c0p4f8b3x2m9k7q5r1tw. Alleen een letterlijke waarde.
destVereist, binds. Voor pstn het E.164-nummer dat je belt, zoals +12025550123. Voor sip_trunk een nummer, extensie of naam, zoals 1001: 1 tot 64 letters, cijfers en +*._-. De inkomende routering van de trunk levert het gesprek af alsof het voor deze waarde binnenkwam.
origOptioneel, binds. Als je de eigenschap orig weglaat, toont het gesprek het Bird-nummer dat bij een inkomend gesprek is gekozen, of het oorspronkelijke nummer bij een uitgaand gesprek. Gebruik voor pstn een nummerweergave van de werkruimte of het E.164-nummer van de geldige inkomende beller. Nummers van inkomende bellers worden zonder ondertekening verstuurd en kunnen door de ontvangende provider worden gefilterd. Voor sip_trunk accepteert het dezelfde waarden als dest, zoals sales.
input.timeout_secondsVereist voor pstn en sip_trunk, en weggelaten voor ring_group, expr. Aantal seconden wachten op een antwoord, inclusief failover tussen trunkgateways, 1 tot 120. Onbeantwoorde gesprekken volgen no_answer; een beantwoord gesprek is niet beperkt.
Outcomessuccess, busy, no_answer en failure. success volgt nadat het verbonden gesprek is beëindigd en de audio van het oorspronkelijke gesprek is hersteld, niet wanneer de bestemming opneemt. Een SIP-trunk die het gesprek weigert of doorstuurt, selecteert failure. Een niet-verbonden failure laat de run mislukken. Bij een ring group betekent busy dat de leden bezet waren, weigerden of in een ander gesprek zaten, no_answer dat niemand binnen 60 seconden opnam of niemand online was, en failure dat Bird de groep niet kon laten overgaan.

Versie 2 heeft geen ring_group-doel en vereist altijd timeout_seconds. Elke invoer van versie 2 is ook geldig in versie 3, dus als je een stap upgradet, verandert er verder niets.

Versie 1 neemt het nummer in input.to en heeft geen orig. Stappen die deze versie gebruiken, blijven werken. Als je een stap van versie 1 in de editor upgradet, verhuist de waarde van to naar pstn.dest.

logic.voice_goto

Start een andere entry in dezelfde definitie. Het nieuwe bezoek krijgt verse trigger.data en wist eerdere stapuitvoer en variabelen; het gesprek gaat door.

VeldWaarde
input.entry_node_idVereist. ID van een trigger.start_call-node in deze definitie.
input.dataOptioneel, expr, standaard {}. Entry-data voor het schema van die node.
OutcomesGeen.

Automations

automation.send_event

Stuurt een applicatie-event naar een Automation zonder op een run te wachten. Het gesprek gaat door zodra het event in de wachtrij staat; of er een run start, zie je alleen in Automations.

VeldWaarde
input.automation_idVereist. ID van een automation in deze werkruimte.
input.eventVereist. De eventnaam van de automation: 1 tot 128 letters, cijfers, punten, underscores of koppeltekens.
input.dataOptioneel, standaard {}. De volledige data van het event. De waarden op het hoogste niveau ondersteunen binds, of het hele object kan één $expr zijn. Dieper geneste waarden blijven letterlijk. De hele input is maximaal 16 KiB.
Outcomessuccess zodra het event in de wachtrij staat, of failure als dat niet lukt. Geen van beide meldt de run van de automation. Een niet-verbonden failure laat de run mislukken.

Het gesprek beëindigen

logic.exit

Beëindigt het gesprek met een resultaat.

VeldWaarde
config.statusVereist. succeeded of failed.
config.reasonOptioneel, expr. Stabiele code van kleine letters, cijfers en _, beginnend met een letter of cijfer, maximaal 64 tekens. Laat het weg in plaats van null te sturen.
input.outputVereist object, dat {} kan zijn. De waarden op het hoogste niveau accepteren binds.
OutcomesGeen.

voice.hangup

Beëindigt het gesprek zonder een zelf opgegeven resultaat. Het heeft geen velden en geen outcomes.

Zie Applicatiedata gebruiken in een voice-sequence voor voice.webhook.

Voorbeeld: doorverbinden naar een persoon

Deze definitie begroet de ontvanger, belt een supportnummer en registreert of de doorverbinding is gelukt:

Codevoorbeeld
{
  "schema_version": 1,
  "expression_environment": "bird.cel.v1",
  "nodes": [
    {
      "id": "start",
      "type": "trigger.start_call",
      "type_version": 1,
      "config": {},
      "input": {},
      "connections": { "event": { "node_id": "greeting", "port": "input" } }
    },
    {
      "id": "greeting",
      "type": "voice.say",
      "type_version": 1,
      "config": {},
      "input": { "text": "Connecting you to our support team.", "language": "en" },
      "connections": { "next": { "node_id": "support", "port": "input" } }
    },
    {
      "id": "support",
      "type": "voice.dial",
      "type_version": 3,
      "config": {},
      "input": { "type": "pstn", "pstn": { "dest": "+12025550123" }, "timeout_seconds": 30 },
      "connections": {
        "success": { "node_id": "connected", "port": "input" },
        "busy": { "node_id": "unavailable", "port": "input" },
        "no_answer": { "node_id": "unavailable", "port": "input" },
        "failure": { "node_id": "unavailable", "port": "input" }
      }
    },
    {
      "id": "connected",
      "type": "logic.exit",
      "type_version": 1,
      "config": { "status": "succeeded", "reason": "transferred" },
      "input": { "output": {} }
    },
    {
      "id": "unavailable",
      "type": "logic.exit",
      "type_version": 1,
      "config": { "status": "failed", "reason": "support_unavailable" },
      "input": { "output": {} }
    }
  ]
}

Verstuur het als sequence.definition met "entry_node_id": "start" en "trigger_data": {}.

Ga verder met de documentatie, handleidingen en voorbeelden voor dit onderwerp.