Skip to content

Alt om WordPress, webutvikling — og mer til

🤖 Lag en Viber-bot i PHP i 6 trinn: komplett guide

🤖 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.

Redigeringsside for Viber offentlig konto-data med token

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:

1X-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_name og send_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);
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;

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
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}

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

event

Rot

Verdien "message" betyr at dette er en melding fra en bruker

sender.id

sender

Unik Viber-ID, lagre den, du trenger den for å sende et svar

sender.name

sender

Brukerens navn (hvis personalisering er tillatt)

message.type

message

Meldingstype: text, picture, video, file, location, contact, sticker eller url

message.text

message

Meldingstekst (for typen text)

message_token

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 i message.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

receiver

Unik Viber-ID for mottakeren (den samme sender.id fra tilbakekallet)

type

Meldingstype: text, picture, video, file, location, contact, sticker, carousel eller url

text

Meldingstekst, opptil 7000 tegn

sender.name

Vist avsendernavn, opptil 28 tegn

tracking_data

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ære null.

PHP-funksjon for sending av meldinger, en universell wrapper vi bruker i praksis:

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}

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}
Eksempel på Viber chatbot tilpasset tastatur med navigasjonsknapper

Tastaturparametere:

Parameter

Beskrivelse

Type

Visningstype. Kun "keyboard" er tilgjengelig for øyeblikket

BgColor

HEX-bakgrunnsfarge for tastaturet

DefaultHeight

true eller false, bruk standardhøyde

Parametere for hver knapp:

Parameter

Mulige verdier

Columns

1-6, bredde i kolonner

Rows

1 eller 2, høyde i rader

ActionType

"reply" sender tekst; "open-url" åpner lenke

ActionBody

Svar-tekst eller lenke-URL

Text

Knappetekst. Støtter HTML-tagger: b, i, u, br og span style

BgColor

HEX-knappefarge

BgMediaType

"picture" eller "gif", bakgrunnsmediatype

BgMedia

URL til bakgrunnsbilde eller GIF

Image

URL til bilde oppå bakgrunnen

TextVAlign

top, middle eller bottom

TextHAlign

left, center eller right

TextSize

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 via BgLoop: 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 gjentatt set_webhook-kall med de samme parameterne, API-svaret vil vise registrerte event_types. For feilsøking, bruk logging av file_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-headeren X-Viber-Auth-Token. Det gamle formatet støttes ikke, forespørsler med auth_token i brødteksten returnerer en missing_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 Type inneholder 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_webhook med en tom streng i url:

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.