Skip to content

Webhook ​

Webhook mengirim event dari Repliz ke server Anda sendiri begitu event itu terjadi: komentar baru, DM baru, orang yang datang dari iklan atau tautan Anda, dan hasil setiap postingan terjadwal. Gunakan untuk menyimpannya di database, meneruskannya ke aplikasi lain, atau menjalankan alur kerja Anda sendiri.

Sebelum memulai ​

  • Paket Standard, Premium, atau Gold. Di paket Free, halaman Webhook terkunci.
  • Sebuah URL di server Anda yang menerima request POST berisi JSON dan menjawab dengan status 2xx. Gunakan HTTPS.
  • Sebuah token rahasia pilihan Anda. Repliz mengirimkannya di setiap request supaya server Anda bisa memastikan request itu datang dari Repliz.

Mengatur webhook ​

  1. Buka Pengaturan → Webhook. Menunya ada di bawah Integrasi pada menu pengaturan.

    Halaman Webhook di Pengaturan, dengan menu Webhook disorotHalaman Webhook di Pengaturan, dengan menu Webhook disorot
  2. Di bagian Endpoint, isi URL dan Token.

  3. Klik Simpan.

    Form Endpoint dengan URL dan token terisi serta tombol Simpan disorotForm Endpoint dengan URL dan token terisi serta tombol Simpan disorot

Saat Anda menyimpan, Repliz lebih dulu mengirim event uji ini ke URL tersebut:

json
{
  "platform": "testing",
  "type": "testing",
  "accountId": "testing",
  "data": {}
}

Jika server Anda menjawab dengan status 2xx, Repliz menampilkan Webhook tersimpan dan mulai mengirim event. Jika tidak, Repliz menampilkan invalid webhook url dan tetap memakai pengaturan sebelumnya.

Untuk menghentikan webhook, kosongkan URL lalu klik Simpan.

Memeriksa token ​

Setiap request membawa token Anda di header x-token. Bandingkan dengan token yang Anda simpan dan tolak request yang tidak cocok. Jawab dengan status 2xx begitu event diterima, lalu kerjakan proses yang lama sesudahnya.

js
import express from 'express'

const app = express()
app.use(express.json({ limit: '1mb' }))

app.post('/repliz', (req, res) => {
  if (req.get('x-token') !== process.env.REPLIZ_WEBHOOK_TOKEN) {
    return res.sendStatus(401)
  }

  const { platform, type, accountId, data } = req.body

  // Event uji yang dikirim saat webhook disimpan
  if (type === 'testing') return res.sendStatus(200)

  res.sendStatus(200)

  if (type === 'comment') {
    console.log(`Komentar ${platform} baru:`, data.comment.text)
  }
})

app.listen(3000)
php
<?php
$token = $_SERVER['HTTP_X_TOKEN'] ?? '';
if (!hash_equals(getenv('REPLIZ_WEBHOOK_TOKEN'), $token)) {
    http_response_code(401);
    exit;
}

$event = json_decode(file_get_contents('php://input'), true);
http_response_code(200);

if ($event['type'] === 'comment') {
    error_log('Komentar baru: ' . $event['data']['comment']['text']);
}

Memakai n8n atau alat automasi lain

Arahkan webhook ke node Webhook (method POST) di n8n, atau ke URL webhook dari alat automasi apa pun. Di n8n, atur autentikasinya ke Header Auth dengan nama header x-token dan token Anda sebagai nilainya.

Payload ​

Setiap event berupa objek JSON dengan field teratas yang sama:

FieldIsinya
platformfacebook, instagram, threads, tiktok, youtube, linkedin, atau telegram; repliz untuk jadwal
typecomment, chat, referral, atau schedule
accountIdAkun Repliz pemilik event, ID yang sama dengan Salin ID di Integrasi Akun
dataEvent-nya. Bentuknya tergantung type, lihat di bawah
rawEvent persis seperti yang dikirim platform ke Repliz. Tidak ada untuk schedule

Jenis event ​

typeDikirim saatPlatform
commentSeseorang berkomentar di unggahan akun yang terhubungFacebook, Instagram, Threads, TikTok, YouTube, LinkedIn
chatDM masuk. Di Facebook, Instagram, dan Telegram, juga saat akun Anda mengirim DMFacebook, Instagram, TikTok, Telegram
referralSeseorang memulai percakapan dari iklan Anda atau dari tautan dengan refFacebook, Instagram
schedulePostingan terjadwal berhasil dipublikasikan, atau gagalSemua platform tujuan jadwal

Platform yang tidak tercantum untuk sebuah event tidak mengirim event webhook.

YouTube tidak memberi tahu aplikasi saat ada komentar baru, jadi Repliz memeriksa setiap channel setiap 1 sampai 10 menit dan mengirim event comment setelah pemeriksaan itu. Yang dikirim hanya komentar utama, bukan balasan di dalam thread komentar. Untuk YouTube, raw berisi komentar seperti yang dibaca Repliz: accountId, contentId (ID video), dan comment.

comment ​

data adalah komentar seperti yang tampil di Komentar: unggahannya di content, serta komentar dan penulisnya di comment.

json
{
  "platform": "instagram",
  "type": "comment",
  "accountId": "6650a1f2c3d4e5f6a7b8c912",
  "data": {
    "_id": "6650a1f2c3d4e5f6a7b8ce01",
    "status": "pending",
    "content": {
      "id": "17962321815082188",
      "type": "image",
      "description": "Balas setiap komentar otomatis 🤖",
      "owner": { "id": "17841449699366337", "name": "Repliz", "picture": "https://..." },
      "medias": [{ "type": "image", "url": "https://..." }],
      "url": "https://www.instagram.com/p/...",
      "createdAt": "2026-10-10T02:11:28.000Z"
    },
    "comment": {
      "id": "18098524577017812",
      "type": "text",
      "text": "Gimana cara hubungkan akun Instagram?",
      "owner": { "id": "6803453729715519", "name": "repliz.community", "picture": "" },
      "medias": [],
      "hasReplies": false,
      "replies": [],
      "createdAt": "2026-10-10T12:51:00.000Z"
    },
    "accountId": "6650a1f2c3d4e5f6a7b8c912",
    "createdAt": "2026-10-10T12:51:34.189Z",
    "updatedAt": "2026-10-10T12:51:34.189Z"
  },
  "raw": {}
}

Di Facebook, Instagram, Threads, dan TikTok, komentar yang ditulis akun Anda sendiri tidak mengirim event. Untuk membalas dari server Anda, kirim data._id sebagai commentId ke Reply Comment.

chat ​

data.chat adalah percakapan seperti yang tampil di Percakapan, dan data.message adalah pesan barunya. message.type berisi text, image, video, audio, document, embed, atau sticker.

json
{
  "platform": "facebook",
  "type": "chat",
  "accountId": "6650a1f2c3d4e5f6a7b8c911",
  "data": {
    "chat": {
      "_id": "6650a1f2c3d4e5f6a7b8cf01",
      "accountId": "6650a1f2c3d4e5f6a7b8c911",
      "senderId": "6793729447315239",
      "senderName": "Repliz Community",
      "senderPicture": "https://...",
      "unreadCount": 1,
      "updatedAt": "2026-10-10T07:34:47.510Z"
    },
    "message": {
      "_id": "6650a1f2c3d4e5f6a7b8cf02",
      "chatId": "6650a1f2c3d4e5f6a7b8cf01",
      "messageId": "m_CPIZNYLSwNbbFWYITAbK96Dll",
      "senderId": "6793729447315239",
      "isFromMe": false,
      "type": "text",
      "text": "Halo, paket Premium berapa ya?",
      "status": "sent",
      "createdAt": "2026-10-10T07:34:47.510Z"
    }
  },
  "raw": {}
}

Di Facebook dan Instagram, Anda juga menerima event untuk setiap pesan yang dikirim akun Anda, termasuk pesan dari Balas DM. Pada pesan seperti itu data.message.isFromMe bernilai true, jadi periksa field ini sebelum membalas supaya server Anda tidak membalas pesannya sendiri.

Di Telegram, hanya chat pribadi yang mengirim event. Pesan yang dikirim akun Anda dari aplikasi Telegram juga mengirim event, dengan isFromMe bernilai true, tetapi pesan yang dikirim Repliz, dari Balas DM atau Percakapan, tidak. Saat seseorang mengedit pesan, event dikirim lagi dengan messageId yang sama dan teks yang baru.

referral ​

Dikirim saat seseorang membuka percakapan dengan Halaman Facebook atau akun Instagram Anda dari iklan click-to-message, atau dari tautan ig.me / m.me yang memakai parameter ref. data.referral diteruskan apa adanya dari platform: source menunjukkan asal orang tersebut, misalnya ADS, sedangkan ref atau ad_id menunjukkan tautan atau iklan mana.

json
{
  "platform": "instagram",
  "type": "referral",
  "accountId": "6650a1f2c3d4e5f6a7b8c912",
  "data": {
    "recipientId": "17841449699366337",
    "senderId": "6793729447315239",
    "timestamp": 1791639361430,
    "referral": {
      "source": "ADS",
      "type": "OPEN_THREAD",
      "ad_id": "120211234567890123",
      "ref": "promo"
    }
  },
  "raw": {}
}

Jika orang tersebut juga mengirim pesan, pesannya datang sebagai event chat tersendiri.

schedule ​

Dikirim setelah postingan terjadwal berhasil dipublikasikan atau gagal. data.id adalah ID jadwal, yang bisa Anda cek lewat Get One Schedule.

json
{
  "platform": "repliz",
  "type": "schedule",
  "accountId": "6650a1f2c3d4e5f6a7b8c913",
  "data": {
    "id": "6650a1f2c3d4e5f6a7b8cf11",
    "status": "error",
    "errorMessage": "invalid access token"
  }
}

status berisi success atau error. errorMessage hanya ada jika postingan gagal.

Riwayat pengiriman ​

Setiap event yang dikirim Repliz ke URL Anda tercantum di Riwayat pengiriman pada halaman Webhook, dengan tanda Terkirim atau Gagal. Event yang gagal menampilkan penyebabnya, misalnya Request failed with status code 500. Klik sebuah event untuk melihat payload-nya, dan Salin JSON untuk menyalinnya.

Riwayat pengiriman dengan event komentar yang dibuka dan event jadwal yang gagal dengan tombol Kirim ulang disorotRiwayat pengiriman dengan event komentar yang dibuka dan event jadwal yang gagal dengan tombol Kirim ulang disorot

Repliz mengirim setiap event satu kali dan tidak mengulanginya sendiri. Setelah server Anda diperbaiki, klik Kirim ulang pada event yang gagal untuk mengirimnya lagi. Kirim ulang memakai URL dan token yang tersimpan saat ini, jadi tetap berfungsi setelah Anda mengganti URL.

Perlu diketahui ​

  • Event hanya dikirim selama ada URL yang tersimpan. Event yang terjadi saat URL kosong tidak dikirim belakangan.
  • Repliz mengirim satu request per event, dan urutan kedatangannya bisa berbeda dari urutan kejadiannya. Gunakan ID di data, seperti data._id atau data.message.messageId, untuk mengenali event yang sudah pernah Anda proses, misalnya setelah Kirim ulang.
  • Event uji saat Simpan tidak tercantum di riwayat pengiriman.
  • Satu webhook mencakup semua akun yang terhubung di workspace Anda. Gunakan accountId untuk membedakannya.