Справочник по API и веб-перехватчикам | Документация для разработчиков
Справочник по API и веб-перехватчикам
Обновлено: 25 ноября 2025 г
Вызов конечных точек API
Настройте или обновите параметры вызовов
Вызовите конечную точку «Обновить настройки номера телефона» и передайте параметры API вызовов, чтобы настроить параметры корпоративного номера телефона, указанного в синтаксисе запроса.
Синтаксис запроса
POST /< PHONE_NUMBER_ID >/ настройкиПараметры конечной точки
| Заполнитель | Описание | Пример значения |
|---|---|---|
<PHONE_NUMBER_ID>Целое число | Необходимый Рабочий телефонный номер, для которого вы обновляете настройки API вызовов. | +12784358810 |
Текст запроса
{
"calling"
: { "status"
: "ENABLED" , "call_icon_visibility"
: "DEFAULT" , "call_hours"
: { "status"
: "ENABLED" , "timezone_id"
: "America/Manaus" , "weekly_operating_hours"
: [ {
"day_of_week"
: "MONDAY" , "open_time"
: "0400" , "close_time"
: "1020" },
{
"day_of_week"
: "TUESDAY" , "open_time"
: "0108" , "close_time"
: "1020" }
],
"holiday_schedule"
: [ {
"date"
: "2026-01-01" , "start_time"
: "0000" , "end_time"
: "2359" }
]
},
"callback_permission_status"
: "ENABLED" , "sip"
: { "status"
: "ENABLED | DISABLED (default)" , "servers"
: [ {
"hostname"
: SIP_SERVER_HOSTNAME, "port"
: SIP_SERVER_PORT, "request_uri_user_params"
: { "KEY1"
: "VALUE1" , "KEY2"
: "VALUE2" }
}
]
}
}
}
Параметры тела
| Параметр | Описание | Пример значения |
|---|---|---|
статусНить | Необязательный Включить или отключить API для звонков для указанного номера телефона компании. | "ВКЛЮЧЕНО""НЕПОЛНОЦЕННЫЙ" |
call_icon_visibilityНить | Необязательный Настройте отображение значка кнопки вызова WhatsApp для пользователей при общении с компанией. | |
часы звонковJSON-объект | Необязательный Позволяет задавать и активировать параметры обработки входящих вызовов в зависимости от вашего часового пояса, рабочего времени и расписания праздников. Все ранее заданные значения в параметре call_hours будут заменены значениями, переданными в теле запроса этого API-вызова. | |
callback_permission_statusНить | Необязательный Настройте, будет ли пользователю WhatsApp запрашиваться разрешение на совершение звонка после звонка в вашу компанию. Примечание: Запрос на разрешение вызова инициируется как при пропущенном, так и при установленном соединении. | "ВКЛЮЧЕНО""НЕПОЛНОЦЕННЫЙ" |
глотокJSON-объект | Необязательный Настройте сигнализацию вызовов с помощью протокола инициации сигнала (SIP). Примечание: При включенном протоколе SIP вы не сможете использовать конечные точки, связанные с вызовами, и не будете получать веб-хуки, связанные с вызовами. | "sip" |
Подробности параметра: Статус вызова
Если
статуса установлен в значение «ВКЛЮЧЕНО» , функции вызова для рабочего номера телефона становятся доступны. Приложения WhatsApp будут отображать значок кнопки вызова как в рабочем чате, так и в профиле рабочего чата.Если
статуса присвоено значение «ОТКЛЮЧЕНО» , функции вызова отключаются значок кнопки вызова не отображается ни в деловом чате, ни в профиле делового чата Обновление
статуса будет обновлять значок кнопки вызова в существующих деловых чатах практически в режиме реального времени, если номер телефона компании есть в контактах пользователя WhatsApp.В противном случае обновления происходят в режиме реального времени для ограниченного числа пользователей, ведущих диалог с компанией, и в конечном итоге распространяются на все остальные диалоги.
Подробности параметра: Видимость значка кнопки вызова
Если для номера компании включены функции Calling API, вы все равно можете выбрать, отображать ли значок кнопки вызова или нет, используя
call_icon_visibility . Примечание: отключение видимости значка кнопки вызова не отключает возможность пользователя WhatsApp совершать незапрошенные звонки в вашу компанию.Для поддерживаемых опций поведение следующее:
ПО УМОЛЧАНИЮЗначок кнопки «Вызов» будет отображаться в строке меню чата и на странице информации о компании, что позволит пользователям WhatsApp совершать незапрошенные звонки в компанию.

ОТКЛЮЧИТЬ ВСЕЗначок кнопки вызова скрыт в строке меню чата и на странице информации о компании, а все остальные точки входа вне чата также отключены. Потребители не могут совершать незапрошенные звонки в компанию.
Ваша компания по-прежнему может отправлять интерактивные сообщения или шаблонные сообщения с помощью кнопки призыва к действию (CTA) через Calling API.

Разрешения на обратный вызов
Для звонка пользователю WhatsApp требуется явное разрешение от пользователя. Один из способов получить разрешение на звонок — запросить его у пользователя WhatsApp, когда он звонит в вашу компанию.
Вы можете настроить интерфейс разрешений на звонки таким образом, чтобы он автоматически отображался в клиентском приложении WhatsApp при звонке на номер вашей компании. Пользователь может изменить выбранные разрешения в любое время.

часы работы службы поддержки
С помощью
call_hours можно указать часовой пояс, часы работы предприятия и расписание праздничных дней, которые будут применяться ко всем звонкам, инициированным пользователем.Настройка этого параметра ограничивает звонки только доступными в течение недели часами, которые вы укажете. Звонки, инициированные пользователем, будут недоступны вне установленных вами еженедельных часов и праздничных дней.
параметр callback_permission_status включен приложение WhatsApp предложит пользователям возможность связаться с компанией в чате или запросить обратный звонок. На экране выбора параметров пользователю также будет показан ближайший доступный временной интервал для звонка.
"call_hours"
: { "status"
: "ENABLED" , "timezone_id"
: "America/Manaus" , "weekly_operating_hours"
: [ {
"day_of_week"
: "MONDAY" , "open_time"
: "04:00" , "close_time"
: "10:20" },
{
"day_of_week"
: "TUESDAY" , "open_time"
: "01:08" , "close_time"
: "10:20" }
],
"holiday_schedule"
: [ {
"date"
: "2026-01-01" , "start_time"
: "00:00" , "end_time"
: "23:59" }
]
}
| Параметр | Описание | Примерные значения | ||
|---|---|---|---|---|
статусНить | Необходимый Включить или отключить часы работы службы поддержки для предприятия. Если функция оповещения о времени работы отключена, считается, что предприятие работает круглосуточно, 7 дней в неделю. | "ВКЛЮЧЕНО""НЕПОЛНОЦЕННЫЙ" | ||
timezone_idНить | Необходимый Часовой пояс, в котором работает компания. | «Америка/Меномине»«Азия/Сингапур» | ||
еженедельные_часы_работыСписок объектов JSON | Необходимый Расписание работы на каждый день недели. Каждая запись представляет собой JSON-объект, содержащий 3 пары ключ/значение: день недели — ( Перечисление ) [Обязательно]День недели. Может принимать одно из семи значений: «MONDAY» , «TUESDAY» , «WEDNESDAY» , «THURSDAY» , «FRIDAY» , «SATURDAY» , «SUNDAY».
Время открытия и закрытия указывается в 24-часовом формате, например, "11:30" = 11:30 утра.Время открытия (open_time) должно быть раньше времени закрытия (close_time).Повторяющиеся записи не допускаются | { | ||
расписание праздниковНить | Необязательный Дополнительная возможность изменения еженедельного расписания. Можно указать до 20 вариантов переопределения. Примечание: Если параметр holiday_schedule не указан в запросе, то существующее расписание holiday_schedule будет удалено и заменено пустым расписанием.дата — ( Строка ) [Обязательно]Дата, для которой вы хотите указать значение для переопределения. Формат ГГГГ-ММ-ДД.
Время открытия и закрытия указывается в 24-часовом формате, например, «11:30» = 11:30 утра.Время открытия (open_time) должно быть раньше времени закрытия (close_time).Повторяющиеся записи не допускаются | { |
Ответ об успехе
{
"success"
: true }
Ответ с ошибкой
Возможные ошибки, которые могут возникнуть:
call_hours праздника, указанная в call_hours, уже прошла. параметре call_hours указан недопустимый часовой пояс Параметр weekly_operating_hours в call_hours не может быть пустым.Формат даты в holiday_schedule для call_hours недопустим. графике работы службы поддержки (call_hours) не допускается более 2 записей.Перекрывающиеся графики в call_hours не допускаются.Получить настройки звонков по номеру телефона
Для получения настроек API вызовов для конкретного номера телефона компании, указанного в синтаксисе запроса, воспользуйтесь конечной точкой Get Phone Number Settings.
Этот конечный пункт может возвращать информацию о других настройках функций Cloud API.
Синтаксис запроса
POST /< PHONE_NUMBER_ID >/ настройкиПараметры конечной точки
| Параметр | Описание | Пример значения |
|---|---|---|
<PHONE_NUMBER_ID>Целое число | Необходимый Рабочий телефонный номер, для которого вы получаете настройки API вызовов. | +12784358810 |
Требуются разрешения приложения
whatsapp_business_management : Для использования API конечными бизнес-клиентами требуется расширенный доступ.Ответный текст
{
"calling"
: { "status"
: "ENABLED" , "call_icon_visibility"
: "DEFAULT" , "call_hours"
: { "status"
: "ENABLED" , "timezone_id"
: "America/Manaus" , "weekly_operating_hours"
: [ {
"day_of_week"
: "MONDAY" , "open_time"
: "0400" , "close_time"
: "1020" },
{
"day_of_week"
: "TUESDAY" , "open_time"
: "0108" , "close_time"
: "1020" }
],
"holiday_schedule"
: [ {
"date"
: "2026-01-01" , "start_time"
: "0000" , "end_time"
: "2359" }
]
},
"callback_permission_status"
: "ENABLED" , "sip"
: { "status"
: "ENABLED | DISABLED (default)" , "servers"
: [ {
"hostname"
: SIP_SERVER_HOSTNAME, "port"
: SIP_SERVER_PORT, "request_uri_user_params"
: { "KEY1"
: "VALUE1" , "KEY2"
: "VALUE2" }
}
]
}
}
}
Укажите пароль пользователя SIP
При желании вы можете включить учетные данные пользователя SIP в тело ответа, добавив параметр запроса SIP credentials в POST-запрос:
POST / <PHONE_NUMBER_ID> / settings ? include_sip_credentials = trueВ результате будет получен следующий ответ:
{
"calling"
: { ... // другие настройки API для звонков
"sip"
: { "status"
: "ENABLED" , "servers"
: [ {
"hostname"
: "sip.example.com" , "sip_user_password"
: "{SIP_USER_PASSWORD}" }
]
}
}
}
Подробности ответа
GET
/ /settings возвращает настройки API вызовов, а также другую информацию о конфигурации вашего бизнес-номера телефона WhatsApp.Ответ с ошибкой
Возможные ошибки, которые могут возникнуть:
Предварительное принятие звонка
При предварительном принятии входящего вызова вы позволяете установить медиасоединение с вызывающим абонентом, прежде чем пытаться передать медиаконтент через это соединение.
При последующем вызове конечной точки приема вызова передача медиаконтента начинается немедленно, поскольку соединение уже установлено.
Рекомендуется предварительно принимать звонки, поскольку это способствует более быстрому установлению соединения и позволяет избежать проблем с искажением звука .
веб-хука Call Connect есть примерно от 30 до 60 секунд, чтобы принять телефонный звонок. Если компания не отвечает, звонок завершается на стороне пользователя WhatsApp с уведомлением «Не отвечено», и вам отправляется веб-хук завершения вызова
Примечание: Поскольку соединение WebRTC устанавливается до вызова конечной точки Accept Call , убедитесь, что передача медиаданных происходит только после получения ответа 200 OK.
Если передача медиаконтента начинается слишком рано, звонящий пропустит первые несколько слов разговора. Если передача медиаконтента начинается слишком поздно, звонящий услышит тишину.
Синтаксис запроса
POST < PHONE_NUMBER_ID >/ calls| Заполнитель | Описание | Пример значения |
|---|---|---|
<PHONE_NUMBER_ID>Целое число | Необходимый Номер телефона компании, с которого вы используете функции Calling API. | +12784358810 |
Текст запроса
{ "messaging_product" : "whatsapp" , "call_id" : "wacid.ABGGFjFVU2AfAgo6V-Hc5eCgK5Gh" , "action" : "pre_accept" , "session" : { "sdp_type" : "answer" , "sdp" : "< >" } }Параметры тела
| Параметр | Описание | Пример значения |
|---|---|---|
call_idНить | Необходимый Идентификатор телефонного звонка. При входящих звонках вы получаете идентификатор вызова от веб-перехватчика Call Connect, когда звонок инициирует пользователь WhatsApp. | “wacid.ABGGFjFVU2AfAgo6V-Hc5eCgK5Gh” |
действиеНить | Необязательный Действие, выполняемое в отношении указанного идентификатора вызова. Значения могут быть связаны | предварительное принятие | принятие | отклонение | завершение | “предварительное_принятие” |
сессияJSON-объект | Необязательный Содержит тип протокола описания сессии (SDP) и язык описания. Требуется два значения: sdp_type — ( Строка ) Обязательный параметр«Предложение» обозначает предложение SDP sdp — ( Строка ) Обязательный параметр | |
Ответ об успехе
{ "messaging_product" : "whatsapp" , "success" : true }Ответ с ошибкой
Возможные ошибки, которые могут возникнуть:
идентификатор вызоваНеверный номер телефонаОшибка, связанная с вашим способом оплатыНеверные данные подключения, например, sdp, iceПринять/отклонить уже находящийся в процессе/завершенный/неудачный вызовОшибки доступа/авторизацииПринять звонок
Используйте эту конечную точку для подключения к вызову, указав SDP оператора колл-центра.
веб-хука Call Connect у вас есть примерно от 30 до 60 секунд, чтобы принять телефонный звонок. Если ваша компания не отвечает, звонок завершается на стороне пользователя WhatsApp с уведомлением «Не отвечено», и вам отправляется веб-хук Terminate
Синтаксис запроса
POST < PHONE_NUMBER_ID >/ calls| Заполнитель | Описание | Пример значения |
|---|---|---|
<PHONE_NUMBER_ID>Целое число | Необходимый Номер телефона компании, с которого вы используете функции Calling API. | +12784358810 |
Текст запроса
{ "messaging_product" : "whatsapp" , "call_id" : "wacid.ABGGFjFVU2AfAgo6V-Hc5eCgK5Gh" , "action" : "accept" , "session" : { "sdp_type" : "answer" , "sdp" : "< >" }, "biz_opaque_callback_data" : "random_string" }Параметры тела
| Параметр | Описание | Пример значения |
|---|---|---|
call_idНить | Необходимый Идентификатор телефонного звонка. При входящих звонках вы получаете идентификатор вызова от веб-перехватчика Call Connect, когда звонок инициирует пользователь WhatsApp. | “wacid.ABGGFjFVU2AfAgo6V-Hc5eCgK5Gh” |
действиеНить | Необязательный Действие, выполняемое в отношении указанного идентификатора вызова. Значения могут быть связаны | предварительное принятие | принятие | отклонение | завершение | "принимать" |
сессияJSON-объект | Необязательный Содержит тип протокола описания сессии (SDP) и язык описания. Требуется два значения: sdp_type — ( Строка ) Обязательный параметр«Предложение» обозначает предложение SDP sdp — ( Строка ) Обязательный параметр | |
biz_opaque_callback_dataНить | Необязательный Произвольная строка, которую можно передать в качестве параметра для целей отслеживания и регистрации. Любое приложение, подписанное на поле веб-перехватчика «звонки» в вашем аккаунте WhatsApp Business, может получить эту строку, поскольку она включена в calls в последующей веб-перехватчика Terminate .Cloud API не обрабатывает это поле, а просто возвращает его в составе веб-перехватчика Terminate . Максимальное количество символов: 512 | “8huas8d80nn” |
Ответ об успехе
{ "messaging_product" : "whatsapp" , "success" : true }Ответ с ошибкой
Возможные ошибки, которые могут возникнуть:
идентификатор вызоваНеверный номер телефонаОшибка, связанная с вашим способом оплатыНеверная информация о соединении, например, параметры sdp, ice или другие параметры соединенияПринять/отклонить уже находящийся в процессе/завершенный/неудачный вызовОшибки доступа/авторизацииОтвет SDP, предоставленный в запросе accept, не совпадает с ответом SDP, предоставленным в конечной точке pre-Accept для того же идентификатора вызова.Отклонить вызов
Используйте этот адрес электронной почты, чтобы отклонить вызов.
веб-хука Call Connect у вас есть примерно от 30 до 60 секунд, чтобы принять телефонный звонок. Если компания не отвечает, звонок завершается на стороне пользователя WhatsApp с уведомлением «Не отвечено», и вам отправляется веб-хук завершения вызова
Синтаксис запроса
POST < PHONE_NUMBER_ID >/ calls| Заполнитель | Описание | Пример значения |
|---|---|---|
<PHONE_NUMBER_ID>Целое число | Необходимый Номер телефона компании, с которого вы используете функции Calling API. | +12784358810 |
Текст запроса
{ "messaging_product" : "whatsapp" , "call_id" : "wacid.ABGGFjFVU2AfAgo6V-Hc5eCgK5Gh" , "action" : "reject" }Параметры тела
| Параметр | Описание | Пример значения |
|---|---|---|
call_idНить | Необходимый Идентификатор телефонного звонка. При входящих звонках вы получаете идентификатор вызова от веб-перехватчика Call Connect, когда звонок инициирует пользователь WhatsApp. | “wacid.ABGGFjFVU2AfAgo6V-Hc5eCgK5Gh” |
действиеНить | Необязательный Действие, выполняемое в отношении указанного идентификатора вызова. Значения могут быть связаны | предварительное принятие | принятие | отклонение | завершение | "отклонять" |
Ответ об успехе
{ "messaging_product" : "whatsapp" , "success" : true }Ответ с ошибкой
Возможные ошибки, которые могут возникнуть:
идентификатор вызоваНеверный номер телефонаПринять/отклонить уже находящийся в процессе/завершенный/неудачный вызовОшибки доступа/авторизацииИнициировать звонок
Используйте этот конечный пункт для инициирования звонка пользователю WhatsApp, указав номер телефона и предложение WebRTC-звонка.
Синтаксис запроса
POST < PHONE_NUMBER_ID >/ calls| Заполнитель | Описание | Пример значения |
|---|---|---|
<PHONE_NUMBER_ID>Целое число | Необходимый Рабочий телефонный номер, с которого вы совершаете новый звонок. | +12784358810 |
Текст запроса
{ "messaging_product" : "whatsapp" , "to" : "14085551234" , "action" : "connect" , "session" : { "sdp_type" : "offer" , "sdp" : "< >" }, "biz_opaque_callback_data" : "0fS5cePMok" }Параметры тела
| Параметр | Описание | Пример значения |
|---|---|---|
кЦелое число | Необходимый Вызываемый номер (звонящий) | “17863476655” |
действиеНить | Необходимый Действие, выполняемое в отношении указанного идентификатора вызова. Значения могут быть связаны | предварительное принятие | принятие | отклонение | завершение | "соединять" |
сессияJSON-объект | Необязательный Содержит тип протокола описания сессии (SDP) и язык описания. Требуется два значения: sdp_type — ( Строка ) Обязательный параметр«Предложение» обозначает предложение SDP sdp — ( Строка ) Обязательный параметр | |
biz_opaque_callback_dataНить | Необязательный Произвольная строка, которую можно передать в качестве параметра для целей отслеживания и регистрации. Любое приложение, подписанное на поле веб-перехватчика «звонки» в вашем аккаунте WhatsApp Business, может получить эту строку, поскольку она включена в «звонки» в последующей веб-перехватчика «Завершение вызова» .Облачный API не обрабатывает это поле. Максимальное количество символов: 512 | “0fS5cePMok” |
Ответ об успехе
{ "messaging_product" : "whatsapp" , "calls" : [{ "id" : "wacid.ABGGFjFVU2AfAgo6V" , }] }Ответ с ошибкой
Возможные ошибки, которые могут возникнуть:
номер телефонаОшибки доступа/авторизацииОшибки проверки формата запроса, например, информация о соединении, SDP, ICEОшибки проверки SDPЗавершить вызов
Используйте эту конечную точку для завершения активного вызова.
в медиатракте присутствует
RTCP BYE Когда пользователь WhatsApp завершает вызов, вам не нужно звонить на эту конечную точку. После успешного завершения вызова вам будет отправлен веб-хук завершения вызова
Синтаксис запроса
POST < PHONE_NUMBER_ID >/ calls| Параметр | Описание | Пример значения |
|---|---|---|
<PHONE_NUMBER_ID>Целое число | Необходимый Рабочий телефонный номер, с которого вы завершаете звонок. | 18274459827 |
Текст запроса
{ "messaging_product" : "whatsapp" , "call_id" : "wacid.ABGGFjFVU2AfAgo6V-Hc5eCgK5Gh" , "action" : "terminate" }Параметры тела
| Параметр | Описание | Пример значения |
|---|---|---|
call_idНить | Необходимый Идентификатор телефонного звонка. При входящих звонках вы получаете идентификатор вызова от веб-перехватчика Call Connect, когда звонок инициирует пользователь WhatsApp. | “wacid.ABGGFjFVU2AfAgo6V-Hc5eCgK5Gh” |
действиеНить | Необходимый Действие, выполняемое в отношении указанного идентификатора вызова. Значения могут быть связаны | предварительное принятие | принятие | отклонение | завершение | «прекратить» |
Ответ об успехе
{ "messaging_product" : "whatsapp" , "success" : true }Ответ с ошибкой
Возможные ошибки, которые могут возникнуть:
идентификатор вызоваНеверный номер телефонаПользователь WhatsApp уже завершил звонокВызов с отклонением уже выполняетсяОшибки доступа/авторизацииПолучить текущее состояние разрешения на вызов
Используйте этот конечный пункт, чтобы получить состояние разрешений на вызов для корпоративного телефонного номера, к которому привязан один номер телефона пользователя WhatsApp.
Синтаксис запроса
GET /<PHONE_NUMBER_ID> / call_permissions ? user_wa_id = < CONSUMER_WHATSAPP_ID >Параметры запроса
| Параметр | Описание | Пример значения |
|---|---|---|
<PHONE_NUMBER_ID>Нить | Необходимый Номер телефона компании, для которого вы запрашиваете разрешения. | +18762639988 |
<CONSUMER_WHATSAPP_ID>Целое число | Необходимый Номер телефона пользователя WhatsApp, у которого вы запрашиваете разрешение на совершение звонков. | +13057765456 |
Ответный текст
{ "messaging_product" : "whatsapp" , "permission" : { "status" : "temporary" , "expiration_time" : 1745343479 }, "actions" : [ { "action_name" : "send_call_permission_request" , "can_perform_action" : true , "limits" : [ { "time_period" : "PT24H" , "max_allowed" : 1 , "current_usage" : 0 , }, { "time_period" : "P7D" , "max_allowed" : 2 , "current_usage" : 1 , } ] }, { "action_name" : "start_call" , "can_perform_action" : false , "limits" : [ { "time_period" : "PT24H" , "max_allowed" : 5 , "current_usage" : 5 , "limit_expiration_time" : 1745622600 , } ] } } }Параметры отклика
| Параметр | Описание |
|---|---|
разрешениеОбъект JSON | Объект разрешений содержит два значения: статус (строка) — Текущий статус разрешения.Может быть любым из следующих вариантов: “no_permission”"временный"expiration (целое число) — время в формате UTC, по истечении которого разрешение будет аннулировано. |
действияОбъект JSON | Список действий, которые может предпринять телефонный номер компании для разрешения на совершение звонка или для обработки звонка, инициированного компанией. В настоящее время предпринимаются следующие действия: send_call_permission_request : Обозначает действие отправки пользователю WhatsApp запроса на разрешение на совершение нового вызова.start_call : Обозначает действие по установлению нового вызова с пользователем WhatsApp. Установление нового вызова означает, что звонок был успешно принят абонентом.Например, `can_perform_action` функции `send_call_permission_request` имеет значение ` true` , это означает, что ваша компания может отправить запрос на разрешение вызова соответствующему пользователю WhatsApp.can_perform_action ( Boolean ) —Флаг, указывающий, можно ли выполнить действие сейчас, с учетом всех ограничений. |
ограниченияОбъект JSON | Список временных ограничений для заданного action_name .Для каждого action_name существует одно или несколько ограничений в зависимости от временного интервала.Например, компания может отправить не более 2 запросов на разрешение доступа в течение 24 часов. раздела "limits" включает следующие поля:time_period ( String ) — Период времени, в течение которого действует ограничение, представленный в формате ISO 8601.max_allowed ( целое число ) — Максимальное количество действий, разрешенных в течение указанного периода времени.current_usage ( целое число ) — текущее количество действий, совершенных компанией за указанный период времени.limit_expiration_time ( Integer ) — Время в формате UTC (Unix-время), в которое истечет лимит.Если значение current_usage меньше максимально допустимого предела, это поле будет отсутствовать. |
Ответ с ошибкой
Возможные ошибки, которые могут возникнуть:
номер телефонаЕсли номер телефона потребителя недоступен для звонка, API ответит сообщением no_permission .Ошибки доступа/авторизации.Достигнут лимит запросов. Максимально 5 запросов к API в течение 1 секунды.Для корпоративного телефонного номера функция звонков отключена.Вызов веб-хуков API
Веб-перехватчик вызова Connect
Уведомление через веб-хук отправляется практически в режиме реального времени, когда звонок, инициированный вашей компанией, готов к соединению с пользователем WhatsApp (
ответ SDP ).Крайне важно, что веб-перехватчик содержит информацию, необходимую для установления соединения через WebRTC.
После получения веб-перехватчика Call Connect вы можете применить
ответ SDP к вашему стеку WebRTC, чтобы инициировать медиасоединение.{ "object" : "whatsapp_business_account" , "entry" : [ { "id" : " " , "changes" : [ { "value" : { "messaging_product" : "whatsapp" , "metadata" : { "display_phone_number" : "16315553601" , "phone_number_id" : " " }, "контакты" : [ { "профиль" : { "имя" : " " }, "wa_id" : "16315553602" } ], "calls" : [ { "id" : "wacid.ABGGFjFVU2AfAgo6V-Hc5eCgK5Gh" , "to" : "16315553601" , "from" : "16315553602" , "event" : "connect" , "timestamp" : "1671644824" , "direction" : "BUSINESS_INITIATED" , "session" : { "sdp_type" : "answer" , "sdp" : "< >" } } ] }, "field" : "calls" } ] } ] }Значения веб-хуков для "вызовов"
| Заполнитель | Описание |
|---|---|
идентификаторНить | Уникальный идентификатор для вызова |
кЦелое число | Вызываемый номер (звонящий) |
отЦелое число | Номер звонящего |
событиеЦелое число | Событие вызова, о котором этот веб-перехватчик уведомляет подписчика |
метка времениЦелое число | Временная метка UNIX события веб-перехватчика |
направлениеНить | Направление совершаемого звонка. Может содержать либо: BUSINESS_INITIATED — для звонков, инициированных вашей компанией.USER_INITIATED — для звонков, инициированных пользователем WhatsApp. |
сессияJSON-объект | Необязательный Содержит тип протокола описания сессии (SDP) и язык описания. Требуется два значения: sdp_type — ( Строка ) Обязательный параметр«Предложение» обозначает предложение SDP sdp — ( Строка ) Обязательный параметр |
контактыJSON-объект | Информация о звонящем. Содержит два значения: имя — имя профиля WhatsApp собеседника.wa_id — идентификатор вызываемого абонента в WhatsApp. |
веб-перехватчик статуса вызова
Этот веб-перехватчик отправляется при следующих событиях вызова:
Здесь используется структура веб-хуков, аналогичная структуре веб-хуков статуса, применяемых для сообщений Cloud API.
{ "object" : "whatsapp_business_account" , "entry" : [ { "id" : " " , "changes" : [ { "value" : { "messaging_product" : "whatsapp" , "metadata" : { "display_phone_number" : "16315553601" , "phone_number_id" : " " , }, "statuses" : [{ "id" : "wacid.ABGGFjFVU2AfAgo6V" , "timestamp" : "1671644824" , "type" : "call" "status" : "[RINGING|ACCEPTED|REJECTED]" , "recipient_id" : "163155536021" , "biz_opaque_callback_data" : "random_string" , }] }, "field" : "calls" } ] } ] }Значения веб-хуков для "статусов"
| Заполнитель | Описание |
|---|---|
идентификаторНить | Уникальный идентификатор для вызова |
метка времениЦелое число | Временная метка UNIX события веб-перехватчика |
recipient_idЦелое число | Номер телефона пользователя WhatsApp, принимающего звонок |
статусЦелое число | Текущий статус вызова. Возможные значения: ЗВОНОК : Инициированный компанией звонок поступает на абонента.ПРИНЯТО : Звонок, инициированный компанией, принят пользователем.ОТКЛОНЕНО : Звонок, инициированный представителем компании, отклонен пользователем. |
biz_opaque_callback_dataНить | Произвольная строка, которую ваша компания передает в вызов для отслеживания и регистрации данных. Возвращается только в том случае, если предоставлено через запросы API Initiate New Call. |
Вызов завершения веб-перехватчика
Уведомление через веб-хук отправляется всякий раз, когда вызов завершается по какой-либо причине, например, когда пользователь WhatsApp кладёт трубку или когда компания вызывает
POST-запрос. /вызывает конечную точку с действием завершения или отклонения .{ "object" : "whatsapp_business_account" , "entry" : [ { "id" : " " , "changes" : [ { "value" : { "messaging_product" : "whatsapp" , "metadata" : { "display_phone_number" : "16505553602" , "phone_number_id" : " " , }, "calls" : [ { "id" : "wacid.ABGGFjFVU2AfAgo6V-Hc5eCgK5Gh" , "to" : "16315553601" , "from" : "16315553602" , "event" : "terminate" "direction" : "BUSINESS_INITIATED" , "biz_opaque_callback_data" : "random_string" , "timestamp" : "1671644824" , "status" : [ FAILED | COMPLETED ], "start_time" : "1671644824" , "end_time" : "1671644944" , "duration" : 120 } ], "errors" : [ { "code" : INT_CODE , "message" : "ERROR_TITLE" , "href" : "ERROR_HREF" , "error_data" : { "details" : "ERROR_DETAILS" } } ] }, "field" : "calls" } ] } ] }Значения веб-хуков для "вызовов"
| Заполнитель | Описание |
|---|---|
идентификаторНить | Уникальный идентификатор для вызова |
кЦелое число | Вызываемый номер (звонящий) |
отЦелое число | Номер звонящего |
событиеЦелое число | Событие вызова, о котором этот веб-перехватчик уведомляет подписчика |
метка времениЦелое число | Временная метка UNIX события веб-перехватчика |
направлениеНить | Направление совершаемого звонка. Может содержать либо: BUSINESS_INITIATED — для звонков, инициированных вашей компанией.USER_INITIATED — для звонков, инициированных пользователем WhatsApp. |
время началаЦелое число | Временная метка UNIX, указывающая на начало звонка. Присутствует только тогда, когда на звонок ответил другой абонент. |
конец_времениЦелое число | Временная метка UNIX, отражающая момент завершения звонка. Присутствует только тогда, когда на звонок ответил другой абонент. |
продолжительностьЦелое число | Продолжительность разговора в секундах. Присутствует только тогда, когда на звонок ответил другой абонент. |
biz_opaque_callback_dataНить | Произвольная строка, которую ваша компания передает в вызов для отслеживания и регистрации данных. Возвращается только в том случае, если предоставлено через запросы API New Call или запросы Accept Call. |
Пользователь вызывает веб-перехватчик запроса разрешения
Этот веб-перехватчик отправляется обратно после запроса у пользователя разрешений на вызов.
Веб-перехватчик меняется в зависимости от того, кто из пользователей:
Пример веб-хука
{ . . . "messages" : [{ "from" : "{customer_phone_number}" , "id" : "wamid.sH0kFlaCGg0xcvZbgmg90lHrg2dL" , "timestamp" : "{timestamp}" , "context" : { "from" : "{customer_phone_number}" , "id" : "wacid.gBGGFlaCmZ9plHrf2Mh-o" }, "interactive" : { "type" : "call_permission_reply" , "call_permission_reply" : { "response" : "accept" , "is_permanent" : false , "expiration_timestamp" : "{timestamp}" , "response_source" : "[user_action|automatic]" } } ], . . . }Пример веб-хука (с постоянными правами доступа)
"messages" : [{ "from" : "{customer_phone_number}" , "id" : "wamid.sH0kFlaCGg0xcvZbgmg90lHrg2dL" , "timestamp" : "{timestamp}" , "context" : { "from" : "{customer_phone_number}" , "id" : "wacid.gBGGFlaCmZ9plHrf2Mh-o" }, "interactive" : { "type" : "call_permission_reply" , "call_permission_reply" : { "response" : "accept" , "is_permanent" : false , "expiration_timestamp" : "{timestamp}" , "response_source" : "[user_action|automatic]" } } ], . . . }Значения веб-перехватчика
| Заполнитель | Описание |
|---|---|
номер_телефона_клиентаНить | Номер телефона клиента |
контекст.idНить | Может принимать одно из двух значений |
ответНить | Ответ пользователя WhatsApp на сообщение с запросом разрешения на звонок Может быть принято или отклонено. |
expiration_timestampЦелое число | Время в секундах, по истечении которого истекает срок действия разрешения на звонок, если пользователь WhatsApp его одобрил |
источник ответаНить | Источник этого разрешения Возможные значения для разрешений на совершение вызовов: user_action : Пользователь одобрил или отклонил разрешениеавтоматический : Автоматическое подтверждение разрешения в связи с тем, что звонок инициирован пользователем WhatsApp. |
Обзор SDP и примеры структур SDP
Протокол описания сеанса (SDP) — это текстовый формат, описывающий характеристики мультимедийных сеансов, таких как голосовые и видеозвонки, в приложениях для связи в реальном времени. SDP предоставляет стандартизированный способ передачи информации о медиапотоках сеанса, включая тип медиафайлов, кодеки, протоколы и другие параметры, необходимые для установления и управления сеансом.
В контексте WebRTC протокол SDP используется для согласования параметров передачи данных между отправителем и получателем, позволяя им согласовать специфику обмена данными.
Примеры структур SDP, инициированные бизнесом
Пример структуры предложения SDP
v = 0 o =- 3626166318745852955 2 IN IP4 127.0 . 0.1 s =- t = 0 0 a = group : BUNDLE 0 a = extmap - allow - mixed a = msid - semantic : WMS d8b26053 - 4474 - 4eb7 - b3c3 - c93d6c8c9b2e m = audio 9 UDP / TLS / RTP / SAVPF 111 63 9 0 8 110 126 c = IN IP4 0.0 . 0.0 a = rtcp : 9 IN IP4 0.0 . 0.0 a = ice - ufrag : 4g1c a = ice - pwd : qY / Bb + jQzg5ICn6X4fhJQetk a = ice - options : trickle a = fingerprint : sha - 256 35 : 47 : 24 : 24 : 9F : 93 : C4 : 3E : DB : 37 : 7F : BB : ED : F8 : 20 : B5 : AD : AC : DC : 35 : C2 : 7D : 67 : EE : 6C : 35 : 54 : DF : A6 : 00 : 5C : 4A a = setup : actpass a = mid : 0 a = extmap : 1 urn : ietf : params : rtp - hdrext : ssrc - audio - level a = extmap : 2 http : //www.webrtc.org/experiments/rtp-hdrext/abs-send-time a = extmap : 3 http : //www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01 a = extmap : 4 urn : ietf : params : rtp - hdrext : sdes : mid a = sendrecv a = msid : d8b26053 - 4474 - 4eb7 - b3c3 - c93d6c8c9b2e 5b4d3d96 - ea9b - 44a8 - 87e6 - 11a1ad21a3bc a = rtcp - mux a = rtpmap : 111 opus / 48000 / 2 a = rtcp - fb : 111 transport - cc a = fmtp : 111 minptime = 10 ; useinbandfec = 1 a = rtpmap : 63 red / 48000 / 2 a = fmtp : 63 111 / 111 a = rtpmap : 9 G722 / 8000 a = rtpmap : 0 PCMU / 8000 a = rtpmap : 8 PCMA / 8000 a = rtpmap : 110 telephone - event / 48000 a = rtpmap : 126 telephone - event / 8000 a = ssrc : 2220762577 cname : w / zwpg3jXNiTFTdZ a = ssrc : 2220762577 msid : d8b26053 - 4474 - 4eb7 - b3c3 - c93d6c8c9b2e 5b4d3d96 - ea9b - 44a8 - 87e6 - 11a1ad21a3bcПример структуры ответа SDP
v = 0 o =- 741807839102053725 2 IN IP4 127.0 . 0.1 s =- t = 0 0 a = group : BUNDLE 0 a = extmap - allow - mixed a = msid - semantic : WMS 798a9670 - c0d6 - 47a8 - 925e-5f082ef4d8a0 a = ice - lite m = audio 3482 UDP / TLS / RTP / SAVPF 111 9 0 8 110 126 c = IN IP4 31.13 . 65.130 a = rtcp : 9 IN IP4 0.0 . 0.0 a = кандидат : 2754936280 1 udp 2113937151 31.13 . 65.130 3482 typ host generation 0 network - cost 50 ufrag JHqAXFH4HcAY / 8 a = candidate : 1581496399 1 udp 2113939711 2a03 : 2880 : f211 : d1 : face : b00c : 0 : 699c 3482 typ host generation 0 network - cost 50 ufrag JHqAXFH4HcAY / 8 a = ice - ufrag : JHqAXFH4HcAY / 8 a = ice - pwd : dNNMmR8wUcGezvfBZOO0Qgcwl2m86GP / a = ice - options : trickle a = fingerprint : sha - 256 9C : 97 : 5C : 4C : A9 : BE : 9E : 2F : 06 : 94 : F5 : BB : 38 : 2C : A1 : 29 : B5 : 69 : B8 : FA : 94 : 10 : 56 : 1D : 0B : 5D : 80 : 28 : C1 : FD : F0 : F6 a = setup : active a = mid : 0 a = extmap : 1 urn : ietf : params : rtp - hdrext : ssrc - audio - level a = extmap : 2 http : //www.webrtc.org/experiments/rtp-hdrext/abs-send-time a = extmap : 3 http : //www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01 a = sendrecv a = rtcp - mux a = rtpmap : 111 opus / 48000 / 2 a = rtcp - fb : 111 transport - cc a = fmtp : 111 minptime = 10 ; useinbandfec = 1 a = rtpmap : 9 G722 / 8000 a = rtpmap : 0 PCMU / 8000 a = rtpmap : 8 PCMA / 8000 a = rtpmap : 110 telephone - event / 48000 a = rtpmap : 126 telephone - event / 8000 a = ssrc : 3407645770 cname : bg8KQDoIk2UJa6sf a = ssrc : 3407645770 msid : 798a9670 - c0d6 - 47a8 - 925e-5f082ef4d8a0 audio #nuxVMf9EAJX a = ssrc : 3407645770 mslabel : 798a9670 - c0d6 - 47a8 - 925e-5f082ef4d8a0 a = ssrc : 3407645770 label : audio #nuxVMf9EAJXОбразцы структур SDP, инициированные пользователем
Пример структуры предложения SDP
v = 0 o =- 7602563789789945080 2 IN IP4 127.0 . 0.1 s =- t = 0 0 a = group : BUNDLE audio a = msid - semantic : WMS 6932bc1c - db1a - 4abe - b437 - 0c4168be8a13 a = ice - lite m = audio 40012 UDP / TLS / RTP / SAVPF 111 126 c = IN IP4 31.13 . 65.60 a = rtcp : 9 IN IP4 0.0 . 0.0 a = candidate : 1972637320 1 udp 2113937151 31.13 . 65.60 40012 typ host generation 0 network - cost 50 ufrag 6k2qP1R6kBfI / 2 a = candidate : 1652262791 1 udp 2113939711 2a03 : 2880 : f211 : cf : face : b00c : 0 : 6443 40012 typ host generation 0 network - cost 50 ufrag 6k2qP1R6kBfI / 2 a = ice - ufrag : 6k2qP1R6kBfI / 2 a = ice - pwd : UApvJw3NcwFRDvIMKdM0vWCdlXah25E9 a = fingerprint : sha - 256 1B : B6 : 6B : 40 : A5 : 0B : 8C : 75 : 0D : 8C : CB : 90 : 2F : 99 : 74 : 1E : 26 : 45 : AE : AF : 45 : C1 : 51 : 60 : 8F : 73 : C9 : 2D : 10 : 6D : 8A : 88 a = setup : actpass a = mid : audio a = extmap : 1 urn : ietf : params : rtp - hdrext : ssrc - audio - level a = extmap : 2 http : //www.webrtc.org/experiments/rtp-hdrext/abs-send-time a = extmap : 3 http : //www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01 a = sendrecv a = rtcp - mux a = rtpmap : 111 opus / 48000 / 2 a = rtcp - fb : 111 transport - cc a = fmtp : 111 minptime = 10 ; useinbandfec = 1 a = rtpmap : 126 telephone - event / 8000 a = ssrc : 4208138518 cname : gAXq2V9TKltrnapv a = ssrc : 4208138518 msid : 6932bc1c - db1a - 4abe - b437 - 0c4168be8a13 audio #R5wfXFcdmT6 a = ssrc : 4208138518 mslabel : 6932bc1c - db1a - 4abe - b437 - 0c4168be8a13 a = ssrc : 4208138518 label : audio #R5wfXFcdmT6Пример структуры ответа SDP
v = 0 o =- 2822644248144643933 2 IN IP4 127.0 . 0.1 s =- t = 0 0 a = group : BUNDLE audio a = msid - semantic : WMS eb909cf0 - 87f0 - 4358 - a4c9 - 7861680d9431 m = audio 9 UDP / TLS / RTP / SAVPF 111 126 c = IN IP4 0.0 . 0.0 a = rtcp : 9 IN IP4 0.0 . 0.0 a = ice - ufrag : X1ho a = ice - pwd : 7fJSbV2N5qWiA5QiDKwK3vuh a = fingerprint : sha - 256 2E : 35 : 9F : 21 : 9E : 63 : 72 : E5 : 42 : 74 : 76 : 2D : B3 : 70 : F7 : CB : 24 : 14 : 9B : 14 : 52 : 71 : 05 : 48 : DA : 4D : 67 : 31 : 09 : 58 : 2A : ED a = setup : active a = mid : audio a = extmap : 1 urn : ietf : params : rtp - hdrext : ssrc - audio - level a = extmap : 2 http : //www.webrtc.org/experiments/rtp-hdrext/abs-send-time a = extmap : 3 http : //www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01 a = sendrecv a = rtcp - mux a = rtpmap : 111 opus / 48000 / 2 a = rtcp - fb : 111 transport - cc a = fmtp : 111 minptime = 10 ; useinbandfec = 1 a = rtpmap : 126 telephone - event / 8000 a = ssrc : 330833028 cname : EDc1JutBl8rwHQc2 a = ssrc : 330833028 msid : eb909cf0 - 87f0 - 4358 - a4c9 - 7861680d9431 ea478c16 - d9f7 - 493c - 8cec - 19bfac750a36Примеры запросов cURL
Новый звонок
curl -i -X POST 'https://graph.facebook.com/v14.0/1234567890/calls' \ -H ' Content-Type: application/json' \ -H ' Authorization: Bearer EAADUMAze4GIBO1B7B ..... ' \ - d '{ "messaging_product": "whatsapp", "to": "14085550000", "session": { "sdp": "v=0\r\no=- 7669997803033704573 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS 3c28addc-03b7-4170-b5cd-535bfe767e75\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 63 9 0 8 110 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:6O0H\r\na=ice-pwd:TYCbtfOrBMPpfxFRgSbYnuTI\r\na=ice-options:trickle\r\na=fingerprint:sha-256 9F:45:2C:A8:C3:C0:CC:9B:59:4F:D1:02:56:52:FA:36:00:BE:C0:79:87:B3:D9:9C:3E:BF:60:98:25:B4:26:FC\r\na=setup:active\r\na=mid:0\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=sendrecv\r\na=msid:3c28addc-03b7-4170-b5cd-535bfe767e75 38c455bc-3727-4129-b336-8cd2c6a68486\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:111 opus/48000/2\r\na=rtcp-fb:111 transport-cc\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=rtpmap:63 red/48000/2\r\na=fmtp:63 111/111\r\na=rtpmap:9 G722/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:110 telephone-event/48000\r\na=rtpmap:126 telephone-event/8000\r\na=ssrc:2430753100 cname:MPddPt/R2ioP4vCm\r\na=ssrc:2430753100 msid:3c28addc-03b7-4170-b5cd-535bfe767e75 38c455bc-3727-4129-b336-8cd2c6a68486\r\n", "sdp_type": "answer" } }'Завершить вызов
curl -i -X POST 'https://graph.facebook.com/v14.0/1234567890/calls' \ -H ' Content-Type: application/json' \ -H ' Authorization: Bearer EAADUMAze4GIBO1B7B ..... ' \ - d '{ "messaging_product": "whatsapp", "action": "terminate", "call_id": "wacid.HBgLMTY1MDMxMzM5NzQVAgARGCBFRjNEODRBM0Q3NDZDM0Q0QzI4MzAwQjZBRkZGODM3NhwYCzEyMjQ1NTU0NDg5FQIAAA" }'Принять звонок
curl -i -X POST 'https://graph.facebook.com/v14.0/1234567890/calls' \ -H ' Content-Type: application/json' \ -H ' Authorization: Bearer EAADUMAze4GIBO1B7B ..... ' \ - d '{ "messaging_product": "whatsapp", "to": "14085550000", "action": "accept", "call_id": "wacid.HBgLMTY1MDMxMzM5NzQVAgASGCA5ODkyMDk2RkM2NUM1QTYwRkM4NjFDQzk0NkQwNDBCRRwYCzEyMjQ1NTU0NDg5FQIAAA==", "session": { "sdp": "v=0\r\no=- 7669997803033704573 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS 3c28addc-03b7-4170-b5cd-535bfe767e75\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 63 9 0 8 110 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:6O0H\r\na=ice-pwd:TYCbtfOrBMPpfxFRgSbYnuTI\r\na=ice-options:trickle\r\na=fingerprint:sha-256 9F:45:2C:A8:C3:C0:CC:9B:59:4F:D1:02:56:52:FA:36:00:BE:C0:79:87:B3:D9:9C:3E:BF:60:98:25:B4:26:FC\r\na=setup:active\r\na=mid:0\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=sendrecv\r\na=msid:3c28addc-03b7-4170-b5cd-535bfe767e75 38c455bc-3727-4129-b336-8cd2c6a68486\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:111 opus/48000/2\r\na=rtcp-fb:111 transport-cc\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=rtpmap:63 red/48000/2\r\na=fmtp:63 111/111\r\na=rtpmap:9 G722/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:110 telephone-event/48000\r\na=rtpmap:126 telephone-event/8000\r\na=ssrc:2430753100 cname:MPddPt/R2ioP4vCm\r\na=ssrc:2430753100 msid:3c28addc-03b7-4170-b5cd-535bfe767e75 38c455bc-3727-4129-b336-8cd2c6a68486\r\n", "sdp_type": "отвечать" } }'Новый вызов (с использованием устаревшего параметра подключения)
curl -i -X POST 'https://graph.facebook.com/v14.0/123456789/calls' \ -H ' Content-Type: application/json' \ -H ' Authorization: Bearer EAADUMAze4GIBO1B7B ..... ' \ - d '{ "messaging_product": "whatsapp", "to": "14085550000", "connection": { "webrtc": { "sdp": "{\"sdp\":\"v=0\\r\\no=- 6314352886888624490 2 IN IP4 127.0.0.1\\r\\ns=-\\r\\nt=0 0\\r\\na=group:BUNDLE 0\\r\\na=extmap-allow-mixed\\r\\na=msid-semantic: WMS ccd3f422-8d7d-49c9-936c-a152979ee4fa\\r\\nm=audio 9 UDP/TLS/RTP/SAVPF 111 63 9 0 8 110 126\\r\\nc=В IP4 0.0.0.0\\r\\na=rtcp:9 В IP4 0.0.0.0\\r\\na=ice-ufrag:/PSS\\r\\na=ice-pwd:buBIz+JlbmakiCT7JdJIq/j0\\r\\na=ice-options:trickle\\r\\na=отпечаток пальца:sha-256 43:08:34:16:67:E3:D9:A2:F5:AA:6A:AE:03:97:C8:D5:B8:F2:4B:40:79:C8:1A:44:53:69:4B:9C:89:88:D7:22\\r\\na=setup:active\\r\\na=mid:0\\r\\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\\r\\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\\r\\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\\r\\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\\r\\na=sendrecv\\r\\na=msid:ccd3f422-8d7d-49c9-936c-a152979ee4fa 4e58b2a9-c864-4752-8f4f-23f9ced35971\\r\\na=rtcp-mux\\r\\na=rtcp-rsize\\r\\na=rtpmap:111 opus/48000/2\\r\\na=rtcp-fb:111 transport-cc\\r\\na=fmtp:111 minptime=10;useinbandfec=1\\r\\na=rtpmap:63 red/48000/2\\r\\na=fmtp:63 111/111\\r\\na=rtpmap:9 G722/8000\\r\\na=rtpmap:0 PCMU/8000\\r\\na=rtpmap:8 PCMA/8000\\r\\na=rtpmap:110 Telephone-event/48000\\r\\na=rtpmap:126 Telephone-event/8000\\r\\na=ssrc:3354317731 cname:zgqSj/r4rlErlW23\\r\\na=ssrc:3354317731 msid:ccd3f422-8d7d-49c9-936c-a152979ee4fa 4e58b2a9-c864-4752-8f4f-23f9ced35971\\r\\n\",\"type\":\"offer\"}" } } }'Пример веб-перехватчика для подключения к вызову
Вызов веб-перехватчика
{ "entry" : [ { "changes" : [ { "field" : "calls" , "value" : { "calls" : [ { "session" : { "sdp_type" : "answer" , "sdp" : "v=0\r\no=- 8076734947255960322 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS 68a296ba-41cc-41db-8edb-3ddf4dbbb483\r\na=ice-lite\r\nm=audio 3482 UDP/TLS/RTP/SAVPF 111 9 0 8 110 126\r\nc=IN IP4 31.13.65.130\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:2754936280 1 udp 2113937151 31.13.65.130 3482 typ host generation 0 network-cost 50 ufrag kv6Jn8vBmEds/8\r\na=candidate:1581496399 1 udp 2113939711 2a03:2880:f211:d1:face:b00c:0:699c 3482 typ host generation 0 network-cost 50 ufrag kv6Jn8vBmEds/8\r\na=ice-ufrag:kv6Jn8vBmEds/8\r\na=ice-pwd:OhY8sT7v6PJe3bbs0Yx2TC/oPb5oatnK\r\na=ice-options:trickle\r\na=fingerprint:sha-256 46:14:2B:31:B1:9D:AF:15:81:E2:EF:45:B1:2B:96:3D:64:0E:63:F1:CC:9A:BD:88:D6:32:8F:E9:2A:13:3A:38\r\na=setup:active\r\na=mid:0\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=sendrecv\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=rtcp-fb:111 transport-cc\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=rtpmap:9 G722/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:110 telephone-event/48000\r\na=rtpmap:126 telephone-event/8000\r\na=ssrc:433528572 cname:VBDcSNi/cg1Wg6D3\r\na=ssrc:433528572 msid:68a296ba-41cc-41db-8edb-3ddf4dbbb483 audio#wx3mq6BITjB\r\na=ssrc:433528572 mslabel:68a296ba-41cc-41db-8edb-3ddf4dbbb483\r\na=ssrc:433528572 label:audio#wx3mq6BITjB\r\n" }, "from" : "15551112222" , "connection" : { "webrtc" : { "sdp" : "{\"sdp\":\"v=0\\r\\no=- 8076734947255960322 2 IN IP4 127.0.0.1\\r\\ns=-\\r\\nt=0 0\\r\\na=group:BUNDLE 0\\r\\na=extmap-allow-mixed\\r\\na=msid-semantic: WMS 68a296ba-41cc-41db-8edb-3ddf4dbbb483\\r\\na=ice-lite\\r\\nm=audio 3482 UDP/TLS/RTP/SAVPF 111 9 0 8 110 126\\r\\nc=IN IP4 31.13.65.130\\r\\na=rtcp:9 IN IP4 0.0.0.0\\r\\na=candidate:2754936280 1 udp 2113937151 31.13.65.130 3482 typ host generation 0 network-cost 50 ufrag kv6Jn8vBmEds/8\\r\\na=candidate:1581496399 1 udp 2113939711 2a03:2880:f211:d1:face:b00c:0:699c 3482 typ host generation 0 network-cost 50 ufrag kv6Jn8vBmEds/8\\r\\na=ice-ufrag:kv6Jn8vBmEds/8\\r\\na=ice-pwd:OhY8sT7v6PJe3bbs0Yx2TC/oPb5oatnK\\r\\na=ice-options:trickle\\r\\na=fingerprint:sha-256 46:14:2B:31:B1:9D:AF:15:81:E2:EF:45:B1:2B:96:3D:64:0E:63:F1:CC:9A:BD:88:D6:32:8F:E9:2A:13:3A:38\\r\\na=setup:active\\r\\na=mid:0\\r\\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\\r\\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\\r\\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\\r\\na=sendrecv\\r\\na=rtcp-mux\\r\\na=rtpmap:111 opus/48000/2\\r\\na=rtcp-fb:111 transport-cc\\r\\na=fmtp:111 minptime=10;useinbandfec=1\\r\\na=rtpmap:9 G722/8000\\r\\na=rtpmap:0 PCMU/8000\\r\\na=rtpmap:8 PCMA/8000\\r\\na=rtpmap:110 telephone-event/48000\\r\\na=rtpmap:126 telephone-event/8000\\r\\na=ssrc:433528572 cname:VBDcSNi/cg1Wg6D3\\r\\na=ssrc:433528572 msid:68a296ba-41cc-41db-8edb-3ddf4dbbb483 audio#wx3mq6BITjB\\r\\na=ssrc:433528572 mslabel:68a296ba-41cc-41db-8edb-3ddf4dbbb483\\r\\na=ssrc:433528572 label:audio#wx3mq6BITjB\\r\\n\",\"type\":\"answer\"}" } }, "id" : "wacid.HBgLMTY1MDMxMzM5NzQVAgARGCAwQTJCRDYwNkEzQUNCQUVCMEFGMzYzRTYxNjMxMDdFMxwYCzE0MDg1NTUyODk5FQIAAA==" , "to" : "16501230000" , "event" : "connect" , "timestamp" : "1724467313" , "direction" : "BUSINESS_INITIATED" } ], "metadata" : { "phone_number_id" : "105615555715855" , "display_phone_number" : "15551112222" }, "messaging_product" : "whatsapp" } } ], "id" : "112735964992110" } ], "object" : "whatsapp_business_account" }