Чат на сайте настраивается тем же методом setSettings, что и другие каналы, — ключами site…. Те же настройки есть в кабинете, в карточке канала. Текущие значения со всеми умолчаниями возвращает getSettings.
Настройки доходят до окна за секунды: окно берёт их при открытии. Кнопку чата сайты кешируют до 2 минут.
Пример
Название, цвет, кнопка с подписью слева, часы работы:
curl
curl -X POST "$GRATIO_URL/v1/instances/$GRATIO_ID/setSettings" \
-H "Authorization: Bearer $GRATIO_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"siteTitle": "Школа робототехники",
"siteColor": "#F4513C",
"sitePosition": "left",
"siteLauncher": "label",
"siteLauncherText": "Задать вопрос",
"siteHours": {
"timezone": "Europe/Moscow",
"mon": [
[
"09:00",
"18:00"
]
],
"tue": [
[
"09:00",
"18:00"
]
],
"wed": [
[
"09:00",
"18:00"
]
],
"thu": [
[
"09:00",
"18:00"
]
],
"fri": [
[
"09:00",
"18:00"
]
],
"sat": [
[
"10:00",
"15:00"
]
]
}
}'
Python
import os
import requests
BASE = f"{os.environ['GRATIO_URL']}/v1/instances/{os.environ['GRATIO_ID']}"
HEADERS = {"Authorization": f"Bearer {os.environ['GRATIO_TOKEN']}"}
url = f"{BASE}/setSettings"
payload = {
"siteTitle": "Школа робототехники",
"siteColor": "#F4513C",
"sitePosition": "left",
"siteLauncher": "label",
"siteLauncherText": "Задать вопрос",
"siteHours": {
"timezone": "Europe/Moscow",
"mon": [["09:00", "18:00"]],
"tue": [["09:00", "18:00"]],
"wed": [["09:00", "18:00"]],
"thu": [["09:00", "18:00"]],
"fri": [["09:00", "18:00"]],
"sat": [["10:00", "15:00"]],
},
}
response = requests.post(url, json=payload, headers=HEADERS, timeout=60)
print(response.status_code, response.json())
Node.js
const { GRATIO_URL, GRATIO_ID, GRATIO_TOKEN } = process.env;
const base = `${GRATIO_URL}/v1/instances/${GRATIO_ID}`;
const auth = { Authorization: `Bearer ${GRATIO_TOKEN}` };
const url = `${base}/setSettings`;
const payload = {
siteTitle: "Школа робототехники",
siteColor: "#F4513C",
sitePosition: "left",
siteLauncher: "label",
siteLauncherText: "Задать вопрос",
siteHours: {
timezone: "Europe/Moscow",
mon: [["09:00", "18:00"]],
tue: [["09:00", "18:00"]],
wed: [["09:00", "18:00"]],
thu: [["09:00", "18:00"]],
fri: [["09:00", "18:00"]],
sat: [["10:00", "15:00"]],
},
};
const response = await fetch(url, {
method: "POST",
headers: { ...auth, "Content-Type": "application/json" },
body: JSON.stringify(payload),
});
console.log(response.status, await response.json());
PHP
<?php
$base = getenv('GRATIO_URL') . '/v1/instances/' . getenv('GRATIO_ID');
$auth = 'Authorization: Bearer ' . getenv('GRATIO_TOKEN');
$url = $base . '/setSettings';
$payload = [
'siteTitle' => 'Школа робототехники',
'siteColor' => '#F4513C',
'sitePosition' => 'left',
'siteLauncher' => 'label',
'siteLauncherText' => 'Задать вопрос',
'siteHours' => [
'timezone' => 'Europe/Moscow',
'mon' => [['09:00', '18:00']],
'tue' => [['09:00', '18:00']],
'wed' => [['09:00', '18:00']],
'thu' => [['09:00', '18:00']],
'fri' => [['09:00', '18:00']],
'sat' => [['10:00', '15:00']],
],
];
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [$auth, 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
]);
$response = json_decode(curl_exec($ch), true);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), PHP_EOL;
print_r($response);
Ответ 200 OK:
{"saveSettings": true}
Где стоит чат
| Ключ | По умолчанию | Что делает |
|---|---|---|
siteId |
при создании | id сайта, только для чтения: другое значение — 400 |
siteEnabled |
"yes" |
"no" — чат снят с сайта: кнопки нет, окно не открывается |
siteDomains |
[] |
домены, где окно встраивается, до 20: school.ru (и www), *.school.ru (и сам school.ru), http://school.local — явно. Кириллица — в punycode, маски над одним уровнем (*.ru) нельзя |
siteAllowLocalhost |
"" |
до какой даты окно встраивается на localhost: дата ISO, не дальше 7 дней |
siteHidePaths |
[] |
где кнопку не показывать: шаблоны путей с *, до 20 — /checkout* |
Как выглядит
| Ключ | По умолчанию | Что делает |
|---|---|---|
siteTitle |
"" |
шапка окна и подпись компании. Пусто — название канала |
siteColor |
"#263469" |
цвет окна и кнопки |
sitePosition |
"right" |
right или left |
siteOffsetX, siteOffsetY |
20, 20 |
отступы кнопки от края, px |
siteOffsetMobileX, siteOffsetMobileY |
12, 12 |
отступы на телефоне, px |
siteLauncher |
"icon" |
кнопка: icon — значок, label — значок с подписью, hidden — без кнопки, окно открывают со страницы, см. JS API окна на сайте |
siteLauncherText |
"Напишите нам" |
подпись кнопки при label |
siteTheme |
"light" |
light, dark или auto — как в системе посетителя |
siteAvatar |
"" |
аватар компании — id файла из uploadFile: часть ссылки urlFile после idInstance, …/upload/7100000001/5f2c8e1a9b3d4c7e6a0f1b2c/… |
siteSound |
"no" |
звук нового сообщения в окне |
siteFiles |
"yes" |
посетитель может прикладывать файлы |
siteBranding |
"yes" |
метка «Работает на Gratio» внизу окна; только для чтения. У бесплатного канала метка есть всегда, в платном тарифе её нет. То же значение в setSettings пропускается, другое — 400 |
Тексты
| Ключ | По умолчанию | Что делает |
|---|---|---|
siteGreeting |
"Здравствуйте! Чем можем помочь? Ответим здесь же." |
первая строка окна |
sitePlaceholder |
"Напишите сообщение" |
подсказка в поле ввода |
siteQuickReplies |
[] |
стартовые подсказки посетителю, до 4 по 40 знаков |
siteOperatorTitle |
"сотрудник" |
как подписаны люди — «Ольга, сотрудник» — и кнопка «Позвать сотрудника» |
siteHandoff |
"auto" |
когда показывать «Позвать сотрудника»: auto — после первого ответа ИИ, always — всегда. Выключить нельзя |
siteHandoffText |
"Позовите сотрудника, пожалуйста" |
реплика, которая приходит по этой кнопке, с action: "operator" |
Часы и срок ответа
| Ключ | По умолчанию | Что делает |
|---|---|---|
siteHours |
"" |
часы работы: {"timezone": "Europe/Moscow", "mon": [["09:00", "18:00"]], …}. Пусто — окно не обещает срок |
siteReplyTime |
"hour" |
обещанный срок ответа в рабочие часы: minutes — 15 минут, hour — час, day — сутки. По нему считается unanswered в getSiteStats |
Мессенджеры
siteMessengers — кнопки «Другие способы связи» в окне и мессенджеры формы контакта, до 8, по порядку:
[
{"channel": "max", "url": "https://max.ru/…"},
{"channel": "telegram", "username": "robo_school"},
{"channel": "vk", "group": "robo_school"},
{"channel": "whatsapp", "phone": "79990000001"},
{"channel": "phone", "phone": "79990000001"}
]
У Telegram вместо username можно указать bot.
Согласие
| Ключ | По умолчанию | Что делает |
|---|---|---|
siteConsent |
"notice" |
notice — без галочки: строка уведомления под полем ввода и у кнопки формы; contact — галочка в формах с контактом; chat — галочка до первой реплики; off — ни галочки, ни строки |
siteConsentLabel |
"" |
строка уведомления или подпись у галочки. Пусто — по режиму: «Отправляя сообщения в этот чат, вы принимаете политику обработки персональных данных» или «Согласен на обработку персональных данных» |
siteConsentText |
"" |
полный текст согласия |
sitePolicyUrl |
"" |
политика обработки персональных данных, только https |
noticeдокумента не требует. Слова «политику обработки персональных данных» в строке — ссылка наsitePolicyUrl, без неё — на текстsiteConsentText; без обоих — строка без ссылки, с названием компании.contactиchat— режимы с галочкой — требуютsiteConsentTextиsitePolicyUrl. Запрос, который ставит такой режим без документа или стирает документ при таком режиме, —400.- Журнал согласий. При
noticeGratio пишет «уведомление принято» с первой репликой посетителя и с каждой формой с телефоном или почтой. Версия —nи 16 знаков отпечатка строки, текста и адреса политики. Сменили текст или политику — новая версия, при галочке посетители отмечают её заново. - Согласие приходит в уведомлениях — поле
consentв Реплика с сайта и Ответ формой, журнал посетителя — в getVisitor.
Аналитика и хранение
| Ключ | По умолчанию | Что делает |
|---|---|---|
siteMetrika |
"" |
номер счётчика Яндекс Метрики: цели gratio_chat_open, gratio_chat_started, gratio_handoff, gratio_contact, gratio_messenger |
siteDataLayer |
"no" |
те же события в dataLayer для Google Tag Manager |
siteRetentionDays |
1095 |
сколько дней хранить переписку посетителя после его последней активности: 30–3650 |
В целях нет персональных данных: ни текстов, ни полей форм.
Как проверяются значения
- Неверное значение —
400 validationс именем ключа: «Неверная настройка — siteColor: …». - Неизвестный ключ
site…— тоже400. - Ключи
site…есть только у канала «Чат на сайте».
Что дальше
- JS API окна на сайте — открыть окно со страницы, передать данные посетителя.
- Чат на сайте через API — методы канала.
- setSettings — общие настройки уведомлений и вебхука.
