Шаг Внешний вызов сохраняет значения из ответа вашего API по правилам в разделе
Сохранить из ответа. Правила срабатывают только при ответе 2xx. Как Polygram разбирает тело
и что считает ошибкой, описано в статье Запросы Polygram к вашему API.
Путь в ответе
| Путь | Что берётся |
|---|---|
data.account.id |
Значение по ключам через точку |
items.0.id |
Элемент массива по номеру, с нуля |
@status |
Код ответа, например 201 |
| пусто | Весь ответ: объект, массив или текст |
Если по пути ничего нет, или там null, или пустая строка, правило пропускается и прежнее
значение не затирается.
Пример ответа:
{
"data": {
"account": { "id": 1042, "username": "ivan.petrov" }
},
"items": [{ "id": "A-7" }]
}
| Путь | Значение |
|---|---|
data.account.id |
1042 |
data.account.username |
"ivan.petrov" |
items.0.id |
"A-7" |
data.account.email |
правило пропускается |
Куда сохраняется
В переменную
Значение попадает в $vars.<ключ> и доступно следующим шагам этого запуска: в теле
следующего запроса, в условиях, в тексте уведомления. В карточку клиента оно не записывается.
В поле контакта
Значение записывается в поле карточки клиента <ключ> и доступно как $contact.custom.<ключ>
в этом и следующих workflow. Объект и массив сохраняются как есть.
Если у правила есть название, а такого поля в настройках ещё нет, Polygram создаст поле с этим названием: числовое, если пришло число, иначе текстовое. Существующее поле Polygram не меняет.
В список контакта
Поле-список хранит у клиента несколько записей, например несколько аккаунтов в вашей CRM.
Правило указывает поле (crm_accounts) и колонку (id). Правила с одним и тем же полем
собираются в одну запись:
| Путь в ответе | Куда | Поле | Колонка |
|---|---|---|---|
data.account.id |
в список контакта | crm_accounts |
id |
data.account.username |
в список контакта | crm_accounts |
username |
Ответ из примера выше добавит клиенту запись:
{ "id": "1042", "username": "ivan.petrov" }
- В список пишутся только строки, числа и да/нет, и все они сохраняются строкой: из
1042получится"1042". Объект, массив иnullпропускаются. - Если поля
crm_accountsещё нет, Polygram создаст поле-список. Колонки берутся из правил по порядку, первая колонка (id) становится уникальной. - Если у клиента уже есть запись с таким же значением уникальной колонки, Polygram её обновит. Иначе добавит запись в конец списка.
- Если запись с таким значением уникальной колонки есть у другого клиента, Polygram её
не сохранит, и шаг пойдёт по выходу Ошибка с текстом
«1042» уже привязан к другому контакту (Иван Петров). - Если поле с этим ключом есть, но оно не список, шаг пойдёт по выходу Ошибка с текстом
Поле контакта «…» — не список, записи в него не добавить.
Обе ошибки возникают после ответа вашего API. Если у шага включено Выполнять один раз, операция считается выполненной, и следующий запуск пойдёт по выходу Уже выполнено.
Записи списка видны в карточке клиента. По колонке списка клиента можно найти во входящем API:
"match": { "field": "crm_accounts.id", "value": "1042" }, см.
Поставить тег.
Однократные операции
Если операция уже выполнена и запрос не отправляется, восстанавливаются только значения, сохранённые в переменную из первого ответа. Поля и списки клиента записаны ещё в первый раз.
Показ сотруднику
Шаг Показать сотруднику открывает окно с данными из переменной запуска. Чтобы показать
ответ вашего API целиком, в шаге Внешний вызов сохраните пустой путь в переменную,
например crm_info, и выберите $vars.crm_info в шаге Показать сотруднику.
Окно открывается у сотрудника, который нажал кнопку workflow. Если workflow запустил не сотрудник, окно получит ответственный за диалог. Окно работает в веб-версии и в мобильном приложении.
Готовая карточка
Если ответ совпадает с форматом карточки, окно строится точно по нему:
{
"title": "Аккаунт ivan.petrov",
"url": "https://crm.example.com/accounts/1042",
"sections": [
{
"title": "Аккаунт",
"items": [
{ "label": "ID", "value": "1042" },
{ "label": "Логин", "value": "ivan.petrov" },
{ "label": "Заказ", "value": "№ 5531", "href": "https://crm.example.com/orders/5531" }
]
},
{
"title": "Последние заказы",
"table": {
"columns": ["Номер", "Статус", "Сумма"],
"rows": [
["5531", "Отправлено", "12 400"],
["5480", "Доставлено", "8 900"]
]
}
}
]
}
| Поле | Тип | Обязательное | Что делает |
|---|---|---|---|
title |
string | нет | Подзаголовок окна, рядом с именем клиента |
url |
string | нет | Ссылка внизу окна. Только http:// и https:// |
sections |
array | да | Разделы окна, по порядку |
sections[].title |
string | нет | Заголовок раздела |
sections[].items |
array | нет | Строки с подписью и значением |
items[].label |
string | да | Подпись |
items[].value |
string | да | Значение. Строка с пустым значением не показывается |
items[].href |
string | нет | Делает значение ссылкой. Только http:// и https:// |
sections[].table |
object | нет | Таблица: в columns заголовки, в rows строки из ячеек |
Все значения, включая ячейки таблицы, должны быть строками. Если хотя бы одно поле другого типа
(например, "value": 1042), ответ не считается карточкой и раскладывается по общим правилам ниже.
Заголовок окна задаётся в шаге Показать сотруднику. Если он пуст, берётся подпись кнопки или название workflow.
Значение без ссылки сотрудник копирует нажатием, в мобильном приложении долгим нажатием.
Любой другой ответ
Ответ другого вида Polygram раскладывает так:
- простые поля верхнего уровня идут первым разделом, по строке на ключ;
- вложенный объект становится отдельным разделом с ключом в заголовке, у более глубоких
уровней подписи через точку:
address.city; - массив объектов становится таблицей, колонками служат ключи объектов;
- массив простых значений выводится одной строкой через запятую;
trueиfalseпоказываются как да и нет;nullи пустые строки не показываются;- текстовый ответ выводится одной строкой с подписью Ответ.
Подписями служат ключи JSON как есть. Чтобы сотрудник видел русские подписи, отдавайте ответ в формате карточки.
Ограничения
| Что | Предел |
|---|---|
| Разделов | 30 |
| Строк в разделе | 100 |
| Строк таблицы | 200 |
| Колонок таблицы | 20 |
| Длина текста | 1000 символов, дальше обрезается |
Если разделов нет, в окне написано Данных нет. Если workflow остановился до показа, в окне
будет текст ошибки, см. Как отдать ошибку.