viber-bot-php
viber-bot-php copied to clipboard
Remote error: notSubscribed
Доброго времени суток! После того как пользователь отправит первое сообщение, при попытке отправить ответное сообщение возникает, следующая ошибка: exception 'Viber\Api\Exception\ApiException' with message 'Remote error: notSubscribed' in /var/www/html/viber/vendor/bogdaan/viber-bot-php/src/Api/Response.php:37 Stack trace: #0 /var/www/html/viber/vendor/bogdaan/viber-bot-php/src/Client.php(89): Viber\Api\Response::create(Object(GuzzleHttp\Psr7\Response)) #1 /var/www/html/viber/vendor/bogdaan/viber-bot-php/src/Client.php(176): Viber\Client->call('send_message', Array) #2 /var/www/html/viber/bot.php(211): Viber\Client->sendMessage(Object(Viber\Api\Message\Text)) #3 [internal function]: {closure}(Object(Viber\Api\Event\Message)) #4 /var/www/html/viber/vendor/bogdaan/viber-bot-php/src/Bot/Manager.php(83): call_user_func(Object(Closure), Object(Viber\Api\Event\Message)) #5 /var/www/html/viber/vendor/bogdaan/viber-bot-php/src/Bot.php(201): Viber\Bot\Manager->runHandler(Object(Viber\Api\Event\Message)) #6 /var/www/html/viber/bot.php(213): Viber\Bot->run() #7 {main} Мобильный клиент, версия API 1
See https://developers.viber.com/docs/api/rest-bot-api/#SendingWelcomeMessage
При получении conversation_started в ответ возвращаю текст приветствия и ошибок не возникает.
Указанная выше ошибка, возникает при попытке отправить пользователю сообщение, когда пользователь пришлет первое сообщение боту:
->onText('|whois .*|si', function ($event) use ($bot, $botSender) { $bot->getClient()->sendMessage( //здесь ошибка (new \Viber\Api\Message\Text()) ->setSender($botSender) ->setReceiver($event->getSender()->getId()) ->setText("I do not know )") ); })
I am getting same error when trying to send multiples messages at once using foreach loop
foreach ($viberUsers as $vUser) {
$bot->getClient()->sendMessage(
(new \Viber\Api\Message\Text())
->setSender($botSender)
->setReceiver($vUser['ViberID'])
->setText($message)
);
}
Fatal error: Uncaught Viber\Api\Exception\ApiException: Remote error: notSubscribed не подскажите как можно обойти эту ошибку ? Ошибка заключается в следующем если в массиве все подписаны то тогда все оправляет, а если кто то отписался тогда вот такая ошибка. Вот массивом делаю отправку и он походу стопориться на ошибки когда кто то не подписан, а id остался. foreach ($viberUsers as $vUser) { $bot->getClient()->sendMessage( (new \Viber\Api\Message\Text()) ->setSender($botSender) ->setReceiver($vUser['ViberID']) ->setText($message) ); }
@RomanYshko мне кажется в данном случае такая ошибка вполне логична и ожидаема, если действительно получатель отписался от бота, поэтому как вариант можно просто ловить это исключение и удалять соответствующий id.
Я также столкунлся с этой ошибкой (пока) один раз, когда приходит conversation_started и бот не смог отправить первое сообщение.
Возможно, это какой-то баг именно на стороне самого вайбера.
Подскажите, не могу отправить сообщение при событии conversation_started...
$bot = new Bot(['token' => $apiKey]);
$bot
->onConversation(function ($event) use ($bot, $botSender, $log ) {
$log->info('onConversation ' . var_export($event, true));
$context = $event->getContext();
if ($context != "" && $context != null) {
add_with_referral($event->getSender()->getId(), $event->getSender()->getName(), $context);
} else {
add_user($event->getSender()->getId(), $event->getSender()->getName(), $log);
}
return (new \Viber\Api\Message\Text)
->setSender($botSender)
->setText("Can i help you?");
})