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:
SiLiKiDi
Komentar
Posting Komentar