Быстрый старт
Интегрируйте виджет WritesApp на ваш сайт за 5 минут
Создайте аккаунт
Зарегистрируйтесь бесплатно и создайте свой первый виджет в личном кабинете.
Создать аккаунтНастройте виджет
Выберите каналы связи, настройте внешний вид и триггеры показа.
Добавьте код на сайт
Скопируйте embed-код и вставьте перед закрывающим тегом </body>
<script src="https://writesapp.ru/widget.js"
data-widget-id="YOUR_WIDGET_ID"
async>
</script>Установка виджета
Виджет загружается асинхронно и не блокирует загрузку страницы.
Базовая установка
<!-- Вставьте перед </body> -->
<script
src="https://writesapp.ru/widget.js"
data-widget-id="clx123abc456"
async>
</script>Атрибуты
| Атрибут | Обязат. | Описание |
|---|---|---|
data-widget-id | Да | ID вашего виджета |
data-lazy | Нет | Ленивая загрузка |
data-container | Нет | CSS селектор |
JavaScript API
Управляйте виджетом программно:
// Открыть виджет
window.WritesApp.open();
// Закрыть виджет
window.WritesApp.close();
// Установить пользовательские данные
window.WritesApp.setUser({
name: "Иван",
email: "ivan@example.com"
});
// Событие при клике
window.WritesApp.on('click', (channel) => {
console.log('Клик по каналу:', channel);
});Аутентификация
Все запросы к REST API должны содержать API ключ в заголовке Authorization.
Authorization: Bearer wa_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxПолучение API ключа
API ключ доступен в тарифе Business. Создайте ключ в настройках аккаунта.
Scopes (права доступа)
| Scope | Описание |
|---|---|
widgets:read | Чтение списка и настроек |
widgets:write | Создание и редактирование |
analytics:read | Чтение аналитики |
Виджеты
Управление виджетами через REST API.
/api/v1/widgetsПолучить список всех виджетов аккаунта
Параметры запроса
page | Номер страницы (по умолчанию 1) |
limit | Количество на странице (макс. 100) |
curl -X GET "https://writesapp.ru/api/v1/widgets?page=1&limit=10" \
-H "Authorization: Bearer wa_your_api_key"Пример ответа
{
"data": [
{
"id": "clx123abc456",
"name": "Основной виджет",
"domain": "example.com",
"isActive": true,
"eventsCount": 1234,
"createdAt": "2024-01-01T00:00:00.000Z",
"updatedAt": "2024-01-15T12:00:00.000Z"
}
],
"pagination": {
"page": 1,
"limit": 10,
"total": 1,
"totalPages": 1
}
}/api/v1/widgetsСоздать новый виджет
curl -X POST "https://writesapp.ru/api/v1/widgets" \
-H "Authorization: Bearer wa_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Мой виджет",
"domain": "example.com",
"channels": [
{"type": "whatsapp", "value": "79001234567", "label": "WhatsApp"}
],
"config": {
"position": "bottom-right",
"color": "#25D366"
}
}'/api/v1/widgets/:idПолучить полную информацию о виджете включая настройки
curl -X GET "https://writesapp.ru/api/v1/widgets/clx123abc456" \
-H "Authorization: Bearer wa_your_api_key"Пример ответа
{
"data": {
"id": "clx123abc456",
"name": "Основной виджет",
"domain": "example.com",
"isActive": true,
"config": {
"position": "bottom-right",
"size": "medium",
"color": "#25D366",
"style": "classic",
"title": "Напишите нам",
"greeting": "Привет! Чем помочь?"
},
"channels": [
{"type": "whatsapp", "value": "79001234567", "label": "WhatsApp", "device": "all"},
{"type": "telegram", "value": "mycompany", "label": "Telegram", "device": "all"}
],
"triggers": {
"delay": 3,
"scrollPercentage": 50,
"exitIntent": true
},
"targeting": {},
"eventsCount": 1234,
"createdAt": "2024-01-01T00:00:00.000Z",
"updatedAt": "2024-01-15T12:00:00.000Z"
}
}/api/v1/widgets/:idОбновить настройки виджета. Передавайте только изменяемые поля.
curl -X PUT "https://writesapp.ru/api/v1/widgets/clx123abc456" \
-H "Authorization: Bearer wa_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Новое название",
"isActive": false,
"config": {"color": "#FF4B3A"}
}'/api/v1/widgets/:idУдалить виджет и всю связанную аналитику
curl -X DELETE "https://writesapp.ru/api/v1/widgets/clx123abc456" \
-H "Authorization: Bearer wa_your_api_key"Структура данных виджета
channels — Каналы связи
| Поле | Тип | Описание |
|---|---|---|
type | string | whatsapp, telegram, viber, vk, max, phone, email, custom |
value | string | Номер/username/ссылка |
label | string | Название кнопки |
device | string | all, desktop, mobile |
config — Внешний вид
| Поле | Тип | Описание |
|---|---|---|
position | string | bottom-right/left, top-right/left |
size | string | small, medium, large |
style | string | classic, horizontal, bubble, minimal, glass, premium |
color | string | HEX цвет (#25D366) |
title | string | Заголовок виджета |
greeting | string | Приветствие |
offsetX | number | Отступ по X (px) |
offsetY | number | Отступ по Y (px) |
triggers — Условия показа
| Поле | Тип | Описание |
|---|---|---|
delay | number | Задержка показа (сек) |
scrollPercentage | number | При прокрутке (%) |
exitIntent | boolean | При уходе со страницы |
workingHoursEnabled | boolean | Рабочие часы вкл/выкл |
workingHoursStart | string | Начало дня (09:00) |
workingHoursEnd | string | Конец дня (18:00) |
urlMode | string | all, include, exclude |
urls | string | Список URL |
Аналитика
Получение статистики и событий виджетов.
/api/v1/analyticsПараметры запроса
| Параметр | Тип | Описание |
|---|---|---|
widget_id | string | ID виджета (опц.) |
period | string | 1d, 7d, 30d, 90d |
event | string | view, click, channel_click |
channel | string | whatsapp, telegram, viber... |
page | number | Страница (дефолт 1) |
limit | number | Количество (макс. 1000) |
curl -X GET "https://writesapp.ru/api/v1/analytics?period=30d&event=channel_click" \
-H "Authorization: Bearer wa_your_api_key"Пример ответа
{
"data": [
{
"id": "evt_abc123",
"widgetId": "clx123abc456",
"event": "channel_click",
"channel": "whatsapp",
"variant": null,
"timestamp": "2024-01-15T14:30:00.000Z"
}
],
"summary": {
"views": 1500,
"clicks": 320,
"channelClicks": 180
},
"pagination": {
"page": 1,
"limit": 100,
"total": 180,
"totalPages": 2
}
}Типы событий
view | Виджет показан на странице |
click | Пользователь открыл виджет |
channel_click | Переход в мессенджер |
Webhooks
Получайте уведомления о событиях виджета в реальном времени.
Настройка
Укажите URL вебхука в настройках виджета. WritesApp отправит POST-запрос при каждом событии.
Формат запроса
POST https://your-server.com/webhook
Content-Type: application/json
{
"event": "channel_click",
"widgetId": "clx123abc456",
"channel": "whatsapp",
"timestamp": "2024-01-01T12:00:00.000Z",
"visitor": {
"ip": "192.168.1.1",
"userAgent": "Mozilla/5.0...",
"referrer": "https://google.com"
},
"page": {
"url": "https://example.com/product",
"title": "Страница товара"
}
}Типы событий
| Событие | Описание |
|---|---|
widget_view | Виджет показан |
widget_open | Виджет открыт |
channel_click | Клик по каналу |
Лимиты запросов
API имеет ограничения на количество запросов для защиты от злоупотреблений.
| Тариф | Лимит | Окно |
|---|---|---|
| Pro | 100 запр. | 1 мин |
| Business | 1000 запр. | 1 мин |
Заголовки ответа
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1704067200Коды ошибок
API возвращает стандартные HTTP коды ответа.
| Код | Описание | Решение |
|---|---|---|
400 | Неверный запрос | Проверьте параметры |
401 | Не авторизован | Проверьте API ключ |
403 | Запрещён | Недостаточно прав |
404 | Не найдено | Ресурс не существует |
429 | Rate limit | Дождитесь сброса |
500 | Ошибка сервера | Повторите позже |
Формат ошибки
{
"error": {
"code": "INVALID_API_KEY",
"message": "API ключ недействителен или отозван",
"details": null
}
}История изменений
Обновления и изменения в API и платформе.
- +Новый стиль виджета «Premium» с аватаром менеджера
- +Авторизация через Яндекс ID
- +Система поддержки с тикетами
- +FAQ и отзывы клиентов
- ~Улучшена мобильная адаптация
- +Интеграция с Google Analytics и Яндекс.Метрикой
- +Настройка рабочих часов
- +UTM-фильтры для таргетинга
- +Поддержка мессенджера MAX
- +A/B тесты для виджетов
- +Webhooks для событий
- +API ключи в настройках
- ~Rate limit до 1000 req/min для Business
- +Первый релиз WritesApp 2.0
- +REST API v1
- +6 стилей виджетов
- +Аналитика в реальном времени
Нужна помощь?
Свяжитесь с нами, если у вас есть вопросы по интеграции