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

sendContact

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

Отправляет карточку контакта: телефон, имя, компанию — например, контакт преподавателя или менеджера. Работает в Telegram и WhatsApp.

Запрос POST /waInstance{idInstance}/sendContact/{apiTokenInstance}
Тело JSON
Каналы Telegram, WhatsApp. MAX и почта — 501

Параметры

Параметр Тип Обязательный Описание
chatId string да получатель: личный чат, группа или номер 79991234567@c.us — см. Идентификаторы чатов и сообщений
contact object да карточка контакта, поля ниже
contact.phoneContact integer или string да телефон с кодом страны, от 10 цифр: 79997654321
contact.firstName string нет имя. В WhatsApp — обязательно
contact.middleName string нет отчество — добавляется к имени через пробел
contact.lastName string нет фамилия
contact.company string нет компания
quotedMessageId string нет ответить цитатой на сообщение этого же чата
clientMessageId string нет ваш ключ от дублей — см. Надёжная отправка без дублей

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

Контакт преподавателя в WhatsApp:

curl

curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/sendContact/$GRATIO_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "chatId": "79991234567@c.us",
    "contact": {
      "phoneContact": 79997654321,
      "firstName": "Олег",
      "lastName": "Смирнов",
      "company": "Школа робототехники"
    },
    "clientMessageId": "teacher-contact-79991234567"
  }'

Python

import os
import requests

BASE = f"{os.environ['GRATIO_URL']}/waInstance{os.environ['GRATIO_ID']}"
TOKEN = os.environ["GRATIO_TOKEN"]

url = f"{BASE}/sendContact/{TOKEN}"
payload = {
    "chatId": "79991234567@c.us",
    "contact": {
        "phoneContact": 79997654321,
        "firstName": "Олег",
        "lastName": "Смирнов",
        "company": "Школа робототехники",
    },
    "clientMessageId": "teacher-contact-79991234567",
}
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}/sendContact/${GRATIO_TOKEN}`;
const payload = {
  chatId: "79991234567@c.us",
  contact: {
    phoneContact: 79997654321,
    firstName: "Олег",
    lastName: "Смирнов",
    company: "Школа робототехники",
  },
  clientMessageId: "teacher-contact-79991234567",
};
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 . '/sendContact/' . getenv('GRATIO_TOKEN');
$payload = [
    'chatId' => '79991234567@c.us',
    'contact' => [
        'phoneContact' => 79997654321,
        'firstName' => 'Олег',
        'lastName' => 'Смирнов',
        'company' => 'Школа робототехники',
    ],
    'clientMessageId' => 'teacher-contact-79991234567',
];

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

{"idMessage": "3EB0C767D26A1D5A6F0B"}

После отправки приходят outgoingAPIMessageReceived с contactMessageData и статус outgoingMessageStatus sent.

Ещё примеры

В группу Telegram

Контакт с отчеством — оно добавится к имени:

curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/sendContact/$GRATIO_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "chatId": "-1001234567890",
    "contact": {
      "phoneContact": 79997654321,
      "firstName": "Олег",
      "middleName": "Игоревич",
      "lastName": "Смирнов"
    }
  }'

Ошибки

Код code Когда Что делать
400 validation нет contact, это не объект или в phoneContact меньше 10 цифр исправить запрос
400 bad_contact WhatsApp: нет firstName добавить имя
400 not_authorized канал не на связи проверить getStateInstance
400 no_account на номере …@c.us нет аккаунта в этом мессенджере выбрать другой канал
402 payment_required канал на паузе за неоплату продлить канал в кабинете
409 idempotency_conflict тот же clientMessageId с другим контактом новый ключ для нового сообщения
429 too_frequent и другие темп канала или правило WhatsApp повторить после Retry-After
469 rate_limited Telegram попросил паузу повторить после Retry-After
501 not_supported канал MAX или почта отправить телефон текстом через sendMessage
503 outcome_unknown связь оборвалась посреди отправки повторить с тем же clientMessageId

Особенности каналов

  • WhatsApp. Контакт уходит карточкой vCard с кнопкой «Написать». Имя обязательно.
  • Telegram. Компания попадает в карточку vCard, имя и фамилия — в контакт.
  • MAX и почта — 501 not_supported.

Что дальше

  • Контакт — как приходит контакт от собеседника.
  • sendLocation — отправить адрес на карте.
  • checkAccount — проверить, есть ли у номера аккаунт.

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