Переезжай на Whapi · от 500 ₽/мес Наш WhatsApp API работает штатно Регистрация
Брифинг школьного персонала · Сценарий WhatsApp API

Ежедневная LMS-сводка для персонала в WhatsApp после уроков

Один ответственный сотрудник может прочитать оперативную картину дня в WhatsApp, не открывая LMS. После уроков ваш планировщик может опросить базу данных, собрать короткий текст и отправить его через Whapi.Cloud. Этот сценарий показывает интеграторам, как собрать такой поток через WhatsApp API.

Только текст, без графиков и PDF Один личный чат сотрудника
Панель школьных операций рядом с телефоном, в чате WhatsApp которого видна короткая вечерняя сводка для персонала после уроков.
Сценарий

Когда использовать этот поток

Триггер — ежедневное расписание после уроков

Используйте этот поток, когда ежедневная задача планировщика запускается после уроков, а не на каждое изменение строки LMS в реальном времени.

Сводка собирается из данных LMS или базы

Используйте этот поток, когда own_backend опрашивает LMS или базу данных и собирает счётчики или алерты, а не когда вы только читаете историю сообщений WhatsApp.

Один ответственный сотрудник в личном чате

Используйте этот поток, когда один ответственный сотрудник должен получить сводку в личном чате, а не когда учителя делятся обновлением дежурств в группе.

Чат WhatsApp на телефоне с короткой вечерней сводкой для персонала после уроков.
Опыт клиента

Персонал видит день в чате

Ежедневные оперативные сигналы остаются внутри LMS, пока кто-то не откроет дашборды, поэтому руководство поздно узнаёт о пробелах или отставании.

После запуска потока ответственный сотрудник открывает WhatsApp и читает короткую сводку оперативной картины дня. Интеграторы собирают этот результат через WhatsApp API.

Поток

Отправьте вечернюю сводку в чат

1

Ежедневный планировщик запускается после уроков

Ваш планировщик срабатывает после уроков. Воркер опрашивает LMS или базу данных и собирает текст за этот день.

2

Отправьте текстовую сводку персоналу

POST /messages/text

sendMessageText доставляет собранную сводку ответственному сотруднику. Поставьте телефон сотрудника в to, а сводку — в body.

Нужно отслеживать доставку? Успешный ответ API не значит, что сводка уже у сотрудника. Про статус доставки →

Что нужно заранее

Перед запуском потока

Подключите номер WhatsApp, с которого уходит вечерняя сводка, и подписывайте каждый запрос токеном этого номера. Запрос к LMS, расписание и сборка текста остаются на вашем бэкенде.

По желанию — глубже в этот поток

Реализация API

Один вызов отправляет сводку

Этот вызов и есть check-in. Он кладёт собранную LMS-сводку в личный чат ответственного сотрудника в тот же вечер.

Получите токен API бесплатно после регистрации на whapi.cloud и подставьте его в код вместо Your_Token из примеров.

Отправьте текстовую сводку персоналу

Отправьте вечернюю оперативную сводку ответственному сотруднику, чтобы руководство увидело картину дня, не открывая LMS.

curl --request POST \
     --url https://gate.whapi.cloud/messages/text \
     --header 'accept: application/json' \
     --header 'authorization: Bearer Your_Token' \
     --header 'content-type: application/json' \
     --data '
{
  "to": "447123456789",
  "body": "Today: 12 absences, 3 late arrivals, 2 open tickets."
}
'
$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gate.whapi.cloud/messages/text",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{\"to\":\"447123456789\",\"body\":\"Today: 12 absences, 3 late arrivals, 2 open tickets.\"}",
  CURLOPT_HTTPHEADER => [
    "accept: application/json",
    "authorization: Bearer Your_Token",
    "content-type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);
echo $response;
import requests

url = "https://gate.whapi.cloud/messages/text"
payload = {
    "to": "447123456789",
    "body": "Today: 12 absences, 3 late arrivals, 2 open tickets."
}
headers = {
    "accept": "application/json",
    "authorization": "Bearer Your_Token",
    "content-type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
const response = await fetch('https://gate.whapi.cloud/messages/text', {
  method: 'POST',
  headers: {
    accept: 'application/json',
    authorization: 'Bearer Your_Token',
    'content-type': 'application/json',
  },
  body: JSON.stringify({
    to: '447123456789',
    body: 'Today: 12 absences, 3 late arrivals, 2 open tickets.',
  }),
});

console.log(await response.text());
OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"to\":\"447123456789\",\"body\":\"Today: 12 absences, 3 late arrivals, 2 open tickets.\"}");
Request request = new Request.Builder()
  .url("https://gate.whapi.cloud/messages/text")
  .post(body)
  .addHeader("accept", "application/json")
  .addHeader("authorization", "Bearer Your_Token")
  .addHeader("content-type", "application/json")
  .build();

Response response = client.newCall(request).execute();
using RestSharp;

var options = new RestClientOptions("https://gate.whapi.cloud/messages/text");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddHeader("authorization", "Bearer Your_Token");
request.AddHeader("content-type", "application/json");
request.AddJsonBody(new { to = "447123456789", body = "Today: 12 absences, 3 late arrivals, 2 open tickets." });
var response = await client.PostAsync(request);

Console.WriteLine("{0}", response.Content);
package main

import (
	"bytes"
	"fmt"
	"io"
	"net/http"
)

func main() {
	body := []byte(`{"to":"447123456789","body":"Today: 12 absences, 3 late arrivals, 2 open tickets."}`)
	req, _ := http.NewRequest("POST", "https://gate.whapi.cloud/messages/text", bytes.NewReader(body))
	req.Header.Set("accept", "application/json")
	req.Header.Set("authorization", "Bearer Your_Token")
	req.Header.Set("content-type", "application/json")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	out, _ := io.ReadAll(res.Body)
	fmt.Println(string(out))
}
Доставка

Поймите, когда сводка дошла

Успешный ответ отправки не значит, что сводка уже у сотрудника. Первый статус до вебхука — pending. Дальше статусы приходят только в statuses.post и statuses.put. Если статус остаётся pending и не переходит в sent, delivered или более поздний ack, сообщение не доставлено. Проверьте payload и право аккаунта отправлять этот тип.

  • Ответ sendMessageText не доказывает, что сводка уже у сотрудника.

  • pending, который не двигается, значит, что сводка не доставлена.

  • Смотрите statuses.post и statuses.put для следующих ack.

  • Включите вебхуки, если воркер должен повторять попытку, когда доставка не завершается.

Что читать про доставку и вебхуки

Напишите в поддержку, если что-то пошло не так
Если что-то ломается

Разберите сбои на каждом шаге

Если запрос к LMS упал, воркер пропустил отправку или текст не доставлен, повторите задачу или предупредите запасной состав и не отмечайте check-in завершённым.

Планировщик отработал, а check-in не удался?

Запрос к LMS может упасть до любой отправки, а sendMessageText — быть отклонённым или не доставленным уже после того, как сводка готова. Повторите задачу воркера или предупредите запасной состав и не отмечайте check-in завершённым. Если вечерний check-in всё равно падает после повтора, напишите в поддержку Whapi с id канала и ответом неудачной отправки.

Напишите в поддержку, если что-то пошло не так

Разберите по шагу API

Статус Что это значит Что делать
400 Wrong request parameters Неверные параметры запроса — проверьте to и body в payload отправки.
401 Need channel authorization for send message
402 Trial version limit exceeded
403 It is forbidden to send to this group/recipient Отправка этому получателю запрещена — подтвердите телефон или chat id сотрудника и права канала.
429 Too many requests
500 Internal Error
Частые вопросы

Вопросы интеграторов

Нет. Этот поток отправляет одну вечернюю текстовую сводку ответственному сотруднику. Графики, PDF и проверки досягаемости родителей относятся к отдельному мультиформатному потоку для родителей.
Нет. Этот поток нацелен на один личный чат сотрудника. Групповые координационные алерты используют JID группы учителей и являются отдельным сценарием.
Если запрос к LMS упал, воркер пропустил отправку или текст не доставлен, повторите задачу или предупредите запасной состав и не отмечайте check-in завершённым.
Нет. Вы собираете свой текст из данных LMS и отправляете его через sendMessageText. Отправка не ждёт заранее одобренный шаблон и не добавляет плату за шаблон к этому сообщению.
На вашем бэкенде. Каталожный шаг Whapi — только sendMessageText. Планирование, воркеры Redis или Celery и запросы к базе данных остаются в own_backend.
Поддерживаемые функции WhatsApp

Всё, что нужно для создания автоматизации WhatsApp

Whapi.Cloud предоставляет доступ к полному набору функций WhatsApp — сообщениям, медиа, группам, каналам, вебхукам и не только. Создавайте ботов, автоматизации и интеграции без функциональных ограничений.

Выбор разработчиков

Нам доверяют 3 300+ разработчиков и SaaS-команд

Разработчики по всему миру используют Whapi.Cloud для создания автоматизаций, ботов, CRM-интеграций, массовых рассылок и продвинутых WhatsApp-воркфлоу. Наша инфраструктура обрабатывает миллионы API-запросов с высокой стабильностью — и этот показатель растёт каждый месяц.

Иконка функции

5,5K+

активных API-каналов

Иконка функции

21M+

API-запросов в месяц

«Всё просто, интуитивно и легко. Документация понятная, и вся нужная информация всегда под рукой. Отличная работа.»

Roberto K. / Web-разработчик

«Мы подключили WhatsApp к нашим процессам через n8n всего за несколько минут. Без кода, без сложностей — всё заработало с первого раза.»

Martin P. / Разработчик

«Whapi.Cloud стал важной частью нашей коммуникации с клиентами. Мы автоматизировали обновления по продуктам, уведомления о заказах и поддержку — без шаблонов и модерации.»

Oscar T. / CTO

Декоративный пузырь