API
Μία outbound κλήση από το σύστημά σας — γεγονός CRM, φόρμα, επιστροφή χαμένης κλήσης. Μια λίστα σε πρόγραμμα είναι Campaigns, όχι αυτό το endpoint.
Οι ρυθμίσεις Outgoing του agent εξακολουθούν να ισχύουν. Αυτό το αίτημα επιλέγει τον αριθμό, τον agent και προαιρετικό επιπλέον πλαίσιο για αυτήν την κλήση.
Πριν καλέσετε
Ενότητα με τίτλο «Πριν καλέσετε»- Το πρόγραμμα περιλαμβάνει Allow Outbound Calls.
- Κλειδί API με την ομάδα Calls.
- Trunk (ή VoIP phone) από το οποίο να καλέσετε — Your own carrier / Voice Logica numbers.
- Το agent id — από το URL agent στο My Agents, ή Copy σε γραμμή εκστρατείας.
Πρώτη ρύθμιση — μία κλήση, στη συνέχεια Calls
Ενότητα με τίτλο «Πρώτη ρύθμιση — μία κλήση, στη συνέχεια Calls»POST https://api.voicelogica.ai/api/v1/phones/calls/initiate-callx-api-key: YOUR_API_KEYContent-Type: application/jsonResellers: προαιρετικό x-company-id για ενέργεια σε θυγατρική. Χωρίς αυτό, χρησιμοποιείται η δική εταιρεία του κλειδιού.
Στείλτε destinationNumber και agentId. Στείλτε sipTrunkId ή voipPhoneId εκτός αν η εταιρεία έχει ήδη outbound route / default trunk που μπορεί να μεταφέρει την κλήση — αν δεν σταλεί κανένα και κανένα trunk δεν μπορεί να επιλυθεί, το API επιστρέφει ότι δεν προσδιορίστηκε ενεργό SIP trunk ή VoIP phone.
Trunk (συνήθως):
curl -X POST https://api.voicelogica.ai/api/v1/phones/calls/initiate-call \ -H "x-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "sipTrunkId": "your_sip_trunk_id", "destinationNumber": "+14155552671", "agentId": "your_agent_id" }'Το VoIP phone id εξακολουθεί να λειτουργεί — ο server το επιλύει σε trunk.
Επιτυχία είναι { "callId": "..." }. Αν ο προορισμός είναι εκτός 09:00–21:00 τοπικής ώρας, μπορεί να λάβετε "scheduled": true συν scheduleTime και reason. Ανοίξτε τα Calls και ακούστε.
destinationNumber σε E.164 (+14155552671).
Τι μπορείτε να στείλετε
Ενότητα με τίτλο «Τι μπορείτε να στείλετε»Απαιτούμενα για AI outbound κλήση
| Πεδίο | Τι κάνει |
|---|---|
destinationNumber | Αριθμός για κλήση. |
agentId | Agent που μιλάει. Απαιτείται για AI outbound· προαιρετικό μόνο για isInternalCall. |
Πηγή κλήσης — στείλτε ένα ή βασιστείτε στην προεπιλογή outbound εταιρείας
| Πεδίο | Τι κάνει |
|---|---|
sipTrunkId | Trunk από Telephony → Trunks. Προτιμήστε αυτό. |
voipPhoneId | Legacy line id. Επιλύεται σε trunk. |
callerId | E.164 ή SIP URI που εμφανίζεται στον παραλήπτη. Πρέπει να είναι αριθμός που το trunk επιτρέπεται να παρουσιάσει. |
Μόνο αυτή η κλήση
| Πεδίο | Τι κάνει |
|---|---|
contextForAi | Προστίθεται στο system prompt για αυτήν την κλήση. |
dynamicVariables | Ζεύγη κλειδιού/τιμής string που μπορεί να χρησιμοποιήσει το prompt ({{customer_name}}). |
superVariables | Πληκτρολογημένες τιμές: { placeholder, value, type } — text / number / boolean / date / time. |
metadata | Η παρακολούθησή σας. Αποθηκεύεται στην κλήση. Κλειδιά που ξεκινούν με scenario_ αφαιρούνται. |
emailAddress | Πού να σταλεί η περίληψη / εγγραφή. |
welcomeMessageOverride | Ειπώνεται αντί του χαιρετισμού agent. |
isWelcomeMessageAIGenerated | Το AI γράφει τον χαιρετισμό για αυτήν την κλήση. |
scheduledAt | Ημερομηνία ISO. Κλήση αργότερα αντί τώρα. |
maxRetries | 1–3 αν απασχολημένος / καμία απάντηση / voicemail. Προεπιλογή 3. |
retryDelayMinutes | 30–1440. Προεπιλογή 30. |
additionalPhoneNumbers | Επιπλέον αριθμοί στο ίδιο αίτημα. |
Μην στέλνετε fromNumber. Το δημόσιο συμβόλαιο είναι sipTrunkId / voipPhoneId.
Προστασίες (outbound μόνο)
Ενότητα με τίτλο «Προστασίες (outbound μόνο)»Το inbound δεν περιορίζεται ποτέ.
- Time (on) — 09:00–21:00 στην τοπική ώρα της χώρας προορισμού. Εκτός αυτού, η κλήση μπλοκάρεται ή προγραμματίζεται. Παράκαμψη:
overrideTimeRestriction: true. - Day (on) — τα Σαββατοκύριακα / αργίες μπορεί να μπλοκαριστούν ανά χώρα προορισμού. Παράκαμψη:
overrideDayRestriction: true. - Anti-harassment (off εκτός αν στείλετε
useAntiHarassmentProtection: true) — max 3 επιτυχημένες και 3 αποτυχημένες κλήσεις ανά αριθμό ανά ημέρα, 1 ώρα μεταξύ επιτυχημένων κλήσεων, max 5 επιτυχημένες ανά εβδομάδα, καμία διπλή ενεργή/προγραμματισμένη κλήση. Το Allowed test numbers εκστρατείας παρακάμπτει αυτό.
Η παράκαμψη κανόνων ώρας ή ημέρας μπορεί να σπάσει τοπικό νόμο. Ενεργοποιήστε anti-harassment για οποιαδήποτε δουλειά επαναλαμβανόμενης επαφής.
Αν αποτύχει
Ενότητα με τίτλο «Αν αποτύχει»Το body είναι { "error": "<code>", "reason": "<message>" }.
| Κωδικός | Σημασία |
|---|---|
call_already_in_progress | Ζωντανή ή προγραμματισμένη κλήση σε αυτόν τον αριθμό υπάρχει ήδη. |
agent_not_found / voip_phone_not_found | Λάθος id. |
daily_call_limit_reached | 3 επιτυχημένες κλήσεις σε αυτόν τον αριθμό σήμερα (anti-harassment). |
failed_call_limit_reached | 3 αποτυχημένες προσπάθειες σήμερα. |
cooldown_period_active | Περιμένετε 1 ώρα μετά από επιτυχημένη κλήση σε αυτόν τον αριθμό. |
weekly_call_limit_reached | 5 επιτυχημένες κλήσεις αυτή την εβδομάδα. |
call_already_scheduled / failed_to_schedule_call | Σύγκρουση προγράμματος. |
callee_opted_out | Αυτός ο αριθμός ζήτησε να μην κληθεί ξανά. |
insufficient_credits / no_seconds_available / no_channels_available / no_concurrent_calls_available | Πρόγραμμα / πιστώσεις. |
maximum_authentication_attempts_exceeded | Τηλέφωνο απενεργοποιήθηκε μετά από επαναλαμβανόμενες αποτυχίες auth. |
402 είναι χρέωση. 400 είναι λάθος αίτημα ή προστασία. 500 είναι ο calls server — επαναλάβετε αργότερα.
Παράδειγμα
Ενότητα με τίτλο «Παράδειγμα»const response = await fetch('https://api.voicelogica.ai/api/v1/phones/calls/initiate-call', { method: 'POST', headers: { 'x-api-key': 'YOUR_API_KEY', 'Content-Type': 'application/json' }, body: JSON.stringify({ destinationNumber: '+14155552671', agentId: 'your_agent_id', sipTrunkId: 'your_sip_trunk_id', contextForAi: 'Customer asked about order ORD123', dynamicVariables: { customer_name: 'Ada', order_id: 'ORD123' }, useAntiHarassmentProtection: true, }),});const result = await response.json();if (result.callId) console.log(result.callId);else console.error(result.error, result.reason);Πρόγραμμα + επαναλήψεις:
{ "destinationNumber": "+14155552671", "agentId": "your_agent_id", "sipTrunkId": "your_sip_trunk_id", "scheduledAt": "2026-09-16T14:30:00Z", "maxRetries": 2, "retryDelayMinutes": 120}Το scheduledAt μετατρέπεται στη ζώνη της χώρας προορισμού. Οι προστασίες εξακολουθούν να ισχύουν εκτός αν τις παρακάμψετε.
Τι μοιάζει “σπασμένο”
Ενότητα με τίτλο «Τι μοιάζει “σπασμένο”»- 400 “no active SIP trunk” — στείλτε
sipTrunkId, ή προσθέστε trunk με αριθμούς και προεπιλογή outbound. scheduled: trueόταν αναμενόταν τώρα — η τοπική ώρα προορισμού είναι εκτός 09:00–21:00.- Ο agent μιλάει πάνω στο “hello” — Outgoing Who speaks first, όχι αυτό το payload.
- Κλήση που λείπει στα Calls — λάθος εταιρεία (
x-company-id), ή το αίτημα δεν επέστρεψε ποτέcallId.
Αντιμετώπιση προβλημάτων
Ενότητα με τίτλο «Αντιμετώπιση προβλημάτων»Το fromNumber λειτουργούσε
Το δημόσιο body είναι sipTrunkId ή voipPhoneId. Στείλτε το trunk id από Telephony → Trunks.
Πόσταρα τώρα και πήρα scheduled: true
Περιορισμός ώρας ή ημέρας. Περιμένετε το παράθυρο ή ορίστε overrideTimeRestriction / overrideDayRestriction μόνο αν επιτρέπεται.
Χτίζετε κάτι;
Ενότητα με τίτλο «Χτίζετε κάτι;»Γράψτε developers@voicelogica.ai — επιπλέον πιστώσεις δοκιμής και βοήθεια στην ενοποίηση.
