VK bot berlutut, atau bagaimana menyenangkan orang pada 14 Februari

Tentu saja, masing-masing dari kita mencintai hadiah, tetapi yang paling utama kita suka keinginan yang menyertai mereka. Dan, sampai baru-baru ini, kami tidak memiliki kesempatan untuk mengejutkan seseorang dengan kata-kata hangat sampai idenya muncul di pikiran: bagaimana jika kita memberi orang kesempatan untuk bertukar valentine (dengan hidung mereka 14 Februari, semuanya sama) tanpa meninggalkan kerangka kerja seperti biasa komunikasi - ruang obrolan jejaring sosial?

Kata demi kata, dan ini dia - rencana bisnis yang sudah jadi untuk menciptakan suasana liburan Hari Valentine! Akankah kita membuat orang bahagia?


Demi gagasan tentang bulan!


Tentu saja, pertama-tama perlu membuat rencana aksi dan menggambarkan ide itu. Karena kenyataan bahwa orang menjadi lebih pemalu, dan tidak selalu siap untuk mempercayai siapa pun, pilihan jatuh pada penulisan bot modis dan nyaman untuk VK, yang memiliki antarmuka yang akrab, akan selalu ada di tangan, dan anonimitas pesan akan di-hardcode dalam kode program.
Sayangnya, di samping semua keuntungan di atas, komunitas memiliki dua kelemahan: bandwidth rendah (jumlah pesan per detik) dan larangan memulai dialog dengan pengguna acak (pengguna harus terlebih dahulu dan secara eksplisit setuju untuk menerima pesan atas nama komunitas).

Jadi, kami memiliki pengguna yang siap mengirim kartu Valentine ke belahan jiwanya, penerima dan perantara dalam bentuk bot obrolan. Skema interaksi sederhana, bot harus: menawarkan pengiriman → mengenali penerima → menyimpan hingga 14 Februari → mengirimkan → ulangi.

Tapi ini, tentu saja, tidak cukup untuk imajinasi pikiran yang rakus, dan, untuk meningkatkan aktivitas dan keterlibatan audiens, skema interaksi lain dipikirkan, memungkinkan orang untuk berkenalan di dalam sistem, mengirim pesan kepada orang-orang secara acak. Ini "valentines acak" dapat dihargai, dan jika valentine dua orang saling menyukai, kami memberi mereka kesempatan untuk mengobrol.

Penafian


Proyek ini dibuat murni oleh antusiasme oleh dua orang, seorang programmer setengah-berpendidikan (saya) dan seorang penginspirasi ideologis (Stepan sadfun Popov), tidak memiliki tujuan mengajari Anda sesuatu (meskipun dapat membantu Anda memahami esensi alam semesta), hanya menceritakan kisah penciptaan yang menarik. dan ikuti jalan dari ide ke implementasi yang naif.



Belajar berbicara dengan VK


Setelah melalui 3-4 pustaka yang berbeda atas permintaan "NodeJS VK API" , saya menyadari bahwa tidak ada pustaka yang sederhana dan fungsional yang memungkinkan kita untuk menggunakan janji, serta bekerja melalui eksekusi. Ingat salah satu masalah yang dijelaskan di atas? Ya, eksekusi permintaan ke VKontakte tidak secara langsung, tetapi dalam batch 25 memungkinkan Anda untuk meningkatkan throughput secara signifikan .


Kemampuan komparatif dari berbagai metode permintaan ke VKontakte

Oleh karena itu, diputuskan untuk menulis sesuatu sendiri, solusi yang dapat diandalkan dan tidak terlalu kruk, berdasarkan perpustakaan node-fetch .

Agar tidak memberikan semua kode di sini, saya hanya akan menjelaskan logika kerja.

Karena permintaan dari program harus dikemas dalam satu eksekusi, mereka dikumpulkan dalam antrian LIFO, dan kemudian dikirim jika:

  • Panggilan 25 atau lebih (eksekusi maksimum)
  • Sudah cukup waktu berlalu sejak pengiriman terakhir, setidaknya 50 milidetik, tetapi tidak lebih dari 150 (sehingga antrian bergerak, meskipun ukurannya kecil)

Permintaan dari antrian dikompilasi ke dalam kode VK Script, yang (dalam implementasi ini) terlihat seperti ini:

var returnables = []; returnables[0] = API.messages.send({"message": ", !", "peer_id": 1, "random_id": 561427}); returnables[1] = API.users.get({"user_ids": 1, "fields": "sex"}); return returnables; 

Setelah kode dieksekusi oleh permintaan ke VK, hasil dari setiap permintaan (berdasarkan indeks yang dapat dikembalikan ) kembali ke panggilan baliknya, dibungkus dengan indah dalam Janji. Efisiensi pendekatan ini luar biasa - semakin banyak pengguna (dan, oleh karena itu, semakin banyak permintaan ke VKontakte untuk pengiriman), semakin sedikit keterlambatan dalam respons. Untuk menjaga batas tetap terkendali, sistem pengiriman memiliki penghitung yang menunjukkan jumlah permintaan yang tersisa untuk detik ini, yang memungkinkan Anda memproses lonjakan pengunjung dengan cepat.

Belajar mendengarkan VK


Ada dua cara untuk menerima pemberitahuan tentang acara dari VKontakte: Longpoll-request dan Callback-server . Server Anda nyaman karena tidak memerlukan gerakan khusus untuk digunakan, dan juga memungkinkan Anda untuk menerima notifikasi yang terlewat (misalnya, saat Anda me-restart server). Server semacam itu dapat ditulis dalam beberapa baris menggunakan kelas http.Server asli.

Semua ini menciptakan ekosistem ideal untuk logika program, yang nyaman digunakan.

Semuanya berakhir


Karena pengguna bebas melakukan apa pun dalam obrolan, dan kami tidak dapat menghentikannya, kami perlu membatasinya hingga jumlah yang wajar. Mesin negara melakukan pekerjaan yang sangat baik untuk melakukan hal ini, mengatur setiap transisi yang mungkin dalam sistem, dan menggunakan tombol (parameter keyboard dalam pesan. Kirim) akan membuat menggunakan bot sesederhana satu sentuhan di layar.

Berikut ini interaksi pengguna dengan bot:


Semua ini berubah menjadi seperangkat status ("Menu Utama", "Input Valentine" dan seterusnya), transisi di antaranya diatur dan dikirim dalam tombol, atau dikenal pada awalnya dan tidak berubah.


Omong-omong, tentang tombol. Gamut warnanya non-invarian ( 4 warna untuk semua kesempatan), tetapi tombollah yang memungkinkan untuk meminimalkan jumlah kesalahan pengguna. Atas dasar mereka, Anda dapat benar-benar membangun sistem non-linear, itulah sebabnya mereka digunakan di mana-mana. Dan dalam proyek ini juga.

Tetapi Anda perlu memahami: jika Anda menargetkan audiens yang besar, Anda harus mempertimbangkan cara lain untuk berinteraksi, karena seseorang mungkin memiliki aplikasi lama ( VK untuk iPad , misalnya, belum diperbarui untuk waktu yang sangat lama, saya tidak akan berbohong, tetapi sepertinya lebih dari setahun, dan dukungan keyboard tidak ada). Dan itu terjadi (ya, itu terjadi, saya memeriksa) bahwa orang-orang, tidak menyadari bahwa tombol dapat diklik, hanya menulis ulang konten mereka (dan kemudian parameter tombol payload, tentu saja, tidak ditransmisikan, dan semuanya dapat rusak).

Perlu dicatat bahwa tidak semuanya terjadi semulus yang dijelaskan dalam diagram, dan kadang-kadang terjadi kasus yang aneh. Misalnya, sistem untuk menentukan tautan VKontakte memproses secara salah pengguna yang tautan pendeknya dimulai dengan id dan memotongnya. Kejutan dari orang-orang yang bertemu dengan bug ini tidak dapat dijelaskan, karena mereka menulis Valentine Valentine, tetapi ternyata Olezhka.
Apa olezhka ????

Kecelakaan tidak disengaja


Jadi, jika semuanya jelas dengan valentine biasa, ada penerima dan pengirim, lalu bagaimana cara mengurangi dua orang asing? Anda perlu menukar valentine mereka, dan jika orang-orang menyukai valentine satu sama lain, maka mereka harus diperkenalkan! Ini dia, formula cinta!

Meskipun ini terdengar menyedihkan, ia bekerja, dan menjadi lebih menarik bagi orang untuk bekerja dengan bot - mereka akan mendapatkan respons positif jika setidaknya ada satu orang (yang, tentu saja, bot akan mengurusnya).

Nilai tambah besar dari ini - semakin banyak orang mengambil kesempatan ini, semakin banyak peluang mereka untuk saling mengenal, dan oleh karena itu, ini seperti permainan, membuat seseorang tetap mengobrol. Patut diakui bahwa sesi rata-rata pengguna adalah ~ 7 menit, tetapi ada potensi untuk mengencangkan seseorang hingga 10-15 hanya demi fitur ini.

Distribusi pesan memaksa skema yang terpisah, karena ada beberapa opsi untuk menggunakan bot ini, pengguna dapat kehilangan sesuatu, dan bot mengingatkannya dengan hati-hati.


Sangat menarik bagaimana masalah kedua diselesaikan, dengan ketidakmampuan komunitas untuk memulai dialog dengan pengguna terlebih dahulu: sekarang masalah ini diselesaikan dengan pesan seperti itu.
Tapi saya punya syarat! Agar penerima dapat menerima Valentine Anda, ia juga harus menulis surat kepada saya. Tugas Anda sekarang adalah membujuknya untuk menulis sesuatu kepada saya. Ini dilakukan agar Anda tidak takut berbicara dengannya!
Secara umum, tradisional "Bukan bug, tapi fitur!"

Kembang api di akhir


Itu saja! Jika Anda tidak memperhitungkan beberapa kesulitan dalam memahami logika VK API, serta dengan mengkonfirmasi akun dengan salah satu penyedia, semuanya berjalan terlalu lancar.


Contoh mengobrol dengan bot

Bot bekerja dan akan menyenangkan orang-orang dengan kasih sayang, membuat mereka bahagia. Ini dilakukan untuk membantu orang menjadi lebih ramah satu sama lain. Anda dapat mengevaluasi semua ini sendiri di komunitas Valentinych - vk.com/verylovebot , jika diinginkan. Terima kasih atas perhatian anda!

Source: https://habr.com/ru/post/id439218/


All Articles