ใช้ Slack เพื่อตรวจสอบแอปของคุณ
เผยแพร่แล้ว: 2022-03-10ทั้งหมดเริ่มต้นด้วยการเยี่ยมชมบริษัทสตาร์ทอัพเล็กๆ ในเมืองเดนเวอร์ โคโลราโด ในระหว่างการเยือนของฉัน ฉันเริ่มได้ยินเสียง "ติง" ที่ละเอียดอ่อนและมีเสน่ห์ที่มุมห้องทำงานทุกๆ สองสามนาที เมื่อฉันไปตรวจสอบเสียงแปลกๆ นี้ ฉันพบว่ามีกระดิ่งบริการติดอยู่กับ Raspberry Pi โดยมีค้อนโลหะเล็กๆ เชื่อมต่อกับแผงวงจร เมื่อปรากฏว่า Pi ได้รับข้อความจากเซิร์ฟเวอร์ของทีม และเหวี่ยงค้อนเล็กๆ ไปที่กระดิ่ง ทุกครั้งที่ลูกค้าใหม่ลงทะเบียน
ฉันคิดเสมอว่านั่นเป็นแรงจูงใจที่ยอดเยี่ยมในทีม และทำให้ฉันคิดว่าฉันจะใช้การแชทเป็นทีมเพื่อให้ได้ประสบการณ์ที่คล้ายคลึงกันได้อย่างไร และเราจะวิเคราะห์และแสดงภาพข้อมูลบันทึกได้อย่างไร
เนื่องจากเราใช้ Slack สำหรับการแชทเป็นทีมอยู่แล้ว และเนื่องจากมี API ที่จัดทำเอกสารอย่างสวยงาม จึงเป็นตัวเลือกที่ชัดเจนสำหรับการทดสอบ
อ่านเพิ่มเติม เกี่ยวกับ SmashingMag:
- อินเทอร์เฟซการสนทนา: วันนี้เราอยู่ที่ไหน เรากำลังมุ่งหน้าไปที่ไหน?
- การทำงานร่วมกันเป็นทีมและการปิดช่องว่างด้านประสิทธิภาพในการออกแบบที่ตอบสนอง
- สิ่งที่คุณควรรู้เกี่ยวกับกระบวนการออกแบบแอพ
- Off To The Races: เริ่มต้นกับ Design Sprints
ตั้งค่า Slack
อันดับแรก เราต้องรับ “URL ของเว็บฮุค” จาก Slack เพื่อโพสต์ข้อความโดยทางโปรแกรมไปยังช่อง Slack ของเรา

ตอนนี้เรามี URL ของเว็บฮุคแล้ว ก็ถึงเวลาที่จะรวมข้อความ Slack เข้ากับแอปพลิเคชัน Node.js ของเรา ในการทำเช่นนี้ ฉันพบโมดูล Node.js ที่มีประโยชน์ชื่อ node-slack
ขั้นแรก เราติดตั้งโมดูล Node.js:
npm install node-slack --save
ตอนนี้ เราสามารถส่งข้อความ Slack ไปยังช่องที่เราเลือกได้โดยใช้โค้ดไม่กี่บรรทัด
// dependency setup var Slack = require('node-slack'); var hook_url = 'hook_url_goes_here'; var slack = new Slack(hook_url); // send a test Slack message slack.send({ text: ':rocket: Nice job, I\'m all set up!', channel: '#test', username: 'MyApp Bot' });
(คุณสามารถค้นหาแพ็คเกจการรวม Slack ที่คล้ายกันสำหรับ Ruby, Python และภาษาอื่นๆ ได้แทบทั้งหมด)
เมื่อดำเนินการ รหัสนี้จะสร้างข้อความต่อไปนี้ในช่อง #test Slack ของเรา:

โค้ดด้านบนมีน้อย แต่มีเฉพาะสำหรับ Slack API และโมดูล node-slack ฉันไม่ต้องการถูกล็อคในบริการส่งข้อความใด ๆ ดังนั้นฉันจึงสร้างฟังก์ชันโมดูล Node.js ทั่วไปเพื่อเรียกใช้รหัสเฉพาะบริการ:
// Messenger.js // dependency setup var hook_url = my_hook_url; var Slack = require('node-slack'); var slack = new Slack(hook_url); module.exports = { sendMessage: function(message, channel, username) { if (!message){ console.log('Error: No message sent. You must define a message.') } else { // set defaults if username or channel is not passed in var channel = (typeof channel !== 'undefined') ? channel : "#general"; var username = (typeof username !== 'undefined') ? username : "MyApp"; // send the Slack message slack.send({ text: message, channel: channel, username: username }); return; } } };
ตอนนี้เราสามารถใช้โมดูลนี้ได้ทุกที่ในแอปพลิเคชันด้วยโค้ดสองบรรทัด และหากเราตัดสินใจที่จะส่งข้อความไปยังบริการอื่นในอนาคต เราก็สามารถเปลี่ยนมันใน Messenger.js ได้อย่างง่ายดาย
var messenger = require('./utilities/messenger'); messenger.sendMessage(':rocket: Nice job, I\'m all set up!', '#test');
เมื่อเราได้ตั้งค่าพื้นฐานแล้ว เราก็พร้อมที่จะเริ่มปิดข้อความจากภายในแอปพลิเคชัน
ติดตามการลงทะเบียน
ลำดับแรกของธุรกิจคือการบรรลุความเท่าเทียมกันของระฆังบริการ ฉันพบการเรียกกลับที่ประสบความสำเร็จของฟังก์ชันการลงทะเบียนผู้ใช้ และฉันเพิ่มรหัสนี้:
messenger.sendMessage('New user registration! ' + user.email);
เมื่อมีคนลงทะเบียน เราจะได้รับข้อความนี้:

มันยัง dings! นี่เป็นการเริ่มต้นที่ดี และทำให้ฉันรู้สึกพึงพอใจกับเสียงระฆังบริการ แต่มันทำให้ฉันกระหายอีกมาก
ดำน้ำลึก
เมื่อความอยากรู้ของฉันเพิ่มขึ้นตามแต่ละเรื่อง ฉันเริ่มสงสัยว่าจะเกิดอะไรขึ้นหากเกิดความล้มเหลวในการสร้างผู้ใช้ใหม่ จะเกิดอะไรขึ้นหากผู้ใช้ลงทะเบียน เข้าสู่ระบบแต่ไม่ผ่านกระบวนการปฐมนิเทศ? ผลงานตามกำหนดการของเราเป็นอย่างไร? เมื่อวางรากฐานเรียบร้อยแล้ว การตอบคำถามเหล่านี้ก็เป็นเรื่องง่าย
ตรวจสอบข้อยกเว้นและข้อผิดพลาดร้ายแรงที่ส่วนหลัง
ข้อผิดพลาดที่สำคัญที่สุดอย่างหนึ่งที่เราต้องการทราบคือมีความล้มเหลวในการสร้างผู้ใช้ใหม่หรือไม่ สิ่งที่เราต้องทำคือค้นหาข้อผิดพลาดในการเรียกกลับในฟังก์ชันการลงทะเบียนผู้ใช้ และเพิ่มรหัสนี้:
messenger.sendMessage(':x: Error While adding a new user ' + formData.email + ' to the DB. Registration aborted!' + error.code + ' ' + error.message);
ตอนนี้เรารู้ได้ทันทีว่าการลงทะเบียนล้มเหลว เหตุใดจึงล้มเหลว และที่สำคัญกว่านั้นคือ ใครล้มเหลวสำหรับ:

มีสถานที่ที่น่าสนใจมากมายที่เราสามารถส่งข้อความได้ (แทบทุกที่ที่มีข้อผิดพลาดในการติดต่อกลับ) หนึ่งในนั้นคือฟังก์ชันข้อผิดพลาด catch-all ทั่วไป:
app.use(function(err, req, res, next) { var message = ':x: Generic Server Error! '+ err + '\n Request: \n' + req.protocol + '://' + req.get('host') + req.originalUrl + '\n' + JSON.stringify(req.headers) + 'Request Payload:\n' + JSON.stringify(req.body); messenger.sendMessage(message, '#server-errors'); res.status(err.status || 500); res.json({'error': true }); });
รหัสนี้ช่วยให้เราค้นพบว่าคำขอมีลักษณะอย่างไรสำหรับข้อยกเว้นที่ไม่ได้ส่ง เมื่อดูคำขอที่ทำให้เกิดข้อผิดพลาดเหล่านี้ เราสามารถติดตามสาเหตุหลักและแก้ไขได้จนกว่าจะไม่มีข้อผิดพลาดทั่วไปอีกต่อไป
ด้วยการแจ้งเตือนข้อผิดพลาดเหล่านี้ทั้งหมด ตอนนี้เราสบายใจที่รู้ว่าหากมีสิ่งหลักที่ล้มเหลวในแอป เราจะรู้ได้ทันที
ตรวจสอบการเงิน
ต่อไป ฉันต้องการส่งการแจ้งเตือนเมื่อมีเหตุการณ์ทางการเงินเกิดขึ้นในแอปพลิเคชัน เนื่องจากผลิตภัณฑ์ SaaS ของเราทำงานร่วมกับ Stripe เราจึงสร้างจุดสิ้นสุดของเว็บฮุคที่ได้รับ ping จาก Stripe เมื่อผู้คนอัปเกรดแผน ลดระดับแผน เพิ่มข้อมูลการชำระเงิน เปลี่ยนข้อมูลการชำระเงิน และกิจกรรมอื่น ๆ อีกมากมายที่เกี่ยวข้องกับการชำระค่าสมัครสมาชิก ซึ่งทั้งหมดจะถูกส่งไปยัง หย่อน:


ตรวจสอบพฤติกรรมผู้ใช้ที่ส่วนหน้า
มีหลายกรณีที่ในส่วนหน้าซึ่งเราต้องการทำความเข้าใจพฤติกรรมของผู้ใช้ในลักษณะที่ส่วนหลังไม่สามารถให้ได้ ดังนั้นเราจึงสร้างปลายทางเพื่อส่งข้อความ Slack โดยตรงจากส่วนหน้า เนื่องจาก URL เว็บฮุค Slack ของเราได้รับการปกป้องเบื้องหลังตำแหน่งข้อมูล POST
จึงมีความเสี่ยงน้อยที่สุดที่จะเปิดเผยการส่งข้อความ Slack ถึงทีมของเราผ่านปลายทาง
ด้วยจุดสิ้นสุด ตอนนี้เราสามารถปิดข้อความ Slack ด้วยการเรียก AngularJS $http.post
:
// send Slack notification from the front end var message = ":warning: Slack disconnected by " + $scope.user.username; $http.post('/endpoint', message);
สิ่งนี้ช่วยให้เราตอบคำถามสำคัญเกี่ยวกับธุรกิจ: ผู้คนลงทะเบียนและเพิ่มชื่อโดเมนหรือไม่ พวกเขาไม่ได้? ถ้ามีใครอยู่ แสดงว่าเป็นโดเมนที่มีรายละเอียดสูงจริงๆ ซึ่งเจ้าของเราต้องการติดต่อเป็นการส่วนตัวในไม่ช้าหลังจากที่พวกเขาเพิ่มโดเมนเข้าไปแล้ว ตอนนี้เราสามารถใช้ประโยชน์จากสิ่งนี้:

จนถึงจุดหนึ่ง เราเห็นรูปแบบคนที่เพิ่มโดเมน ลบโดเมน จากนั้นอ่านภายในไม่กี่นาที ซึ่งบอกเราถึงข้อบกพร่องที่คลุมเครือซึ่งเราอาจไม่เคยพบมาก่อน
นอกจากนี้ยังมีสัญญาณว่าผู้ใช้ไม่พอใจกับบริการและสิ่งเหล่านี้มีค่าที่ควรทราบ มีคนลบชื่อโดเมนหรือไม่ พวกเขายกเลิกการเชื่อมต่อ Slack หรือไม่?

ข้อเสนอแนะนี้ทำให้เรามีโอกาสติดต่อในเชิงรุกและเสนอการสนับสนุนลูกค้าที่น่ายินดีในเวลาที่สำคัญที่สุด
ตรวจสอบงานที่กำหนดเวลาไว้
สิ่งที่น่าสนใจที่สุดอย่างหนึ่งใน Slack คือผลลัพธ์ของงานที่กำหนดเวลาไว้ ผลิตภัณฑ์ SaaS ของเราทำงานเพื่อแจ้งผู้คนเกี่ยวกับประสิทธิภาพของเว็บไซต์ของตน (บริการหลักของเรา) เพื่อส่งอีเมลธุรกรรม ทำความสะอาดฐานข้อมูล และอีกสองสามสิ่ง การยิงและผลลัพธ์ของงานเหล่านี้จะส่งข้อความไปยัง Slack:

ตอนนี้เรารู้แล้วว่าฟังก์ชันงานเริ่มทำงาน ผลลัพธ์ของฟังก์ชันนั้นคืออะไร (ในกรณีนี้คือส่งอีเมลหลายฉบับ) และล้มเหลวไม่ว่าจะด้วยเหตุผลใดก็ตาม
นำแนวคิดนี้ไปประยุกต์ใช้กับการสมัครของคุณ
กรณีศึกษาข้างต้นเป็นตัวอย่างเชิงปฏิบัติของสิ่งที่เราทำเพื่อตรวจสอบแอปพลิเคชันและบริการของ GoFaster.io มันทำงานได้อย่างยอดเยี่ยมสำหรับเรา แต่แนวคิดนี้จะขยายไปสู่แอปพลิเคชันขนาดใหญ่ที่ส่งข้อความหลายร้อย อาจเป็นพันข้อความต่อวันได้อย่างไร อย่างที่คุณจินตนาการได้ สิ่งนี้จะกลายเป็นสถานการณ์ “Slackbot ที่ร้องไห้หมาป่า” อย่างรวดเร็ว และคุณค่าจะหายไปจากเสียง
อย่าปฏิบัติต่อการแจ้งเตือนทั้งหมดอย่างเท่าเทียมกัน
การแจ้งเตือนบางอย่างมีความสำคัญมากกว่าการแจ้งเตือนอื่นๆ และความสำคัญจะแตกต่างกันไปตามพนักงานและบทบาทของพวกเขา ตัวอย่างเช่น ฝ่ายพัฒนาซอฟต์แวร์และฝ่ายปฏิบัติการด้านไอที (DevOps) อาจสนใจเฉพาะข้อความของเซิร์ฟเวอร์ ในขณะที่กลุ่มบริการลูกค้าจะสนใจมากที่สุดเกี่ยวกับสิ่งที่เกิดขึ้นกับผู้ใช้
โชคดีที่ Slack มีวิธีแก้ปัญหาที่ยอดเยี่ยม นั่นคือ ช่อง
ทุกคนสามารถสร้างช่องได้ ทำให้เป็นสาธารณะหรือส่วนตัวในองค์กรของคุณ และแชร์กับใครก็ได้ เมื่อคุณสมัครรับข้อมูลจากช่องแล้ว คุณสามารถควบคุมวิธีที่กิจกรรมของช่องนั้นเตือนคุณ ข้อความใหม่ในช่องดังทุกครั้งหรือไม่? มันเตือนโทรศัพท์ของคุณด้วยหรือไม่? มันทำให้ช่องเป็นตัวหนาเท่านั้น? ทั้งหมดนี้สามารถควบคุมได้สำหรับแต่ละช่องโดยสมาชิกในทีมแต่ละคนเพื่อให้เหมาะกับความต้องการของพวกเขา
การนำแนวคิดนี้ไปปฏิบัติ ต่อไปนี้คือวิธีที่องค์กรขนาดใหญ่อาจจัดระเบียบการแจ้งเตือนตามการตรวจสอบใน Slack ผ่านช่องทางต่างๆ:
#วิกฤต-เซิร์ฟเวอร์-ข้อผิดพลาด
- อะไร: ข้อผิดพลาดในการลงทะเบียน ข้อผิดพลาดในการเข้าสู่ระบบ ข้อผิดพลาดในการอ่านและเขียนฐานข้อมูล
- ใคร: ผู้ดูแลระบบ, DevOps, CTO, CEO, นักพัฒนา
- การตั้งค่าการแจ้งเตือน: แจ้งเตือนบนโทรศัพท์หรือเดสก์ท็อปเสมอ
#Non-Critical-Server-Errors
- อะไร: ข้อผิดพลาด 404 ข้อผิดพลาดของเซิร์ฟเวอร์ที่รับทั้งหมด ฯลฯ
- ใคร: DevOps นักพัฒนา
- การตั้งค่าการแจ้งเตือน: ทำตัวหนาแต่อย่าดัง
#การเงิน
- อะไร: ธุรกรรมการชำระเงิน ธุรกรรมที่ล้มเหลว อัปเกรด ดาวน์เกรด บัตรหมดอายุ
- ใคร: CFO, CEO
- การตั้งค่าการแจ้งเตือน: ทำให้ฝนตก
#พฤติกรรมผู้ใช้
- อะไร: การลงทะเบียน, กระบวนการปฐมนิเทศ, อัปเดตประเภทแผน, การเพิ่มข้อมูล, การลบข้อมูล, การลบบัญชี
- ใคร: การสนับสนุนลูกค้า, ผู้จัดการโซเชียลมีเดีย, นักพัฒนา, CEO
- การตั้งค่าการแจ้งเตือน: แจ้งเตือนบนโทรศัพท์หรือเดสก์ท็อปเสมอ
#Application-Stats
- อะไร: ผลลัพธ์ของงานตามกำหนดเวลา การดูแลทำความสะอาด สถิติอีเมลธุรกรรม จำนวนผู้ใช้และตัวชี้วัดการเติบโต
- ใคร: นักการตลาดอีเมล ผู้ดูแลระบบ ท่านใดสนใจ
- การตั้งค่าการแจ้งเตือน: ทำตัวหนาแต่อย่าดัง
บทสรุป
หลังจากสร้างแนวคิดนี้เป็นเวลาสองสามเดือนและได้สรุปผล เราพบว่าแนวคิดนี้เป็นส่วนขยายอันทรงคุณค่าของแอปพลิเคชันของเรา หากไม่มีเราจะรู้สึกขาดการติดต่อกับสิ่งที่เกิดขึ้นกับบริการและจะต้องค้นหาข้อมูลเดียวกันด้วยตนเองผ่านแดชบอร์ด มิฉะนั้นการสืบค้นฐานข้อมูลจะเป็นงานที่น่าเบื่อ
ทุกแอปพลิเคชันและฐานผู้ใช้ต่างกัน ซึ่งหมายความว่าแนวคิดนี้ไม่สามารถสร้างเป็นบริการและนำเสนอต่อมวลชนได้ เพื่อให้มีคุณค่า ต้องใช้เวลาและทรัพยากรเพียงเล็กน้อยในการผสานรวมเข้ากับแอปพลิเคชันของคุณอย่างลึกซึ้ง เมื่อพร้อมใช้งานแล้ว การลงทุนจะให้ผลตอบแทนในรูปแบบของการเชื่อมโยงทีมของคุณกับแอปพลิเคชันและผู้ใช้ของคุณ
โดยสรุป นี่คือข้อดีของการใช้การแชทเป็นทีมเพื่อตรวจสอบใบสมัครของคุณ:
รับมุมมองใหม่เกี่ยวกับพฤติกรรมของผู้ใช้และเซิร์ฟเวอร์
การมีฟีดข้อมูลเมตริกแบบเรียลไทม์ที่สำคัญที่สุดสำหรับคุณและธุรกิจของคุณ จะทำให้คุณเชื่อมต่ออย่างใกล้ชิดกับสิ่งที่ผู้ใช้กำลังทำและวิธีที่เซิร์ฟเวอร์ตอบสนอง
ตอบสนองอย่างรวดเร็วเมื่อสิ่งต่างๆ ล้มเหลว
คุณจะสามารถตอบสนองได้เร็วกว่าที่เคย คุณจะทราบเกี่ยวกับความล้มเหลวในเวลาเดียวกับที่ผู้ใช้ของคุณทราบ คุณสามารถตอบสนองต่อจุดสิ้นสุดที่ล้มเหลว การเชื่อมต่อฐานข้อมูลที่ขาดหายไป หรือการโจมตี DDoS ได้ทันที
เสนอการบริการลูกค้าที่ยอดเยี่ยม
ติดต่อลูกค้าที่เพิ่งปิดบัญชีเพื่อเสนอส่วนลด แสดงความขอบคุณเป็นการส่วนตัวแก่ลูกค้าที่อัปเกรด หรือเพียงติดตามผลเพื่อทำความเข้าใจความตั้งใจของพวกเขา เมื่อคุณรู้ว่าผู้ใช้กำลังทำอะไรและกำลังทำอะไร คุณสามารถค้นหาสาเหตุได้อย่างง่ายดาย
ความเชื่อมโยงของทีมกับแอปพลิเคชันจะทำให้คุณมีประสิทธิภาพมากขึ้น
เมื่อทีมของคุณเข้าใจตรงกันกับแอปพลิเคชัน การทำงานร่วมกันสามารถเน้นที่การแก้ปัญหาที่เกิดขึ้น แทนที่จะพยายามคิดว่าเกิดอะไรขึ้น เกิดขึ้นที่ไหน หรือเกิดขึ้นกับใคร
การแจ้งเตือนและช่องสามารถปรับขนาดได้ด้วยแอปพลิเคชันของคุณ
เมื่อใบสมัครและทีมของคุณเติบโตขึ้น ความต้องการในการตรวจสอบของคุณก็จะเพิ่มขึ้นเช่นกัน Slack ทำงานได้อย่างยอดเยี่ยมในการให้สิทธิ์และการควบคุมการแจ้งเตือนที่จำเป็นแก่คุณ เพื่อให้แน่ใจว่าข้อมูลที่ถูกต้องจะไปถึงคนที่เหมาะสม
การค้นหามีประสิทธิภาพ
โดยการบันทึกชื่อผู้ใช้ในข้อความ Slack ของคุณ คุณสามารถติดตามทุกข้อผิดพลาด ข้อความแสดงความสำเร็จ หรือเหตุการณ์ที่ผู้ใช้สร้างขึ้นขณะโต้ตอบกับแอปพลิเคชันของคุณได้ง่ายๆ โดยค้นหาชื่อผู้ใช้ใน Slack โปรดทราบว่าด้วยบัญชี Slack ฟรี ข้อความนี้จะจำกัดอยู่ที่ 10,000 ข้อความล่าสุด

ฉันหวังว่าคุณจะพบว่าแนวคิดนี้มีประโยชน์ และฉันชอบที่จะได้ยินเรื่องราวอื่นๆ ของทีมที่ได้ใช้รูปแบบการตรวจสอบที่คล้ายคลึงกัน หรือเป็นเพียงวิธีที่น่าสนใจอื่นๆ ในการใช้และสร้างมันขึ้นมา