Рассылки по аудитории: описание API & Webhooks
Работа с API
OAuth-авторизация
Для работы с Fasttrack API вам понадобится уникальный access_token
, которым необходимо передавать в заголовке для каждого запроса. Следуйте инструкции ниже, чтобы получить ключ доступа для вашего проекта:
Важно! Временно, приложения клиентов для использования API Fasttrack, регистрируются вручную, через менеджеров проекта.
Шаг 1: Подготовить redirect_uri
redirect_uri
— это URL, на который сервер перенаправит вас после успешной авторизации, передавая временный код (code
). Этот код затем используется приложением для обмена на ключ доступа (access_token
).
Шаг 2: Зарегистрировать приложение
Сообщите менеджеру о том, что планируете использовать Fasttrack API и предоставьте redirect_uri
для регистрации вашего приложения.
Данные о приложении, которые вы получите:
Идентификатор вашего приложения.
Защищённый ключ вашего приложения
Внимание! Параметр client_secret
используется для идентификации и подтверждения подлинности вашего приложения в процессе OAuth-авторизации. Этот параметр является конфиденциальным и должен защищаться так же строго, как и пароли.
Шаг 3: Получить временый код авторизации
Сформируйте URL следующего вида:
Copy https://dashboard.fstrk.io/integrations/oauth/?{параметры}
После знака ?
в URL укажите следующие параметры:
client_id
* – Идентификатор вашего приложения;
redirect_uri
* – URL для получения временного кода авторизации
state
– Произвольная строка, которая будет передана вместе с кодом.
Пример URL:
Copy https://dashboard.fstrk.io/integrations/oauth/?client_id=1&redirect_uri=https://example.com/oauth/&state=dummy
Перейдите по ссылке. Вы попадете на страницу со списком доступных проеков (их может быть несколько). Выберите проект для которого планируете получить access_token
.
Браузер переадресует вас обратно на URL, указанный в параметре redirect_uri
с добавлением параметров state
и временного кода авторизации (code
).
Шаг 5: Получить access_token
POST
/oauth/
Метод для получения access_token
в рамках OAuth-авторизации.
Пример запроса:
Copy curl -X POST \
--location https://dashboard.fstrk.io/api/partners/oauth/ \
--header 'Content-Type: application/json' \
--data '{
"client_id": "<CLIENT_ID>",
"client_secret": "<CLIENT_SECRET>",
"grant_type": "code",
"code": "<CODE>"
}'
При успешном выполнении запроса API возвращает код ответа 200
и JSON-объект с параметром access_token
.
200
Copy {
"access_token" : "string"
}
Формат запросов
API работает по протоколу HTTP(S) и поддерживает методы REST (Representational State Transfer), такие как GET
, POST
, PUT
, PATCH
и DELETE
. Каждый запрос имеет стандартный формат и требует обязательного использования корректных заголовков и параметров.
Базовый URL
Copy https://dashboard.fstrk.io/api/partners/
Заголовки
Каждый запрос к API Fasttrack требует заголовок Authorization
для подтверждения прав доступа. Без этого заголовка сервер не обработает запрос и вернет ошибку.
Copy Authorization : Bearer { access_token }
Для корректной работы с API Fasttrack запросы, которые передают данные, должны содержать заголовок Content-Type. Он указывает, что данные в запросе отправляются в формате JSON.
Copy Content-Type : application/json
Также рекомендуется указывать заголовок Accept, чтобы явно запросить от сервера ответы в формате JSON. Это обеспечивает корректное восприятие данных на стороне клиента.
Copy Accept : application/json
Методы API
Список методов:
GET
/mailings/
– список рассылок
POST
/mailings/
– создание рассылки
GET
/mailings/{ uuid }/
– информация о рассылке
POST
/mailings/{ uuid }/calculate/
– подсчет статистики
POST
/mailings/{ uuid }/stop/
– остановка рассылки
Протестировать API можно через Swagger по ссылке:
https://dashboard.fstrk.io/api/partners/docs/
Для тестирования, необходимо авторизоваться в Fasttrack.
Создание рассылки
Универсальный метод для создания новой рассылки.
Заголовки
Тело запроса application/json
name
(string) * – название рассылки.
Пример: "Моя первая рассылка"
filter_chats
(object) – фильтр пользователей. Укажите условия и критерии, которым должны соответствовать пользователи, чтобы получить рассылку.
Copy {
// ...
"filter_chats" : {
"all" : [
{
"platform" : "Telegram" ,
"type" : "attribute"
} ,
{
"timezone" : "Europe/Moscow" ,
"type" : "profile_attribute"
} ,
{
"pda_agreed__isnull" : false ,
"type" : "profile_tag"
}
]
} ,
// ...
}
content_type
(string) – тип контента.
Значения: "NODE"
"TEXT"
Заметка: используйте значение NODE
для запуска сценария, настроенного на платформе Fasttrack и TEXT
для отправки обычного текстового сообщения.
text
(string) – содержание текстового сообщения.
Copy {
// ...
"content_type" : "TEXT" ,
"text" : "Привет, мир!"
// ...
}
node_name
(string) – название сценария на платформе Fasttrack.
Copy {
...
"content_type" : "NODE" ,
"node_name" : "Сценарий для демо рассылки"
...
}
Заметка: можно использовать параметр node
, если нужно указать ID сценария, а не его название. Название может измениться, а идентификатор постоянный.
node
(integer) – ID сценария на платформе Fasttrack.
Copy {
// ...
"content_type" : "NODE" ,
"node" : 73787
// ...
}
Заполняется для рассылок с типом контента NODE
.
Заметка: если передать в запросе одновременно параметры node
и node_name
, то приоритет будет у параметра node
.
node_get_params
(array) – список параметров для сценария.
Каждый объект в массиве содержит следующие поля:
name
(string) : название параметра
value
(string) : значение параметра
Copy {
// ...
"content_type" : "NODE" ,
"node_name" : "Сценарий для демо рассылки" ,
"node_get_params" : [
{
"name" : "discount_code" ,
"value" : "WELCOME10"
} ,
{
"name" : "campaign_id" ,
"value" : "spring_sale_2024"
}
]
// ...
}
Указанные параметры и их значения будут доступны и могут быть обработаны в контексте выбранного сценария.
customer_filter_field
(string) – идентификатор профиля для рассылок по готовому списку клиентов.
Значения: "UUID"
"EXTERNAL_ID"
"PHONE_NUMBER"
Список идентификаторов может быть передан через файл (см. customer_filter_file
) или сразу в теле запроса (см. customer_filter_array
)
customer_filter_file
(string) – ссылка на файл со списком идентификаторов для рассылок по готовому списку клиентов.
Файл должен быть загружен на S3
Название колонки соответствует значению customer_filter_field
(в нижнем регистре)
Copy {
// ...
"customer_filter_field" : "UUID" ,
"customer_filter_file" : "https://example.com/file.csv"
// ...
}
customer_filter_array
(array) – список идентификаторов для рассылок по готовому списку клиентов.
Copy {
// ...
"customer_filter_field" : "UUID" ,
"customer_filter_array" : [
"f108a674-1160-4049-8a37-eaab83bd9cd4" ,
"7a0b517c-2f0b-407f-87e6-13eb651c32e1"
]
// ...
}
planned_at
(string) – дата и время запуска для отложенных рассылок.
Пример: "2024-09-16T19:41:02.768Z"
regular_cron
(string) – расписание для регулярных рассылок.
Пример: "00 12 * * *"
(рассылка в 12:00 каждый день).
origin
(string) – признак источника рассылки.
Значения: "chat_center"
"system"
Если указать chat_center
, то рассылка будет отправлена всем пользователям, в том числе тем, у кого в момент рассылки открыта сессия с оператором.
Примеры запросов
Ниже приведены примеры запросов, оформленные в формате cURL
. Они демонстрируют различные сценарии использования и настройки параметров для создания рассылок.
1. Рассылки по аудитории: Запуск сценария для пользователей
Copy curl -X POST \
--location https://dashboard.fstrk.io/api/partners/mailings/ \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer { access_token }' \
--data '{
"name": "Название рассылки",
"content_type": "NODE",
"node_name": "Название сценария",
"node_get_params": [
{
"name": "foo",
"type": "string",
"value": "bar"
},
{
"name": "foo1",
"type": "string",
"value": "bar1"
}
]
}'
2. Рассылки по аудитории: Использование фильтра
Copy curl -X POST \
--location https://dashboard.fstrk.io/api/partners/mailings/ \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer { access_token }' \
--data '{
"name": "Название рассылки",
"filter_chats": {
"all": [
{
"platform": "Telegram",
"type": "attribute"
},
{
"timezone": "Europe/Moscow",
"type": "profile_attribute"
},
{
"pda_agreed__isnull": false,
"type": "profile_tag"
}
]
},
"content_type": "TEXT",
"text": "Привет, мир!"
}'
3. Рассылки по аудитории: Отложенная рассылка
Copy curl -X POST \
--location https://dashboard.fstrk.io/api/partners/mailings/ \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer { access_token }' \
--data '{
"name": "Название рассылки",
"content_type": "NODE",
"node_name": "Название сценария",
"planned_at": "2024-09-16T19:41:02.768Z"
}'
4. Рассылки по аудитории: Регулярная рассылка
Copy curl -X POST \
--location https://dashboard.fstrk.io/api/partners/mailings/ \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer { access_token }' \
--data '{
"name": "Название рассылки",
"content_type": "NODE",
"node_name": "Название сценария",
"regular_cron": "00 12 * * *"
}'
5. Рассылки по аудитории: Готовый список клиентов (список в файле)
Copy curl -X POST \
--location https://dashboard.fstrk.io/api/partners/mailings/ \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer { access_token }' \
--data '{
"name": "Название рассылки",
"content_type": "NODE",
"node_name": "Название сценария",
"node_get_params": [
{
"name": "foo",
"type": "string",
"value": "bar"
}
],
"customer_filter_field": "UUID",
"customer_filter_file": "https://example.com/file.csv"
}'
6. Рассылки по аудитории: Готовый список клиентов (список в теле запроса)
Copy curl -X POST \
--location https://dashboard.fstrk.io/api/partners/mailings/ \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer { access_token }' \
--data '{
"name": "Название рассылки",
"content_type": "NODE",
"node_name": "Название сценария",
"node_get_params": [
{
"name": "foo",
"type": "string",
"value": "bar"
}
],
"customer_filter_field": "PHONE_NUMBER",
"customer_filter_array": [
"+79999999998",
"+79999999999"
]
}'
7. Рассылки по аудитории: Доставка сообщений, если открыт чат с оператором
Copy curl -X POST \
--location https://dashboard.fstrk.io/api/partners/mailings/ \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer { access_token }' \
--data '{
"name": "Название рассылки",
"content_type": "NODE",
"node_name": "Название сценария",
"origin": "chat_center"
}'
Результат запроса
При успешном выполнении запроса API возвращает код ответа 201
и JSON-объект с информацией о рассылке, включая полный набор параметров.
Пример ответа:
201
Copy {
"uuid" : "3fa85f64-5717-4562-b3fc-2c963f66afa6" ,
"name" : "string" ,
"state" : "string" ,
"filter_chats" : "string" ,
"content_type" : "TEXT" ,
"source_type" : "PLATFORM" ,
"text" : "string" ,
"node" : 0 ,
"node_name" : "string" ,
"node_get_params" : [
{
"name" : "string" ,
"value" : "string" ,
"type" : "string" ,
"is_edit" : false ,
"param_type" : "GLOBAL"
}
] ,
"origin" : "system" ,
"statistics" : {
"count_planned" : 0 ,
"count_sent" : 0 ,
"count_delivered" : 0 ,
"count_undelivered" : 0 ,
"count_read" : 0 ,
"count_clicked" : 0 ,
"count_jumped_url" : 0 ,
"count_replied" : 0 ,
"count_platforms" : "string"
} ,
"regular_cron" : "string" ,
"created_at" : "2024-11-13T05:22:03.354Z" ,
"planned_at" : "2024-11-13T05:22:03.354Z" ,
"completed_at" : "2024-11-13T05:22:03.354Z" ,
"duration" : "string" ,
"template_whatsapp" : "string" ,
"template_variables" : "string" ,
"phone_numbers_file" : "string" ,
"customer_filter_file" : "string" ,
"customer_filter_field" : "UUID"
}
Список рассылок
Метод для получения списка всех созданных рассылок.
Заголовки
Query-параметры
Кол-во записей, которое вернется в результате запроса. Максимум 100.
Смещение от начала выборки.
Параметры limit
и offset
позволяют контролировать объем возвращаемых данных и навигацию по страницам при выполнении запросов к API.
Пример запроса
Copy curl -X GET \
--location https://dashboard.fstrk.io/api/partners/mailings/?offset= 20 & limit = 20 \
--header 'Authorization: Bearer { access_token }'
Результат запроса
При успешном выполнении запроса API возвращает код ответа 200
и JSON-объект с информацией о рассылке, включая полный набор параметров.
200
Copy {
"count" : 1 ,
"next" : "http://api.example.org/accounts/?offset=300&limit=100" ,
"previous" : "http://api.example.org/accounts/?offset=100&limit=100" ,
"results" : [
{
"uuid" : "3fa85f64-5717-4562-b3fc-2c963f66afa6" ,
"name" : "string" ,
"state" : "string" ,
"filter_chats" : "string" ,
"content_type" : "TEXT" ,
"source_type" : "PLATFORM" ,
"text" : "string" ,
"node" : 0 ,
"node_name" : "string" ,
"node_get_params" : [
{
"name" : "string" ,
"value" : "string" ,
"type" : "string" ,
"is_edit" : false ,
"param_type" : "GLOBAL"
}
] ,
"origin" : "system" ,
"statistics" : {
"count_planned" : 0 ,
"count_sent" : 0 ,
"count_delivered" : 0 ,
"count_undelivered" : 0 ,
"count_read" : 0 ,
"count_clicked" : 0 ,
"count_jumped_url" : 0 ,
"count_replied" : 0 ,
"count_platforms" : "string"
} ,
"regular_cron" : "string" ,
"created_at" : "2024-11-13T05:30:47.345Z" ,
"planned_at" : "2024-11-13T05:30:47.345Z" ,
"completed_at" : "2024-11-13T05:30:47.345Z" ,
"duration" : "string" ,
"template_whatsapp" : "string" ,
"template_variables" : "string" ,
"phone_numbers_file" : "string" ,
"customer_filter_file" : "string" ,
"customer_filter_field" : "UUID"
}
]
}
Информация о рассылке
Copy GET /mailings/{ uuid }/
Метод для получения информации о рассылке по ее идентификатору (UUID).
Заголовки
Path-параметры
Пример запроса
Copy curl -X GET \
--location https://dashboard.fstrk.io/api/partners/mailings/{ uuid } \
--header 'Authorization: Bearer { access_token }'
Результат запроса
При успешном выполнении запроса API возвращает код ответа 200
и JSON-объект с информацией о рассылке, включая полный набор параметров.
200
Copy {
"uuid" : "3fa85f64-5717-4562-b3fc-2c963f66afa6" ,
"name" : "string" ,
"state" : "string" ,
"filter_chats" : "string" ,
"content_type" : "TEXT" ,
"source_type" : "PLATFORM" ,
"text" : "string" ,
"node" : 0 ,
"node_name" : "string" ,
"node_get_params" : [
{
"name" : "string" ,
"value" : "string" ,
"type" : "string" ,
"is_edit" : false ,
"param_type" : "GLOBAL"
}
] ,
"origin" : "system" ,
"statistics" : {
"count_planned" : 0 ,
"count_sent" : 0 ,
"count_delivered" : 0 ,
"count_undelivered" : 0 ,
"count_read" : 0 ,
"count_clicked" : 0 ,
"count_jumped_url" : 0 ,
"count_replied" : 0 ,
"count_platforms" : "string"
} ,
"regular_cron" : "string" ,
"created_at" : "2024-11-13T07:28:50.931Z" ,
"planned_at" : "2024-11-13T07:28:50.931Z" ,
"completed_at" : "2024-11-13T07:28:50.931Z" ,
"duration" : "string" ,
"template_whatsapp" : "string" ,
"template_variables" : "string" ,
"phone_numbers_file" : "string" ,
"customer_filter_file" : "string" ,
"customer_filter_field" : "UUID"
}
Подсчет статистики
Copy POST /mailings/{ uuid }/calculate/
Метод для подсчета статистики для рассылки по ее идентификатору (UUID).
Устаревший метод. Статистика в рассылках по аудиториии проекта обновляется автоматически, поэтому данный метод на сегодняшний день не актуален.
Заголовки
Path-параметры
Пример запроса
Copy curl -X POST \
--location https://dashboard.fstrk.io/api/partners/mailings/{ uuid }/calculate/ \
--header 'Authorization: Bearer { access_token }'
Результат запроса
При успешном выполнении запроса API возвращает код ответа 200
и JSON-объект с информацией о рассылке, включая полный набор параметров.
200
Copy {
"uuid" : "3fa85f64-5717-4562-b3fc-2c963f66afa6" ,
"name" : "string" ,
"state" : "string" ,
"filter_chats" : "string" ,
"content_type" : "TEXT" ,
"source_type" : "PLATFORM" ,
"text" : "string" ,
"node" : 0 ,
"node_name" : "string" ,
"node_get_params" : [
{
"name" : "string" ,
"value" : "string" ,
"type" : "string" ,
"is_edit" : false ,
"param_type" : "GLOBAL"
}
] ,
"origin" : "system" ,
"statistics" : {
"count_planned" : 0 ,
"count_sent" : 0 ,
"count_delivered" : 0 ,
"count_undelivered" : 0 ,
"count_read" : 0 ,
"count_clicked" : 0 ,
"count_jumped_url" : 0 ,
"count_replied" : 0 ,
"count_platforms" : "string"
} ,
"regular_cron" : "string" ,
"created_at" : "2024-11-13T11:13:39.975Z" ,
"planned_at" : "2024-11-13T11:13:39.975Z" ,
"completed_at" : "2024-11-13T11:13:39.975Z" ,
"duration" : "string" ,
"template_whatsapp" : "string" ,
"template_variables" : "string" ,
"phone_numbers_file" : "string" ,
"customer_filter_file" : "string" ,
"customer_filter_field" : "UUID"
}
Остановка рассылки
Copy POST /mailings/{ uuid }/stop/
Метод, который используется, чтобы остановить рассылку, которая уже началась.
Заголовки
Path-параметры
Пример запроса
Copy curl -X POST \
--location https://dashboard.fstrk.io/api/partners/mailings/{ uuid }/stop/ \
--header 'Authorization: Bearer { access_token }'
Результат запроса
При успешном выполнении запроса API возвращает код ответа 200
и JSON-объект с информацией о рассылке, включая полный набор параметров.
200
Copy {
"uuid" : "3fa85f64-5717-4562-b3fc-2c963f66afa6" ,
"name" : "string" ,
"state" : "string" ,
"filter_chats" : "string" ,
"content_type" : "TEXT" ,
"source_type" : "PLATFORM" ,
"text" : "string" ,
"node" : 0 ,
"node_name" : "string" ,
"node_get_params" : [
{
"name" : "string" ,
"value" : "string" ,
"type" : "string" ,
"is_edit" : false ,
"param_type" : "GLOBAL"
}
] ,
"origin" : "system" ,
"statistics" : {
"count_planned" : 0 ,
"count_sent" : 0 ,
"count_delivered" : 0 ,
"count_undelivered" : 0 ,
"count_read" : 0 ,
"count_clicked" : 0 ,
"count_jumped_url" : 0 ,
"count_replied" : 0 ,
"count_platforms" : "string"
} ,
"regular_cron" : "string" ,
"created_at" : "2024-11-13T11:24:25.229Z" ,
"planned_at" : "2024-11-13T11:24:25.229Z" ,
"completed_at" : "2024-11-13T11:24:25.229Z" ,
"duration" : "string" ,
"template_whatsapp" : "string" ,
"template_variables" : "string" ,
"phone_numbers_file" : "string" ,
"customer_filter_file" : "string" ,
"customer_filter_field" : "UUID"
}
Вебхуки
API Fasttrack предоставляет возможность подписаться на уведомления о событиях, которые связаны с отправленными рассылками по аудитории проекта.
Типы событий, связанных с рассылками по аудитории:
Статусы сообщений в рассылке
Реакции на сообщения в рассылке
Настройка уведомлений
Откройте настройки проекта → Раздел "Вебхуки"
Заполните поле [ Endpoint URL ]
Активируйте события MAILING_REACTION
и MAILING_STATE
MAILING_STATE
Cмена статуса отправленного сообщения в рассылке.
Пример события Параметры события
Copy {
"event_type" : "mailing.state" ,
"payload" : {
"profile" : {
"uuid" : "dae05733-3026-4eca-abcf-ed366fc3372b"
} ,
"chat" : {
"uuid" : "dfed60eb-08f2-4672-af6a-d859a350c435"
} ,
"mailing" : {
"uuid" : "a353f441-9f67-42e7-bb28-be3c3fc817b5"
} ,
"message" : {
"state" : "delivered"
}
} ,
"timestamp" : 1651776060.8439758
}
Уникальный идентификатор профиля
Информация о пользователе
Уникальный идентификатор чата
Уникальный идентификатор рассылки
Текущее состояние сообщения
Статусы сообщений
MAILING_REACTION
Реакция на отправленной сообщение в рассылке.
Пример события Параметры события
Copy {
"event_type" : "mailing.reaction" ,
"payload" : {
"uuid" : "04191c1d-e7dd-4572-a544-6eb9c2855a5e" ,
"chat" : {
"uuid" : "a5f14878-bfdc-4af4-8b3c-249f6998f6f4" ,
"platform" : "Telegram"
} ,
"type" : "URL"
} ,
"timestamp" : 1651776060.8439758
}
Уникальный идентификатор события
Информация о пользователе
Уникальный идентификатор чата
Список реакций