Sign inGet Started

वॉइस सीक्वेंस नोड संदर्भ

Warning: Voice sequences are in preview. Steps, entry data, and the sequence definition format can change in ways that break existing sequences and API requests.

Create Call के साथ भेजी जाने वाली sequence.definition लिखने के लिए इस संदर्भ का उपयोग करें। Bird इनलाइन परिभाषा को एक बार चलाता है और उसे सहेजता नहीं है। किसी सीक्वेंस को सहेजकर रखने के लिए उसे डैशबोर्ड एडिटर में बनाएँ।

परिभाषा

फ़ील्डमान
schema_version1।
expression_environment"bird.cel.v1"।
nodesनोड ऑब्जेक्ट की ऐरे। ऐरे के क्रम का निष्पादन पर कोई असर नहीं पड़ता।
settingsइसे छोड़ दें या {} भेजें। खाली न होने वाला ऑब्जेक्ट unsupported_contract के साथ विफल होता है; जो मान ऑब्जेक्ट नहीं है, वह invalid_envelope के साथ विफल होता है।
presentationवैकल्पिक एडिटर लेआउट और लेबल। इनका निष्पादन पर असर नहीं पड़ता, लेकिन ये आकार सीमाओं में गिने जाते हैं।

हर नोड में ये फ़ील्ड होते हैं:

फ़ील्डमान
idपरिभाषा में अद्वितीय। छोटे अक्षर से शुरू होता है, फिर छोटे अक्षर, अंक या _, अधिकतम 64 वर्ण।
typeइस पेज पर दिया गया कोई नोड प्रकार, जैसे voice.say।
type_versionइस पेज के हर नोड प्रकार के लिए 1।
configवह सेटअप जो नोड का ढांचा तय करता है, जैसे घोषित परिणाम। जब नोड में कोई सेटअप न हो, तो {} का उपयोग करें।
inputवे मान जिनका उपयोग नोड चलते समय करता है। जब नोड में कोई मान न हो, तो {} का उपयोग करें।
connectionsपरिणाम के नाम से { "node_id": "<target>", "port": "input" } तक का मैप।

कनेक्शन लूप नहीं बना सकते, और हर नोड तक किसी एंट्री से पहुंचा जा सकना चाहिए। जो परिणाम connections में शामिल नहीं है, वह अनकनेक्टेड रहता है। अनकनेक्टेड परिणाम रन को सामान्य रूप से समाप्त करते हैं, सिवाय उन मामलों के जहां कोई नोड कुछ और बताता है।

मान और एक्सप्रेशन

ज़्यादातर फ़ील्ड शाब्दिक JSON लेते हैं। binds चिह्नित फ़ील्ड $expr या $template भी स्वीकार करते हैं; expr चिह्नित फ़ील्ड केवल $expr भी स्वीकार करते हैं:

  • {"$expr": "trigger.data.customer_name"} एक टाइप किया हुआ मान लौटाता है।
  • {"$template": ["Hello ", {"$expr": "trigger.data.customer_name"}, "."]} टेक्स्ट लौटाता है। टेम्पलेट ऐरे होते हैं; {{name}} शाब्दिक टेक्स्ट ही रहता है।

एक्सप्रेशन CEL का उपयोग करते हैं और ये मान पढ़ सकते हैं:

मानसामग्री
trigger.dataएंट्री डेटा, जो एंट्री के data_schema से मेल खाता है।
trigger.node_idउस एंट्री की ID जिसने यह विज़िट शुरू की।
trigger.typeउस एंट्री का प्रकार जिसने यह विज़िट शुरू की, जैसे trigger.start_call।
steps.<id>.outputइस विज़िट में पहले पूरे हुए किसी नोड का आउटपुट।
variables.<key>इस विज़िट में किसी data.set नोड द्वारा सहेजे गए मान।
execution.id, execution.started_atरन ID और उसके शुरू होने का समय। बोले जाने वाले टेक्स्ट में string(execution.started_at) का उपयोग करें।
execution.callकॉल का id, session_id, और मूल पक्ष orig और dest, जिनमें से हर एक null हो सकता है।

वैकल्पिक मानों को पढ़ने से पहले जाँच लें कि वे मौजूद हैं, उदाहरण के लिए has(trigger.data.name) ? trigger.data.name : 'caller'। has मैक्रो उपलब्ध है; map, filter, all, exists और exists_one उपलब्ध नहीं हैं।

एंट्री

trigger.start_call

जहाँ से कॉल शुरू होती है। Create Call अनुरोध में entry_node_id इस नोड का नाम बताता है।

फ़ील्डमान
config.data_schematrigger_data के लिए वैकल्पिक JSON Schema (draft 2020-12) ऑब्जेक्ट स्कीमा। केवल लोकल $ref समर्थित है। इसके बिना एंट्री केवल {} स्वीकार करती है।
परिणामevent।

एंट्री डेटा की सीमा 16 KiB है।

स्पीच और ऑडियो

voice.say

फ़ील्डमान
input.textआवश्यक, binds। बोला जाने वाला टेक्स्ट, अधिकतम 160 बाइट।
input.languageआवश्यक। स्पीच भाषा कोड, जैसे en।
परिणामnext।

voice.play

फ़ील्डमान
input.asset_idआवश्यक। इस वर्कस्पेस में उपलब्ध किसी ऑडियो एसेट की ID। एसेट उपलब्ध न होने पर यह चरण चलते समय कॉल विफल हो सकती है।
परिणामnext।

voice.tone

फ़ील्डमान
input.frequency_hzआवश्यक। 100 से 3000 तक।
input.duration_msआवश्यक। 1 से 10000 तक।
परिणामnext।

logic.pause

कॉल को जुड़ा रखते हुए प्रतीक्षा करता है।

फ़ील्डमान
input.duration_msआवश्यक। 1 से 60000 तक।
परिणामnext।

कीपैड इनपुट

voice.gather

प्रॉम्प्ट चलाता है और कीपैड के अंक इकट्ठा करता है। कोई बटन दबाने पर प्रॉम्प्ट बीच में रुक जाता है।

फ़ील्डमान
input.promptsआवश्यक। अधिकतम 4 प्रॉम्प्ट। हर प्रॉम्प्ट {"type": "say", "text", "language"}, {"type": "play", "asset_id"}, {"type": "tone", "frequency_hz", "duration_ms"} या {"type": "pause", "duration_ms"} होता है, और उस पर संबंधित नोड वाली सीमाएँ लागू होती हैं। टोन और विराम की कुल अवधि अधिकतम 60,000 ms हो सकती है। प्रॉम्प्ट का text binds है।
input.max_digitsआवश्यक। 1 से 32 तक।
input.timeout_secondsआवश्यक। पहला बटन दबाए जाने तक प्रतीक्षा के सेकंड, 1 से 10 तक।
input.inter_digit_timeout_secondsआवश्यक। दो बटन दबाने के बीच प्रतीक्षा के सेकंड, 1 से 5 तक।
input.finish_on_keyआवश्यक। इनपुट समाप्त करने वाला बटन 0–9, *, #, A–D में से एक, या null।
input.matchesआवश्यक। परिणाम के नाम से उन सटीक अंकों तक का मैप जो उसे चुनते हैं, जैसे {"hours": "1"}। नाम और अंक अद्वितीय होने चाहिए। नाम input, timeout या fallback नहीं हो सकता। अंकों की लंबाई अधिकतम max_digits होती है और उनमें finish_on_key नहीं हो सकता।
input.privateवैकल्पिक, डिफ़ॉल्ट false। true होने पर बाद के चरण अंक नहीं पढ़ सकते, और अंक ट्रेस में शामिल नहीं किए जाते।
परिणामmatches का हर नाम, कोई बटन न दबाए जाने पर timeout, और किसी अन्य इनपुट के लिए fallback।
आउटपुटdigits और reason: initial_timeout, max_digits, finish_key या inter_digit_timeout।

लॉजिक और डेटा

logic.branch

शर्तों को क्रम से जाँचता है और पहली सही शर्त का पालन करता है।

फ़ील्डमान
config.casesआवश्यक। कम से कम एक {"port": "<name>", "when": {"$expr": "<boolean>"}}।
config.default_portआवश्यक। कोई भी केस सही न होने पर उपयोग होने वाले परिणाम का नाम।
परिणामcases में हर port, और default_port।
आउटपुटbranch: चुने गए परिणाम का नाम।

data.set

उसी विज़िट के बाद वाले चरणों के लिए मान सहेजता है।

फ़ील्डमान
inputमानों का ऑब्जेक्ट, जिसका हर मान binds है। हर कुंजी variables.<key> बन जाती है। हर मान की गणना वेरिएबल के उन मानों से होती है जो इस नोड से पहले थे।
परिणामnext।
आउटपुटसहेजा गया ऑब्जेक्ट।

कॉल और ट्रांसफ़र

voice.dial

किसी दूसरे नंबर पर कॉल करता है और उसे मौजूदा कॉल से जोड़ता है।

फ़ील्डमान
input.toआवश्यक, binds। E.164 नंबर, जैसे +12025550123।
input.timeout_secondsआवश्यक, expr। घंटी बजने के सेकंड, 1 से 120 तक।
परिणामsuccess, busy, no_answer और failure। success तब लागू होता है जब जुड़ी हुई कॉल खत्म हो जाती है और मूल कॉल का ऑडियो वापस आ जाता है, न कि तब जब गंतव्य कॉल उठाता है। अगर failure किसी नोड से नहीं जुड़ा है, तो रन विफल हो जाता है।

logic.voice_goto

उसी परिभाषा में कोई दूसरी एंट्री शुरू करता है। नई विज़िट को नया trigger.data मिलता है और पिछले चरणों के आउटपुट और वेरिएबल साफ़ हो जाते हैं; कॉल जारी रहती है।

फ़ील्डमान
input.entry_node_idआवश्यक। इस परिभाषा में मौजूद किसी trigger.start_call नोड की ID।
input.dataवैकल्पिक, expr, डिफ़ॉल्ट {}। उस नोड की स्कीमा के लिए एंट्री डेटा।
परिणामकोई नहीं।

ऑटोमेशन

automation.send_event

किसी रन की प्रतीक्षा किए बिना ऑटोमेशन को एक एप्लिकेशन इवेंट भेजता है। इवेंट कतार में जुड़ते ही कॉल जारी रहती है; रन शुरू हुआ या नहीं, यह केवल ऑटोमेशन में दिखता है।

फ़ील्डमान
input.automation_idआवश्यक। इस वर्कस्पेस में किसी ऑटोमेशन की ID।
input.eventआवश्यक। ऑटोमेशन के इवेंट का नाम: 1 से 128 अक्षर, अंक, बिंदु, अंडरस्कोर या हाइफ़न।
input.dataवैकल्पिक, डिफ़ॉल्ट {}। इवेंट का पूरा डेटा। इसके शीर्ष-स्तरीय मान bind करते हैं, या पूरा ऑब्जेक्ट एक $expr हो सकता है। इससे गहरे स्तर के मान शाब्दिक ही रहते हैं। पूरा input अधिकतम 16 KiB हो सकता है।
परिणामइवेंट कतार में जुड़ जाने पर success, या न जुड़ पाने पर failure। इनमें से कोई भी ऑटोमेशन के रन की जानकारी नहीं देता। अगर failure किसी नोड से नहीं जुड़ा है, तो रन विफल हो जाता है।

कॉल समाप्त करना

logic.exit

कॉल को एक परिणाम के साथ समाप्त करता है।

फ़ील्डमान
config.statusआवश्यक। succeeded या failed।
config.reasonवैकल्पिक, expr। छोटे अक्षरों, अंकों और _ से बना स्थिर कोड, जो किसी अक्षर या अंक से शुरू होता है और अधिकतम 64 वर्णों का होता है। null भेजने के बजाय इसे छोड़ दें।
input.outputआवश्यक ऑब्जेक्ट, जो {} हो सकता है। इसके शीर्ष-स्तरीय मान bind करते हैं।
परिणामकोई नहीं।

voice.hangup

लेखक द्वारा तय किए गए परिणाम के बिना कॉल समाप्त करता है। इसमें कोई फ़ील्ड और कोई परिणाम नहीं होते।

अर्ली एक्सेस स्टेप

voice.webhook अर्ली एक्सेस में है और इसका दस्तावेज़ यहाँ नहीं दिया गया है। इसका उपयोग करने के लिए आपके वर्कस्पेस को एक्सेस चाहिए। प्रबंधित वॉइसमेल या कॉल रिकॉर्डिंग के लिए dependency_id के साथ voice.record_start, voice.record_stop और logic.voice_goto का दस्तावेज़ भी यहाँ नहीं दिया गया है।

उदाहरण: किसी व्यक्ति को ट्रांसफ़र

यह परिभाषा प्राप्तकर्ता का अभिवादन करती है, एक सपोर्ट नंबर डायल करती है और दर्ज करती है कि ट्रांसफ़र कनेक्ट हुआ या नहीं:

कोड उदाहरण
{
  "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": 1,
      "config": {},
      "input": { "to": "+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": {} }
    }
  ]
}

इसे "entry_node_id": "start" और "trigger_data": {} के साथ sequence.definition के रूप में भेजें।

इस विषय के लिए दस्तावेज़, गाइड और उदाहरणों के साथ आगे बढ़ें।