Slack bot for self-servicing automation of common or predictable tasks.

Overview

receptionist-bot-rs

Slack bot for self-servicing automation of common or predictable tasks.

Receptionist bot aims to provide a no-code frontend for technical & non-technical users to easily automate away some of the tedious repetition that can permeate Slack as companies grow larger. Its scope is narrow: rather than replacing the first-party Slack Workflows system or becoming an entire ecosystem such as SOCless, Receptionist bot bridges the gap between the promise of Slack Workflows and the current state provided to users while also providing workflow automations for free-tier communities.

The app is designed to be highly extensible for new features in your workflows and is unopinionated with regards to its deployment infrastructure.

Interacting with the Receptionist Bot

The app ships with a slash command /rec-manage that will display a UI for Creating, Editing, and Deleting Receptionist Workflow Responses


Project Structure & Contributing

This project is a monorepo, meaning it contains multiple crates or (packages) in one repository. It consists of of the following crates:


Supported Features

Events that can trigger a response

Event Origin Status Event Scope Origin Type
Message sent to channel Done Local (channel) Slack Message
Receptionist App mentioned in channel Planned Local (channel) Slack Message
Custom slash command: /rec-cmd <my_command> Planned Global Slash Command
Webhook sent to Receptionist Server Not Planned Global Server Event

Conditions to check before triggering a response

Condition Status Eligible Origin Types
Matches a Regex Done Slack Message
Matches a Phrase Done Slack Message
Is From a specific User Planned Slack Message

Actions that a Response can take

Action Status Eligible Origin Types
React with Emoji (can trigger Slack Workflows) Done Slack Message
Send Message To Thread Done Slack Message
Tag Pagerduty oncall for team in thread Done Slack Message
Send Message To Channel Done Slack Message
Forward message to a channel Done Slack Message
Tag Pagerduty oncall for team in channel Planned Slack Message
Send Message To User Planned Slack Message
Tag User in thread Planned Slack Message
Tag User in Channel Planned Slack Message
Forward message to a user Planned Slack Message
send webhook with custom payload Planned Slack Message

Known Bugs & Limitations

Limitations

  • App will not scan bot messages, hidden messages, or threaded messages to help prevent infinite loops or negatively impacting the signal-to-noise ratio of the channel.
    • listening for bot messages may be introduced in the future but only if the message condition is scoped to that single bot (user-specific message conditions have not been written yet, which blocks this bot message feature)

Bugs

Listener Validation in Modal

Intent: If listener channel is empty in the Management Modal, we return an errors object response to Slack to display an error and prevent the view closing.

Bug: The view stays open correctly, However the error does not display.

Situation Report: We are confident the http response is being sent correctly to Slack because if anything is incorrect, Slack will display a connection error in the modal. We encountered this previously when the content-type was incorrect or when the errors object contained an invalid Block_ID. Since neither of those are happening now, I am inclined to believe this is either a bug or limitation on Slack's end with the Conversations Select Section Block

View UI Examples with Block Kit Builder

  1. Log into Block Kit Builder
  2. Select Modal Preview from the dropdown in the top left
  3. Copy a json template from ./crates/receptionist/tests/generated_blocks and paste it into the Block Kit json editor

Special Thanks & Shoutouts

  • @abdolence for creating the excellent slack-morphism library.
    • slack-morphism strongly types nearly everything you need to work with Slack, including block kit models which are a huge pain point when doing highly reactive & dynamic UIs like the Receptionist Bot. This app would not have been possible without his work!
    • @abdolence also quickly responded to questions with thorough answers and helpful tips
  • @davidpdrsn for the Axum web application framework.
    • Axum is easy to use and is built with hyper & tokio, but also uses the Tower ecosystem so that you can share middleware/services/utilities, between any other framework that uses hyper or tonic. You can also often share code between server-side and client side implementations.
    • You can apply middlewares & Layers to only affect certain routes. In this App we use a Slack Verification Middleware from slack-morphism to protect our routes that expect to receive traffic from Slack, but not for other routes.
    • @davidpdrsn also quickly helped out when I struggled to integrate an authentication middleware.
  • @yusuphisms for experimenting with the Pagerduty API to enable new bot features, helping incorporate Docker Compose & DynamoDB support, and setting up for integration tests.
  • @ubaniabalogun for thoroughly designing an effective DynamoDB model to enable a wide range of queries with a single Table.
  • @shadyproject for helping load test and brainstorming deployment & database strategies.
  • Everyone who has worked on strum which powers up the already great Rust enums
  • @bryanburgers for his work on https://github.com/zenlist/serde_dynamo which makes it easier to use dynamoDB (and the alpha branch supports the brand new aws_rust_sdk!)

Code of Conduct

https://github.com/twilio-labs/.github/blob/master/CODE_OF_CONDUCT.md

You might also like...
This is a Telegram bot I'm working on in my free time to learn Rust.

Maldness Bot This is a Telegram bot I'm working on in my free time to learn Rust. Building docker build -t . should be enough.

Play Onitama in your browser, compete with friends or lose to a bot

Play Onitama in your browser, compete with friends or lose to a bot

A Discord bot for lichess and Rosen related things
A Discord bot for lichess and Rosen related things

liro Liro is a Discord bot that follows in the footsteps of Lichess-discord-bot, without necessarily aiming to replace it. The main pain point that th

This is a simple Telegram bot with interface to Firefly III to process and store simple transactions.
This is a simple Telegram bot with interface to Firefly III to process and store simple transactions.

Firefly Telegram Bot Fireflies are free, so beautiful. (Les lucioles sont libres, donc belles.) ― Charles de Leusse, Les Contes de la nuit This is a s

Hi I'm Sophy, a discord bot in devlopment, soon I'll be available to help everyone (❁´◡`❁)

Sophy Bot Hi I'm Sophy, a discord bot in devlopment, soon I'll be available to help everyone (❁´◡`❁) Contribution Do you like me and want to help me?

Telegram Bot Template with Cloudflare Workers

cf-workers-telegram-bot-template Usage This template starts you off with a src/lib.rs file, acting as an entrypoint for requests hitting your Worker.

Rust telegram bot library for many runtimes

Telbot Telbot provides telegram bot types and api wrappers. Specifically, telbot now supports: telbot-types: basic telegram types / requests / respons

Just a bot for Neovim's Matrix room(s)

nvim-matrix-bot Currently just supports replying to messages with :h some_doc or similar in them with a link to the docs on Neovim's website. Plan i

Music bot written in Rust

Akasuki What is Akasuki? Akasuki is a simple discord music bot written in rust. Highlights Select your music using discord's new select menu feature,

Comments
  • New Action: URL Fetch

    New Action: URL Fetch

    Problem Statement: Users would like to hit an API endpoint to quickly look up data, but do not want to configure an entire Slack bot for that service. Users may need the entire response, or just a subset of it (think jsonpath referencing of returned data)

    Acceptance Criteria:

    • A url_fetch action is available for a Receptionist Bot response
    • Users can input the following fields:
      • url
      • headers
      • body
      • slack_message - string with support for limited jsonpath/jinja referencing of the url response data
      • quietly - threads the bot output under the triggering message, or if its triggered by a slash command (when those are supported) it will send as ephemeral
    enhancement type:action 
    opened by noxasaxon 0
Owner
Twilio Labs
Open-Source Projects by Twilions and the Community
Twilio Labs
A Robo Lawyer Slack bot, powered by ChatGPT

Robo Lawyer for your slack channel, powered by ChatGPT Deploy this function on flows.network, and you will get a Slack bot that uses ChatGPT to respon

flows.network 6 Mar 26, 2023
Matrix bot inspired by Shirt Bot.

matrix-openai-bot Matrix bot inspired by Shirt Bot. Usage Run the bot after building it or grabbing the latest release $ matrix-openai-bot Edit the ge

null 5 Oct 26, 2021
Rewrite of the Discord Bot used for Managing the Infinity Bot List Servers.

Arcadia Rewrite of the Discord Bot used for Managing the Infinity Bot List Servers. Contributing Always run fmt.sh before making a Pull Request! MacOS

InfinityBotList 3 Dec 15, 2022
A lock-free thread-owned queue whereby tasks are taken by stealers in entirety via buffer swapping

Swap Queue A lock-free thread-owned queue whereby tasks are taken by stealers in entirety via buffer swapping. This is meant to be used [thread_local]

Thomas Sieverding 20 Sep 9, 2022
A thread pool for running multiple tasks on a configurable group of threads.

Threadfin A thread pool for running multiple tasks on a configurable group of threads. Extra features: Dynamic pool size based on load Support for asy

Stephen M. Coakley 46 Dec 5, 2022
Common processing blocks used with your Runes.

Common Processing Blocks (API Docs) Processing blocks built by Hammer of the Gods that you can use with your Runes. License This project is licensed u

Hammer of the Gods 9 Jul 21, 2022
Rust types for the OASIS Common Alerting Protocol (CAP)

Rust types for the OASIS Common Alerting Protocol (CAP)

Will Glynn 2 Jun 6, 2022
beat saber is a strongly typed, self-documenting and highly performant programming language

beatsaber beat saber is a strongly typed, self-documenting and highly performant programming language. With beat saber we aimed to create a language t

Untitled 4 Jan 17, 2022
A simple bot for discord.

Rusky Um simples bot para o discord! ?? Executando ⚠️ Antes de tudo você precisa do Rust Instalado você pode instalar clicando aqui Preparando Primeir

Rusky 3 Aug 12, 2022
A Simple, But amazing telegram bot, Made using the Rust language!

Telegram bot in Rust A fun Telegram bot made using Rust language.

Deep Alchemy 2 Dec 21, 2021