Viber API Documentation7.3.0Viber Python Bot API

В ноябре 2016 года Viber внедрил публичные аккаунты (Viber public account
, или просто PA). С их выходом стало доступно и api, которое позволяет:

  • вести переписку с пользователем
  • проверять статус подписчиков (онлайн, оффлайн)
  • получить информацию о конкретном подписчике
  • вносить записи (посты) на свою страницу

Все это позволяет создать довольно неплохого бота, или же интегрировать бота в уже существующий проект, что вполне может улучшить качество взаимодействие с пользователями. Если вы уже создавали ботов для telegram или slack — то создать бота для Viber не составит большого труда.

Вступление

Еще некоторое время назад у меня появилась необходимость взаимодействовать с пользователями вайбера. Хотелось бы внедрить в свое приложение типовые диалоги с пользователями, а еще предоставлять «кнопочные диалоги» (в тех случаях когда пользователь видит несколько кнопок под чатом). Но на тот момент открытого (публичного) API для этого не было, и приходилось либо отказываться либо изворачиваться с граблями.

С релизом публичных аккаунтов (PA) ситуация изменилась, теперь мы можем создать более полноценное взаимодействие с «кнопочными диалогами» и нужными нам «конверсиями». Все это здорово, если не одно НО — нет SDK для PHP
(ради справедливости, есть sdk для nodejs и python). Именно этот пробел я решил заполнить, и описать как можно создать простого бота на php, и за одно создать SDK.

Первые шаги

Прежде чем создавать бота, необходимо получить доступ к аккаунту специального типа. Возможно это покажется вам странным, но на момент написания поста это так. Для этого необходимо перейти на https://www.viber.com/en/public-accounts
и заполнить нужную форму:

В форме вы указываете телефон, к которому будет выдан доступ к публичным аккаунтам, и спустя некоторое время вы получите сообщения формата «…You now have early access to Public Accounts!…». После чего вам необходимо перезапустить Viber-клиент и пройти следующие шаги:

  1. Открыть раздел «Публичные аккаунты» (иконка вверху справа — )

  2. Нажать на «создать аккаунт» (иконка внизу справа — )

  3. Заполнить данные для вашего бота (необходима фоновая картинка, указанная категория, имя, описание и прочее)

На последнем шаге будет доступен выбор способа работы с сообщениями, выберите «api» и скопируйте ключ. (или его можно просто посмотреть на экране «редактирования информации» PA):

Для примера, мой ключ будет: 1111111111111111-2222222222222222-3333333333333333

Серверная часть

Для разработки бота и работы с Viber-API я использую небольшой SDK: https://github.com/Bogdaan/viber-bot-php
. Он позволит опустить некоторые подробности взаимодействия c REST-api и построить некоторую логику нашего бота. Установим его:

composer require bogdaan/viber-bot-php

Для начала нам необходимо зарегистрировать адрес вебхука — тот адрес по которому бекенд вибера будет доставлять нам сообщения от пользователей и некоторые другие события. Веб сервер, на котором будет расположен бот (и соотвественно вебхук) обязательно должен работать по https с корректным SSL сертификатом. Самоподписанный сертификат тут не подойдет, если его нет — попробуйте использовать letsencrypt.org.

Для примера, мой вебхук будет: https://viber.hcbogdan.com/bot.php
. Создадим файл setup.php
:

 require_once("../vendor/autoload.php"); use ViberClient; $apiKey = '1111111111111111-2222222222222222-3333333333333333'; // <- PLACE-YOU-API-KEY-HERE $webhookUrl = 'https://viber.hcbogdan.com/bot.php'; //  $apiKey ]);     $result = $client->setWebhook($webhookUrl);     echo "Success!n"; } catch (Exception $e) {     echo "Error: ". $e->getError() ."n"; }

И зарегистрируем вебхук выполнив файл:

$ php setup.php Success!

Теперь, когда пользователь отправит сообщение, или зайдет в чат, по адресу вебхука будут отправлены запросы. Создадим файл bot.php
:

  require_once("../vendor/autoload.php");  use ViberBot; use ViberApiSender;  $apiKey = '';  // так будет выглядеть наш бот (имя и аватар - можно менять) $botSender = new Sender([     'name' => 'Whois bot',     'avatar' => 'https://developers.viber.com/img/favicon.ico', ]);  try {     $bot = new Bot(['token' => $apiKey]);     $bot     ->onConversation(function ($event) use ($bot, $botSender) {         // это событие будет вызвано, как только пользователь перейдет в чат         // вы можете отправить "привествие", но не можете посылать более сообщений         return (new ViberApiMessageText())             ->setSender($botSender)             ->setText("Can i help you?");     })     ->onText('|whois .*|si', function ($event) use ($bot, $botSender) {         // это событие будет вызвано если пользователь пошлет сообщение          // которое совпадет с регулярным выражением         $bot->getClient()->sendMessage(             (new ViberApiMessageText())             ->setSender($botSender)             ->setReceiver($event->getSender()->getId())             ->setText("I do not know )")         );     })     ->run(); } catch (Exception $e) {     // todo - log exceptions }

Далее остается разместить файл bot.php
так, чтобы он был доступен по https://viber.hcbogdan.com/bot.php
, и перейти в чат с ботом из вибер клиента. Если вы не видите ответов бота, то стоит проверить ваш error_log и access_log на предмет наличия ошибок.

Можно немного улучшить функционал бота и добавить логгирование. Сделаем это с помощью monolog:

composer require monolog/monolog

И добавим логгирование исключений:

 //... } catch (Exception $e) {     // log exceptions      $log = new MonologLogger('bot');      $log->pushHandler(new MonologHandlerStreamHandler('/tmp/bot.log'));      $log->warning('Exception: '. $e->getMessage()); }

Все исключения будут поступать в /tmp/bot.log
.

Базовая версия вашего бота готова, вы можете вносить свою логику, добавлять кнопки в чат, использовать глубокие ссылки (deep link) и html разметку — все это доступно в SDK. Я создал несколько демок которые вы можете увидеть в чате viber://pa?chatURI=viber-bot-php&context=habrahabr. Если у вас еще нет viber клиента, вы можете найти чат по этой ссылке: viber-bot-php.

Полезные ссылки

241

112.7k


241

У Вайбера есть множество возможностей, о которых мало кто знает. Viber API — одна из них, и, нужно сказать, что об этой функции нужно рассказать поподробнее.

API для Viber – это набор инструментов для программирования, расширяющий список возможностей мессенджера. Обычному пользователю он никогда не понадобится, да и воспользоваться этой функцией сможет только профессиональный программист.

С помощью Апи для Вайбер решаются крупнейшие бизнес-задачи, многие компании продвигают свою продукцию (не путай с рассылкой спама, ведь в договоре по использованию Viber bot Api четко прописано условие, по которому использование рекламы в сообщениях и приложениях запрещено)

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

Возможности сервиса

  • Api позволяет создавать Viber бота с помощью PHP
    , а это позволяет компании продвигать свою продукцию и услуги с помощью массовой рассылки
  • Загружать в приложение собственные коллекции стикеров
  • Создавать оригинальные приложения, которые будут взаимодействовать
    непосредственно с Вайбером
  • Viber Service messages Api предназначен для отправки разного рода сервисных сообщений
  • Отслеживать
    реакцию пользователей на собственную рассылку
  • С Вайбер Апи становится очень удобной организация и ведение паблик-чатов
    , посвященных собственной продукции или услугам
  • Предоставлять информацию не только пользователям, но и партнерам компании

Весь инструментарий Вибер Апи настолько велик, что одной статьи будет маловато для того, чтобы подробно рассказать, как им пользоваться. Кроме того (мы об этом упоминали), для грамотной работы с этой функцией нужно, как минимум, владеть языком программирования.

Читайте также о том, как разблокировать Вибер на телефоне в другой статьей на нашем сайте.

Library to develop a bot for the Viber platform. Create you first Viber bot step by step, see demo at viber://pa?chatURI=viber-bot-php&context=github.com

composer require bogdaan/viber-bot-php 
require_once
("
../vendor/autoload.php"

);
use
ViberBot
;
use
ViberApiSender
;
$apiKey
=
'
'

;
//
 reply name

$botSender
=
new
Sender
([
'
name'

=>
'
Whois bot'

,
'
avatar'

=>
'
https://developers.viber.com/img/favicon.ico'

,
]);
try
 {
$bot
=
new
Bot
(['
token'

=>
$apiKey
]);
$bot

->
onConversation(function
 ($event
) use
 ($bot
, $botSender
) {
//
 this event fires if user open chat, you can return "welcome message"

//
 to user, but you can't send more messages!

return
 (new
ViberApiMessage
Text
())
->
setSender($botSender
)
->
setText("
Can i help you?"

);
    })
->
onText('
|whois .*|si'

, function
 ($event
) use
 ($bot
, $botSender
) {
//
 match by template, for example "whois Bogdaan"

$bot
->
getClient()->
sendMessage(
            (new
ViberApiMessage
Text
())
->
setSender($botSender
)
->
setReceiver($event
->
getSender()->
getId())
->
setText("
I do not know )"

)
        );
    })
->
run();
} catch
 (Exception
$e
) {
//
 todo - log exceptions

}

See more in examples
directory.

. ├── Api │   ├── Entity.php                │   ├── Event                     # all remote events ("callbacks") │   │   ├── Conversation.php      # fires when user open 1v1 chat │   │   ├── Delivered.php         # fires when message delivered (for each device) │   │   ├── Factory.php           # Event factory │   │   ├── Failed.php            # fires when delivery failed (for each device) │   │   ├── Message.php           # fires when user send message │   │   ├── Seen.php              # fires when user read message (for each device) │   │   ├── Subscribed.php        # fires when user subscribe to PA │   │   ├── Type.php              # available types │   │   └── Unsubscribed.php      # fires when user unsubscribed │   ├── Event.php                 # base class for all events │   ├── Exception                 # │   │   └── ApiException.php      # remote or logic error │   ├── Keyboard                  # │   │   └── Button.php            # all types of buttons here │   ├── Keyboard.php              # button container │   ├── Message                   # │   │   ├── CarouselContent.php   # │   │   ├── Contact.php           # │   │   ├── Factory.php           # │   │   ├── File.php              # │   │   ├── Location.php          # │   │   ├── Picture.php           # │   │   ├── Sticker.php           # │   │   ├── Text.php              # │   │   ├── Type.php              # available message types │   │   ├── Url.php               # │   │   └── Video.php             # │   ├── Message.php               # base class for all messages │   ├── Response.php              # wrap api response │   ├── Sender.php                # represent bot-sender │   ├── Signature.php             # signature helper (verify or create sign) │   ├── User                      # │   │   └── State.php             # user state (online/offline etc) │   └── User.php                  # viber user ├── Bot                           # │   └── Manager.php               # manage bot closures ├── Bot.php                       # bot class └── Client.php                    # api client 
  • all api entities
  • validate request and response signs
  • provide webhook interface
  • provide event interface
  • wrap all api response to entities
  • validate api entities before submit?
  • implement log levels with monolog?
  • post on public page

Pull requests are welcome.

Рейтинг автора
5
Подборку подготовил
Андрей Ульянов
Наш эксперт
Написано статей
168
Ссылка на основную публикацию
Похожие публикации