Webhook merupakan cara mudah bagi layanan untuk mengirimkan data ketika terjadi sesuatu. Anda menyiapkan aplikasi atau server untuk menerima pesan dan memberi alamat kepada layanan. Ketika ada peristiwa yang terpicu di layanan, peristiwa ini bisa memanggil webhook untuk mengirimkan pesan ke aplikasi Anda.
Platform WhatsApp Business menawarkan berbagai opsi untuk berbagai peristiwa yang dapat Anda integrasikan ke dalam aplikasi atau layanan Anda selama opsi tersebut mendukung HTTPS dan memiliki sertifikat SSL yang valid. Dengan begitu, Anda bisa mengotomatiskan tanggapan terhadap pesan WhatsApp secara realtime.
Dalam artikel ini, kita akan mengkaji cara menyiapkan webhook agar terhubung dengan WhatsApp. Kami juga akan memandu tutorial yang menunjukkan cara menyiapkan aplikasi yang menerima pesan dan menyimpannya di database.
Menerapkan Webhooks
Bisnis dengan berbagai ukuran mendapatkan manfaat dari penggunaan WhatsApp untuk membangun percakapan dua arah dengan pelanggan mereka. Contoh penggunaan terbagi ke dalam tiga kategori utama: layanan pelanggan, marketing.
Webhook dapat memberikan notifikasi tentang berbagai jenis peristiwa. Misalnya, peristiwa pesan yang diterima melewati webhook pesan. Anda dapat menggunakan webhook ini untuk mengurangi beban agen layanan pelanggan dengan memfilter pertanyaan umum pelanggan. Pesan sederhana diteruskan ke layanan chatbot untuk merumuskan tanggapan, dan semua yang tidak bisa dijawab secara langsung akan diteruskan ke agen langsung.
Peristiwa pesan yang diterima juga bisa berisi media, jika pengguna mengirimkan gambar, atau detail interaksi, jika pengguna mengklik tombol untuk menanggapi pesan, bukannya mengetikkan balasan.
Setelah kita mengeksplorasi beberapa contoh penggunaan webhook WhatsApp, mari kita pelajari tutorialnya. Kita akan mengamati contoh penggunaan sederhana di mana pelanggan memberikan masukan ulasan melalui pesan WhatsApp. Kami akan menunjukkan cara menyimpan ulasan ini dalam database, tempat ulasan bisa dianalisis untuk memahami tema umum ulasan atau sentimen umum seputar produk tertentu.
Pendengar Webhook Node.js dengan AWS Lambda
Misalnya, bisnis Anda ingin menggunakan Platform WhatsApp Business untuk menghubungi pelanggan dengan pesan yang meminta mereka mengulas produk yang baru saja dibeli. Bisnis Anda ingin memberi pelanggan kesempatan untuk menanggapi pesan dengan ulasan mereka, lalu Anda ingin menyimpan ulasan itu di database.
Untuk melakukannya, Anda akan membuat fungsi AWS Lambda menggunakan Node.js dan menyimpan data di DynamoDB. Menggunakan teknologi ini membuat seluruh stack menjadi tanpa server, menghilangkan beban infrastruktur saat mengembangkan, dan memungkinkan Anda untuk meningkatkan atau menurunkan skala secara otomatis agar sesuai dengan permintaan. Hal ini juga menjadikan harga lebih fleksibel karena Anda hanya membayar layanan yang digunakan.
Konfigurasikan Aplikasi Anda
Pertama, mulai proyek Node.js baru. Serverless Framework merupakan pilihan yang bagus karena menyederhanakan penyiapan dan penerapan fungsi AWS Lambda.
Masukkan perintah berikut untuk memulai proyek:
npm init serverless create --template aws-nodejs npm install -s express serverless-http serverless-offline
Setelah proyek diinisialisasi, Anda perlu membuat endpoint yang memungkinkan Anda untuk memverifikasi aplikasi dengan Platform WhatsApp Business. Ini adalah persyaratan saat membuat aplikasi Anda di Meta untuk Developer.
Ganti kode boilerplate di handler.js dengan berikut ini:
const serverless = require('serverless-http') const express = require('express') const app = express() const token = process.env.TOKEN app.get('/webhooks', (req, res) => { if ( req.query['hub.mode'] == 'subscribe' && req.query['hub.verify_token'] == token ) { res.send(req.query['hub.challenge']); } else { res.sendStatus(400); } }) module.exports.handler = serverless(app);
Endpoint ini sangat sederhana: Endpoint ini mengembalikan parameter hub.challenge, yang dikirimkan oleh sistem verifikasi sebagai parameter permintaan.
Selanjutnya, Anda perlu mengonfigurasi endpoint dalam file YAML Serverless. File YAML ini menentukan fungsi, endpoint, dan sumber daya yang harus dibuat saat proyek diterapkan ke AWS.
Hal ini membantu mempermudah proses penerapan dan menghilangkan kebutuhan konfigurasi manual. Ia menggabungkan kode dan konfigurasi infrastruktur tambahan, seperti pembuatan sumber daya atau definisi izin.
Ganti kode boilerplate di serverless.yml dengan kode berikut:
service: whatsapp-webhooks frameworkVersion: '2' provider: name: aws runtime: nodejs14.x lambdaHashingVersion: 20201221 environment: TOKEN: ${env:APP_TOKEN} plugins: - serverless-offline functions: app: handler: handler.handler events: - http: ANY / - http: 'ANY {proxy+}'
Bagian plugin menyertakan Offline Tanpa Server, yang menyerupai AWS Lambda dan API Gateway dan memungkinkan Anda menguji endpoint Anda secara lokal sebelum menerapkannya ke AWS.
Bagian fungsi menentukan lokasi untuk handler endpoint Anda dan menentukan peristiwa HTTP mana yang bisa memicunya. Untuk mempermudah, atur handler ini untuk menanggapi setiap peristiwa.
Bagian provider berisi variabel lingkungan TOKEN. Token rahasia ini diperlukan saat mengirimkan pesan verifikasi dari Meta untuk Developer.
Untuk menetapkan token, ekspor variabel lingkungan dengan nama “APP_TOKEN” di terminal Anda. Contohnya, gunakan perintah berikut:
export APP_TOKEN=testtoken
Saat layanan tersebut digunakan, variabel TOKEN akan mengambil nilai dari variabel APP_TOKEN lokal Anda dan menyediakannya untuk fungsi Lambda di AWS.
Uji Aplikasi Anda
Setelah proyek dikonfigurasi, Anda harus menguji apakah fungsi tersebut berfungsi secara lokal.
Luncurkan proyek dalam mode offline dengan menjalankan perintah berikut:
offline tanpa server
Setelah aplikasi Anda berjalan, jalankan perintah berikut di jendela lain karena aplikasi akan memiliki kontrol atas jendela saat ini. Pastikan Anda mengganti nilai token dengan nilai untuk token yang Anda tetapkan sebelumnya:
curl -v "http://localhost:3000/dev/webhooks?hub.mode=subscribe&hub.verify_token=testtoken"
Output dan tanggapan status 204 akan terlihat seperti ini:
* Mencoba 127.0.0.1... * TCP_NODELAY diatur * Terhubung ke localhost (127.0.0.1) port 3000 (#0) > GET /dev/webhooks?hub.mode=subscribe&hub.verify_token=testtoken HTTP/1.1 > Host: localhost:3000 > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 204 No Content < x-powered-by: Express < content-type: application/json; charset=utf-8 < cache-control: no-cache < Date: Thu, 21 Apr 2022 16:28:24 GMT < Connection: keep-alive < Keep-Alive: timeout=5 < * Koneksi #0 ke host localhost dibiarkan utuh * Menutup koneksi 0
Selanjutnya, terapkan aplikasi Anda ke AWS dengan menjalankan perintah berikut:
penerapan tanpa server
AWS kemudian akan mengeluarkan endpoint Anda ke terminal setelah penerapan aplikasi Anda selesai.
Mengonfigurasi Webhook
Selanjutnya, mulai proses verifikasi dengan membuat aplikasi Facebook.
Pada panel navigasi sebelah kiri di Dasbor Aplikasi, pilih PRODUK. Lalu pilih Webhooks dari opsi. Di menu pilihan, pilih Akun WhatsApp Business.

Selanjutnya, masukkan URL panggilan balik dengan endpoint yang disediakan oleh AWS. Token ini harus sama dengan token yang Anda gunakan di file serverless.yml.

Setelah aplikasi Anda diverifikasi, Anda bisa melihat berbagai kolom objek yang bisa diikuti oleh webhook Anda. Masing-masing menyediakan opsi untuk menguji dan berlangganan.

Kolom yang penting adalah kolom pesan, yang mengirimkan pesan ke endpoint Anda saat pesan diterima. Setiap webhook mengirim permintaan POST ke URL panggilan balik yang sama yang Anda berikan saat memverifikasi aplikasi.
Selanjutnya, Anda perlu menulis kode untuk mengambil permintaan POST dan menyimpan data di DynamoDB.
Tambahkan kode berikut ke file handler.js:
const AWS = require('aws-sdk') const dynamoDb = new AWS.DynamoDB.DocumentClient(); app.post('/webhooks', (req, res) => { const body = JSON.parse(req.body) if(body.field !== 'messages">{ // not from the messages webhook so dont process return res.sendStatus(400) } const reviews = body.value.messages.map((message)=>{ const reviewInfo = { TableName: process.env.REVIEW_TABLE, Item: { phonenumber: message.from, review: message.text.body } } return dynamoDb.put(reviewInfo).promise() }) // return 200 code once all reviews have been written to dynamoDB return Promise.all(reviews).then((data) => res.sendStatus(200)); })
Kode ini akan menginstal paket npm AWS SDK terlebih dulu agar Anda bisa menggunakan klien dokumen DynamoDB. Fungsi ini kemudian memeriksa apakah permintaan dikirim melalui webhook pesan. Jika sudah, fungsi ini membuat item ulasan yang terdiri dari ulasan dan nomor telepon pelanggan (yang disediakan oleh webhook). Webhook mengirimkan setiap pesan sebagai array di kolom pesan, sehingga bisa mengirim beberapa pesan sekaligus. Fungsi ini akan berulang pada pesan, sehingga membuat array janji DynamoDB PUT yang bisa dieksekusi nanti untuk menyimpan data.
Mengonfigurasi DynamoDB
Contoh sederhana ini mengambil data dan menyimpannya apa adanya sebagai rekaman DynamoDB. Pada tahap ini, Anda bisa menambahkan fungsi untuk memparse pesan seperti yang diperlukan untuk menerapkan logika bisnis tambahan.
Agar ini berfungsi, Anda harus menyediakan beberapa detail konfigurasi untuk DynamoDB dalam konfigurasi Serverless Anda. File serverless.yml yang lengkap sekarang akan terlihat seperti ini:
service: whatsapp-webhooks frameworkVersion: '2' provider: name: aws runtime: nodejs14.x lambdaHashingVersion: 20201221 region: eu-west-1 iamRoleStatements: - Effect: "Allow" Action: - dynamodb:Query - dynamodb:Scan - dynamodb:GetItem - dynamodb:PutItem - dynamodb:UpdateItem - dynamodb:DeleteItem Resource: arn:aws:dynamodb:us-east-1:111111111111:table/${self:provider.environment.REVIEW_TABLE} environment: TOKEN: ${env:APP_TOKEN} REVIEW_TABLE: reviews plugins: - serverless-offline functions: app: handler: handler.handler events: - http: ANY / - http: 'ANY {proxy+}' resources: Resources: ReviewsTable: Type: 'AWS::DynamoDB::Table' Properties: TableName: ${self:provider.environment.REVIEW_TABLE} AttributeDefinitions: - AttributeName: phonenumber AttributeType: S KeySchema: - AttributeName: phonenumber KeyType: HASH ProvisionedThroughput: ReadCapacityUnits: 1 WriteCapacityUnits: 1
File ini kini memiliki pernyataan pengelolaan izin tambahan di bagian provider yang memungkinkan fungsi Lambda Anda untuk mengambil dan menulis data ke tabel DynamoDB Anda. File ini juga berisi bagian sumber daya yang mengonfigurasi tabel DynamoDB, kunci tabel, dan throughput yang disediakan. Selama pengujian, izin untuk unit kapasitas diatur ke nilai rendah untuk pengujian. Namun, ini dapat dikonfigurasi dalam produksi untuk penskalaan tergantung permintaan.
Menguji Aplikasi Anda
Sekarang, saat Anda menerapkan aplikasi Serverless, tabel DynamoDB akan dibuat dan dikonfigurasi secara otomatis dan fungsi Lambda Anda akan memiliki semua izin yang diperlukan agar dapat menulis data ke tabel. Ini lagi menekankan kekuatan penggunaan kerangka kerja Serverless, karena semua persyaratan infrastruktur kami ditangani dalam konfigurasi sederhana.
Setelah Anda menerbitkannya, kembali ke Meta untuk Developer dan pilih tombol Uji di baris kolom pesan. Ini akan membuka jendela Sampel Kolom baru yang tampak seperti ini:

Payload ini menampilkan format payload yang dikirim setiap kali pesan dikirim ke akun tersebut. Pilih Kirim ke Server Saya, lalu buka DynamoDB dalam konsol AWS untuk melihat catatan baru dengan tinjauan yang berisi teks uji:

Kesimpulan
Ini adalah aplikasi pengujian sederhana yang menunjukkan kemudahan dan kesederhanaan dalam menyiapkan pendengar webhook menggunakan Kerangka Kerja Tanpa Server. Dengan menggunakan teknologi serverless seperti AWS Lambda dan DynamoDB, aplikasi ini dapat diskalakan dari prototipe sederhana menjadi layanan siap produksi yang mampu menangani volume throughput yang besar.
Anda bisa menggunakan webhooks di Platform WhatsApp Business untuk membantu mengotomatiskan pengelolaan dan interaksi akun pelanggan. Dokumentasi webhook WhatsApp resmi memberikan informasi yang lebih lengkap tentang berlangganan webhook untuk sistem produksi. Perhatikan bahwa dokumentasi webhooks menghilangkan kolom [pesan]. Gunakan Referensi Webhooks untuk daftar lengkap kolom yang tersedia untuk langganan.
Saat membangun pendengar untuk webhook ini, penting untuk mempertimbangkan biaya dan skalabilitas. Solusinya harus bisa menangani lonjakan permintaan yang disebabkan oleh banyaknya pelanggan yang menghubungi Anda melalui WhatsApp secara bersamaan. Di lain waktu, permintaan Anda mungkin menurun saat pelanggan tidak menghubungi Anda — misalnya, di tengah malam — sehingga Anda ingin solusi Anda menurunkan skala demi mengurangi biaya. Solusinya juga harus ditingkatkan secara umum seiring pertumbuhan basis pelanggan Anda.
Memilih fitur yang tepat itu sangat penting. Serverless Framework, AWS Lambda, dan DynamoDB cocok untuk pendengar webhook ini, tetapi Anda harus mempertimbangkan kebutuhan spesifik bisnis Anda. Solusi dalam artikel ini memenuhi permintaan penskalaan variabel, menyesuaikan agar biaya tetap rendah selama periode penggunaan rendah, dan menghapus persyaratan untuk mengelola infrastruktur. Hal ini memudahkan developer untuk menerapkan dan mengelola.
Baca panduan penyiapan webhooks WhatsApp resmi untuk informasi selengkapnya tentang penggunaan webhooks di aplikasi Anda.




