Перейти к содержимому

Автор сообщения

Обновлено 18 октября 2026

В окне чата на сайте у каждого ответа видно, кто его написал: ИИ-ассистент, сотрудник или компания. Подпись задаёт поле author в запросе отправки. Другие каналы это поле не читают.

Где работает

author принимают sendMessage, sendFileByUpload, sendFileByUrl, sendInteractiveButtons и sendButtons, sendForm и sendTyping. В multipart/form-data — строкой JSON.

Поля

Поле Тип Обязательный Описание
kind string да assistant — ИИ-ассистент, operator — сотрудник, company — компания
name string нет имя: до 64 знаков, без управляющих символов
avatarUrl string нет аватар у подписи — только ссылка uploadFile этого канала на JPEG, PNG, GIF или WebP
kind Подпись в окне
assistant «Алина · ИИ»; без имени — «ИИ-ассистент» и название компании. «Печатает» — «Алина · ИИ отвечает…»
operator «Ольга, сотрудник»; слово «сотрудник» меняет настройка siteOperatorTitle
company или поля нет название компании — настройка siteTitle

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

Ответ ИИ-ассистента Алины:

curl

curl -X POST "$GRATIO_URL/v1/instances/$GRATIO_ID/sendMessage" \
  -H "Authorization: Bearer $GRATIO_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "chatId": "vq3k7m2x4a6b2c4d6e7f2g3h4",
    "message": "Пробное занятие бесплатное. Записать вас на субботу?",
    "author": {
      "kind": "assistant",
      "name": "Алина"
    },
    "clientMessageId": "site-reply-1"
  }'

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}/sendMessage"
payload = {
    "chatId": "vq3k7m2x4a6b2c4d6e7f2g3h4",
    "message": "Пробное занятие бесплатное. Записать вас на субботу?",
    "author": {"kind": "assistant", "name": "Алина"},
    "clientMessageId": "site-reply-1",
}
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}/sendMessage`;
const payload = {
  chatId: "vq3k7m2x4a6b2c4d6e7f2g3h4",
  message: "Пробное занятие бесплатное. Записать вас на субботу?",
  author: { kind: "assistant", name: "Алина" },
  clientMessageId: "site-reply-1",
};
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 . '/sendMessage';
$payload = [
    'chatId' => 'vq3k7m2x4a6b2c4d6e7f2g3h4',
    'message' => 'Пробное занятие бесплатное. Записать вас на субботу?',
    'author' => ['kind' => 'assistant', 'name' => 'Алина'],
    'clientMessageId' => 'site-reply-1',
];

$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:

{"idMessage": "o2b7e41c09d8f3a6b5c4d2e1f0a9b8c"}

Ещё примеры

Ответ сотрудника

curl -X POST "$GRATIO_URL/v1/instances/$GRATIO_ID/sendMessage" \
  -H "Authorization: Bearer $GRATIO_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "chatId": "vq3k7m2x4a6b2c4d6e7f2g3h4",
    "message": "Здравствуйте! Я Ольга, администратор. Подскажу по расписанию.",
    "author": {
      "kind": "operator",
      "name": "Ольга"
    }
  }'

«Печатает» от имени ассистента

curl -X POST "$GRATIO_URL/v1/instances/$GRATIO_ID/sendTyping" \
  -H "Authorization: Bearer $GRATIO_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "chatId": "vq3k7m2x4a6b2c4d6e7f2g3h4",
    "typingTime": 3000,
    "author": {
      "kind": "assistant",
      "name": "Алина"
    }
  }'

Как это работает

  • Позвать сотрудника. В окне есть кнопка «Позвать сотрудника». После неё посетитель видит «Ждём сотрудника», пока не придёт первое сообщение не от assistant, в том числе без author.
  • Аватар окно показывает у подписи автора. Посетителю картинка уходит с адреса окна, без метаданных.
  • Повтор отправки. Автор входит в ключ повтора: тот же clientMessageId с другим автором — 409 idempotency_conflict.
  • Персона ассистента — имя и аватар — задаётся в вашем приложении: Gratio подписывает ответ так, как указано в author.

Ошибки

Код code Когда Что делать
400 validation неизвестный kind, имя длиннее 64 знаков, avatarUrl — не ссылка uploadFile этого канала или не картинка исправить author
409 idempotency_conflict тот же clientMessageId уже отправлен с другим автором новый ключ для нового сообщения

Что дальше

Была ли статья полезна?