Takeaways Key
anda akan melihat konfigurasi webhook keluar dan contoh apa permintaan dan tindak balas muatan harus kelihatan seperti. Bot pertama kami hanya akan menyambut pengguna apabila dipanggil. Untuk melakukan ini, kami akan membenarkan cangkuk untuk mendengar perkataan pencetus "hello" di mana -mana saluran. Kami tidak tahu URL yang akan diposkan lagi, jadi kami akan kembali ke halaman ini kemudian.
Membuat pelayan web
Buat direktori baru untuk aplikasi anda, dan jalankan NPM init untuk menghasilkan fail pakej.json anda. Dalam pakej anda. Ketergantungan, termasuk "Express": "^4.x.x" dan "Body-parser": "^1.x.x". Pakej Body-Parser akan digunakan untuk menghuraikan muatan yang dihantar dari Slack. Buat fail pelayan bernama app.js. Di sini, kami akan memerlukan modul yang diperlukan, menambah middleware parser badan, pengendali ralat, dan laluan ujian. Kemudian, kami memberitahu pelayan untuk mula mendengar.
<span>var express = require('express'); </span><span>var bodyParser = require('body-parser'); </span> <span>var app = express(); </span><span>var port = process.env.PORT || 3000; </span> <span>// body parser middleware </span>app<span>.use(bodyParser.urlencoded({ extended: true })); </span> <span>// test route </span>app<span>.get('/', function (req<span>, res</span>) { res.status(200).send('Hello world!') }); </span> <span>// error handler </span>app<span>.use(function (err<span>, req, res, next</span>) { </span> <span>console.error(err.stack); </span> res<span>.status(400).send(err.message); </span><span>}); </span> app<span>.listen(port, function () { </span> <span>console.log('Slack bot listening on port ' + port); </span><span>});</span>
Jalankan pelayan dengan aplikasi nod dan sahkan bahawa melawat http: // localhost: 3000 bertindak balas dengan "hello world!".
Buat fail bernama Hellobot.js
Modul ini akan berada di mana Logik Bot kami hidup. Ia akan merangkumi satu fungsi yang dieksport yang mengembalikan mesej kepada Slack dengan Kod Status 200. Kami akan bermula dengan menguraikan data yang Slack menghantar ke pelayan kami, dan kemudian kami akan bertindak balas dengan muatan yang diformat dengan betul sendiri. Untuk melakukan ini, mari kita kembali semula webhook keluar kami di bawah integrasi yang dikonfigurasikan. Contoh data keluar menunjukkan kepada kita semua maklumat Slack yang dihantar apabila webhook keluar dicetuskan.
module<span>.exports = function (req<span>, res, next</span>) { </span> <span>var userName = req.body.user_name; </span> <span>var botPayload = { </span> <span>text : 'Hello, ' + userName + '!' </span> <span>}; </span> <span>// avoid infinite loop </span> <span>if (userName !== 'slackbot') { </span> <span>return res.status(200).json(botPayload); </span> <span>} else { </span> <span>return res.status(200).end(); </span> <span>} </span><span>}</span>
kembali di app.js, memerlukan modul bot di bahagian atas.
<span>var hellobot = require('./hellobot');</span>
app<span>.post('/hello', hellobot);</span>
curl -X POST --data "user_name=foobar" http://localhost:3000/hello
<span>{"text":"Hello, foobar!"}</span>
Menggunakan aplikasi di Heroku
Sebaik sahaja anda telah log masuk, anda akan melihat papan pemuka Heroku anda. Klik di sebelah kanan atas untuk membuat aplikasi baru. Ikuti arahan yang diberikan untuk log masuk ke Heroku di komputer anda. Penyebaran adalah mudah, tetapi ada banyak yang mengetahui kali pertama anda menggunakan aplikasi. Pastikan anda mengikuti panduan ini apabila anda mendapat aplikasi anda. Kami akan melakukan beberapa pemeriksaan berganda di sepanjang jalan, tetapi terdapat banyak maklumat yang baik di sana yang berada di luar skop artikel ini.
Sebelum kita boleh menggunakan bot kita, kita perlu memberitahu Heroku bagaimana untuk menjalankan aplikasinya. Ini dilakukan dengan membuat procfile. Procfile anda hanya memerlukan satu baris:
<span>var express = require('express'); </span><span>var bodyParser = require('body-parser'); </span> <span>var app = express(); </span><span>var port = process.env.PORT || 3000; </span> <span>// body parser middleware </span>app<span>.use(bodyParser.urlencoded({ extended: true })); </span> <span>// test route </span>app<span>.get('/', function (req<span>, res</span>) { res.status(200).send('Hello world!') }); </span> <span>// error handler </span>app<span>.use(function (err<span>, req, res, next</span>) { </span> <span>console.error(err.stack); </span> res<span>.status(400).send(err.message); </span><span>}); </span> app<span>.listen(port, function () { </span> <span>console.log('Slack bot listening on port ' + port); </span><span>});</span>
Sebaik sahaja anda telah melakukan ini, anda boleh melakukan perubahan dan menolak ke Heroku. Heroku secara automatik memasang modul nod, dan anda akan melihat hasil penggunaan anda. Jika semuanya berjalan lancar, anda akan melihat pautan ke aplikasi anda di bahagian bawah. Salin URL itu, dan kemudian lawati halaman konfigurasi Webhook keluar sekali lagi. Tambahkan URL yang anda salin ke medan input URL (s) dengan laluan /hello dilampirkan dan ubah nama dan ikon cangkuk jika anda mahu.
module<span>.exports = function (req<span>, res, next</span>) { </span> <span>var userName = req.body.user_name; </span> <span>var botPayload = { </span> <span>text : 'Hello, ' + userName + '!' </span> <span>}; </span> <span>// avoid infinite loop </span> <span>if (userName !== 'slackbot') { </span> <span>return res.status(200).json(botPayload); </span> <span>} else { </span> <span>return res.status(200).end(); </span> <span>} </span><span>}</span>
bot anda harus berada dalam talian sekarang, jadi kembali ke kendur dan uji!
Jika anda tidak mendapat respons, kembali dan periksa kod anda. Anda boleh menggunakan Log Perintah Terminal Heroku untuk melihat butiran mengenai permintaan serta kenyataan konsol.log () yang telah anda tambah.
tidak terlalu sukar, bukan? Kami berjaya menubuhkan webhook di Slack, mengerahkan aplikasi kami ke Heroku, dan mendapat kedua -duanya untuk bercakap antara satu sama lain! Sedikit lebih banyak kerja daripada program "Hello World" yang mudah, tetapi lebih bermanfaat. Sekarang bahawa kami mempunyai pelayan kami berjalan, kami dapat dengan mudah menambah lebih banyak cangkuk dan respons. Hellobot cukup mesra, tetapi ia tidak berguna. Di bahagian seterusnya kami akan menggunakan jenis webhook lain Slack untuk membuat arahan sembang dadu.
Di bahagian terakhir, kami menggunakan webhook keluar yang mendengar sembang untuk kata pencetus, menghantar mesej ke pelayan kami, dan memaparkan respons. Dalam bahagian ini, kami akan menggunakan dua alat lain untuk membuat integrasi tersuai: perintah slash dan webhook yang masuk. Lawati halaman Integrasi Konfigurasi dan lihat pilihan lain di bawah Integrasi & Penyesuaian DIY. Mari kita mulakan dengan menambah integrasi perintah slash. Baca penerangan ringkas, tetapkan arahan ke "/roll", dan tambah integrasi. Halaman seterusnya menunjukkan konfigurasi. Anda dapat melihat bahawa data keluar kelihatan sama dengan webhook keluar yang kami konfigurasi sebelum ini. Kami akan menggunakan aplikasi yang kami buat di bahagian terakhir untuk bahagian ini, jadi kami boleh menggunakan URL yang sama, tetapi kali ini kami akan menghantar ke laluan /roll.
Perhatikan bahawa integrasi perintah slash boleh bertindak balas kepada pengguna, tetapi hanya secara peribadi. Apa gunanya roll dadu jika hanya anda dapat melihat dadu? Slack mencadangkan menggunakan webhook yang masuk selaras dengan arahan slash untuk menghantar mesej untuk berbual. Kembali ke halaman Integrasi Konfigurasi dan tambahkan webhook yang masuk. Baca keterangan, pilih saluran, dan tambahkan cangkuk. Jangan bimbang tentang saluran apa yang anda pilih; Kami boleh menentukan saluran dalam respons bot kami. Kerana kita boleh memilih saluran dalam aplikasi kita, ini bermakna kita juga boleh menggunakan integrasi ini untuk mana -mana bot lain yang kita buat. Webhook yang masuk tidak mempunyai banyak cara konfigurasi, tetapi ia mempunyai banyak maklumat penting untuk membina muatan respons bot kami. Bahagian yang paling penting ialah URL Webhook. Kami akan menyiarkannya dari aplikasi kami untuk menghantar mesej kepada Slack.
Oleh kerana kami telah menunjuk perintah slash kami di laluan /roll, kami boleh menambah laluan itu ke pelayan kami bersama Hellobot. Kami akan menggunakan URL Rahsia untuk cangkuk masuk kami, jadi ia adalah idea yang baik untuk memastikan ia tersembunyi sekiranya anda ingin menjadikan kod anda awam. Cara yang baik untuk melakukan ini ialah menggunakan var config Heroku.
mari juga tambahkan permintaan ke pakej kami untuk digunakan dengan cangkuk masuk:
<span>var express = require('express'); </span><span>var bodyParser = require('body-parser'); </span> <span>var app = express(); </span><span>var port = process.env.PORT || 3000; </span> <span>// body parser middleware </span>app<span>.use(bodyParser.urlencoded({ extended: true })); </span> <span>// test route </span>app<span>.get('/', function (req<span>, res</span>) { res.status(200).send('Hello world!') }); </span> <span>// error handler </span>app<span>.use(function (err<span>, req, res, next</span>) { </span> <span>console.error(err.stack); </span> res<span>.status(400).send(err.message); </span><span>}); </span> app<span>.listen(port, function () { </span> <span>console.log('Slack bot listening on port ' + port); </span><span>});</span>
Sekarang kita akan menambah dicebot.js. Dicebot akan mengeksport satu fungsi, tetapi kami memerlukan dua fungsi tambahan: satu untuk menghantar ke webhook yang masuk, dan satu untuk melancarkan dadu.
module<span>.exports = function (req<span>, res, next</span>) { </span> <span>var userName = req.body.user_name; </span> <span>var botPayload = { </span> <span>text : 'Hello, ' + userName + '!' </span> <span>}; </span> <span>// avoid infinite loop </span> <span>if (userName !== 'slackbot') { </span> <span>return res.status(200).json(botPayload); </span> <span>} else { </span> <span>return res.status(200).end(); </span> <span>} </span><span>}</span>
Sebagaimana banyak pemain meja tahu, terdapat lebih banyak jenis dadu daripada hanya dadu enam sisi. Dadu lain mempunyai empat sisi, lapan sisi, sepuluh sisi, dua puluh sisi, dan banyak lagi! Notasi khas digunakan semasa melancarkan dadu ini:
Mari mulakan dengan memulakan beberapa pembolehubah dan menguraikan input. Kami akan menetapkan beberapa nilai lalai sekiranya pengguna ingin menghilangkan input.
<span>var express = require('express'); </span><span>var bodyParser = require('body-parser'); </span> <span>var app = express(); </span><span>var port = process.env.PORT || 3000; </span> <span>// body parser middleware </span>app<span>.use(bodyParser.urlencoded({ extended: true })); </span> <span>// test route </span>app<span>.get('/', function (req<span>, res</span>) { res.status(200).send('Hello world!') }); </span> <span>// error handler </span>app<span>.use(function (err<span>, req, res, next</span>) { </span> <span>console.error(err.stack); </span> res<span>.status(400).send(err.message); </span><span>}); </span> app<span>.listen(port, function () { </span> <span>console.log('Slack bot listening on port ' + port); </span><span>});</span>
Ekspresi biasa di atas cukup dipercayai untuk parsing dadu gulung dan menghadkan nilai-nilai kepada nombor dua angka hanya supaya pengguna tidak boleh gila. Sekiranya pengguna merosakkan sintaks mereka, kami menghantar semula petunjuk.
Melancarkan dadu dengan input pengguna cukup mudah. Lihat thread ini untuk penjelasan bagaimana roll rawak berfungsi. Untuk gulungan yang benar -benar rawak, anda boleh menghubungi API Random.org. Mari kita tulis fungsi roll.
module<span>.exports = function (req<span>, res, next</span>) { </span> <span>var userName = req.body.user_name; </span> <span>var botPayload = { </span> <span>text : 'Hello, ' + userName + '!' </span> <span>}; </span> <span>// avoid infinite loop </span> <span>if (userName !== 'slackbot') { </span> <span>return res.status(200).json(botPayload); </span> <span>} else { </span> <span>return res.status(200).end(); </span> <span>} </span><span>}</span>
Kemudian, dalam fungsi utama kami, kami akan membuat beberapa gulungan dan membina mesej untuk bertindak balas. Mari kita sertakan nama roller supaya pengguna lain dapat melihat siapa yang menggunakan perintah /roll.
<span>var hellobot = require('./hellobot');</span>
kami menambah mesej ke harta BotPayload.Text dengan beberapa pemformatan kendur sekitar total untuk menjadikannya berani. Kami juga boleh mengkonfigurasi nama, ikon, dan saluran menggunakan muatan tindak balas. Kami akan menetapkan saluran berdasarkan saluran pengguna mengeluarkan arahan roll dari. Slack mencadangkan menggunakan nama saluran dalam muatan, tetapi itu bermakna kita perlu mempersiapkannya dengan "#". Sebaliknya, kita boleh menggunakan ID Channel, yang akan membolehkan kita menyiarkan di saluran awam serta kumpulan swasta. Untuk ikon, emoji mati yang mudah wujud, walaupun anda boleh memberikan imej yang lebih baik menggunakan icon_url.
app<span>.post('/hello', hellobot);</span>
muatan kelihatan baik. Mari tulis fungsi hantar. Saya telah memilih untuk menyimpan hanya token jalan di Var Config Heroku. Pastikan untuk menghantar badan sebagai rentetan json.
curl -X POST --data "user_name=foobar" http://localhost:3000/hello
Dalam fungsi utama kami, kami akan memulakan permintaan Hantar. Jika ia berfungsi, kita boleh bertindak balas terhadap perintah slash dengan 200 yang kosong. Jika tidak, kita boleh menggunakan nilai -nilai dari panggilan balik kami untuk membina ralat. Ini akan mencetuskan pengendali ralat di app.js dan menghantar kembali 400, yang akan memberitahu pengguna ralat.
<span>{"text":"Hello, foobar!"}</span>
mari kita jalankan pelayan kami dan curlnya lagi. Kali ini, kita perlu memasukkan Channel_ID. Anda boleh menggunakan penguji API Slack untuk mencari saluran yang betul. Oleh kerana webhook yang masuk telah ditubuhkan, ia harus mendengar pelayan kami memanggilnya. Kami juga perlu memasukkan laluan webhook yang masuk dalam persekitaran kami sejak aplikasi belum di Heroku lagi.
web: node app
heroku ps:scale web=1
Redeploying to Heroku
kemudian gunakan Git untuk menambah fail baru, lakukan perubahan anda, dan tolak jauh Heroku anda. Heroku akan memasang modul nod dan memulakan pelayan. Sebelum kita mengujinya, mari kita mula menonton log dalam masa nyata:
Heroku Logs -t
Dengan cangkuk kami semua ditubuhkan, perintah roll kami harus bersedia untuk pergi. Cuba beberapa gulungan! Jika sesuatu tidak berfungsi, anda boleh menggunakan log Heroku untuk debug. Untuk melihat aplikasi yang lengkap secara keseluruhannya, lihat repo GitHub ini.
Kedua -dua bot ini menunjukkan semua alat yang anda perlukan untuk mula menulis bot sembang dan integrasi anda sendiri. Anda boleh mengintegrasikan banyak perkhidmatan ke dalam bot, atau anda boleh cuba membuat rakan perbualan yang meyakinkan. Modul API dan Nod wujud untuk anda mencapai kedua -dua matlamat ini.
beberapa idea lain untuk bot:
Jika anda tampil dengan idea yang baik, kongsi kod anda! Bots menyeronokkan untuk membuat, dan mereka tidak pernah lebih mudah untuk membuat.
Membuat bot kendur melibatkan beberapa langkah. Pertama, anda perlu pergi ke laman web API Slack dan buat pengguna bot baru. Anda perlu memberikan nama bot anda dan memilih ruang kerja di mana ia akan beroperasi. Selepas membuat bot, anda akan menerima token akses OAuth pengguna bot, yang akan anda gunakan untuk mengesahkan bot anda dalam kod anda. Kemudian, anda boleh mula menulis kod bot anda menggunakan bahasa pengaturcaraan seperti JavaScript atau Python. Anda akan menggunakan API Slack untuk menghantar dan menerima mesej.
Atas ialah kandungan terperinci Bermula dengan Slack Bots. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!