3.5 KiB
3.5 KiB
Company-X t<> ܤ\ l D<>
<91>1|: 2025-09-07
<91>1<90>: Claude & happybell80
<A9>: Company-X t<> <20><> ܤ\ l <20><> 0]
1. l D<> <20>m
1.1 Slack Interactive ܤ\
- news_posting_skill.py: Company-X t<> D <20><> 0<> l
- Block Kit T<><54> <15> (<28><> <20>h)
- "H<>t<98> <20><>" / "t<08>0" <20><>
- skill-publish <20><> T<>
- JSON 0 <20><> <20><> (
/app/data/news_posting_state.json)
1.2 Interactive Endpoint
- main.py:
/api/slack/interactive<20><><D4>x<EC> <20><> - slack_handler.py:
handle_interactive()h l- Slack <1C> <20><>
- <84><BC> aX <20><> (publish_news_, skip_news_)
- 3 <20> ACK Q<>
1.3 X<> $
- D ID <20><>: X<><58> )<29> D<>
COMPANY_X_NEWS_CHANNEL_ID=C09CP4MDX71 # \Y L<><4C> D # COMPANY_X_NEWS_CHANNEL_ID=C09C98KK2TT # <20><01> <20><> - /home/heejae/rb8001/.env: X<><58> <20><>
- /home/admin/ivada_project/rb8001/.env: <20>| $ <20>0T
1.4 <11> t<> )<29> ܤ\
- sent_news_tracker.py: <04> t<> <20>
- 30| <20><><88><A4> <20>
- JSON | 0 <20><>
- <AC><A9><90><C4> <11> D0<44>
- Dockerfile : sent_news_tracker.py <20>h
COPY ./sent_news_tracker.py /code/
2. t<>\ 8<1C>
2.1 sent_news_tracker <20><> <20><>
- 8:
No module named 'sent_news_tracker' - <D0>x: Docker t<><74><F8> | <20><>h
- t<B0>:
- Dockerfile<D0> COPY <20>9 <20><>
- import <20>\
- docker compose down && up --build
2.2 D ID X<>T) t<>
- 8: D ID<49> T<><54> X<>T)(
- 0 $<24>: DB Lt (channel_configs) )<29>
- \<5C> <20>: X<><58> )<29>
- t : <20>l<CC><6C>t<98><74> \Y 1, $<24><><84>ȴ<C0> )<29>
- <A5>: <04>\ $, `x X
2.3 DM $X T<><54>
- <04>: Slack DM<44> "$X" T<><54> \<5C>
- <D0>x: skill-email 500 <20><>, t<> D<> <20>(<28>
- <C1><DC>: <15>x <20><> x<><78> T<><54>
3. ܤ\ D<>M<A4>
APScheduler (09:00 <20>|)
<20>
news_posting_skill.py
<20>
skill-news:8505 (t<> <18>)
<20>
Slack D <04> (Block Kit)
<20>
<0A><><AC> <20><> t<>
<20>
/api/slack/interactive
<20>
handle_interactive()
<20>
skill-publish:8511 (H<>t<98> <20><>)
4. L<><4C> )<29>
4.1 <18> L<><4C>
# Company-X t<> <20><> <20><>
curl -X POST http://localhost:8001/api/test/companyx-news
# Daily Summary DM L<><4C>
curl -X POST http://localhost:8001/api/cron/daily-summary
# \<5C> Ux
docker logs rb8001 | grep -E "Company-X|news_posting"
4.2 D ID Ux
# get_channels.py <20>l<EFBFBD><6C> <20>1h
python3 /home/heejae/rb8001/get_channels.py
5. X<> $ <20>}
5.1 D X<><58>
# Slack 0<>
SLACK_BOT_TOKEN=xoxb-...
SLACK_SIGNING_SECRET=...
# Company-X t<>
COMPANY_X_NEWS_CHANNEL_ID=C09CP4MDX71
COMPANY_X_NEWS_KEYWORDS=<EFBFBD>|<EFBFBD>Ѥ,<2C>|<EFBFBD> Ѥ
COMPANY_X_NEWS_SCHEDULE=0 10 * * 1-5
COMPANY_X_NEWS_ENABLED=true
# <20><> D<>
SKILL_NEWS_URL=http://localhost:8505
SKILL_PUBLISH_URL=http://localhost:8511
5.2 Slack App $ D<>
- Interactivity & Shortcuts \1T
- Request URL:
https://ro-being.com/rb8001/api/slack/interactive - OAuth Scopes: chat:write, chat:write.public
6. <20>X<FC>m
- Docker <20>ܑ<AC>:
docker compose down && up<20><> (restart <20><>) - X<BD><C0> <20><><C0>: P <20> <20>P
- /home/heejae/rb8001/.env
- /home/admin/ivada_project/rb8001/.env
- <B4> X<>: COMPANY_X_NEWS_CHANNEL_ID<49> <20><>
7. <20><> <20>m
- Slack App Interactive URL <20> $
- skill-email 500 <20><> t<>
- <B4> D X L<><4C>
- <8C><DC> D<> <20> T<><54> <20>pt<70> 0<>
8. | <20><> <20><>
<E0><DC> |
/home/heejae/rb8001/app/skills/news_posting_skill.py/home/heejae/rb8001/sent_news_tracker.py
|
/home/heejae/rb8001/main.py: Interactive <20><><D4>x<EC> <20><>/home/heejae/rb8001/app/router/slack_handler.py: handle_interactive() <20><>/home/heejae/rb8001/Dockerfile: sent_news_tracker.py <20><> <20><>/home/heejae/rb8001/app/skills/dm_skill.py: <11> t<> D0<44> <01>.env|<7C>: X<><58> <20><>
9. <20>( 8
- 250906_news_system_integration.md - 0 $<24>
- 250905_news_deduplication.md - <11> p ܤ\