| name | notion-api-integration-with-slack |
| description | Sub-skill of notion-api: Integration with Slack (+1). |
| version | 1.0.0 |
| category | business |
| type | reference |
| scripts_exempt | true |
Integration with Slack (+1)
Integration with Slack
"""slack_notion.py - Sync Slack messages to Notion"""
import os
import requests
from notion_client import Client
notion = Client(auth=os.environ["NOTION_API_KEY"])
SLACK_WEBHOOK = os.environ["SLACK_WEBHOOK_URL"]
def notify_slack_on_page_update(page_id, message):
"""Send Slack notification when Notion page is updated"""
page = notion.pages.retrieve(page_id)
title = page["properties"]["Name"]["title"][0]["plain_text"]
payload = {
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": f"*Notion Update*: {title}\n{message}"
}
},
{
"type": "actions",
"elements": [{
"type": "button",
"text": {"type": "plain_text", "text": "View in Notion"},
"url": page["url"]
}]
}
]
}
requests.post(SLACK_WEBHOOK, json=payload)
def create_notion_page_from_slack(database_id, title, content, channel):
"""Create Notion page from Slack message"""
return notion.pages.create(
parent={"database_id": database_id},
properties={
"Name": {"title": [{"text": {"content": title}}]},
"Source": {"select": {"name": "Slack"}},
"Channel": {"rich_text": [{"text": {"content": channel}}]}
},
children=[{
"type": "paragraph",
"paragraph": {
"rich_text": [{"text": {"content": content}}]
}
}]
)
Integration with GitHub
"""github_notion.py - Sync GitHub issues to Notion"""
import os
import requests
from notion_client import Client
notion = Client(auth=os.environ["NOTION_API_KEY"])
GITHUB_TOKEN = os.environ["GITHUB_TOKEN"]
def sync_github_issues_to_notion(repo, database_id):
"""Sync GitHub issues to Notion database"""
response = requests.get(
f"https://api.github.com/repos/{repo}/issues",
headers={"Authorization": f"token {GITHUB_TOKEN}"}
)
issues = response.json()
for issue in issues:
existing = notion.databases.query(
database_id=database_id,
filter={
"property": "GitHub ID",
"number": {"equals": issue["number"]}
}
)
properties = {
"Name": {"title": [{"text": {"content": issue["title"]}}]},
"GitHub ID": {"number": issue["number"]},
"Status": {
"select": {"name": "Open" if issue["state"] == "open" else "Closed"}
},
: {: issue[]},
: {
: [{: l[]} l issue[]]
}
}
existing[]:
notion.pages.update(
page_id=existing[][][],
properties=properties
)
:
notion.pages.create(
parent={: database_id},
properties=properties,
children=[{
: ,
: {
: [{: {: issue.get(, ) }}]
}
}]
)
()