Cara mendapatkan phone number user dengan Bot Telegram.

Ginanjar S.B
5 min readJan 27, 2021

--

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.

composer dumpautoload

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.

/myphonenumber

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.

Share phone number

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.

source code here!

Terimakasih buat kawan-kawan yang telah membaca. :)
See you soon!

--

--

Ginanjar S.B

I am a web developer and flutter developer. Keep learning and sharing.