Перейти к содержанию

Direct WA API

Отправка

Для отправки WHATSAPP-сообщения необходимо вызвать POST /whatsapp/v2/messages, передавая в теле параметры сообщения с указанием данных авторизации в заголовке.

Параметры запроса

Внимание

Поддерживаются сообщения следующих типов: текст, изображения, документы, аудио, видео, шаблоны сообщений, местоположение, список контактов, интерактивные сообщения.

Параметр Тип данных Описание и Допустимые значения
from string Имя отправителя, используемое при отправке сообщения.
Только те имена отправителя, которые доступны для использования у пользователя.
to string Номер телефона в международном формате (без "+")
recipient_type
(optional)
string Тип получателя, которому отправляется сообщение.
Поддерживаемое значение:individual.
callbackUrl
(optional)
string URL, на который система будет отправлять уведомления об изменениях статуса сообщения.
Любой валидный URL со схемой http или https.
callbackData
(optional)
string Данные, которые будут указаны в обратном вызове со статусом сообщения.
preview_url
(optional)
boolean Включение предварительного просмотра URL-адреса.
По умолнию false.
type
(optional)
string Тип отправляемого сообщения.
Необязательный для текстовых сообщений. Обязательный для всех остальных типов сообщений.
Возможные варианты:
-text — значение по умолчанию;
-image;
-audio;
-video;
-document;
-contact;
-location;
-template — используйте для отправки шаблонного сообщения;
-interactive.
text
(optional)
object Обязательно для сообщений типа text.
Содержит объект Text.
audio
(optional)
object Обязательный, если в type установлено значение audio.
Объект Media, содержащий аудио.
document
(optional)
object Обязательный, если в typeустановлено значение document.
Объект Media, содержащий документ.
image
(optional)
object Обязательный, если в type установлено значение image.
Объект Media, содержащий изображение.
video
(optional)
object Обязательный, если в type установлено значение video.
Объект Media, содержащий видео.
contacts
(optional)
array[object] Список контактов, отправленных пользователем.
Обязательный, если в type установлено значение contacts.
В объект Contact можно включить следующие объекты: addresses, emails, name, org, phone и urls.
template
(optional)
object Используется только с шаблонами сообщений.
Содержит объект Template.
location
(optional)
object Обязательный, если в type установлено значение location.
Содержит объект Location.
interactive
(optional)
object Обязательный, если в type установлено значение interactive.
Содержит объект Interactive.

Text

Параметр Тип данных Описание и Допустимые значения
body string Содержит текст сообщения.
Может содержать несколько URL и форматирование.
Максимальная длина текстового сообщения — 4 096 символов.

Пример текстового сообщения:

{
  "from": "MySourceAddress",
  "to": "PhoneNumber",
  "type": "text",
  "text": {
      "body": "your_message_content"
  }
}

Media

Информация

Тело действительного запроса может содержать только один объект (audio, document, image, video)

Параметр Тип данных Описание и Допустимые значения
link string Протокол и URL отправляемого медиафайла.
Используется только для URL с префиксом HTTP или HTTPS.
caption
(optional)
string Название медиафайла.
Используется для медиафайлов типа image или video.
Не используется для файлов audio и document.
filename
(optional)
string Название файла, соответствующее выбранному документу.
Используется только для медиафайлов типа document.
Длина от 1 до 100.

MIMEType

Медиа Поддерживаемые
Content-Type
Расширения файлов Ограничения размера Комментарий
audio audio/acc
audio/mp4
audio/amr
audio/mpeg
audio/ogg
.acc
.mp4
.mp4a
.amr
.mpeg
.ogg
16Mb codecs=opus
document Любой допустимый MIME-тип 100 Mb
image image/jpeg
image/png
.jpeg
.jpg
*.png
5 Mb
video video/mp4
video/3gpp
.mp4
.3gp
*.3g2
16 Mb Поддерживаются только видеокодек H.264 и аудиокодек AAC.
Поддерживаются только видео с одним аудиопотоком.

Пример звукового сообщения:

{
  "from": "MySourceAddress",
  "to": "PhoneNumber",
  "type": "audio",
  "audio": {
      "link": "http(s)://the_url"
  }
}

Пример сообщения с документами:

{
  "from": "MySourceAddress",
  "to": "PhoneNumber",
  "type": "document",
  "document": {
      "link": "http(s)://the_url",
      "filename": "your_document_filename"
  }
}

Пример видеосообщения:

{
  "from": "MySourceAddress",
  "to": "PhoneNumber",
  "type": "video",

  "video": {
      "link": "http(s)://the_url",
      "caption": "your_video_name"
  }
}

Contact

Информация

Может принимать несколько контактов

Параметр Тип данных Описание и Допустимые значения
name object Полное имя контакта (см. объект ContactName)
addresses
(optional)
array[object] Полные адреса контакта (см. объект ContactAddress)
birthday
(optional)
string Строка в формате YYYY-MM-DD
emails
(optional)
array[object] Полные адреса контакта (см. объект ContactEmail)
org
(optional)
object Сведения об организации контакта (см. объект ContactCompany)
phones
(optional)
array[object] Номера телефона контакта (см. объект ContactPhone)
urls
(optional)
array[object] URL контакта (см. объект ContactUrl)

ContactName

Информация

С параметром formatted_name необходимо указать хотя бы одно необязательное значение.

Параметр Тип данных Описание и Допустимые значения
formatted_name string Полное имя в стандартном написании
first_name
(optional)
string Имя
last_name
(optional)
string Фамилия
middle_name
(optional)
string Второе имя или отчество
suffix
(optional)
string Суффикс имени
prefix
(optional)
string Префикс имени

ContactAddress

Параметр Тип данных Описание и Допустимые значения
street
(optional)
string Улица и номер дома
city
(optional)
string Название города
state
(optional)
string Сокращенное название штата
zip
(optional)
string Почтовый индекс
country
(optional)
string Полное название страны
country_code
(optional)
string Двухбуквенный код страны
type
(optional)
string Стандартные значения: HOME, WORK

ContactCompany

Параметр Тип данных Описание и Допустимые значения
company
(optional)
string Название компании, в которой работает контакт
department
(optional)
string Название отдела, в котором работает контакт
title
(optional)
string Должность контакта в компании

ContactEmail

Параметр Тип данных Описание и Допустимые значения
email
(optional)
string Электронный адрес
type
(optional)
string Стандартные значения: HOME, WORK

ContactPhone

Параметр Тип данных Описание и Допустимые значения
phone
(optional)
string Сюда автоматически подставляется значение wa_id в виде отформатированного номера телефона.
type
(optional)
string Стандартные значения:CELL, MAIN, IPHONE, HOME, WORK
wa_id
(optional)
string ID WhatsApp

ContactUrl

Параметр Тип данных Описание и Допустимые значения
url
(optional)
string URL
type
(optional)
string Стандартные значения: HOME, WORK

Пример:

{
    "from": "MySourceAddress",
    "to": "PhoneNumber",
    "type": "contacts",
    "contacts": [
        {
            "name": {
                "formatted_name": "formatted_name 1",
                "first_name": "contact_first_name",
                "last_name": "contact_last_name"
            },
            "emails": [
                {
                    "email": "email@example.com",
                    "type": "WORK"
                }
            ]
        },
        {
            "name": {
                "formatted_name": "formatted_name 2",
                "first_name": "contact_first_name",
                "last_name": "contact_last_name"
            },
            "phones": [
                {
                    "phone": "+74956460054",
                    "type": "WORK"
                }                
            ]
        }
    ]
}

Location

Параметр Тип данных Описание и Допустимые значения
longitude double Географическая долгота точки
Минимальное значение: -180
Максимальное значение: 180
latitude double Географическая широта точки
Минимальное значение: -90
Максимальное значение: 90
name
(optional)
string Название местоположения
address
(optional)
string Адрес местоположения
Отображается, если указан параметр name.

Пример:

{
    "from": "MySourceAddress",
    "to": "PhoneNumber",
    "type": "location",
    "location": {
        "latitude": 74.1182263536133,
        "longitude": 69.9107435105422,
        "address": "location_address",
        "name": "location_name"
    }
}

Template

Параметр Тип данных Описание и Допустимые значения
name string Имя шаблона
language object Объект TemplateLanguage задает язык, на котором может отображаться шаблон. Для шаблонов сообщений с медиафайлами применяется только языковая политика deterministic.
components
(optional)
array[object] Массив объектов TemplateComponent, содержащий параметры сообщения.

TemplateLanguage

Параметр Тип данных Описание и Допустимые значения
policy string Языковая политика, которой должно соответствовать сообщение.
Значение по умолчанию:deterministic.
code
(optional)
string Код используемого языка или региона.
Может задаваться в формате language или language_locale (т. е. en или en_US).

TemplateComponent

Параметр Тип данных Описание и Допустимые значения
type string Описывает тип component.
Значения:header, body, footer, button.
parameters
(optional)
array[object] Массив объектов TemplateComponentParameter, содержащий контент сообщения.
sub_type
(optional)
string Тип создаваемой кнопки.
Значения:quick_reply, url.
Обязательный параметр для типа button.
index
(optional)
string Индекс положения кнопки. Всего можно создать три кнопки с индексами 0-2.
Обязательный параметр для типа button.

TemplateComponentParameter

Параметр Тип данных Описание и Допустимые значения
type string Значения: payload, text, currency, date_time, image, document, video.
Для типа header используются значения:
-text;
-image;
-video;
-document.
Для типа body используются значения:
-text;
-currency;
-date_time.
Для типа footer используются значения:
-text.
Для типа button используются значения:
-text;
-payload.
payload
(optional)
string Заданные разработчиком полезные данные, которые возвращаются при нажатии кнопки вместе с отображаемым на ней текстом.
Обязательный для кнопок quick_reply.
text
(optional)
string Для типа header не более 60 символов с поддержкой переменных.
Для типа body не более 1024 символов с поддержской эмоджи и переменных.
Для типа footer не более 60 символов.
Обязательный для button c sub_type url. Для url предоставленный разработчиком суффикс, который добавляется к заданному URL кнопки. Не более 20 символов.
document
(optional)
object Объект Media, содержащий документ.
В настоящий момент поддерживается только формат PDF.
image
(optional)
object Объект Media, содержащий изображение.
video
(optional)
object Объект Media, содержащий видео.

Информация

В шаблон можно добавлять переменные. Переменные позволяют добавить уникальную информацию, например имя клиента, адрес, номер заказа и т.д. Нумерация переменных начинается с единицы и по возрастанию. Ваш заказ {{1}} на общую сумму {{2}} подтвержден. Где {{1}} и {{2}} - это переменные: 119833 и 2900. Ваш заказ 119833 на общую сумму 2900 подтвержден.

Пример шаблонного сообщения с документами в header, переменными в body, текстом в footer и двумя кнопками:

{
    "from": "MySourceAddress",
    "to": "PhoneNumber",
    "type": "template",
    "template": {
        "name": "template_name",
        "language": {
            "code": "ru",
            "policy": "deterministic"
        },
        "components": [
            {
                "type": "header",
                "parameters": [
                    {
                        "type": "document",
                        "document": {
                            "link": "http(s)://the_url",
                            "filename": "document_name"
                        }
                    }
                ]
            },
            {
                "type": "body",
                "parameters": [
                    {
                        "type": "text",
                        # Variable {{1}}
                        "text": "119833"
                    },
                    {
                        "type": "text",
                        # Variable {{2}}
                        "text": "2900"
                    },
                    {
                        "type": "currency",
                        "currency": {
                            "fallback_value": "$100.99",
                            "code": "USD",
                            "amount_1000": 100990
                        }
                    },
                    {
                        "type": "date_time",
                        "date_time": {
                            "fallback_value": "February 25, 1977",
                            "day_of_week": 5,
                            "day_of_month": 25,
                            "year": 1977,
                            "month": 2,
                            "hour": 15,
                            "minute": 33, #OR
                            "timestamp": 1485470276
                        }
                    }
                ]
            },
            {
                "type": "footer",
                "parameters": [
                    {
                        "type": "text",
                        "text": "text 1"
                    }
                ]
            },
            {
                "type": "button",
                "sub_type": "quick_reply",
                "index": 0,
                "parameters": [
                    {
                        "type": "payload",
                        "payload": "Start"
                    }
                ]
            },
            {
                "type": "button",
                "sub_type": "quick_reply",
                "index": 1,
                "parameters": [
                    {
                        "type": "payload",
                        "payload": "End"
                    }
                ]
            }
        ]
    }
}

Пример шаблонного сообщения с кнопкой, содержащей ссылку с переменной частью:

{
    "from": "MySourceAddress",
    "to": "PhoneNumber",
    "type": "template",
    "template": {
        "name": "template_name",
        "language": {
            "policy": "deterministic",
            "code": "ru"
        },
        "components": [
            {
                "type": "button",
                "sub_type": "url",
                "index": "0",
                "parameters": [
                    {
                        "type": "text",
                        "text": "/start"
                    }
                ]
            }
        ]
    }
}

Interactive

Параметр Тип данных Описание и Допустимые значения
type string Значения:
-list - для сообщений из списка;
-button - для кнопок ответа.
header
(optional)
object Содержимое заголовка, отображаемое вверху сообщения. См. описание объекта InteractiveHeaderheader.
body object Тело сообщения. См. описание объекта InteractiveBodybody.
footer
(optional)
object Нижний колонтитул сообщения. См. описание объекта InteractiveFooter.
action object Действие, которое пользователь должен выполнить, прочитав сообщение. См. описание объекта InteractiveAction.

InteractiveHeader

Параметр Тип данных Описание и Допустимые значения
type string Тип заголовка. Значения:
-text - для сообщений из списка и кнопок ответа;
-video - для кнопок ответа;
-image - для кнопок ответа;
-document - для кнопок ответа.
text
(optional)
string Текст заголовка.
Обязательный параметр, если для параметра type задано значение text.
Максимальная длина 60 символов с поддержкой эмоджи.
video
(optional)
object Обязательный параметр, если для параметра type задано значение video. Содержит объект Media для этого видео.
image
(optional)
object Обязательный параметр, если для параметра type задано значение image. Содержит объект Media для этого видео.
document
(optional)
object Обязательный параметр, если для параметра type задано значение document. Содержит объект Media для этого видео.

InteractiveBody

Параметр Тип данных Описание и Допустимые значения
text string Текст сообщения.
Поддерживаются эмоджи, переменные и ссылки.
Максимальная длина 1024 символа.

InteractiveFooter

Параметр Тип данных Описание и Допустимые значения
text string Содержимое нижнего колонтитула.
Поддерживаются эмоджи, переменные и ссылки.
Максимальная длина 60 символов.

InteractiveAction

Параметр Тип данных Описание и Допустимые значения
button
(optional)
string Содержимое кнопки.
Обязательный параметр, если для параметра type задано значение list.
Это значение не может быть пустой строкой и должно быть уникальным в сообщении.
Эмоджи и переменные не поддерживаются.
Максимальная длина 20 символов.
buttons
(optional)
array[object] Массив объектов InteractiveActionButton.
Обязательный параметр, если для параметра type задано значение button.
Может содержать в себе максимум 3 объекта.
sections
(optional)
array[object] Массив объектов InteractiveActionSection.
Обязательный параметр, если для параметра type задано значение list.
Может содержать в себе максимум 10 объектов.
InteractiveActionButton
Параметр Тип данных Описание и Допустимые значения
type string Значение: reply.
reply object Объект reply содержит в себе:
-title - string - название кнопки. Это значение не может быть пустой строкой и должно быть уникальным в сообщении. Эмоджи и переменные не поддерживаются. Максимальная длина 20 символов.
-id - string - уникальный идентификатор кнопки. Этот ID возвращается в объекте Webhook, когда пользователь нажимает кнопку. Максимальная длина 256 символов.
InteractiveActionSection
Параметр Тип данных Описание и Допустимые значения
title
(optional)
string Заголовок раздела.
Обязательный параметр, если сообщение содержит более одного объекта section.
Максимальная длина 24 символа.
rows
(optional)
array[object] Содержит список строк InteractiveActionSectionRow.
Обязательный параметр, если для параметра type задано значение list.
InteractiveActionSectionRow
Параметр Тип данных Описание и Допустимые значения
title string Заголовок раздела.
Максимальная длина 24 символа.
id string ID.
Максимальная длина 200 символов.
description
(optional)
string Уникальный идентификатор строки. Максимальная длина 72 символа.

Пример интерактивных сообщений из списка:

{
    "from": "MySourceAddress",
    "to": "PhoneNumber",
    "type": "interactive",
    "interactive": {
        "type": "list",
        "header": {
            "type": "text",
            "text": "your_header_content"
        },
        "body": {
            "text": "your_text_message_content"
        },
        "footer": {
            "text": "your_footer_content"
        },
        "action": {
            "button": "button_content",
            "sections": [
                {
                    "title": "your_section_title_content",
                    "rows": [
                        {
                            "id": "unique_row_identifier",
                            "title": "row_title_content",
                            "description": "row_description_content"
                        }
                    ]
                },
                {
                    "title": "your_section_title_content",
                    "rows": [
                        {
                            "id": "unique_row_identifier",
                            "title": "row_title_content",
                            "description": "row_description_content"
                        }
                    ]
                }
            ]
        }
    }
}

Пример интерактивных сообщений для кнопок ответа:

{
    "from": "MySourceAddress",
    "to": "PhoneNumber",
    "type": "interactive",
    "interactive": {
        "type": "button",
        "body": {
            "text": "your_text_body_content"
        },
        "action": {
            "buttons": [
                {
                    "type": "reply",
                    "reply": {
                        "id": "unique_postback_id",
                        "title": "First Button’s Title"
                    }
                },
                {
                    "type": "reply",
                    "reply": {
                        "id": "unique_postback_id",
                        "title": "Second Button’s Title"
                    }
                }
            ]
        }
    }
}

Пример запроса

curl -X POST  'https://api.devino.online/whatsapp/v2/messages' \
 -H 'Authorization: Key AAaaAAAaaaaaaAAaAAAaa0AaAA==' \
 -H 'Content-Type: application/json' \
 -H 'X-Api-Key: 00a00aaa-a00a-0000-0000-a000aa00a000'\
 -d '{
     "from": "MySourceAddress",
     "to": "PhoneNumber",
     "type": "template",
     "template": {
         "name": "template_name",
         "language": {
             "code": "ru",
             "policy": "deterministic"
         }
     }
}

Пример запроса отправки нескольких сообщений

curl -X POST  'https://api.devino.online/whatsapp/v2/messages/batch' \
 -H 'Authorization: Key AAaaAAAaaaaaaAAaAAAaa0AaAA==' \
 -H 'Content-Type: application/json' \
 -H 'X-Api-Key: 00a00aaa-a00a-0000-0000-a000aa00a000'\
 -d '{
    "messages": [
        {
            "from": "MySourceAddress",
            "to": "PhoneNumber",
            "text": "your_message_content",
            "callbackUrl": "http://the_url"
        },
        {
            "from": "MySourceAddress",
            "to": "PhoneNumber",
            "text": "your_message_content",
            "callbackUrl": "http://the_url"
        }
    ]
}

Пример ответа

{
    "result": [
        {
            "code": "OK",
            "messageId": "3482512350952730368"
        }        
    ]
}

Параметры ответа

Параметр Тип данных Описание и допустимые значения
code string Указывает на результат обработки сообщения.
1. OK - Успешно обработано
2. REJECTED - Произоошла ошибка во время обработки запроса.
reasons
(optional)
Array[String, String] Массив ошибок, произошедших во время обработки сообщения.
Указывается только при code=REJECTED
reasons.key string Код ошибки.
reasons.ref
(optional)
string Ссылка на параметр, в котором произошла ошибка.
messageId
(optional)
string Идентификатор сообщения.
Указывается только при code=OK
description
(optional)
string Описание ошибки.
Указывается только при code=REJECTED

Коды ошибок

Key Ref Описание
billing.error Payment is required
forbidden Отправка запрещена
unknown Unknown error
invalid messages[i].to Неправильно указан номер телефона
invalid messages[i].validity Неправильно указан срок жизни
invalid messages[i].callbackUrl Неправильно указан URL
invalid messages[i].contentUrl Неправильно указан URL контента
invalid messages[i].contentType Неправильно тип контента
invalid messages[i].from Неправильно указан отправитель
invalid messages[i].languageCode Неправильно указан код языка
length.too.long messages[i].to Превышена максимальная длина номера телефона
length.too.long messages[i].text Превышена максимальная длина текста сообщения
length.too.long messages[i].languageCode Слишком длинный код языка
length.too.short messages[i].contentName Слишком короткое имя контента
length.too.short messages[i].languageCode Слишком короткий код языка
must.be.not.null messages[i].to Получатель не указан
must.be.not.null messages Массив messages не может быть пустым
must.be.not.null messages[i].from Отправитель не указан
must.be.not.null messages[i] Поле текста и контента не указано
not.available messages[i].from некорректный адрес отправителя
too.many.messages messages Превышен максимальный размер массива messages

Коды ошибок WhatsApp API

Webhook статусов

Для получения статусов WHATSAPP-сообщений необходимо при отсылке сообщения методом POST /whatsapp/v2/messages указать параметр callbackUrl.

Параметры получения статуса

Параметр Тип данных Описание
messageId long Индификатор сообщения
ts long Timestamp с миллисекундами получения статуса
status string Статус сообщения
errorCode integer Код ошибки
ip string IP адрес
browser string Имя браузера
os string Название операционной системы
userAgent string UserAgent
options string Данные, которые были указаны в callbackData при отправке запроса

Пример получения статуса

[
    {
        "messageId": 1,
        "ts": 0,
        "status": "DELIVERED",
        "errorCode": 0,
        "ip": "127.0.0.1",
        "browser": "string",
        "os": "string",
        "userAgent": "string",
        "options": "string"
    }
]

Коды ошибок

Код Описание
2000 Не определен оператор получателя
2001 Отклонено как спам
2002-2004 Ошибка тарификации
2005 Недостаточно средств
2006-2008 Ошибка тарификации
2009 Отклонено как дубликат
2010, 2011 Исткело время жизни
2012 Ошибка тарификации
2017 Отклонено как спам
2300 Превышен лимит длины текста сообщения
2301 За короткий промежуток времени было отправлено слишком много сообщений. Повторите отправку
2302 Отклонено как спам
2303 Указанный MIME-Type не поддерживается или изображение слишком больше (более или равно 5МБ)
2304 Превышен лимит длины текста сообщения
2305 Пользователь не использовал или более не использует WhatsApp
2307 Возникает при попытке отправить сообщение на номер телефона бизнес-аккаунта, с которого производится отправка
2308 Количество указанных параметров шаблона не соответствует их ожидаемому количеству
2309, 2310 Шаблон не существует для указанного языка или локали
2311 Превышение длины параметра шаблона
2312 Сообщение отправлено вне диалога и без указания шаблона
2313 Неизвестная ошибка

Webhook входящих сообщений

Внимание

Для получения входящих WhatsApp-сообщений необходимо:

  • связаться с менеджером компании или обратиться в техническую поддержку,
  • сообщить URL, на который система будет отправлять входящие WhatsApp-сообщения.

Параметры получения входящего сообщения

Параметр Тип данных Описание
incomingMessageId long Индификатор сообщения
to string Адрес получателя
from string Адрес отправителя
ts long Timestamp с миллисекундами получения сообщения
text
(optional)
string Текст сообщения
contentUrl
(optional)
string URL на контент в сообщении
contentType
(optional)
string Тип контента в сообщении
contentName
(optional)
string Имя контента в сообщении
profileName
(optional)
string Имя профиля отправителя
whatsAppGeoLocation
(optional)
WhatsAppGeolocation Содержит в себе геопозицию, отправленную пользователем
whatsAppContacts
(optional)
List[WhatsAppContact] Список контактов, отправленных пользователем

WhatsAppGeolocation

Информация

Входящие сообщения с текущими геоданными в настоящее время не поддерживаются.

Параметр Тип данных Описание
latitude double Широта
longitude double Долгота
address string Адрес, по которому находится пользователь
addressName string Название местонахождения пользователя
addressurl string URL, откуда пользователь получил свои геоданные

WhatsAppContact

Информация

Все элемены Массивов имеют тип данных string.

Параметр Тип данных Описание
addresses Массив Полные адреса контакта. Каждый адрес может содержать поля street, city, state, zip, country, countryCode и type.
birthday string День рождения контакта в формате YYYY-MM-DD.
emails Массив Email-адреса. Каждый адрес может содержать email и type.
contactName Массив Полное имя контакта. Каждый объект contactName может содержать поля firstName, middleName, lastName, formattedName, namePrefix и nameSuffix.
contactCompany Массив Информация о месте работы контакта. Каждый объект может содержать поля company, department и title.
phones Массив Номера телефонов контакта. Каждый объект может содержать поля phone, waId и type.
urls Массив URL контакта. Каждый объект может содержать поля url и type.

Пример получения входящего сообщения

{
    "incomingMessageId": 0,
    "to": "str",
    "from": "str",
    "text": "str",
    "contentUrl": "str",
    "contentType": "str",
    "contentName": "str",
    "profileName": "str",
    "ts": 0
}