Отправить текстовое сообщение
Отправляет текстовое сообщение. message.text не может быть пустым; provider_data содержит специфичные поля, а цитируемый ответ использует reply_to верхнего уровня. Необязательный непрозрачный дескриптор ответа WhatsApp, возвращаемый, когда канал предоставляет идентификатор сообщения, на который можно ответить. Это не id родительского сообщения.
https://api.unifyport.ai/v1/messagesЗаголовки
X-Api-KeyAPI-ключ рабочей области. Рабочая область определяется по этому заголовку.
Content-TypeИспользуйте application/json при отправке JSON-тела запроса.
Параметры пути
У этого эндпоинта нет параметров пути.
Тело запроса
account_idАккаунт провайдера, отправляющий сообщение.
minLength: 1
toobjectобязательноПолучатель: id и type.
toПолучатель: id и type.
idИдентификатор получателя на стороне провайдера.
minLength: 1
typeТип получателя: user, group или channel.
enum: user, group, channel
messageobjectобязательноНормализованный payload сообщения. Текст — message.text, медиа — message.url.
messageНормализованный payload сообщения. Текст — message.text, медиа — message.url.
typeТип сообщения: text, image, video, audio, document, file или contact.
enum: text, image, video, audio, document, file, contact
textНепустой текст, обязательный при message.type=text.
minLength: 1
captionНеобязательная подпись для image, video, document или file.
urlНепустой абсолютный HTTP(S) URL; медиа требует url, file_url или file_key.
format: uri · pattern: ^[Hh][Tt][Tt][Pp][Ss]?://
file_urlНепустой альтернативный абсолютный HTTP(S) URL; медиа требует один источник.
format: uri · pattern: ^[Hh][Tt][Tt][Pp][Ss]?://
file_keyНепустая ссылка на файл провайдера или хранилища; медиа требует один источник.
minLength: 1
contacts[]object[]Непустой массив карточек, обязательный при message.type=contact.
minItems: 1
contacts[]Непустой массив карточек, обязательный при message.type=contact.
minItems: 1
nameНепустое отображаемое имя, обязательное для каждой карточки.
minLength: 1
phones[]object[]Телефонные номера в карточке контакта.
phones[]Телефонные номера в карточке контакта.
numberНомер телефона; обязателен для каждой записи phone.
typeНеобязательная метка телефона, например CELL или WORK.
emails[]object[]Адреса электронной почты в карточке контакта.
emails[]Адреса электронной почты в карточке контакта.
addressАдрес электронной почты; обязателен для каждой записи email.
format: email
typeНеобязательная метка электронной почты, например WORK или HOME.
organizationНеобязательное название организации контакта.
titleНеобязательная должность контакта.
provider_dataobjectОпции провайдера, например parse_mode для Telegram или seconds для WhatsApp audio / video как неотрицательное целое. Только для video допустим диапазон от 0 до 4294967295; waveform остаётся доступным только для audio. Для ответа с цитатой используйте reply_to верхнего уровня.
provider_dataОпции провайдера, например parse_mode для Telegram или seconds для WhatsApp audio / video как неотрицательное целое. Только для video допустим диапазон от 0 до 4294967295; waveform остаётся доступным только для audio. Для ответа с цитатой используйте reply_to верхнего уровня.
secondsНеобязательная длительность сообщений WhatsApp audio и video в секундах как неотрицательное целое. Только для video допустим диапазон от 0 до 4294967295.
minimum: 0
waveformНеобязательные данные waveform для сообщений WhatsApp типа audio. Непустые значения должны использовать стандартную кодировку Base64 и после декодирования быть разбираемыми JSON-данными waveform; пустая строка считается отсутствием значения, а другие ошибки формата возвращают HTTP 400 provider_invalid_request.
reply_toobjectЦель цитируемого ответа. Скопируйте data.message.reply_token из входящего webhook без изменений в reply_to.reply_token запроса отправки.
reply_toЦель цитируемого ответа. Скопируйте data.message.reply_token из входящего webhook без изменений в reply_to.reply_token запроса отправки.
reply_tokenНепрозрачный токен ответа, скопированный без изменений из data.message.reply_token входящего webhook.
minLength: 1
mentions[]object[]Список целей @ для группового сообщения. type=member использует соответствующий id участника Provider; type=all означает @всех и действует только при поддержке Provider, иначе возвращается unsupported_message_type.
mentions[]Список целей @ для группового сообщения. type=member использует соответствующий id участника Provider; type=all означает @всех и действует только при поддержке Provider, иначе возвращается unsupported_message_type.
typeТип цели @. Если опустить, для совместимости со старыми запросами считается member; type=member требует id, а type=all передается без id и применим только к групповым чатам.
enum: member, all
idИдентификатор участника Provider, обязательный при type=member.
minLength: 1
Тело ответа
message_idИдентификатор сообщения UnifyPort (msg_...) для принятого сообщения.
account_idАккаунт провайдера, к которому относится этот ответ.
statusСтатус приёма; accepted означает, что сообщение поставлено в очередь на доставку провайдеру.
provider_refСсылка на сообщение на стороне провайдера, как только провайдер её назначит.
reply_tokenНеобязательный непрозрачный дескриптор ответа WhatsApp, возвращаемый, когда канал предоставляет идентификатор сообщения, на который можно ответить. Это не id родительского сообщения.
Ответы
200Запрос выполнен. См. пример тела ответа.
400Тело запроса, путь или параметры некорректны.
401Заголовок X-Api-Key отсутствует или недействителен.
409Запрошенная операция конфликтует с существующим аккаунтом провайдера или ресурсом.
500Сервис столкнулся с неожиданной ошибкой.
501Выбранный провайдер не реализует эту операцию.
502Адаптер или вышестоящий провайдер не смог завершить операцию.
Запрос
curl -X POST https://api.unifyport.ai/v1/messages \
-H "X-Api-Key: <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"account_id": "acc_example",
"to": {
"id": "user_example",
"type": "user"
},
"message": {
"type": "text",
"text": "Hello from UnifyPort"
},
"provider_data": {
"parse_mode": "markdown"
}
}'Ответ
{
"data": {
"message_id": "msg_example",
"account_id": "acc_example",
"status": "accepted",
"provider_ref": "provider_msg_example",
"reply_token": "<opaque WhatsApp reply handle>"
}
}