В этом шаге вы проверите, что канал на связи, и отправите сообщение со своего канала на свой личный телефон.
Что понадобится
- ключ канала из Шаг 1. Подключите номер;
- второй телефон или номер с тем же мессенджером — чтобы получить сообщение;
- одно из:
curl; Python 3.10+ сpip install requests; Node.js 18+; PHP 8 с модулем curl.
Примеры на Node.js используют await на верхнем уровне — сохраните файл с расширением .mjs. Примеры на curl — для bash и zsh (на Windows — Git Bash или WSL).
1. Задайте ключ в переменных окружения
Все примеры в справке берут ключ из трёх переменных. Задайте их один раз в терминале.
macOS, Linux, Git Bash:
export GRATIO_URL=https://api.gratio.net
export GRATIO_ID=7100000001
export GRATIO_TOKEN=ваш_apiTokenInstance
Windows PowerShell:
$env:GRATIO_URL = "https://api.gratio.net"
$env:GRATIO_ID = "7100000001"
$env:GRATIO_TOKEN = "ваш_apiTokenInstance"
Подставьте свои idInstance и apiTokenInstance из кабинета.
2. Проверьте канал
Метод getStateInstance отвечает, на связи ли номер:
curl
curl "$GRATIO_URL/waInstance$GRATIO_ID/getStateInstance/$GRATIO_TOKEN"
Python
import os
import requests
BASE = f"{os.environ['GRATIO_URL']}/waInstance{os.environ['GRATIO_ID']}"
TOKEN = os.environ["GRATIO_TOKEN"]
url = f"{BASE}/getStateInstance/{TOKEN}"
response = requests.get(url, 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}/getStateInstance/${GRATIO_TOKEN}`;
const response = await fetch(url);
console.log(response.status, await response.json());
PHP
<?php
$base = getenv('GRATIO_URL') . '/waInstance' . getenv('GRATIO_ID');
$url = $base . '/getStateInstance/' . getenv('GRATIO_TOKEN');
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 90,
]);
$response = json_decode(curl_exec($ch), true);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), PHP_EOL;
print_r($response);
Вы увидите:
{"stateInstance": "authorized"}
authorized — всё готово. starting — канал подключается, повторите через несколько секунд. notAuthorized — номер не привязан, вернитесь к шагу 1.
3. Отправьте сообщение
Замените 79991234567 на свой личный номер — тот, на который придёт сообщение. Формат — номер@c.us, 11 цифр без +:
curl
curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/sendMessage/$GRATIO_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"chatId": "79991234567@c.us",
"message": "Привет! Это первое сообщение через Gratio API."
}'
Python
import os
import requests
BASE = f"{os.environ['GRATIO_URL']}/waInstance{os.environ['GRATIO_ID']}"
TOKEN = os.environ["GRATIO_TOKEN"]
url = f"{BASE}/sendMessage/{TOKEN}"
payload = {
"chatId": "79991234567@c.us",
"message": "Привет! Это первое сообщение через Gratio API.",
}
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}/sendMessage/${GRATIO_TOKEN}`;
const payload = {
chatId: "79991234567@c.us",
message: "Привет! Это первое сообщение через Gratio API.",
};
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 . '/sendMessage/' . getenv('GRATIO_TOKEN');
$payload = [
'chatId' => '79991234567@c.us',
'message' => 'Привет! Это первое сообщение через Gratio API.',
];
$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);
Вы увидите ответ с id сообщения:
{"idMessage": "117428956522361912"}
…и сообщение на телефоне.
Если не получилось
| Ответ | Причина | Что сделать |
|---|---|---|
401 |
неверный idInstance или токен |
скопируйте ключ из кабинета заново; проверьте, что переменные заданы в этом же терминале |
400 not_authorized |
номер не на связи | проверьте статус в кабинете, привяжите номер |
400 no_account |
на номере нет аккаунта в этом мессенджере | возьмите номер, где мессенджер установлен |
400 bad_phone |
номер не из 11–12 цифр | уберите +, пробелы и скобки |
429 |
слишком частые запросы | повторите через столько секунд, сколько в Retry-After |
В Telegram найти человека по номеру можно, только если он разрешил это в настройках приватности. Если не находится — напишите с личного телефона на подключённый аккаунт и ответьте ему по chatId из следующего шага.
Все коды — в статье Ответы и ошибки.
Что дальше
Отправлять умеете — научитесь принимать.
Шаг 3. Примите входящиеЗабрать входящее сообщение из очереди, подтвердить его и ответить — по шагам и готовым циклом на Python и Node.js.