Kandungan
- 01. Penyediaan kod
- 02. Penyediaan kendur
- 03. Pemboleh ubah persekitaran
- 04. Parameter bot
- 05. Hantar ke saluran
- 06. BotParam tersuai
- 07. Acara saluran
- 08. Membalas mesej yang masuk
- 09. Hadkan kepada pengguna "manusia"
- 10. Respons peribadi
- 11. Kemas kini respons
- 12. Tukar mesej
- 13. Mesej sebentar
- 14. Pencarian pengguna
- 15. Hantar pesanan langsung
- 16. Balas dengan gambar
- 17. Fungsi memuat naik fail
- 18. Hantar ke pelbagai saluran
- 19. Saluran berpecah
- 20. Kamus jawapan
- 21. Sumber lebih lanjut
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.
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.