Сделайте один звонок с одного из телефонных номеров вашего рабочего пространства. Каждый запрос требует уникальный Idempotency-Key; повторная отправка того же ключа возвращает тот же звонок, а не набирает номер дважды.
curl https://evasay.com/api/v1/voice/calls \
-X POST \
-H "Authorization: Bearer sk-your-key" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"agent_id": "AGENT_ID",
"to": "+14155550100",
"variables": { "customer_name": "Alex", "order_id": "1234" }
}'
from обязателен, если в рабочем пространстве больше одного номера телефона. variables подставляются в заполнители вида {{customer_name}} в первом сообщении и промпте агента.
При включённом voicemail_detection (по умолчанию) исходящий звонок ждёт, пока другая сторона заговорит, прежде чем агент поздоровается; если они молчат, агент здоровается через две–три секунды. Когда агент слышит автоответчик или запись оператора связи, он ждёт конца приветствия и сигнала, оставляет voicemail_message или вешает трубку, если сообщения нет. Такие звонки завершаются с ended_reason voicemail, тарифицируются по фактической длительности и не анализируются и не рассылаются в уведомлениях.
В кампании номер, попавший на автоответчик, набирается снова, как не ответивший, а сообщение оставляется только при последней попытке, чтобы никто не получил одно и то же сообщение дважды.
Каждый исходящий звонок — из кампании или через POST /api/v1/voice/calls — сначала проверяет список «Не звонить» рабочего пространства. Номер из списка никогда не набирается: API отвечает 409 с code do_not_call, а кампания помечает контакт как canceled с outcome do_not_call и переходит к следующему.
Когда человек в звонке, сделанном агентом, просит больше ему не звонить, агент сам вносит его номер в список, сообщает ему об этом, и отправляется вебхук call.do_not_call. Номера можно также добавлять и удалять в Кампании → Список «Не звонить» или через API:
curl https://evasay.com/api/v1/voice/do-not-call \
-X POST \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{ "phones": ["+14155550100"], "note": "Asked by email" }'
Номера указываются в международном формате; до 1000 за раз. GET /api/v1/voice/do-not-call выводит их, сначала новые (search, limit, page), у каждого есть source (call, dashboard или api). DELETE /api/v1/voice/do-not-call/%2B14155550100 снова убирает номер из списка; делайте это, только когда человек согласился на звонки.