ใช้ Slack เพื่อตรวจสอบแอปของคุณ

เผยแพร่แล้ว: 2022-03-10
สรุปอย่างรวดเร็ว ↬ ในช่วงไม่กี่เดือนที่ผ่านมา ฉันได้สร้างแอปพลิเคชันซอฟต์แวร์เป็นบริการ (SaaS) และตลอดกระบวนการพัฒนา ฉันได้ตระหนักว่าเครื่องมือที่มีประสิทธิภาพ Slack (หรือการแชทแบบทีมโดยทั่วไป) สามารถเป็นอย่างไร เพื่อตรวจสอบพฤติกรรมของผู้ใช้และแอปพลิเคชัน หลังจากการผสานรวมเล็กน้อย แอปพลิเคชันของเราได้แสดงมุมมองแบบเรียลไทม์ในแอปพลิเคชันของเราซึ่งไม่เคยมีอยู่จริง และมีค่ามากจนฉันอดไม่ได้ที่จะเขียนถึงการแสดงและบอกเล่านี้

ทั้งหมดเริ่มต้นด้วยการเยี่ยมชมบริษัทสตาร์ทอัพเล็กๆ ในเมืองเดนเวอร์ โคโลราโด ในระหว่างการเยือนของฉัน ฉันเริ่มได้ยินเสียง "ติง" ที่ละเอียดอ่อนและมีเสน่ห์ที่มุมห้องทำงานทุกๆ สองสามนาที เมื่อฉันไปตรวจสอบเสียงแปลกๆ นี้ ฉันพบว่ามีกระดิ่งบริการติดอยู่กับ Raspberry Pi โดยมีค้อนโลหะเล็กๆ เชื่อมต่อกับแผงวงจร เมื่อปรากฏว่า Pi ได้รับข้อความจากเซิร์ฟเวอร์ของทีม และเหวี่ยงค้อนเล็กๆ ไปที่กระดิ่ง ทุกครั้งที่ลูกค้าใหม่ลงทะเบียน

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

เนื่องจากเราใช้ Slack สำหรับการแชทเป็นทีมอยู่แล้ว และเนื่องจากมี API ที่จัดทำเอกสารอย่างสวยงาม จึงเป็นตัวเลือกที่ชัดเจนสำหรับการทดสอบ

อ่านเพิ่มเติม เกี่ยวกับ SmashingMag:

  • อินเทอร์เฟซการสนทนา: วันนี้เราอยู่ที่ไหน เรากำลังมุ่งหน้าไปที่ไหน?
  • การทำงานร่วมกันเป็นทีมและการปิดช่องว่างด้านประสิทธิภาพในการออกแบบที่ตอบสนอง
  • สิ่งที่คุณควรรู้เกี่ยวกับกระบวนการออกแบบแอพ
  • Off To The Races: เริ่มต้นกับ Design Sprints
เพิ่มเติมหลังกระโดด! อ่านต่อด้านล่าง↓

ตั้งค่า Slack

อันดับแรก เราต้องรับ “URL ของเว็บฮุค” จาก Slack เพื่อโพสต์ข้อความโดยทางโปรแกรมไปยังช่อง Slack ของเรา

ตั้งค่า Slack
ทำตามขั้นตอนด้านบนเพื่อรับ URL ของเว็บฮุคจาก 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 ข้อความล่าสุด

ค้นหา Slack ตามชื่อผู้ใช้

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