Buat bot Slack tersuai

Pengarang: Peter Berry
Tarikh Penciptaan: 15 Julai 2021
Tarikh Kemas Kini: 13 Mungkin 2024
Anonim
How to Build Slack Bot (Slack Bot Node JS Tutorial) Ep 1
Video.: How to Build Slack Bot (Slack Bot Node JS Tutorial) Ep 1

Kandungan

Slack adalah alat yang semakin popular untuk perniagaan dan pasukan yang perlu berkomunikasi dengan serta-merta. Walaupun - dalam beberapa kes - dianggap sebagai gangguan harian, ia juga mempunyai potensi automasi yang hebat, menawarkan puluhan integrasi untuk menyimpan semuanya di satu tempat, dan perlahan-lahan menggantikan e-mel.

Terdapat banyak cara untuk mengintegrasikan sistem anda dengan Slack; platform bahkan menyediakan bot berjenama yang membolehkan anda menyampaikan peringatan, atau mesej di seluruh ruang kerja digital anda. Dan untuk peningkatan kolaborasi yang lebih banyak lagi, cubalah pilihan penyimpanan awan ini.

  • 18 alat kolaborasi terbaik untuk pereka

Slack menawarkan pelbagai entiti yang boleh dianggap sebagai 'bot':

  • webhooks, yang memungkinkan untuk menghantar mesej dari aplikasi lain ke Slack, tetapi merupakan bentuk komunikasi sehala,
  • aplikasi, untuk kemajuan integrasi (dengan aplikasi lain),
  • pengguna bot, lebih banyak pada mereka tidak lama lagi.

Dalam tutorial ini kita akan melihat terutamanya pada 'pengguna bot', bagaimana memprogramnya (lihat panduan kami untuk penyunting kod terbaik untuk menjadikan hidup anda lebih mudah) dan membuatnya sesuai dengan keperluan anda. Ini mengandaikan anda mempunyai akses ke ruang Slack di mana anda dapat menambahkan integrasi aplikasi. Sekiranya anda belum menjadi sebahagian daripada mereka, mereka bebas membuat.


Dalam apa yang berikut, kami membina aplikasi NodeJS untuk menghantar dan membalas mesej tertentu di saluran Slack. Kami menggunakan modul 'slackbots', yang merupakan pembungkus untuk Slack Real-Time Messaging API.

Juga berminat membuat laman web? Pilih pembangun laman web yang cemerlang dan perkhidmatan hosting web teratas untuk menggunakannya.

01. Penyediaan kod

Tutorial ini menganggap anda telah memasang node. Sekiranya tidak, lakukan sekarang. Kemudian muat turun aset yang anda perlukan. Kami telah memberi anda titik permulaan dan kerangka untuk tutorial.

Sepanjang, kami menggunakan modul seperti 'slackbots' dan 'node-slack-upload'. Mereka dapat diperoleh dengan menjalankan perintah install.

pasang npm

02. Penyediaan kendur

Kami menggunakan integrasi "Pengguna bot" untuk Slack. Untuk melakukannya, kita perlu mendapatkan token dengan pergi ke 'https: // youSlackworkspace> .slack.com / apps / A0F7YS25R-bots' dan klik "Tambahkan Konfigurasi".


Pilih nama pengguna untuk bot anda (kami boleh menimpa ini secara terprogram di peringkat kemudian), dan mengesahkan.

Jemput bot ke saluran yang dikehendaki.

Dengan membuat pengguna bot anda akan mendapat token dalam format berikut:

xoxb-000000-000000-x0x0xxXxX0XXxx0x

Salin token untuk langkah seterusnya.

03. Pemboleh ubah persekitaran

Kami menggunakan pemboleh ubah persekitaran (fail '.env') untuk mengelakkan pengekodan keras dan mendedahkan token dan kunci rahsia, seperti token Slack yang telah kami hasilkan, dan nama saluran di ruang kerja Slack peribadi anda.

Teruskan dan isi fail '.env' dengan token anda, dan nama saluran yang telah anda jemput pengguna bot.

SLACK_TOKEN = xoxb-YourToken> SLACK_CHANNEL = saluran-nama>

04. Parameter bot

Langkah seterusnya membawa kita ke 2 fail: 'index.js', yang akan kita lihat sebentar, dan 'bin / lib / bot.js', di mana sebahagian besar pembangunan kita berlaku. Dalam fail indeks, kami membuat bot kami dengan memberikan nama, iaitu 'WDMBot'.


Di 'bot.js' kami mengawal parameter setiap kejadian dengan nama, token, dll.

//index.js const bot = memerlukan ('./ bin / lib / bot'). init ('WDMBot'); //bot.js const botParams = {icon_emoji: ': robot_face:', as_user: false}; biarkan bot; fungsi initBot (botName) {bot = slackbot baru ({token: process.env.SLACK_TOKEN, name: botName}); }

05. Hantar ke saluran

Lihat fungsi 'sendMessage'. Kami menggunakan kaedah ‘postTo’. Ini akan menangani penyiaran ke semua jenis saluran, awam atau swasta. Sekiranya anda hanya mahu menghantar ke saluran peribadi, anda boleh menggunakan 'postToGroup' (atau 'postToChannel' untuk yang umum). Untuk menghantar mesej pertama kami, kami dapat menambahkan kod di 'initBot'.

fungsi initBot (botName) {bot = / * lihat di atas * / sendMessage ('Saya di sini!'); } // Sekarang jalankan 'npm start'

06. BotParam tersuai

Anda semestinya menyedari mesej dari WDMBot muncul di saluran anda. Perlu diingat bahawa dalam 'botParams', 'as_user' ditetapkan ke false, yang memungkinkan kita mengganti nama dan gambar. Sekiranya disetel ke true, ia akan menggunakan nama dan gambar yang anda tetapkan semasa mendapatkan token.

Anda boleh menukar emoji bot menjadi gambar seperti:

const botParams = {icon_url: 'https://pbs.twimg.com/ profile_images / 976112552081010688 / WLlQvj8D_400x400.webp', as_user: false};

07. Acara saluran

Menghantar mesej berguna, tetapi untuk menjadikan bot lebih interaktif, kita harus dapat mengenal pasti catatan dari pengguna lain di saluran. Mari kita dengar peristiwa mesej, dan kemudian lihat apa yang berlaku semasa kita menaip ke saluran. Kita mesti melihat pelbagai jenis mesej dicatat, seperti 'user_typing' atau 'message'.

fungsi initBot (botName) {bot = / * lihat di atas * / bot.on ('message', data => {console.log (data);}); }

08. Membalas mesej yang masuk

Seterusnya, kami ingin membalas mesej masuk dari jenis 'mesej', dan mungkin pada frasa atau kata kunci tertentu, untuk mengelakkan membalas semuanya. Kami memastikan untuk membandingkan rentetan huruf kecil jika ingin memadankan frasa yang tepat. Kami juga dapat melihat apakah mesej 'termasuk ()' kata tertentu.

bot.on ('message', data => {if (data.type === 'message') {if (data.text.toLowerCase () === 'di mana anda?') {sendMessage ('I' m sini! ');}}});

09. Hadkan kepada pengguna "manusia"

Mesej yang dikirim oleh pengguna bot memiliki pelbagai sifat seperti subjenis 'bot_message' dan bot_id. Anda mungkin mahu menyekat membalas hanya mesej yang diposkan oleh manusia untuk mengelakkan gelung bot yang tidak terbatas membalas diri mereka sendiri atau satu sama lain, jika respons mereka termasuk salah satu kata kunci yang anda dengarkan.

bot.on ('message', data => {if (data.type === 'message' && data. subjenis! == 'bot_message') {if (data.text.toLowerCase (). termasuk ('halo') )) {sendMessage ('Helo, saya bot!');}}});

10. Respons peribadi

Untuk memberikan respons yang lebih diperibadikan, anda dapat memanfaatkan id pengguna dari mesej yang anda balas. Slack secara automatik akan menukar id ke nama pengguna apabila dilampirkan pada tag '@>'. Mengenal pasti siapa yang anda balas boleh berguna, terutamanya jika beberapa ahli saluran berinteraksi dengan bot anda secara serentak.

bot.on ('message', data => {if (data.type === 'message' && data. subjenis! == 'bot_message') {if (data.text.toLowerCase (). termasuk ('halo') )) {sendMessage ('Hello @ $ {data.user}> Saya bot!');}}});

11. Kemas kini respons

Bot juga dapat mengedit respons mereka. Hanya mereka sendiri. Oleh itu, jika anda mengharapkan bot penaip typo yang akan membetulkan mesej anda secara automatik apabila terdapat kesalahan, itu tidak mungkin dilakukan dengan persediaan semasa.

Untuk mengemas kini mesej, kami menentukan fungsi baru, dan Boolean global yang akan kami gunakan dalam demo kami.

biarkan changeReply = false; fungsi updateMessage (messageParams) {bot.updateMessage (messageParams.channel, messageParams.ts, messageParams.text, botParams); }

12. Tukar mesej

Mari cuba mengemas kini teks yang dihantar bot kepada kami. Dalam hal ini, pada acara pesan, kita harus membalas pesan bot yang masuk, jadi kita akan memadankan syarat tersebut untuk kemas kini, dan kita juga menggunakan cap waktu dari pesan asal yang akan diperbarui. Oleh itu, Slack dapat mengenal pasti mesej mana yang akan dikemas kini, sekiranya orang lain disiarkan di antara.

jika (data.type === 'message' && data.subtype! == 'bot_message' && data.text) {if (data.text.includes ('update')) {sendMessage ('Saya akan mengemas kini dalam 5 saat '); ubahReply = benar; }} jika (data.type === 'message' && data.subtype === 'bot_message' && changeReply) {changeReply = false; setTimeout (() => {updateMessage ({saluran: data.channel, ts: data.ts, teks: 'Saya telah mengemas kini'});}, 5000); }

13. Mesej sebentar

Mesej sementara adalah, seperti namanya, sementara. Mereka juga hanya dapat dilihat oleh satu pengguna dan dapat dihapuskan oleh mereka. Jenis mesej tersebut mungkin berguna sebagai petua atau peringatan yang tidak perlu kekal selama-lamanya.

if (data.text.toLowerCase (). include ('hr')) {ephemeralMessage ({channel: data.channel, user: data.user, text: 'Sekiranya anda perlu menghubungi HR, e-mel mereka adalah hr @ mycompany. com '}); } // Fungsi yang kita panggil fungsi ephemeralMessage (messageParams) {bot.postEphemeral (messageParams.channel, messageParams.user, messageParams.text, botParams); }

14. Pencarian pengguna

Kaedah yang berbeza akan mengambil parameter pengguna yang sedikit berbeza (sama ada ID atau nama, yang berbeza dengan nama_lama dan nama_lama). Walau bagaimanapun, hanya id pengguna yang tersedia pada acara mesej. Oleh itu, kita dapat melaksanakan pencarian nama pengguna dengan mendapatkan semua pengguna dan sepadan dengan ID.

fungsi async getUserName (userID) {return await bot.getUsers (). kemudian (data => {let member = data.members.find (user => {return user.id === userID;}); return member.name ;}) .catch (err => console.log (err)); }

15. Hantar pesanan langsung

Dengan carian pengguna baru, kita sekarang dapat mengirim mesej langsung kepada pengguna, ketika pesan sementara tidak akan dapat dilakukan. Perhatikan bahawa mesej langsung dianggap sebagai saluran baru / berbeza, dengan ID yang berbeza daripada saluran asal. Anda juga dapat melaksanakan pencarian saluran dengan cara yang sama seperti pengguna yang telah kami lakukan sebelumnya.

// Dalam peristiwa mesej jika (data.text.toLowerCase (). Termasuk ('bot')) {sendDM ({user: data.user, text: 'Bagaimana saya boleh membantu?'}); } // Fungsi yang kita panggil fungsi async sendDM (messageParams) {let user = tunggu getUserName (messageParams.user); kembali bot.postMessageToUser (pengguna, mesej Params.text, botParams, (err, data) => {console.log (err)}); }

16. Balas dengan gambar

Pengguna bot juga mempunyai izin untuk memuat naik fail dan gambar ke saluran. Fungsi ini tidak dilindungi oleh 'slackbots', jadi kita harus memberi contoh pemuat baru, seperti yang ditunjukkan di bawah. Sediakan juga folder 'aset' di akar projek anda, dengan beberapa gambar di dalamnya.

Mari sediakan panggilan ke 'sendImage ()', yang ditentukan pada langkah seterusnya.

// dalam initBot () uploader = slackUpload baru (process.env. SLACK_TOKEN); // dalam peristiwa mesej jika (data.text.includes ('image')) {if (! data.upload) {/ * Dalam kes ini, tidak ada subjenis mesej, jadi kami periksa bahawa ia tidak dipicu oleh mesej muat naik sebelumnya * / let image = data.text.split ('') [1]; sendImage ('Ini adalah gambar yang anda mahukan', gambar); }}

17. Fungsi memuat naik fail

Kami memuat naik gambar menggunakan pemuat naik dan modul FileSystem (fs). Dengan syarat bahawa mesej pengguna dalam format "image imagename.extension>", dan fail seperti itu ada di folder 'aset', gambar akan dibaca dan dimuat. Sekiranya tidak, kami akan menghantar semula mesej biasa (ia mungkin juga merupakan pesan singkat).

fungsi sendImage (mesej, gambar) {uploader.uploadFile ({file: fs.createReadStream (path.join (__dirname, '../../assets/${image}')), mimetype: 'image / *' , filetype: ' *', title: image, initialComment: message, saluran: channel}, (err, data) => {if (err) {sendMessage ('Maaf saya tidak dapat menjumpai $ {image}'); }}); }

18. Hantar ke pelbagai saluran

Anda boleh menghantar ke beberapa saluran dengan pengguna bot yang sama, selagi ia adalah anggota setiap saluran di mana anda mengharapkan respons. Mari buat fungsi ‘postToAll’ dan kemas kini pemboleh ubah persekitaran agar nama saluran sebagai nilai dipisahkan koma.

saluran const = process.env.SLACK_CHANNEL. berpecah (’,’); saluran const = saluran [0]; fungsi postToAll (mesej) {saluran.forEach (saluran => {bot.postTo (saluran, mesej, botParams);}); }

19. Saluran berpecah

Kadang-kadang, anda mungkin ingin menggunakan saluran untuk melakukan debug, atau menanggapi peristiwa secara berbeza dengan bot yang sama di saluran yang berlainan. Terserah anda untuk membuat latihan konvensyen penamaan saluran anda. Kami akan menganggap untuk contoh berikut bahawa SLACK_CHANNEL = wdm-tutorial, wdm-tutorial-debug.

fungsi splitMessages (message, debugMessage) {saluran.forEach (channel => {const msg = channel.includes ('debug')? debugMessage: message; bot.postTo (saluran, msg, botParams);}); }

20. Kamus jawapan

Kami telah memberikan jawapan yang sukar dikodkan secara langsung dalam mesej. Ke depan, untuk membuat sesuatu lebih terkendali, anda mungkin ingin menyimpan pencetus dan respons, sama ada dalam pangkalan data atau format JSON, dan beralih di antara mereka bergantung pada syarat yang dipenuhi.

// Contoh item respons {input: ’hr’, inputMatch: ’include’, respons: ’Sekiranya anda perlu menghubungi HR, e-mel mereka adalah [email protected]’, respons Type: ’ephemeral’}

21. Sumber lebih lanjut

Terdapat beberapa sifat berguna lain yang terdapat di Slack API.Mudah-mudahan, tutorial ini akan memberikan gambaran keseluruhan mengenai apa yang mungkin untuk semua keperluan bot anda. Sumber lebih lanjut boleh didapati dengan membaca dokumentasi 'slackbots', atau dokumentasi Slack API lengkap.

Artikel ini pada asalnya diterbitkan dalam edisi 289 majalah reka bentuk web kreatif Pereka web. Beli terbitan 289 di sini atau melanggan Web Designer di sini.

Pilihan Pembaca.
Jadikan laman web anda boleh dicetak dengan CSS
Menemui

Jadikan laman web anda boleh dicetak dengan CSS

Pengetahuan yang diperlukan: C pertengahan, HTML a a Memerlukan: Penyunting tek , penyemak imba web, pencetak atau penjana PDF ebagai pencetakMa a Projek: 2-4 jamFail okonganBertahun-tahun yang lalu, ...
15 alat HTML5 untuk menjadikan hidup anda lebih mudah
Menemui

15 alat HTML5 untuk menjadikan hidup anda lebih mudah

HTML5 nampaknya telah wujud elama-lamanya tetapi ebenarnya baru dimuktamadkan pada bulan Oktober 2014 - walaupun telah dilak anakan ekitar lima tahun ebelumnya. emakin banyak laman web wari an web ber...
13 fon percuma yang menakutkan untuk Halloween
Menemui

13 fon percuma yang menakutkan untuk Halloween

Dengan menghampiri Halloween, anda mungkin akan dituga kan dengan ebilangan be ar reka bentuk bermu im yang memberi anda peluang untuk membiarkan i i gelap anda longgar. Tanpa fon yang betul, karya ya...