Cara mendapatkan phone number user dengan Bot Telegram.
Hai kawan!
Hari ini saya akan melanjutkan tutorial untuk membuat sebuah command atau perintah yang dapat digunakan untuk mendapatkan phone number dari user yang berinteraksi dengan Bot Telegram. Bagian ini merupakan lanjutan dari Tutorial Membuat Bot Telegram dengan Laravel 8.
Pada tutorial sebelumnya kita telah berhasil membuat sebuah Bot Telegram dengan nama abonsapi bot yang dijalankan di server local dengan menggunakan ngrok
untuk memudahkan pembuatan webhook sehingga interaksi bot dengan user dapat berjalan secara real-time saat user mengirimkan sebuah kata ‘Halo’ ke bot dan bot membalas dengan ‘Halo username’.
Tutorial kali ini, kita akan membuat sebuah perintah /myphonenumber
yang akan dikirimkan oleh user melalui private chat ke bot. Kemudian bot akan membalas dengan mengirimkan sebuah KeyboardButton yang dapat diklik oleh user untuk mengirimkan informasi kontak kepada bot. Dalam hal ini adalah informasi phone number dari user. Kenapa harus dalam mode private chat? karena pada Dokumentasi Telegram Bot tentang KeyboarButton yang nanti kita gunakan untuk mendapatkan phone number dari user dijelaskan bahwa pada filed request_contact
hanya bisa dilakukan pada private chat saja.
Oke! Langsung saja kita mulai untuk tutorial kali ini. Pertama buka project yang sebelumnya telah kita buat dengan text editor kesayangan kawan-kawan. Kemudian jalankan project dengan php artisan serve
dan jalankan service ngrok http 8000
agar bot dapat berinteraksi melalui webhook. Setelah project berhasil dijalankan kita akan mendapatkan url terbaru dari service ngrok
. Kemudian copy url dari service ngrok
yang telah kita jalankan dan paste pada file .env
seperti ini.
TELEGRAM_BOT_USERNAME=abonsapi_bot
TELEGRAM_BOT_TOKEN=1437446789:AAFxQe9LKzlqnKNbSb4GkG5KJGytpvWG6tE
TELEGRAM_CERTIFICATE_PATH=
TELEGRAM_WEBHOOK_URL='https://3d7551f82748.ngrok.io/api/abonsapibot/webhook'
Selanjutkan kita set kembali url webhook yang baru, karena webhook yang lama tidak aktif lagi, ini terjadi karena kita menjalankan di local apabila di server dengan domain yang tidak berganti makan proses set webhook ini tidak perlu dilakukan. Cara untuk setwebhook seperti pada tutorial sebelunya adalah dengan mengakses http://localhost:8000/api/setWebhook
pada browser sampai menampilkan informasi true
. Untuk memastikan apakah bot sudah berjalan, coba untuk mengirim chat dengan text ‘halo’ kepada bot.
Baik karena bot sudah berjalan dengan baik, selanjutnya mari kita buat sebuah folder dengan nama Telegram
dan Commands
di dalam folder app
, maka struktur project akan menjadi seperti berikut ini.
bot-telegram
- app
-- Telegram
--- Commands
Folder ini akan menampung file command atau perintah-perintah yang nantinya kita akan buat.
Kemudian buat sebuah file dengan nama PhoneNumberCommand.php
di dalam folder Commands
dan berisi baris code seperti ini.
<?phpnamespace App\Telegram\Commands;use Telegram\Bot\Keyboard\Keyboard;use Telegram\Bot\Commands\Command;use Telegram;/*** Class PhoneNumberCommand.*/class PhoneNumberCommand extends Command{ /** * @var string Command Name */ protected $name = 'myphonenumber';
/** * @var array Command Aliases */ protected $aliases = ['my_phone_number'];
/** * @var string Command Description */ protected $description = 'Perintah untuk mendapatkan phone number user.'; /** * {@inheritdoc} */ public function handle() { $response = $this->getUpdate(); $chat_id = $response->getChat()->getId(); $btn = Keyboard::button([ 'text' => 'Share Phone Number', 'request_contact' => true, ]); $keyboard = Keyboard::make([ 'keyboard' => [[$btn]], 'resize_keyboard' => true, 'one_time_keyboard' => true ]);
return $this->telegram->sendMessage([ 'chat_id' => $chat_id, 'text' => 'Silahkan tekan Share Phone Number kemudian share!', 'reply_markup' => $keyboard ]); }}
Baik, jadi begini penjelasannya :- protected $name
digunakan untuk mendefinisikan nama command atau perintah yang kita inginkan. Disini kita memberi nama perintah myphonenumber
.- protected $aliases
digunakan untuk mendefinisikan alias dari nama command atau perintah yang kita buat. Disini kita memberi nama alias perintah yaitu my_phone_number
.- handle()
digunakan untuk menghandle command yang di trigger dan akan mendapatkan object chat dari user dan di simpan di $response
, kemudian mengambil chat id dari user yang mengirimkan chat ke bot, setelah itu membuat sebuah KeyboardButton dan di kirimkan kembali ke user dengna sendMessage() berdasarkan chat id dari user.
Pada proses ini kita belum bisa menjalankan command atau perintah /myphonenumber
karena kita belum mendaftarkan command tersebut ke dalam config/telegram.php
. Maka dari itu kita akan mendaftarkan command yang telah dibuat ke dalam confi/telegram.php
, serta mendaftarkan folder Telegram
yang ada di dalam folder app
di file composer.json
agar dapat dikenali oleh autoload yang dimiliki laravel. Hal ini dilakukan seperti membuat sebuah Custom Helper.
Oke langsung saja kita edit file composer.json
pada bagian autoload:psr-4
menjadi seperti ini.
"autoload": { "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/", "App\\Telegram\\": "app/Telegram/" }},
Begini pejelasannya :
"App\\Telegram\\"
merupakan sebuah namespacenya."app/Telegram"
merupakan lokasi file-file yang ada didalam namespace App\Telegram
.
Kemudian jalankan perintah composer dumpautoload
di terminal yang berbeda.
Selanjutnya kita edit file config/telegram.php
pada bagian my-bots
menjadi seperti ini.
'mybot' => [ 'username' => env('TELEGRAM_BOT_USERNAME', 'TelegramBot'), 'token' => env('TELEGRAM_BOT_TOKEN', 'YOUR-BOT-TOKEN'), 'certificate_path' => env('TELEGRAM_CERTIFICATE_PATH', 'YOUR-CERTIFICATE-PATH'), 'webhook_url' => env('TELEGRAM_WEBHOOK_URL', 'YOUR-BOT-WEBHOOK-URL'), 'commands' => [ //Acme\Project\Commands\MyTelegramBot\BotCommand::class, App\Telegram\Commands\PhoneNumberCommand::class, ],],
Diatas kita telah menambahkan PhoneNumberCommand::class
pada daftar commands
untuk bot. Kemudian coba untuk mengirimkan chat kepada bot dengan command atau perintah /myphonenumber
, maka akan tampil sebuah KeyboardButton yang bisa kita klik kemudian pilih share untuk mengirimkan phone number ke bot. Seperti terlihat pada gambar dibawah ini.
Oke kita break sejenak, silahkan diminum atau makan ceminal kawan-kawan, tidur sebentar kita lanjutkan esok hari haha. Bercanda, Lanjut!
Selanjutnya kita akan mengambil value dari phone number yang dikirim oleh user melalui Controller, yaitu di file BotTelegramController.php
pada method commandHandlerWebHook()
. Tambahkan beberapa code dan akan menjadi seperti dibawah ini.
public function commandHandlerWebHook(){ $updates = Telegram::commandsHandler(true); $chat_id = $updates->getChat()->getId(); $username = $updates->getChat()->getFirstName(); if(strtolower($updates->getMessage()->getText() === 'halo')) return Telegram::sendMessage([ 'chat_id' => $chat_id, 'text' => 'Halo ' . $username ]); $phone_number = array_key_exists('contact', $updates['message']) ? $updates['message']['contact']['phone_number'] : null; if($phone_number) return Telegram::sendMessage(['chat_id' => $chat_id, 'text' => 'Your phone number is ' . $phone_number]);}
Pada variable $phone_number
kita akan melakukan pengecekan apakah key contact
ada pada chat yang dikirimkan oleh user ke bot? jika ada maka variable $phone_number
akan menyimpan value dari $update['message']['contact']['phone_number']
dan jika tidak ada maka akan menjadi null
. Jika $phone_number
ada nilainya maka bot akan mengirimkan sebuah chat berupa phone number kepada user.
Okey, kita telah berhasil membuat sebuah command untuk mendapatkan phone number dari user menggunakan bot telegram. Yeay!!
Proses ini bisa kawan-kawan gunakan untuk kebutuhan lain, mungkin untuk melakukan verifikasi phone number yang terdaftar pada sistem informasi tertentu atau kebutuhan lainnya yang bisa menunjang kebutuhan dari kawan-kawan. Semoga tutorial kali ini bermanfaat.
Terimakasih buat kawan-kawan yang telah membaca. :)
See you soon!