Проигрывает собеседнику звуковой файл во время разговора, который ведёт сервер. Файлы встают в очередь друг за другом; replace: true сначала сбрасывает очередь — когда собеседник перебил.
| Запрос | POST /waInstance{idInstance}/playAudio/{apiTokenInstance} |
| Тело | JSON |
| Каналы | MAX, WhatsApp — если в getCapabilities call_audio: true |
Параметры
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
callId |
string | да | id звонка из answerCall, makeCall или incomingCall |
urlFile |
string | да | ссылка на звуковой файл — wav, mp3, ogg и другие. Своя из uploadFile или внешняя |
replace |
boolean | нет | true — сбросить очередь и сказать этот файл сразу, по умолчанию false |
Пример запроса
Сказать следующую фразу после того, что уже звучит:
curl
curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/playAudio/$GRATIO_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"callId": "31A9ADA2-3889-4B2B-9D88-6A7142875D7F",
"urlFile": "https://example.ru/audio/schedule.mp3"
}'
Python
import os
import requests
BASE = f"{os.environ['GRATIO_URL']}/waInstance{os.environ['GRATIO_ID']}"
TOKEN = os.environ["GRATIO_TOKEN"]
url = f"{BASE}/playAudio/{TOKEN}"
payload = {
"callId": "31A9ADA2-3889-4B2B-9D88-6A7142875D7F",
"urlFile": "https://example.ru/audio/schedule.mp3",
}
response = requests.post(url, json=payload, timeout=60)
print(response.status_code, response.json())
Node.js
const { GRATIO_URL, GRATIO_ID, GRATIO_TOKEN } = process.env;
const base = `${GRATIO_URL}/waInstance${GRATIO_ID}`;
const url = `${base}/playAudio/${GRATIO_TOKEN}`;
const payload = {
callId: "31A9ADA2-3889-4B2B-9D88-6A7142875D7F",
urlFile: "https://example.ru/audio/schedule.mp3",
};
const response = await fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(payload),
});
console.log(response.status, await response.json());
PHP
<?php
$base = getenv('GRATIO_URL') . '/waInstance' . getenv('GRATIO_ID');
$url = $base . '/playAudio/' . getenv('GRATIO_TOKEN');
$payload = [
'callId' => '31A9ADA2-3889-4B2B-9D88-6A7142875D7F',
'urlFile' => 'https://example.ru/audio/schedule.mp3',
];
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
]);
$response = json_decode(curl_exec($ch), true);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), PHP_EOL;
print_r($response);
Пример ответа
Ответ 200 OK — файл в очереди:
{"queued": true}
Ещё примеры
Собеседник перебил
Сбросить очередь и сразу ответить:
curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/playAudio/$GRATIO_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"callId": "31A9ADA2-3889-4B2B-9D88-6A7142875D7F",
"urlFile": "https://example.ru/audio/sorry.mp3",
"replace": true
}'
Свой файл
Загрузите файл через uploadFile один раз и передавайте его ссылку в urlFile — сервер возьмёт файл у себя, без скачивания:
curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/playAudio/$GRATIO_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"callId": "31A9ADA2-3889-4B2B-9D88-6A7142875D7F",
"urlFile": "https://api.gratio.net/upload/7100000001/a1b2c3/8f0e…/hello.mp3"
}'
Ошибки
| Код | code |
Когда | Что делать |
|---|---|---|---|
400 |
validation |
нет callId или urlFile |
добавить поле |
400 |
call_not_found |
разговора с таким callId нет: закончился или ещё не начат |
проверить getCall и getActiveCalls |
400 |
audio_queue_full |
в очереди уже 5 минут звука | replace: true или подождать |
400 |
bad_audio |
MAX: файл не разобран как звук | сменить файл |
400 |
audio_format |
WhatsApp: файл не разобран как звук | сменить файл |
400 |
bad_url, url_unavailable |
ссылка не http(s), ведёт во внутреннюю сеть или недоступна | проверить ссылку |
400 |
not_authorized |
канал не на связи | проверить getStateInstance |
402 |
payment_required |
канал на паузе за неоплату | продлить канал в кабинете |
501 |
not_supported |
у канала нет звука звонков: Telegram или call_audio: false |
— |
Особенности каналов
- Файл, поставленный в очередь до соединения, прозвучит, когда пойдёт звук: так можно заранее подготовить фразу для исходящего звонка.
- Тишина между файлами — обычная тишина в трубке: разговор не прерывается.
- Ту же очередь пополняет живой звук callAudio. Команда
clearв сокете сбрасывает её так же, какreplace: true.
Что дальше
- callAudio — живой звук вместо файлов.
- hangUpCall — положить трубку.
- Звонки: как это работает — ход звонка и ограничения.
