वॉइस सीक्वेंस नोड संदर्भ
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_version | 1। |
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_schema | trigger_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 के रूप में भेजें।
संबंधित संसाधन
इस विषय के लिए दस्तावेज़, गाइड और उदाहरणों के साथ आगे बढ़ें।