背景
我们正在开发一个Slack Bot。这次我们使用了由Slack、React、Next.js和ngrok提供的Bolt for JavaScript(Node.js)。下面是它们各自的功能。
- 用于JavaScript的螺栓:我不想使用Slack的基本API,但想从 Package 它的函数中获益。
- React:需要使用Next.js
- Next. js:Slack需要一个请求URL,以便在Slack中发生诸如提及之类的事件时通知我的bot应用,但Next.js可以轻松创建一个API端点来设置该URL(例如/api/something)
- ngrok:在本地开发环境中,该URL将是
http://localhost:3000
,因此协议将是http
而不是https
。Slack不允许这样做,因此我们需要一个以https开头的URL,该URL将通过隧道连接到本地http://localhost:3000
。
待解决的问题。
我已经确认,如果我在Slack的某个工作区中键入@xxxx
,事件将通知给https://xxxx.jp.ngrok.io/api/slack/events
。
app.event("app_mention", async ({ event, say }) => {
.
.
.
}
未调用,并发生以下错误
error - unhandledRejection: Error: listen EADDRINUSE: address already in use :::3000
我想知道为什么和如何解决这个问题。
源码
/api/空闲时间/事件. ts
import type { NextApiRequest, NextApiResponse } from "next";
require("dotenv").config();
import app from "../../../config/slackAuth";
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
// Unique case for Slack challenge
if (req.body.challenge) return res.status(200).json(req.body);
// Subscribe to 'app_mention' event in your App config
// See https://api.slack.com/tutorials/tracks/responding-to-app-mentions
app.event("app_mention", async ({ event, say }) => {
try {
// Response to the message in the thread where the event was triggered with @${message.user}
// See https://slack.dev/bolt-js/concepts#message-sending
await say({
text: `Hi <@${event.user}>!`,
thread_ts: event.ts,
});
} catch (error) {
await say({
text: `<@${event.user}> ${error.message}.`, // @userName Request failed with status code 429.
thread_ts: event.ts,
});
}
});
(async () => {
// Start this app
await app.start(process.env.PORT || 3000);
console.log("⚡️ Bolt app is running!");
})();
return res.status(404).json({ message: "Unknown event type" });
}
错误代码
error - unhandledRejection: Error: listen EADDRINUSE: address already in use :::3000
at Server.setupListenHandle [as _listen2] (net.js:1331:16)
at listenInCluster (net.js:1379:12)
at Server.listen (net.js:1465:7)
at C:\Users\81906\Documents\slackGpt3\node_modules\@slack\bolt\dist\receivers\HTTPReceiver.js:176:25
at new Promise (<anonymous>)
at HTTPReceiver.start (C:\Users\81906\Documents\slackGpt3\node_modules\@slack\bolt\dist\receivers\HTTPReceiver.js:142:16)
at App.start (C:\Users\81906\Documents\slackGpt3\node_modules\@slack\bolt\dist\App.js:241:30)
at eval (webpack-internal:///(api)/./pages/api/slack/events.ts:69:69)
at handler (webpack-internal:///(api)/./pages/api/slack/events.ts:71:7)
at Object.apiResolver (C:\Users\81906\Documents\slackGpt3\node_modules\next\dist\server\api-utils\node.js:363:15) {
code: 'EADDRINUSE',
errno: -4091,
syscall: 'listen',
address: '::',
port: 3000
}
1条答案
按热度按时间8i9zcol21#
问题
在Next.js中使用Slack Bolt for JavaScript并不简单,原因如下:
此信息是由Slack的某个人提供的,源代码可以在https://github.com/slackapi/bolt-js/issues/1687上找到。
溶液