From 5bd1ad32423191215c533d4504755c2747dae387 Mon Sep 17 00:00:00 2001 From: Randy Date: Mon, 26 Apr 2021 23:16:00 +0800 Subject: [PATCH] update webhook doc --- pages/dashboard/project/[projectId].tsx | 10 +++--- .../migration.sql | 3 ++ prisma/pgsql/schema.prisma | 5 ++- public/doc/_sidebar.md | 1 + public/doc/advanced/webhook.md | 30 ++++++++++++++++++ public/doc/images/enable_webhook.png | Bin 0 -> 27466 bytes 6 files changed, 44 insertions(+), 5 deletions(-) create mode 100644 prisma/pgsql/migrations/20210426145530_project_webhook/migration.sql create mode 100644 public/doc/advanced/webhook.md create mode 100644 public/doc/images/enable_webhook.png diff --git a/pages/dashboard/project/[projectId].tsx b/pages/dashboard/project/[projectId].tsx index d43185c4..c2a35af2 100644 --- a/pages/dashboard/project/[projectId].tsx +++ b/pages/dashboard/project/[projectId].tsx @@ -1,4 +1,4 @@ -import { AlertDialog, AlertDialogBody, AlertDialogContent, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, Box, Breadcrumb, BreadcrumbItem, BreadcrumbLink, Button, Center, Checkbox, Code, Container, Divider, Flex, FormControl, Heading, HStack, Input, Link, Spacer, Spinner, StackDivider, Switch, Tab, TabList, TabPanel, TabPanels, Tabs, Tag, Text, Textarea, toast, useDisclosure, useToast, VStack } from '@chakra-ui/react' +import { AlertDialog, AlertDialogBody, AlertDialogContent, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, Box, Breadcrumb, BreadcrumbItem, BreadcrumbLink, Button, Center, Checkbox, Code, Container, Divider, Flex, FormControl, Heading, HStack, Input, InputGroup, InputRightElement, Link, Spacer, Spinner, StackDivider, Switch, Tab, TabList, TabPanel, TabPanels, Tabs, Tag, Text, Textarea, toast, useDisclosure, useToast, VStack } from '@chakra-ui/react' import { Comment, Page, Project } from '@prisma/client' import { session, signIn } from 'next-auth/client' import { useRouter } from 'next/router' @@ -418,10 +418,12 @@ function Settings(props: { Webhook - + - - + + + + diff --git a/prisma/pgsql/migrations/20210426145530_project_webhook/migration.sql b/prisma/pgsql/migrations/20210426145530_project_webhook/migration.sql new file mode 100644 index 00000000..1bb83707 --- /dev/null +++ b/prisma/pgsql/migrations/20210426145530_project_webhook/migration.sql @@ -0,0 +1,3 @@ +-- AlterTable +ALTER TABLE "projects" ADD COLUMN "webhook" TEXT, +ADD COLUMN "enableWebhook" BOOLEAN; diff --git a/prisma/pgsql/schema.prisma b/prisma/pgsql/schema.prisma index 7f101a8f..e2ce49a1 100644 --- a/prisma/pgsql/schema.prisma +++ b/prisma/pgsql/schema.prisma @@ -58,7 +58,7 @@ model User { Comment Comment[] enableNewCommentNotification Boolean? @default(true) @map(name: "enable_new_comment_notification") - notificationEmail String? @map(name: "notification_email") + notificationEmail String? @map(name: "notification_email") @@map(name: "users") } @@ -92,6 +92,9 @@ model Project { enableNotification Boolean? @default(true) @map(name: "enable_notification") + webhook String? + enableWebhook Boolean? + @@map(name: "projects") } diff --git a/public/doc/_sidebar.md b/public/doc/_sidebar.md index 73997538..bc30c612 100644 --- a/public/doc/_sidebar.md +++ b/public/doc/_sidebar.md @@ -11,5 +11,6 @@ - [Notification](/features/notification.md) - **Advanced** - [JS SDK Reference](/advanced/sdk.md) + - [Webhook Reference](/advanced/webhook.md) - [i18n](/advanced/i18n.md) - [**Contributing Guide**](/contributing.md) \ No newline at end of file diff --git a/public/doc/advanced/webhook.md b/public/doc/advanced/webhook.md new file mode 100644 index 00000000..a644944a --- /dev/null +++ b/public/doc/advanced/webhook.md @@ -0,0 +1,30 @@ +# Webhook + +In addition to get new comment notification from Email, we also provide Webhook. + +## Enable + +To enable webhook for project, in `Project` -> `Settings`, save your webhook url and turn on the switch button. + +![](../images/enable_webhook.png ':size=500') + +## Reference + +### New comment + +When new comment comes in, Cusdis will make a `POST` request to your webhook, with below data: + +```js +{ + "type": "new_comment", + "data": { + "by_nickname": "xxx", + "by_email": "xxx", + "content": "xxx", + "page_id": "xxx", + "page_title": "xxx", // page title, maybe NULL + "project_title": "haha", // project title + "approve_link": "" // use this link to approve this comment without login + } +} +``` diff --git a/public/doc/images/enable_webhook.png b/public/doc/images/enable_webhook.png new file mode 100644 index 0000000000000000000000000000000000000000..4ba0177b939be91dbbb105410024524662eb65af GIT binary patch literal 27466 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 a*8Np)%ZHT`Ex!25Tb;8%Tlwp?xc>t{r9s;O literal 0 HcmV?d00001