Skip to content

Kõik WordPressist, veebiarendusest — ja mitte ainult

🤖 Loo Viberi bot PHP-s 6 sammuga: täielik juhend

🤖 Loo Viberi bot PHP-s 6 sammuga: täielik juhend

Kasutaja kirjutab Viberis ja keegi ei vasta. Väikeettevõtetele tuttav stsenaarium: üks haldur, kolm suhtlusrakendust ja kliendid lahkuvad nende juurde, kes vastasid esimesena. Vestlusrobot lahendab selle probleemi radikaalselt: see töötab ööpäevaringselt, ei väsi ja reageerib koheselt.

Varem, enne 2024. aasta veebruari, sai lihtsa Viberi roboti tasuta poole tunniga tööle panna. Nüüd on reeglid teised. Viber on robotid täielikult ärilisele alusele viinud, ilma ametliku taotluse ja partnerita ei saa tokenit. Aga kui sul juba on avalik konto (või seadistad seda just praegu), siis tehniline pool, needsamad kuus sammu PHP-s, on jäänud samaks. Käisime selle tee tokenist kohandatud klaviatuurini läbi ja näitame iga sammu.

💡 Kiirülevaade:

  • Lood Viberi avaliku konto ja hangid autentimistokeni: nüüd edastatakse see HTTP päises, mitte JSON-i kehas
  • Seadistad veebihaagi koos HTTPS-sertifikaadiga ja kirjutad PHP töötleja sissetulevatele tagasikutse päringutele
  • Rakendad sõnumite vastuvõtmise ja vastuste saatmise läbi sõnumite saatmise API: tekst, pildid, failid
  • Lisad kohandatud klaviatuuri kiirvastuse ja linginuppudega, mis on roboti peamine navigeerimisvahend
  • Kirjutad koodi kehtivale Viber REST API versioonile 7.3, mitte aegunud 2017. aasta juhenditele

Samm 1. Loo Viberi avalik konto

Esimene samm on hankida avalik konto (PA). Alates 5. veebruarist 2024 luuakse roboteid ainult ärilisel alusel ametlike Rakuten Viberi partnerite kaudu. Protsess näeb välja selline:

  • Esitad taotluse Viberi avalike kontode lehel: ettevõtte tüüp, roboti kasutusstsenaariumid.
  • Pärast kinnitamist saabub kutse. Taaskäivitad seadme, lähed avalike kontode põhiekraanile ja vajutad „Loo avalik konto".
  • Täidad üksikasjad: nimi, kirjeldus, avatar. Sinu peamine Viberi konto määratakse administraatoriks.

Tulemuseks on avalik konto ja juurdepääs seadetele. Siin ilmubki autentimistoken.

Roboteid toetatakse iOS-is ja Androidis alates Viberi versioonist 6.5 ja uuemast ning töölauaversioonil alates 6.5.3. Kui sul on rakenduse vana versioon, uuenda see enne arenduse alustamist, vastasel juhul ei tööta klaviatuurid ja mõned API meetodid.

Samm 2. Hangi autentimistoken

Token (rakenduse võti) on sinu roboti unikaalne salajane identifikaator. Ilma selleta ei lähe ükski API päring läbi.

Pärast avaliku konto loomist on token administraatorile saadaval avaliku konto jaotises „Muuda infot". Alternatiivne viis on Viberi administraatori paneeli kaudu. Token näeb välja umbes selline:

455a0f2c05b4fe54-cb4e33d3200fbbae-95f29ebc06af09a8

See on demovõti, sinu omal on unikaalsed märgid, kuid sama struktuur.

Viberi avaliku konto andmete muutmise leht tokeniga

Peamine muudatus võrreldes vanade juhenditega: alates API versioonist 7.0 edastatakse token mitte POST-päringu kehas, vaid X-Viber-Auth-Token HTTP päises. Kui saadad tokeni vanal viisil, auth_token väljana JSON-is, tagastab API missing_auth_token vea.

Vana formaat (enam ei tööta):

1{"auth_token": "your_token", "url": "https://..."}

Kaasaegne lähenemine, päis:

1X-Viber-Auth-Token: your_token

Hoia token saladuses. Igaüks, kellel see on, saab roboti nimel sinu tellijatele sõnumeid saata.

Samm 3. Seadista veebihaak ja kirjuta PHP töötleja

Veebihaak on URL sinu serveris, kuhu Viber saadab tagasikutse päringuid: kasutajate sõnumeid, tellimise teateid ja muid sündmusi.

Veebihaagi URL-i nõuded:

  • HTTPS protokoll kehtiva SSL-sertifikaadiga usaldusväärselt sertifitseerimisasutuselt. Viber ei toeta iseallkirjastatud sertifikaate.
  • Sertifikaat peab olema Sun Java usaldusväärses nimekirjas, kontrolli enne seadistamist.

Veebihaagi seadistamine on POST-päring aadressile https://chatapi.viber.com/pa/set_webhook. X-Viber-Auth-Token päises on sinu token. Päringu keha:

1{
2 "url": "https://yourdomain.com/viber-webhook.php",
3 "event_types": ["delivered", "seen", "failed", "subscribed", "unsubscribed", "conversation_started"],
4 "send_name": true,
5 "send_photo": true
6}

Parameetrid:

  • url, sinu veebihaagi URL (kohustuslik, HTTPS).
  • event_types, sündmused tagasikutse jaoks. Kohustuslikud ja mittefiltreeritavad: message, subscribed ja unsubscribed. Ülejäänud on valikulised.
  • send_name ja send_photo, kas küsida kasutaja nime ja fotot. Töötab ainult siis, kui kasutaja on Viberi privaatsusseadetes lubanud „Sisu isikupärastamise".

Saadame päringu cURL kaudu:

1<?php
2
3$url = 'https://chatapi.viber.com/pa/set_webhook';
4
5$jsonData = json_encode([
6 'url' => 'https://yourdomain.com/viber-webhook.php',
7 'event_types' => ['delivered', 'seen', 'failed', 'subscribed', 'unsubscribed', 'conversation_started'],
8 'send_name' => true,
9 'send_photo' => true
10]);
11
12$ch = curl_init($url);
13curl_setopt($ch, CURLOPT_POST, 1);
14curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
15curl_setopt($ch, CURLOPT_HTTPHEADER, [
16 'Content-Type: application/json',
17 'X-Viber-Auth-Token: your_auth_token'
18]);
19curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
20$result = curl_exec($ch);
21curl_close($ch);
22
23echo $result;

Pärast saatmist saadab Viber sinu veebihaagi URL-ile tagasikutse, et kontrollida kättesaadavust. Oodatakse HTTP 200 vastust. Tagasikutse andmed:

1{
2 "event": "webhook",
3 "timestamp": 1457764197627,
4 "message_token": 241256543215
5}

Sinu PHP töötleja peaks tagastama vastuse:

1{
2 "status": 0,
3 "status_message": "ok",
4 "event_types": ["delivered", "seen", "failed", "subscribed", "unsubscribed", "conversation_started", "message"]
5}

Täielik veebihaagi töötleja kood, fail viber-webhook.php serveris:

1<?php
2
3$request = file_get_contents("php://input");
4$input = json_decode($request, true);
5
6if ($input['event'] == 'webhook') {
7 $webhook_response['status'] = 0;
8 $webhook_response['status_message'] = "ok";
9 $webhook_response['event_types'] = 'delivered';
10 echo json_encode($webhook_response);
11 die;
12}
13elseif ($input['event'] == "subscribed") {
14 // User subscribed — can send a welcome message
15}
16elseif ($input['event'] == "conversation_started") {
17 // User opened chat — can send a menu
18}
19elseif ($input['event'] == "message") {
20 $type = $input['message']['type'];
21 $text = $input['message']['text'];
22 $sender_id = $input['sender']['id'];
23 $sender_name = $input['sender']['name'];
24
25 // Form response
26 $data = [
27 'receiver' => $sender_id,
28 'type' => 'text',
29 'text' => "Hello, $sender_name! You wrote: $text",
30 'sender' => [
31 'name' => 'My Viber Bot'
32 ]
33 ];
34
35 $ch = curl_init("https://chatapi.viber.com/pa/send_message");
36 curl_setopt($ch, CURLOPT_POST, 1);
37 curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
38 curl_setopt($ch, CURLOPT_HTTPHEADER, [
39 'Content-Type: application/json',
40 'X-Viber-Auth-Token: your_auth_token'
41 ]);
42 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
43 $result = curl_exec($ch);
44 curl_close($ch);
45}

Pärast edukat veebihaagi seadistamist ilmub botis 1:1 vestluse nupp ja kasutajad saavad dialoogi alustada. Selle valiku keelamiseks saada set_webhook tühja url-iga.

Samm 4. Sõnumite vastuvõtmine kasutajatelt

Kui kasutaja kirjutab botile, saadab Viber sinu veebihaagile tagasikutse sellises vormingus:

1{
2 "event": "message",
3 "timestamp": 1457764197627,
4 "message_token": 4912661846655238145,
5 "sender": {
6 "id": "01234567890A=",
7 "name": "yarden",
8 "avatar": "http://avatar_url"
9 },
10 "message": {
11 "type": "text",
12 "text": "a message to the service",
13 "media": "http://download_url",
14 "location": {
15 "lat": 50.76891,
16 "lon": 6.11499
17 },
18 "tracking_data": "tracking data"
19 }
20}

Peamised parsimist vajavad väljad:

Väli

Asukoht

Kirjeldus

event

Juurtase

Väärtus "message" tähendab, et tegu on kasutaja sõnumiga

sender.id

sender

Unikaalne Viberi ID, salvesta see, vajad seda vastuse saatmiseks

sender.name

sender

Kasutaja nimi (kui isikupärastamine on lubatud)

message.type

message

Sõnumi tüüp: text, picture, video, file, location, contact, sticker või url

message.text

message

Sõnumi tekst (tüübi text korral)

message_token

Juurtase

Unikaalne sõnumi ID, kohaletoimetamise staatuse jälgimiseks

Mida on töötlejas oluline teha:

  • Salvesta sender.id → name/context link andmebaasi. Viber API-l pole „kõigi tellijate hankimise" meetodit, sa kogud ID-sid ise päringute laekumise käigus.
  • Kui kasutaja saatis pildi (type: "picture"), on faili URL väljal message.media.
  • Ära ignoreeri tracking_data välja: see seob kasutaja vastuse sinu väljasaadetud sõnumiga, mis on dialoogianalüütika jaoks hindamatu väärtusega.

Samm 5. Sõnumite saatmine kasutajatele

send_message API toetab teksti, pilte, videoid, faile, asukohti, kontakte, kleepse, karusselle ja URL-i eelvaateid. Vaatame peamisi tüüpe.

Tekstsõnum. POST-päring aadressile https://chatapi.viber.com/pa/send_message koos X-Viber-Auth-Token päisega:

1{
2 "receiver": "01234567890A=",
3 "type": "text",
4 "text": "Hello! How can I help you?",
5 "sender": {
6 "name": "Support Bot"
7 },
8 "tracking_data": "welcome_message_001"
9}

Parameeter

Kirjeldus

receiver

Saaja unikaalne Viberi ID (seesama sender.id tagasikutsest)

type

Sõnumi tüüp: text, picture, video, file, location, contact, sticker, carousel või url

text

Sõnumi tekst, kuni 7000 tähemärki

sender.name

Kuvatav saatja nimi, kuni 28 tähemärki

tracking_data

Suvaline sõne kuni 4096 tähemärki, tagastatakse tagasikutses, kui kasutaja vastab

Pildi saatmine:

1{
2 "receiver": "01234567890A=",
3 "type": "picture",
4 "text": "March 2026 promotion",
5 "media": "https://yourdomain.com/img/promo.jpg",
6 "thumbnail": "https://yourdomain.com/img/promo_thumb.jpg",
7 "sender": {
8 "name": "Shop Bot"
9 }
10}
  • media, pildi URL (ainult JPEG).
  • thumbnail, pisipildi URL (samuti JPEG).
  • text, kirjeldus, võib olla null.

PHP funktsioon sõnumite saatmiseks, universaalne ümbris, mida me praktikas kasutame:

1<?php
2
3function sendViberMessage($receiverId, $type, $data, $trackingData = '') {
4 $token = 'your_auth_token';
5 $apiUrl = 'https://chatapi.viber.com/pa/send_message';
6
7 $payload = array_merge(['receiver' => $receiverId, 'type' => $type], $data);
8
9 if ($trackingData) {
10 $payload['tracking_data'] = $trackingData;
11 }
12
13 $ch = curl_init($apiUrl);
14 curl_setopt($ch, CURLOPT_POST, 1);
15 curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
16 curl_setopt($ch, CURLOPT_HTTPHEADER, [
17 'Content-Type: application/json',
18 "X-Viber-Auth-Token: $token"
19 ]);
20 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
21 $result = curl_exec($ch);
22 curl_close($ch);
23
24 return json_decode($result, true);
25}

Piirang: JSON-päringu maksimaalne suurus on 30 KB. Arvesta sellega, kui saadad paljude elementidega karusselle.

6. Samm. Lisa kohandatud klaviatuur nuppudega

Klaviatuur asendab seadme standardse klaviatuuri nuppude komplektiga: kiirvastused, lingid saidile, üleminekud jaotistesse. See on boti peamine navigatsioonitööriist.

Klaviatuur kinnitatakse mis tahes sõnumitüübile send_message päringu keyboard välja kaudu:

1{
2 "receiver": "01234567890A=",
3 "type": "text",
4 "text": "What are you interested in?",
5 "sender": {
6 "name": "Help Bot"
7 },
8 "keyboard": {
9 "Type": "keyboard",
10 "BgColor": "#FFFFFF",
11 "Buttons": [
12 {
13 "Columns": 6,
14 "Rows": 1,
15 "BgColor": "#2db9b9",
16 "ActionType": "reply",
17 "ActionBody": "Services",
18 "Text": "📋 Services",
19 "TextVAlign": "middle",
20 "TextHAlign": "center",
21 "TextSize": "regular"
22 },
23 {
24 "Columns": 6,
25 "Rows": 1,
26 "BgColor": "#2db9b9",
27 "ActionType": "open-url",
28 "ActionBody": "https://yoursite.com/prices",
29 "Text": "💰 Prices",
30 "TextVAlign": "middle",
31 "TextHAlign": "center",
32 "TextSize": "regular"
33 }
34 ]
35 }
36}
Viberi jutiroboti kohandatud klaviatuuri näide navigeerimisnuppudega

Klaviatuuri parameetrid:

Parameeter

Kirjeldus

Type

Kuvamise tüüp. Praegu on saadaval ainult "keyboard"

BgColor

Klaviatuuri taustavärv HEX-koodina

DefaultHeight

true või false, kasuta vaikekõrgust

Iga nupu parameetrid:

Parameeter

Võimalikud väärtused

Columns

1-6, laius veergudes

Rows

1 või 2, kõrgus ridades

ActionType

"reply" saadab teksti; "open-url" avab lingi

ActionBody

Vastuse tekst või lingi URL

Text

Nupu silt. Toetab HTML-silte: b, i, u, br ja span style

BgColor

Nupu värv HEX-koodina

BgMediaType

"picture" või "gif", taustameedia tüüp

BgMedia

Taustapildi või GIF-i URL

Image

Tausta peal oleva pildi URL

TextVAlign

top, middle või bottom

TextHAlign

left, center või right

TextSize

small, regular või large

Mõned olulised nüansid praktikast:

  • ActionType: "open-url" nupp avab lingi välises brauseris, mitte Viberi sees.
  • Ära koorma klaviatuuri üle: 4-6 nuppu on ühe ekraani jaoks optimaalne.
  • Nuppude tausta-GIF-id (BgMedia) toetavad kordamist parameetriga BgLoop: true.

Sellest punktist alates on bot töövalmis: see võtab vastu sõnumeid, vastab teksti ja piltidega, kuvab menüüklaviatuuri.

Selles videos on otseesitlus kogu tsüklist: avaliku konto loomisest kuni esimese klaviatuuriga sõnumi saatmiseni. Kasulik vaadata enne koodi enda serveris käivitamist.

⁉️🤔 Korduma kippuvad küsimused

Kas 2026. aastal on võimalik Viberi botti tasuta luua?

Ei. Alates 5. veebruarist 2024 on Viber viinud boti loomise üle ainult ärilistele tingimustele. Tokeni saamiseks peate otse ühendust võtma Rakuten Viberi või mõne ametliku partneriga. Tasuta testkontosid enam ei väljastata. Enne seda kuupäeva loodud botid jätkavad tööd.

Kas Viberi boti jaoks on PHP kasutamine kohustuslik?

Ei, keel ei ole oluline. Viber API töötab HTTP POST/GET päringute kaudu, sobib iga backend: Node.js, Python, Go, Ruby. Näitame PHP-d, sest see on kõige levinum keel WordPressi majutusel ja jagatud serveritel, mis on enamikule saidiomanikest kättesaadav ilma täiendava keskkonna seadistamiseta.

Kuidas kontrollida, kas webhook töötab?

Pärast set_webhook väljakutset saadab Viber kohe teie URL-ile callbacki sündmusega "event": "webhook". Server tagastab HTTP 200, webhook on aktiivne. Praegust olekut saate kontrollida korduva set_webhook väljakutsega samade parameetritega, API vastus näitab registreeritud event_types. Silumiseks kasutage serveris faili logimist käsuga file_get_contents("php://input").

Mis vahe on vana ja uue autentimismeetodi vahel?

Enne API versiooni 7.0 edastati token iga päringu JSON-kehas auth_token väljana. Kaasaegne API (7.0+) nõuab tokeni edastamist X-Viber-Auth-Token HTTP päises. Vana vormingut ei toetata, auth_token-iga kehas päringud tagastavad missing_auth_token vea. Kui migreerite koodi 2017-2023 juhenditest, asendage tokeni edastamine päisega.

Mida teha, kui kasutaja ei näe klaviatuuri?

Kolm tõenäolist põhjust: (1) JSON-päring ületas 30 KB piirangut, vähendage nuppude arvu või eemaldage taustameedia; (2) Type väli sisaldab midagi muud kui "keyboard", see on ainus toetatud väärtus; (3) kasutaja on Viberi vanas versioonis, klaviatuure toetatakse alates versioonist 6.5.

Kas ma saan webhooki kustutada ja 1:1 vestluse keelata?

Jah, saatke set_webhook tühja stringiga url-is:

1{"url": ""}

Vestlusnupp kaob, kuid token ja avalik konto säilivad. Kasulik boti teise serverisse kolimisel.

Mida valida 2026. aastal: oma PHP bot või koodivaba platvorm

Kui olete siiani lugenud, on teil ees kaks teed. Esimene on kirjutada bot PHP-s, järgides ülaltoodud samme. Saate täieliku kontrolli loogika, andmete ja majutuse üle. Sobib, kui bot on osa suuremast projektist: veebipood, tugiteenus, sisemine meeskonnatööriist.

Teine tee on koodivabad platvormid nagu SendPulse, Infobip või Kommunicate. Need haldavad webhooki infrastruktuuri ja pakuvad stsenaariumide jaoks visuaalset redaktorit. Hinnaks on igakuine tellimus ja tasuta paketi piirangud. Tüüpiliste ülesannete jaoks, nagu KKK automaatvastused, reklaamikirjad, on see enam kui piisav.

Praktikas me tavaliselt kombineerime: boti tuum on PHP-s kohandatud loogika jaoks ning klaviatuurid ja tervitusahelad paneme kokku platvormi visuaalses redaktoris, see on kiirem ja visuaalsem. Valige see, mis on teie oskustele ja ülesandele lähemal. Alustage juba täna esimese sammuga, avalik konto on seadistatud poole tunniga ja seejärel võtab iga järgmine samm täpselt nii kaua, kui kulub selle juhendi koodi kopeerimiseks ja kohandamiseks.