Aller au contenu
FR
Ouvrir l’app

API

5 min de lecture
Copier en Markdown
Voir en MarkdownOuvrir le fichier .md brut.md

Un appel sortant depuis votre système — un événement CRM, un formulaire, un rappel d’appel manqué. Une liste selon un calendrier est Campaigns, pas ce point de terminaison.

Les paramètres Outgoing de l’agent s’appliquent toujours. Cette requête choisit le numéro, l’agent et le contexte supplémentaire facultatif pour cet appel.

  1. Le plan inclut Allow Outbound Calls.
  2. Clé API avec le groupe Calls.
  3. Un trunk (ou téléphone VoIP) pour appeler depuis — Votre propre opérateur / Numéros Voice Logica.
  4. L’id de l’agent — depuis l’URL de l’agent sur My Agents, ou Copy sur une ligne de campagne.
POST https://api.voicelogica.ai/api/v1/phones/calls/initiate-call
x-api-key: YOUR_API_KEY
Content-Type: application/json

Revendeurs : x-company-id facultatif pour agir sur une filiale. Sans lui, la propre entreprise de la clé est utilisée.

Envoyez destinationNumber et agentId. Envoyez sipTrunkId ou voipPhoneId sauf si l’entreprise a déjà une route sortante / un trunk par défaut qui peut porter l’appel — si aucun n’est envoyé et qu’aucun trunk ne peut être résolu, l’API retourne qu’aucun trunk SIP actif ou téléphone VoIP n’a été spécifié.

Trunk (habituel) :

Fenêtre de terminal
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 fonctionne toujours — le serveur le résout en trunk.

Le succès est { "callId": "..." }. Si la destination est en dehors de 09h00–21h00 heure locale, vous pouvez obtenir "scheduled": true plus scheduleTime et reason. Ouvrez Calls et écoutez.

destinationNumber en E.164 (+14155552671).

Requis pour un appel sortant IA

ChampCe qu’il fait
destinationNumberNuméro à appeler.
agentIdAgent qui parle. Requis pour les appels sortants IA ; facultatif uniquement pour isInternalCall.

Source de l’appel — envoyez-en un, ou comptez sur le défaut sortant de l’entreprise

ChampCe qu’il fait
sipTrunkIdTrunk depuis Telephony → Trunks. Préférez celui-ci.
voipPhoneIdId de ligne hérité. Résolu en trunk.
callerIdE.164 ou URI SIP montré au destinataire. Doit être un numéro que ce trunk est autorisé à présenter.

Cet appel uniquement

ChampCe qu’il fait
contextForAiAjouté au prompt système pour cet appel.
dynamicVariablesPaires clé/valeur de chaînes que le prompt peut utiliser ({{customer_name}}).
superVariablesValeurs typées : { placeholder, value, type } — text / number / boolean / date / time.
metadataVotre suivi. Stocké sur l’appel. Les clés commençant par scenario_ sont supprimées.
emailAddressOù envoyer le résumé / l’enregistrement.
welcomeMessageOverrideÉnoncé à la place du message d’accueil de l’agent.
isWelcomeMessageAIGeneratedL’IA écrit le message d’accueil pour cet appel.
scheduledAtDate ISO. Appeler plus tard au lieu de maintenant.
maxRetries1–3 si occupé / pas de réponse / messagerie vocale. Défaut 3.
retryDelayMinutes30–1440. Défaut 30.
additionalPhoneNumbersNuméros supplémentaires sur la même requête.

N’envoyez pas fromNumber. Le contrat public est sipTrunkId / voipPhoneId.

L’entrant n’est jamais restreint.

  • Time (activé) — 09h00–21h00 dans l’heure locale du pays de destination. En dehors de cela, l’appel est bloqué ou programmé. Contournement : overrideTimeRestriction: true.
  • Day (activé) — les week-ends / jours fériés peuvent être bloqués par le pays de destination. Contournement : overrideDayRestriction: true.
  • Anti-harcèlement (désactivé sauf si vous envoyez useAntiHarassmentProtection: true) — max 3 appels réussis et 3 échecs par numéro par jour, 1 heure entre les appels réussis, max 5 réussis par semaine, pas d’appel actif/programmé en double. Allowed test numbers de la campagne contourne cela.

Contourner les règles de temps ou de jour peut enfreindre la loi locale. Activez l’anti-harcèlement pour tout travail de contact répété.

Le corps est { "error": "<code>", "reason": "<message>" }.

CodeSignification
call_already_in_progressUn appel en direct ou programmé vers ce numéro existe déjà.
agent_not_found / voip_phone_not_foundMauvais id.
daily_call_limit_reached3 appels réussis vers ce numéro aujourd’hui (anti-harcèlement).
failed_call_limit_reached3 tentatives échouées aujourd’hui.
cooldown_period_activeAttendez 1 heure après un appel réussi vers ce numéro.
weekly_call_limit_reached5 appels réussis cette semaine.
call_already_scheduled / failed_to_schedule_callConflit de calendrier.
callee_opted_outCe numéro a demandé à ne plus être appelé.
insufficient_credits / no_seconds_available / no_channels_available / no_concurrent_calls_availablePlan / crédits.
maximum_authentication_attempts_exceededTéléphone désactivé après des échecs d’authentification répétés.

402 est facturation. 400 est une mauvaise requête ou une protection. 500 est le serveur d’appels — réessayez plus tard.

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: 'Le client a posé une question sur la commande 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);

Calendrier + tentatives :

{
"destinationNumber": "+14155552671",
"agentId": "your_agent_id",
"sipTrunkId": "your_sip_trunk_id",
"scheduledAt": "2026-09-16T14:30:00Z",
"maxRetries": 2,
"retryDelayMinutes": 120
}

scheduledAt est converti dans le fuseau du pays de destination. Les protections s’appliquent toujours sauf si vous les contournez.

  • 400 “no active SIP trunk” — envoyez sipTrunkId, ou ajoutez un trunk avec des numéros et un défaut sortant.
  • scheduled: true quand vous attendiez maintenant — l’heure locale de la destination est en dehors de 09h00–21h00.
  • L’agent parle par-dessus “bonjour” — Outgoing Who speaks first, pas cette charge utile.
  • Appel manquant sur Calls — mauvaise entreprise (x-company-id), ou la requête n’a jamais retourné de callId.
fromNumber fonctionnait avant

Le corps public est sipTrunkId ou voipPhoneId. Envoyez l’id de trunk depuis Telephony → Trunks.

J'ai posté maintenant et j'ai obtenu scheduled: true

Restriction de temps ou de jour. Attendez la fenêtre, ou définissez overrideTimeRestriction / overrideDayRestriction seulement si vous êtes autorisé à le faire.

Écrivez à developers@voicelogica.ai — crédits de test supplémentaires et aide sur l’intégration.