Showing posts with label programmer. Show all posts
Showing posts with label programmer. Show all posts

Tuesday, August 23, 2016

Bermain dengan Telegram Bot

Selepas habis demam Pokemon Bot, berminat pula bermain dengan bot lain, Telegram Bot. Permulaan berjinak-jinak dengan Telegram Bot yang paling sukar bagi saya adalah pemahaman terminologi yang digunakan oleh Telegram Bot. Ini adalah kali pertama saya gunakan bot dalam perisian chat dan pemahaman adalah satu penyiksaan bagi seorang pengaturcara yang ingin terus terjun ke dalam penciptaan bot. Bagi yang pertama kali mendengar tentang Telegram, ia adalah lebih kurang perisian Whatsapp.

Yang paling mudah adalah mencari class yang sudah wujud dari pengaturcara lain untuk memudahkan penggunaan bot Telegram. Saya dalam kes ini menggunakan PHP Telegram Bot dengan manual yang agak ringkas proses pertama adalah create bot menggunakan @BotFather


Untuk bagaimana create bot, boleh terus ke page Telegram Bot dan mulakan langkah pertama untuk mendapatkan API key untuk berkomunikasi dengan bot tersebut.

Langkah kedua adalah memahami bagaimana bot berfungsi dan berkomunikasi dengan bot tersebut. Kebiasaanya bot digunakan untuk maklumat seperti berita, e.g blog post dan notifikasi di Telegram tentang berita terbaharu. Dalam kes saya, saya ingin notifikasi ke group Telegram tentang keluar masuk kereta harian setiap pagi (6 pagi) dan saya boleh request Bot tentang keluar masuk harian dengan bertanyakan query 

  • /checkin - senarai kereta pulang hari ini
  • /checkout - senarai kereta keluar hari ini
  • /checkin tomorrow - senarai kereta pulang esok
  • /checkout tomorrow - senarai kereta keluar esok
Menggunakan class PHP Telegram Bot ada 2 cara

  1. Run script secara manual/crontab untuk mengarahkan bot
  2. Run bot secara on demand ketika pertanyaan menggunakan Webhook.


Untuk notifikasi setiap pagi saya menggunakan cara pertama, dan untuk pertanyaan on demand saya menggunakan webhook. Webhook dalam konsep ini, apabila ada pertanyaan diajukan kepada bot, satu notifikasi berkenaan mesej tersebut ke satu URL yang dikhaskan. Webhook memerlukan satu web server live untuk dihantar (localhost memerlukan teknik khas) dan SSL (boleh SSL generate sendiri).

Setelah faham konsep dan persediaan ini, anda boleh mulakan pengaturcaraan bot Telegram ini.

Konsep pertama memerlukan hubungan ke pengkalan data MySQL dan konsep kedua tidak perlu. Pilih racun anda dan mulakan pengaturcaraan :D.

Ada contoh kod untuk run secara manual . Untuk webhook anda perlu set URL untuk menggunakan pengaturcaaan (sampel) dan boleh di unset (sampel) dan hanya letakkan di web server anda kod ini untuk Telegram hantar segala update. Arahan yang dihantar e.g /checkin /checkout boleh diprogramkan di dalam folder Commands . Ada beberapa sampel arahan yang sudah diberi seperti /slap /date dan /weather . 

Sudah faham ? Kalau sudah, terus gunakan Composer dan update ke folder www anda dan mulakan pengaturcaraan !

Di bawah adalah beberapa contoh bot yang menjawab kepada pertanyaan menggunakan webhook.  






Thursday, November 26, 2015

Amazon SES Suspended - Apa nak buat ?

Alkisah suatu cerita, tiba-tiba dapat email dari Amazon SES



Kena suspended akaun Amazon SES. Aduh, ada 3-4 email yang menggunakan servis SES, dah pening kepala semua email sangkut. Mengikut email ni, bounce rate yang tinggi, nak ikutkan dah dapat banyak email warning, tapi selalu abaikan, sebab biasa tak kena suspend.

Tengok punya banyak warning.


Ini kali pertama kena suspended, dan diorang nak sebab kenapa banyak sangat bounce rate. SES walaupun kita dah bayar, dia tak beri muka kepada spammer-spammer ni. Jadi pattern seperti komplen tinggi, bounce rate tinggi akan merujuk kepada tuan punya akaun adalah spammer. Nak ikutkan sebabnya ada satu akaun klien ni yang digunakan untuk notifikasi sistem, tetapi tak pernah cek kalau ada bounce atau komplen. 

Kami pun mencadangkan SES disebabkan guna local email server asyik kena block dengan email provider macam hotmail, yahoo dan gmail. Tapi seperti biasa, dah setel guna SES, malas nak cek bounce ke komplen ke, akhirnya kena suspend. Padan muka.

Maka aku nak kongsi beberapa tips untuk sesiapa yang kena suspended.

1. Jangan gelabah.
Biasa dia akan suruh balas email dan tim SES akan balas dalam masa 24 jam, sementara itu gunakanlah fallback emel. Gunakan local server yang biasa digunakan.

2. Di bawah adalah senarai biasa yang diperlukan untuk lepaskan suspension
  • What you believe caused your bounce problem. 
  • The method you use to track your bounces. 
  • How you ensure the email addresses of new recipients are valid prior to sending to them. 
  • Why the changes you made will prevent the problem from happening again. 

Jadi kita kupas satu-satu soalan yang diminta jawapan.
  • What you believe caused your bounce problem. 
Cari sumber apa yang menyebabkan masalah itu, jadi masalah aku adalah bounce. 
Biasa dalam SES akan ada satu email yang digunakan untuk terima semula bounce tersebut, dan email tersebut adalah juga email yang digunakan untuk hantar. Login ke mailbox tersebut dan cari email-email yang banyak bounce, cuba lihat email jenis apa yang bounce.

Aku jumpa kebanyakan adalah email dari internal staff yang gunakan email palsu, sebab dia buat 2-3 akaun untuk multiple user dan apabila notifikasi sistem dihantar, email pun bounce

  • The method you use to track your bounces.
  • Why the changes you made will prevent the problem from happening again

Kali ini, aku memang tiada apa-apa cara untuk track bounce, maka jawapan adalah apakah perubahan yang akan dilakukan untuk mengelakkan ia berlaku lagi.

Untuk dua soalan ini, terpaksalah menggunakan Amazon SNS (Simple Notification Service) untuk monitor bounce. Boleh rujuk




Untuk Amazon SES kita boleh hantar notifikasi ke PHP skrip atau ke email, dan dalam kes ini aku cuba hantar ke email (sementara) dan hantar satu ke PHP skrip untuk disimpan mana email yang bounce dan set threshold, dalam kes aku, aku set jika pernah bounce, terus takkan hantar lagi email ke akaun tersebut (mungkin kes dah kurang panas aku akan naikkan sedikit threshold ini)

Maka di bawah adalah situasi dia

Bounce Email (amran@example.com) -> Amazon SES -> Amazon SNS  > PHP Script -> DB

Lagi sekali nak hantar ke  (amran@example.com)

Sistem > Email (check dulu dari list bounce DB) > Ada tak bounce ? > Kalau takde > Amazon SES 

Amazon SNS Subscription ke emel & ke PHP 



Maka dari segi di atas, akan mengurangkan bounce email yang berulang. Oleh kerana Amazon SES tidak ada cara untuk memastikan email yang pertama di daftar adalah valid. Saya ada periksa Mailgun dari Rackspace ada web servis untuk memastikan email adalah valid dari beberapa kriteria.


  • Syntax checks (RFC defined grammar)
  • DNS validation
  • Spell checks
  • Email Service Provider (ESP) specific local-part grammar (if available).



Mungkin kalau kita gunakan servis Mailgun, kita boleh dapat jawapan yang terakhir.
  • How you ensure the email addresses of new recipients are valid prior to sending to them. 
Selain dari itu, cara untuk pastikan emel adalah sah, adalah dari bounce email kepada monitoring kita. Tidak semestinya kita menjawab soalan mereka mengikut point-point yang diberikan. Apa yang saya pasti, tim Amazon SES mahukan pemilik akaun tersebut proaktif dalam menjawab soalan dan cuba memuaskan hati mereka. Mereka juga mahu menunjukkan bahawa perkara ini tidak diambil enteng oleh mereka.

Saya dapat menyelesaikan masalah tersebut dalam masa 48 jam dan beberapa balasan email. 

Perkara di atas adalah asas sahaja, antara perkara yang sukar adalah untuk memahami Amazon SNS secara detail dan bagaimana ia berfungsi. Saya banyak merujuk Sendy , skrip mailing list yang saya beli untuk produk kami Zenpipe Web Hosting & BnB.my .

Amazon SES juga ada berkongsi praktis terbaik untuk menghantar emel http://docs.aws.amazon.com/ses/latest/DeveloperGuide/ses-best-practices.html , mungkin sesiapa yang rajin dan kena suspend akaun dia (haha) , baru rajin baca semua benda-benda ni. Biasalah bak kata orang tua, dah terhantuk, baru terngadah. 





Thursday, October 29, 2015

Masalah programmer

Dari : http://www.commitstrip.com/en/2015/10/27/one-of-the-coders-hardest-problems/


Dari commitstrip, aku akui ini adalah masalah sebenar programmer. Sehari ini aku cuma ada satu tugas, dan sampai sekarang tak pasti nak buat keputusan apa. Masalah dunia ni adalah masalah nak susun struktur array aku.


1.
$config['Hive']['acl'][] = 'admin';
$config['Hive']['acl'][] = 'user';

2.
$config['Hive']['acl'] = ['admin','user'];

3.
$config = ['Hive' => ['acl' =>
               ['admin','user']]];


Ni dah pukul 5, takde kata putus lagi, nak kena balik dah.