
🤖 Lag en Viber-bot i PHP i 6 trinn: komplett guide
En bruker skriver i Viber, og ingen svarer. Et velkjent scenario for små bedrifter: én leder, tre meldingstjenester, og kundene går til dem som svarte først. En chatbot løser dette problemet radikalt: den jobber døgnet rundt, blir ikke sliten og reagerer umiddelbart.
Tidligere, før februar 2024, kunne man sette opp en enkel Viber-bot gratis på en halvtime. Nå er reglene annerledes. Viber har flyttet boter over på et kommersielt grunnlag, og du får ikke en token uten en offisiell søknad og en partner. Men hvis du allerede har en offentlig konto (eller setter den opp akkurat nå), er den tekniske delen, de samme seks trinnene i PHP, forblitt den samme. Vi gikk gjennom denne prosessen fra token til tilpasset tastatur og viser hvert trinn.
💡 Rask oversikt:
- Du oppretter en offentlig Viber-konto og får en autentiseringstoken: nå sendes den i HTTP-headeren, ikke i JSON-brødteksten
- Du setter opp en webhook med et HTTPS-sertifikat og skriver en PHP-behandler for innkommende callback-forespørsler
- Du implementerer mottak av meldinger og sending av svar via send message-API-et: tekst, bilder, filer
- Du legger til et tilpasset tastatur med hurtigsvar- og lenkeknapper, det viktigste navigasjonsverktøyet inne i boten
- Du skriver kode for den gjeldende Viber REST API-versjonen 7.3, ikke for utdaterte guider fra 2017
Trinn 1. Opprett en offentlig Viber-konto
Det første trinnet er å få en offentlig konto (Public Account, PA). Siden 5. februar 2024 opprettes boter kun på kommersiell basis gjennom offisielle Rakuten Viber-partnere. Prosessen ser slik ut:
- Du sender inn en søknad på Viber-siden for offentlige kontoer: virksomhetstype, scenarioer for bot-bruk.
- Etter godkjenning kommer en invitasjon. Du starter enheten på nytt, går til hovedskjermen for offentlige kontoer og trykker «Opprett offentlig konto».
- Du fyller inn detaljene: navn, beskrivelse, avatar. Hovedkontoen din i Viber blir tildelt som administrator.
Resultatet er en offentlig konto og tilgang til innstillinger. Det er her autentiseringstokenen dukker opp.
Boter støttes på iOS og Android fra Viber versjon 6.5 og høyere, og på desktop fra versjon 6.5.3. Hvis du har en gammel versjon av appen, oppdater den før du starter utviklingen, ellers vil ikke tastaturer og enkelte API-metoder fungere.
Trinn 2. Hent autentiseringstokenen
Tokenen (applikasjonsnøkkelen) er en unik, hemmelig identifikator for boten din. Uten den vil ingen API-forespørsel gå gjennom.
Etter at du har opprettet en offentlig konto, er tokenen tilgjengelig for administratoren i «Rediger info»-delen for den offentlige kontoen. En alternativ måte er via Viber Admin Panel. Tokenen ser omtrent slik ut:
455a0f2c05b4fe54-cb4e33d3200fbbae-95f29ebc06af09a8
Dette er en demo-nøkkel, din vil ha unike tegn, men samme struktur.

Den største endringen sammenlignet med gamle guider: fra og med API-versjon 7.0 sendes tokenen ikke i brødteksten til POST-forespørselen, men i HTTP-headeren X-Viber-Auth-Token. Hvis du sender tokenen på den gamle måten, som et auth_token-felt i JSON, vil API-et returnere en missing_auth_token-feil.
Gammelt format (fungerer ikke lenger):
1 {"auth_token": "your_token", "url": "https://..."}
Moderne tilnærming, header:
1 X-Viber-Auth-Token: your_token
Hold tokenen hemmelig. Alle som har den, kan sende meldinger til abonnentene dine på vegne av boten.
Trinn 3. Sett opp webhooken og skriv en PHP-behandler
En webhook er en URL på serveren din som Viber sender callback-forespørsler til: meldinger fra brukere, abonnementsvarsler og andre hendelser.
Krav til webhook-URL:
- HTTPS-protokoll med et gyldig SSL-sertifikat fra en klarert sertifikatutsteder. Viber støtter ikke selvsignerte sertifikater.
- Sertifikatet må være i Sun Java trusted list, sjekk dette før oppsett.
Oppsett av webhooken er en POST-forespørsel til https://chatapi.viber.com/pa/set_webhook. I X-Viber-Auth-Token-headeren legger du tokenen din. Brødtekst i forespørselen:
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 }
Parametere:
url, webhook-URL-en din (påkrevd, HTTPS).event_types, hendelser for callback. Obligatoriske og kan ikke filtreres bort: message, subscribed og unsubscribed. Resten er valgfrie.send_nameogsend_photo, om man skal be om brukerens navn og bilde. Fungerer bare hvis brukeren har aktivert «Innholdstilpasning» i Viber-personverninnstillingene.
Vi sender forespørselen via cURL:
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); 13 curl_setopt($ch, CURLOPT_POST, 1); 14 curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData); 15 curl_setopt($ch, CURLOPT_HTTPHEADER, [ 16 'Content-Type: application/json', 17 'X-Viber-Auth-Token: your_auth_token' 18 ]); 19 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 20 $result = curl_exec($ch); 21 curl_close($ch); 22 23 echo $result;
Etter sending vil Viber sende et tilbakekall til webhook-URL-en din for å bekrefte tilgjengelighet. En HTTP 200-respons forventes. Tilbakekalldata:
1 { 2 "event": "webhook", 3 "timestamp": 1457764197627, 4 "message_token": 241256543215 5 }
PHP-behandleren din bør returnere en respons:
1 { 2 "status": 0, 3 "status_message": "ok", 4 "event_types": ["delivered", "seen", "failed", "subscribed", "unsubscribed", "conversation_started", "message"] 5 }
Fullstendig kode for webhook-behandler, filen viber-webhook.php på serveren:
1 <?php 2 3 $request = file_get_contents("php://input"); 4 $input = json_decode($request, true); 5 6 if ($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 } 13 elseif ($input['event'] == "subscribed") { 14 // User subscribed — can send a welcome message 15 } 16 elseif ($input['event'] == "conversation_started") { 17 // User opened chat — can send a menu 18 } 19 elseif ($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 }
Etter vellykket webhook-oppsett vil en 1-til-1-chatknapp vises i boten, og brukere kan starte en dialog. For å deaktivere dette alternativet sender du set_webhook med en tom url.
Trinn 4. Motta meldinger fra brukere
Når en bruker skriver til boten, sender Viber et tilbakekall til webhooken din i dette formatet:
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 }
Nøkkelfelt å analysere:
Felt | Plassering | Beskrivelse |
|---|---|---|
| Rot | Verdien |
|
| Unik Viber-ID, lagre den, du trenger den for å sende et svar |
|
| Brukerens navn (hvis personalisering er tillatt) |
|
| Meldingstype: text, picture, video, file, location, contact, sticker eller url |
|
| Meldingstekst (for typen |
| Rot | Unik meldings-ID, for sporing av leveringsstatus |
Hva som er viktig å gjøre i behandleren:
- Lagre
sender.id → name/context-lenken i databasen. Viber API har ingen metode for «hent alle abonnenter», du akkumulerer ID-er selv etter hvert som forespørsler kommer inn. - Hvis brukeren sendte et bilde (
type: "picture"), ligger fil-URL-en imessage.media. - Ikke ignorer
tracking_data: den kobler brukerens svar til din utgående melding, uvurderlig for dialoganalyse.
Trinn 5. Send meldinger til brukere
send_message-API-et støtter tekst, bilder, videoer, filer, lokasjoner, kontakter, klistremerker, karuseller og URL-forhåndsvisninger. La oss dekke hovedtypene.
Tekstmelding. POST-forespørsel til https://chatapi.viber.com/pa/send_message med X-Viber-Auth-Token-header:
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 }
Parameter | Beskrivelse |
|---|---|
| Unik Viber-ID for mottakeren (den samme |
| Meldingstype: text, picture, video, file, location, contact, sticker, carousel eller url |
| Meldingstekst, opptil 7000 tegn |
| Vist avsendernavn, opptil 28 tegn |
| Vilkårlig streng opptil 4096 tegn, vil bli returnert i tilbakekall når brukeren svarer |
Sende et bilde:
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, bilde-URL (kun JPEG).thumbnail, miniatyrbilde-URL (også JPEG).text, beskrivelse, kan værenull.
PHP-funksjon for sending av meldinger, en universell wrapper vi bruker i praksis:
1 <?php 2 3 function 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 }
Begrensning: maksimal størrelse på JSON-forespørsel er 30 KB. Ta hensyn til dette når du sender karuseller med mange elementer.
Steg 6. Legg til et tilpasset tastatur med knapper
Tastaturet erstatter enhetens standardtastatur med et sett knapper: hurtigsvar, lenker til nettstedet, overganger til seksjoner. Dette er hovednavigasjonsverktøyet inne i boten.
Tastaturet legges ved enhver meldingstype via feltet keyboard i send_message-forespørselen:
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 }

Tastaturparametere:
Parameter | Beskrivelse |
|---|---|
| Visningstype. Kun |
| HEX-bakgrunnsfarge for tastaturet |
|
|
Parametere for hver knapp:
Parameter | Mulige verdier |
|---|---|
| 1-6, bredde i kolonner |
| 1 eller 2, høyde i rader |
|
|
| Svar-tekst eller lenke-URL |
| Knappetekst. Støtter HTML-tagger: b, i, u, br og span style |
| HEX-knappefarge |
|
|
| URL til bakgrunnsbilde eller GIF |
| URL til bilde oppå bakgrunnen |
| top, middle eller bottom |
| left, center eller right |
| small, regular eller large |
Noen viktige nyanser fra praksis:
- En knapp med
ActionType: "open-url"åpner lenken i en ekstern nettleser, ikke inne i Viber. - Ikke overbelast tastaturet: 4-6 knapper er optimalt for én skjerm.
- Bakgrunns-GIF-er i knapper (
BgMedia) støtter looping viaBgLoop: true.
Fra dette punktet er boten klar til bruk: den mottar meldinger, svarer med tekst og bilder, viser et meny-tastatur.
I denne videoen vises en live-demonstrasjon av hele syklusen: fra å opprette en offentlig konto til å sende den første meldingen med et tastatur. Nyttig å se før du kjører koden på din egen server.
⁉️🤔 Ofte stilte spørsmål
Er det mulig å opprette en Viber-bot gratis i 2026?
Nei. Siden 5. februar 2024 har Viber flyttet bot-opprettelse utelukkende til kommersielle vilkår. For å få en token må du kontakte Rakuten Viber direkte eller en av de offisielle partnerne. Gratis testkontoer utstedes ikke lenger. Boter opprettet før denne datoen fortsetter å fungere.
Er det obligatorisk å bruke PHP for en Viber-bot?
Nei, språket spiller ingen rolle. Viber API fungerer via HTTP POST/GET-forespørsler, enhver backend kan brukes: Node.js, Python, Go, Ruby. Vi viser PHP fordi det er det vanligste språket på WordPress-hosting og delte servere, tilgjengelig for de fleste nettstedseiere uten ekstra miljøoppsett.
Hvordan sjekker jeg at webhooken fungerer?
Etter å ha kalt
set_webhook, sender Viber umiddelbart et tilbakekall med"event": "webhook"til URL-en din. Serveren returnerer HTTP 200, webhooken er aktiv. Du kan sjekke gjeldende status med et gjentattset_webhook-kall med de samme parameterne, API-svaret vil vise registrerteevent_types. For feilsøking, bruk logging avfile_get_contents("php://input")til en fil på serveren.
Hva er forskjellen mellom den gamle autentiseringsmetoden og den nye?
Før API versjon 7.0 ble tokenet sendt i JSON-brødteksten i hver forespørsel som feltet
auth_token. Det moderne API-et (7.0+) krever at tokenet sendes i HTTP-headerenX-Viber-Auth-Token. Det gamle formatet støttes ikke, forespørsler medauth_tokeni brødteksten returnerer enmissing_auth_token-feil. Hvis du migrerer kode fra guider fra 2017-2023, erstatt token-overføring med en header.
Hva gjør jeg hvis brukeren ikke ser tastaturet?
Tre sannsynlige årsaker: (1) JSON-forespørselen overskred grensen på 30 KB, reduser antall knapper eller fjern bakgrunnsmedia; (2) feltet
Typeinneholder noe annet enn"keyboard", dette er den eneste støttede verdien; (3) brukeren er på en gammel versjon av Viber, tastaturer støttes fra versjon 6.5.
Kan jeg slette webhooken og deaktivere 1-til-1-chat?
Ja, send
set_webhookmed en tom streng iurl:
1 {"url": ""}
Chat-knappen vil forsvinne, men tokenet og den offentlige kontoen bevares. Nyttig når du flytter en bot til en annen server.
Hva du bør velge i 2026: din egen PHP-bot eller en no-code-plattform
Hvis du har lest så langt, har du to veier foran deg. Den første er å skrive en bot i PHP ved å følge trinnene ovenfor. Du får full kontroll over logikk, data og hosting. Egnet når boten er en del av et større prosjekt: nettbutikk, supporttjeneste, internt teamverktøy.
Den andre veien er no-code-plattformer som SendPulse, Infobip eller Kommunicate. De håndterer webhook-infrastrukturen og tilbyr en visuell editor for scenarier. Prisen er et månedlig abonnement og begrensninger i gratisversjonen. For typiske oppgaver som FAQ-autosvar, kampanjeutsendelser, er dette mer enn nok.
I praksis kombinerer vi vanligvis: bot-kjernen i PHP for tilpasset logikk, og vi setter sammen tastaturer og velkomstkjeder i plattformens visuelle editor, raskere og mer visuelt. Velg det som ligger nærmest dine ferdigheter og oppgave. Start med det første trinnet i dag, en offentlig konto settes opp på en halvtime, og deretter tar hvert neste trinn nøyaktig så lang tid som det tar å kopiere og tilpasse koden fra denne guiden.



