diff --git a/examples/edge-functions/supabase/functions/slack-bot-mention/index.ts b/examples/edge-functions/supabase/functions/slack-bot-mention/index.ts new file mode 100644 index 00000000000..f38dd0c809b --- /dev/null +++ b/examples/edge-functions/supabase/functions/slack-bot-mention/index.ts @@ -0,0 +1,33 @@ +import { serve } from 'https://deno.land/std@0.197.0/http/server.ts'; +import { WebClient } from 'https://deno.land/x/slack_web_api@6.7.2/mod.js'; + +const slackBotToken = Deno.env.get("SLACK_TOKEN") ?? ""; +const botClient = new WebClient(slackBotToken); + +console.log(`Slack URL verification function up and running!`); +serve(async (req) => { + try { + const { token, challenge, type, event } = await req.json(); + + if (type == 'url_verification') { + return new Response(JSON.stringify({ challenge }), { + headers: { 'Content-Type': 'application/json' }, + status: 200, + }); + } else if (event.type == 'app_mention') { + const { user, text, channel, ts } = event; + // Here you should process the text received and return a response: + const response = await botClient.chat.postMessage({ + channel: channel, + text: `Hello <@${user}>!`, + thread_ts: ts, + }); + return new Response('ok', { status: 200 }); + } + } catch (error) { + return new Response(JSON.stringify({ error: error.message }), { + headers: { 'Content-Type': 'application/json' }, + status: 500, + }); + } +}); \ No newline at end of file diff --git a/examples/edge-functions/supabase/functions/slack-bot-mention/slack-bot-mention.md b/examples/edge-functions/supabase/functions/slack-bot-mention/slack-bot-mention.md new file mode 100644 index 00000000000..2b385f8ae01 --- /dev/null +++ b/examples/edge-functions/supabase/functions/slack-bot-mention/slack-bot-mention.md @@ -0,0 +1,61 @@ +# Slack Bot Mention Edge Function + +The Slack Bot Mention Edge Function allows you to process mentions in Slack and respond accordingly. + +## Configuring Slack Apps + +For your bot to seamlessly interact with Slack, you'll need to configure Slack Apps: + +1. Navigate to the Slack Apps page. +1. Under "Event Subscriptions," add the URL of the `slack-bot-mention` function and click to verify the URL. +1. The Edge function will respond, confirming that everything is set up correctly. +1. Add `app-mention` in the events the bot will subscribe to. + +## Creating the Edge Function + +Deploy the following code as an Edge function using the CLI: + +```bash +supabase --project-ref nacho_slacker secrets \ +set SLACK_TOKEN= +``` + +Here's the code of the Edge Function, you can change the response to handle the text received: + +```ts index.ts +import { serve } from 'https://deno.land/std@0.197.0/http/server.ts'; +import { WebClient } from 'https://deno.land/x/slack_web_api@6.7.2/mod.js'; + +const slackBotToken = Deno.env.get("SLACK_TOKEN") ?? ""; +const botClient = new WebClient(slackBotToken); + +console.log(`Slack URL verification function up and running!`); +serve(async (req) => { + try { + const reqBody = await req.json(); + console.log(JSON.stringify(reqBody, null, 2)); + const { token, challenge, type, event } = reqBody; + + if (type == 'url_verification') { + return new Response(JSON.stringify({ challenge }), { + headers: { 'Content-Type': 'application/json' }, + status: 200, + }); + } else if (event.type == 'app_mention') { + const { user, text, channel, ts } = event; + // Here you should process the text received and return a response: + const response = await botClient.chat.postMessage({ + channel: channel, + text: `Hello <@${user}>!`, + thread_ts: ts, + }); + return new Response('ok', { status: 200 }); + } + } catch (error) { + return new Response(JSON.stringify({ error: error.message }), { + headers: { 'Content-Type': 'application/json' }, + status: 500, + }); + } +}); +``` \ No newline at end of file