Я использую Chat-API (https://github.com/WHAnonymous/Chat-API) поскольку это был WhatsAPI, и все же я не знаю наверняка, как правильно получать сообщения.
Прямо сейчас у меня есть файл cron, который запускается раз в минуту с этой базовой структурой:
$wa = new WhatsProt($WA_NUMBER, $WA_NICKNAME);
$wa->connect();
$wa->loginWithPassword($WA_PASSWORD);
$wa->pollMessage();
$data = $wa->getMessages();
foreach ($data as $item) {
$from_number = $item->getAttribute("from");
$from_nickname = $item->getAttribute("notify");
if ($item->getAttribute("type") == "text") {
$msg = $item->getChild("body")->getData();
} else {
$msg = $item->getChild("media")->getAttribute("url");
}
...
}
$wa->disconnect();
Я также пытался запускать PHP-скрипт постоянно в фоновом режиме, как это:
while (true) {
$wa->pollMessage();
$data = $wa->getMessages();
...
}
Первый вариант более надежен, чем второй, но ни один не является правильным решением.
Есть ли способ использовать сокеты для подключения к серверам WhatsApp, как телефон? Я имею в виду, открыть сокет и держать его открытым, вызывая функцию каждый раз, когда поступает новое сообщение (с использованием протокола XMPP).
Задача ещё не решена.
Других решений пока нет …