Отдаёт карточку собеседника личного чата: поля Green API и, в Telegram, подробный профиль — как экран профиля в приложении. Нужен, чтобы заполнить карточку клиента в вашей системе.
| Запрос | POST /waInstance{idInstance}/getContactInfo/{apiTokenInstance} |
| Тело | JSON |
| Каналы | MAX, Telegram, WhatsApp, почта |
Параметры
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
chatId |
string | да | личный чат — id собеседника в этом канале. Группы не принимаются: для них — getGroupData |
Пример запроса
Карточка Марии в MAX:
curl
curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/getContactInfo/$GRATIO_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"chatId": "8695836"}'
Python
import os
import requests
BASE = f"{os.environ['GRATIO_URL']}/waInstance{os.environ['GRATIO_ID']}"
TOKEN = os.environ["GRATIO_TOKEN"]
url = f"{BASE}/getContactInfo/{TOKEN}"
payload = {"chatId": "8695836"}
response = requests.post(url, json=payload, timeout=60)
print(response.status_code, response.json())
Node.js
const { GRATIO_URL, GRATIO_ID, GRATIO_TOKEN } = process.env;
const base = `${GRATIO_URL}/waInstance${GRATIO_ID}`;
const url = `${base}/getContactInfo/${GRATIO_TOKEN}`;
const payload = { chatId: "8695836" };
const response = await fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(payload),
});
console.log(response.status, await response.json());
PHP
<?php
$base = getenv('GRATIO_URL') . '/waInstance' . getenv('GRATIO_ID');
$url = $base . '/getContactInfo/' . getenv('GRATIO_TOKEN');
$payload = ['chatId' => '8695836'];
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['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:
{
"avatar": "https://i.oneme.ru/i?r=…",
"name": "Мария",
"contactName": "",
"chatId": "8695836",
"chatType": "user",
"lastSeen": null,
"phoneNumber": 0,
"email": "",
"category": "",
"description": "",
"products": [],
"isArchive": false,
"isDisappearing": false,
"messageExpiration": 0,
"isMute": false,
"muteExpiration": 0,
"isBusiness": false
}
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
avatar |
string | ссылка на фото профиля; "" — фото нет или скрыто. Та же, что у getAvatar |
name |
string | имя в профиле мессенджера |
contactName |
string | имя в адресной книге аккаунта |
chatId, chatType |
string | id собеседника; user или bot |
lastSeen |
integer, null | последний визит, Unix; null — скрыт или неизвестен |
phoneNumber |
integer | номер, если собеседник его открыл, иначе 0 |
description |
string | «О себе»; у бота — его описание |
isArchive |
boolean | чат в архиве |
isMute, muteExpiration |
boolean, integer | чат без звука и до какого времени, Unix |
isDisappearing, messageExpiration |
boolean, integer | в чате автоудаление сообщений и его срок, с |
isBusiness |
boolean | у собеседника бизнес-профиль |
email, category, products |
всегда пустые — для совместимости с Green API |
Подробный профиль Telegram
В Telegram ответ дополняют поля сверх Green API. Поле есть, только если Telegram его сообщил. Профиль Марии:
curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/getContactInfo/$GRATIO_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"chatId": "8617393401"}'
Ответ 200 OK:
{
"avatar": "https://api.gratio.net/media/7100000001/8617393401/avatar/0/5be1…",
"name": "Мария",
"contactName": "",
"chatId": "8617393401",
"chatType": "user",
"lastSeen": 1791823600,
"phoneNumber": 0,
"email": "",
"category": "",
"description": "Мама Вари из 3А",
"products": [],
"isArchive": false,
"isDisappearing": false,
"messageExpiration": 0,
"isMute": false,
"muteExpiration": 0,
"isBusiness": false,
"status": "offline",
"username": "maria_k",
"usernames": ["maria_k"],
"isContact": false,
"isMutualContact": false,
"isBlocked": false,
"isVerified": false,
"isPremium": false,
"birthday": {"day": 14, "month": 10, "year": null},
"commonChatsCount": 1,
"callsAvailable": true,
"hasStories": false
}
| Поле | Описание |
|---|---|
status |
online, offline — с точным lastSeen; recently, last_week, last_month, long_ago — точное время скрыто настройками приватности |
username, usernames |
основной ник и все активные, включая коллекционные |
isContact, isMutualContact |
собеседник в контактах аккаунта; контакт взаимный |
isBlocked |
аккаунт заблокировал собеседника |
isVerified, isPremium |
отметки Telegram: проверенный аккаунт, Telegram Premium |
warning |
отметка Telegram scam или fake — мошенник или поддельный аккаунт |
birthday |
day, month, year; год бывает скрыт — null |
commonChatsCount |
общих групп с аккаунтом |
personalChannelId |
личный канал собеседника, -100… |
callsAvailable |
собеседнику можно позвонить |
hasStories |
у собеседника есть активные истории, см. Истории Telegram |
business |
бизнес-профиль — таблица ниже |
Так выглядит business у аккаунта Telegram для бизнеса:
"business": {
"address": "Москва, ул. Лесная, 5",
"latitude": 55.7812,
"longitude": 37.5893,
"timezone": "Europe/Moscow",
"workHours": [
{"day": "mon", "open": "09:00", "close": "18:00"},
{"day": "tue", "open": "09:00", "close": "18:00"}
],
"openNow": true,
"introTitle": "Здравствуйте!",
"introText": "Ответим в рабочие часы"
}
| Поле | Описание |
|---|---|
address, latitude, longitude |
адрес и точка на карте |
timezone |
часовой пояс часов работы |
workHours |
часы работы по дням: day — mon…sun, open и close — ЧЧ:ММ; интервал через полночь делится по дням, конец дня — 24:00 |
openNow |
открыто ли сейчас |
introTitle, introText |
приветствие, которое видит новый собеседник |
Свежесть данных
| Канал | Как часто Gratio спрашивает мессенджер |
|---|---|
| MAX | карточка хранится до часа; раньше обновится, если MAX сообщил об изменении контакта |
| Telegram | при каждом запросе; фото хранится 10 минут |
| «О себе» и фото — не чаще раза в 6 часов на собеседника | |
| Почта | имя — из последнего письма собеседника |
Новое имя или фото собеседника в MAX появится в ответе не позже чем через час. В Telegram кэшируйте карточки у себя: каждый запрос — обращение к Telegram.
Ошибки
| Код | code |
Когда | Что делать |
|---|---|---|---|
400 |
validation |
нет chatId |
добавить поле |
400 |
not_a_user |
chatId — группа или канал (MAX, Telegram) |
для групп — getGroupData |
400 |
not_found |
нет такого собеседника | проверить chatId |
400 |
not_authorized |
канал не на связи | проверить getStateInstance |
Общие правила — в статье Ответы и ошибки.
Особенности каналов
- MAX.
avatar— ссылка MAX на фото. Подробного профиля нет,lastSeen—null, номер MAX не показывает. - Telegram.
avatar— подписанная ссылка Gratio: у Telegram нет публичных ссылок на фото. Номер — только если собеседник его открыл. - WhatsApp.
avatar— подписанная ссылка Gratio,phoneNumber— номер собеседника,description— «О себе». У бизнес-аккаунта с подтверждённым именем —"isVerified": true. - Почта. Известно только имя из писем, остальные поля пустые.
Что дальше
- getAvatar — только фото профиля.
- getContacts — все контакты канала.
- checkAccount — найти собеседника по номеру.
