Langsung ke konten utama

Trik Mengirim Hasil Poll Ke User

Salah satu syarat untuk mengirim pesan ke chat Telegram adalah wajib mensuplai chat_id dalam payload dan ini menjadi sulit dengan JSON jawaban poll yang tidak menyediakan data tentang chat_id. Perlu trik khusus untuk mengakalinya.

STRUKTUR JSON JAWABAN POLL

Struktur JSON dari jawaban poll terbagi dua variasi: Poll User-based dan Poll Anonymous. Masing-masing JSON tersebut memiliki struktur dan entitas yang berbeda seperti tampak di bawah ini:

MENGAKALI chat_id DARI JSON POLL USER-BASED

JSON untuk jawaban poll berbasis user tidak terlihat adanya properti chat_id. Namun bila kita lihat dalam setiap struktur JSON kiriman Telegram, from.id nilainya selalu sama dengan chat.id seperti tampak berikut:

ID user diambil dari properti from.id dan ini artinya kita dapat menggunakan ID user sebagai chat_id karena properti from.id nilainya sama dengan properti chat.id.

Dalam JSON poll user-based tersedia informasi tentang ID user ini yang bisa dilihat pada properti user.id seperti tampak berikut:

Sehingga pada saat akan mengirimkan pesan balik hasil poll ke user dengan metode sendMessage, kita isi properti chat_id dengan nilai dari properti user.id yang diambil dari JSON jawaban poll:

"chat_id": String( data.poll_answer.user.id )
Anda bisa melihat struktur JSON dari setiap kiriman Telegram dengan @simrsjsonbot dan github repositorySiLiKiDi

MENGAKALI chat_id DARI JSON POLL ANONYMOUS

Hampir mustahil mengakali chat_id dari JSON poll anonymous! karena anonymous berarti informasi user dirahasiakan Telegram. Satu-satunya trik untuk mengakalinya adalah dengan menambah entitas chat.id di properti question saat kita akan mengirimkan poll dengan metode sendPoll.

Mengadopsi dan Menyisipkan chat_id

Lalu darimana kita dapatkan chat_id? Setiap kali user mengirimkan command meminta bot untuk menggelar poll, maka bersama command tersebut dikirim JSON message dari Telegram yang dalam entitasnya terdapat properti from.id.

Sehingga saat kita akan mengirim respon berupa poll, maka properti question dalam metode sendPoll diisi dengan data from.id dari JSON message tersebut:

"question": "[" + data.message.from.id + "] Your favorite color",

Mengekstrak chat_id Dari JSON Jawaban Poll

Bila sesuai skenario, saat user memberikan jawaban poll, maka Telegram akan mengirimkan JSON jawaban poll dengan kode [chat_id] telah ikut serta disisipkan pada properti question:

Selanjutnya kita ekstrak chat_id dari properti question menggunakan filtrasi regex. Misalkan isi dari properti question sebagai berikut:

"question": "[1821266651] Your favorite color",

Maka kita arahkan regex untuk fokus di dalam kurung bracket [1821266651] sebagai penanda bahwa di dalamnya adalah kode chat_id:

chat_id = ( data.poll.question ).match(/\[(.*)\]/).pop();

FINAL SCRIPT

Berbekal dengan kode chat_id yang sudah didapatkan, selanjutnya anda gunakan chat_id tersebut dalam pengiriman pesan balik sebagai feedback bot terhadap pilihan user berupa ungkapan apresiasi atau rekapitulasi hasil poll.

Final Script dapat anda unduh di Code.gs dan hasil implementasi bisa dicoba dengan bot @simrsjsonbot.

Pada artikel selanjutnya kita mulai bereksperimen menyimpan data poll Telegram ke Google SheetsSiLiKiDi
Dapatkan skrip semua materi di repository

Dukung donasi agar tutorial ini tetap operasional:
Trakteer Saya SiLiKiDi

Komentar

Postingan populer dari blog ini

Kirim Pesan Ke Telegram Dengan Apps Script

Dengan koneksi webhook anda bisa mulai ujicoba mengirim pesan pertama ke Telegram dari Google Apps Script.

Input User Dengan ForceReply Di Telegram

Metode ForceReply memungkinkan Bot memaksa user untuk memberikan input sebelum melanjutkan proses, dengan demikian anda dapat menggelar Step-by-Step formulir di Telegram.