Skip to content

Conversation

@Palbahngmiyine
Copy link
Member

@Palbahngmiyine Palbahngmiyine commented Jan 22, 2026

기능 변경사항

  • 카카오 BMS(브랜드 메시지 서비스) 자유형 타입 및 스키마를 추가했습니다.
    • 8가지 chatBubbleType 지원 (TEXT, IMAGE, WIDE, WIDE_ITEM_LIST, COMMERCE, CAROUSEL_FEED, CAROUSEL_COMMERCE, PREMIUM_VIDEO)
    • chatBubbleType별 필수 필드 검증 로직 추가
  • WIDE_ITEM_LIST 타입에 최소 3개 아이템 검증을 추가했습니다.
  • BMS 커머스 가격 규칙 검증(regularPrice, discountPrice, discountRate, discountFixed 조합)을 추가했습니다.
  • BMS 쿠폰 설명 필드에 최대 12자 길이 검증을 추가했습니다.

문서 및 예제

  • 카카오 BMS 메시지 발송 예제를 추가했습니다. (TEXT, IMAGE, WIDE, WIDE_ITEM_LIST, COMMERCE, CAROUSEL_FEED, CAROUSEL_COMMERCE, PREMIUM_VIDEO 등 10가지 유형)
  • BMS 예제용 이미지 파일을 추가했습니다. (example_square.jpg, example_wide.jpg)
  • CLAUDE.md 프로젝트 가이드 문서를 추가했습니다.
  • AGENTS.md 아키텍처 문서를 추가했습니다.
  • solapi/model 하위에 AGENTS.md 상세 문서를 추가했습니다.

프로젝트 내부 변경사항

  • 버전을 5.0.2에서 5.0.3으로 업데이트했습니다.
  • Claude Code Hooks를 설정하여 Python 파일 자동 lint/fix 기능을 추가했습니다.
    • ruff check --fix: 린트 오류 자동 수정
    • ruff format: 코드 포매팅
    • ty check: 타입 체크
  • BMS Free Message E2E 테스트를 추가했습니다. (911줄)

Palbahngmiyine and others added 4 commits January 22, 2026 10:22
Add project documentation files to guide Claude Code when working
with this codebase. Includes project overview, architecture details,
conventions, and anti-patterns specific to this SDK.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Python 파일 수정 시 자동으로 실행되는 Hook 설정:
- ruff check --fix: 린트 오류 자동 수정
- ruff format: 코드 포매팅
- ty check: 타입 체크 (오류 시 Claude에게 수정 요청)

PostToolUse 이벤트에서 Edit/Write/NotebookEdit 도구 사용 후 실행됩니다.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add Kent Beck's "Tidy First?" guidelines to enforce separation of
structural (refactoring) and behavioral (feature) changes in commits.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Incremented version in pyproject.toml from 5.0.2 to 5.0.3.
- Introduced new BMS message types in message_type.py.
- Added BMS-related models including Bms, BmsButton, BmsCarousel, BmsCommerce, BmsCoupon, BmsVideo, and BmsOption.
- Implemented validation logic for BMS models to ensure required fields are present.
- Added tests for BMS functionality to ensure proper behavior and validation.

This update enhances the SDK's capabilities for handling brand messaging services.
@Palbahngmiyine Palbahngmiyine self-assigned this Jan 22, 2026
@gemini-code-assist
Copy link

Summary of Changes

Hello @Palbahngmiyine, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces a major enhancement to the SOLAPI Python SDK by adding full support for Kakao Brand Message Service (BMS) Free messages. It includes a comprehensive set of new Pydantic models for various rich message components, ensuring robust data validation and correct API interactions. Alongside this feature, the PR integrates automated code quality checks using Claude Code hooks for linting, formatting, and type checking, and updates the SDK version. Extensive documentation has also been added to guide both human developers and AI agents in understanding and contributing to the project.

Highlights

  • Kakao Brand Message Service (BMS) Free Support: Introduced comprehensive support for various Kakao BMS Free message types, including Text, Image, Wide, Wide Item List, Carousel Feed, Premium Video, Commerce, and Carousel Commerce. This significantly expands the SDK's capabilities for rich messaging on KakaoTalk.
  • New Pydantic Models for BMS Components: Added a suite of new Pydantic v2 models to represent BMS-specific elements such as buttons (Web, App, Channel Add, etc.), carousel structures (Feed and Commerce), commerce details (prices, discounts), coupons (with title validation), video links (Kakao TV URL validation), and wide items. These models include robust validation logic to ensure correct API payload construction.
  • Automated Linting, Formatting, and Type Checking with Claude Hooks: Integrated new Claude Code hooks (lint-python.py and settings.json) to automatically apply ruff check --fix, ruff format, and ty check on Python files after any Edit, Write, or NotebookEdit actions. This ensures consistent code style and type safety, with ty check failures blocking further progress for Claude to address.
  • SDK Version Bump and Dependency Update: The SDK version has been updated from 5.0.2 to 5.0.3 in pyproject.toml. The ty type checker has also been added as a development dependency.
  • Enhanced Documentation for Developers and AI Agents: New Markdown files (AGENTS.md, CLAUDE.md, solapi/model/AGENTS.md) have been added to provide detailed knowledge bases and guidance for both human developers and AI agents (like Claude Code) on the project's overview, structure, conventions, anti-patterns, and specific model layer details.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

안녕하세요. SOLAPI Python SDK 5.0.3 업데이트를 위한 PR을 리뷰했습니다. 이번 변경은 주로 카카오 브랜드 메시지(BMS) 기능 추가에 중점을 두고 있으며, 이를 위해 다수의 Pydantic 모델과 관련 로직, 그리고 테스트 코드가 추가되었습니다. 또한 ruffty를 사용한 코드 자동 린팅 및 타입 체크를 위한 개발 환경 개선도 포함되어 있습니다. 전반적으로 BMS 기능의 다양한 케이스를 잘 모델링하고 테스트한 점이 인상적입니다. 다만, 몇 가지 개선점을 제안합니다. 가장 중요한 것은 bms_option.pyrequest/kakao/bms.py 간의 심각한 코드 중복 문제와 uv.lock 파일이 pyproject.toml과 동기화되지 않은 문제입니다. 또한, E2E 테스트 코드에서 예외 처리가 AssertionError까지 포함하여 테스트 실패를 가릴 수 있는 잠재적인 버그를 발견했습니다. 몇몇 문서 파일의 버전 번호 업데이트가 누락된 부분도 수정이 필요합니다. 자세한 내용은 각 파일에 남긴 코멘트를 참고해주세요.

- Added support for development requirements in `uv.lock`.
- Introduced new images: `example_square.jpg` and `example_wide.jpg`.
- Refactored BMS models to use `list` instead of `List` for type hints.
- Improved validation logic in `BmsCommerce` for discount handling.
- Updated tests to ensure proper assertions and added image checks for BMS wide item list.
@Palbahngmiyine
Copy link
Member Author

/gemini review

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

이 풀 리퀘스트는 카카오 브랜드 메시지 서비스(BMS) 자유형 메시지를 위한 새로운 기능을 도입합니다. 여기에는 다양한 BMS 구성 요소(버튼, 캐러셀, 커머스, 쿠폰, 비디오, 와이드 아이템)를 위한 새로운 Pydantic 모델과 관련 유효성 검사 로직이 포함됩니다. 또한 프로젝트 버전이 업데이트되었고, 필요한 개발 종속성이 추가되었으며, 새로운 BMS 기능에 대한 포괄적인 단위 및 E2E 테스트가 포함되었습니다. 문서 파일(AGENTS.md, CLAUDE.md, solapi/model/AGENTS.md)도 이러한 변경 사항을 반영하고 지침을 제공하도록 업데이트되었습니다. 하지만 solapi/model/request/kakao/bms.py와 solapi/model/kakao/bms/bms_option.py 사이에 유효성 검사 로직이 중복되어 향후 유지보수 문제가 발생할 수 있습니다.

- Removed unused development requirements from `uv.lock`.
- Introduced new example scripts for various BMS message types, including carousel commerce, carousel feed, and commerce messages.
- Added validation for required fields in BMS models to enhance error handling.
- Updated imports in BMS module to include new validation functions.
- Improved documentation in example scripts for better clarity on usage.
@Palbahngmiyine
Copy link
Member Author

/gemini review

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces significant new functionality by adding support for Kakao Brand Message Service (BMS) Free type messages, including various chat bubble types like TEXT, IMAGE, WIDE, WIDE_ITEM_LIST, COMMERCE, CAROUSEL_FEED, CAROUSEL_COMMERCE, and PREMIUM_VIDEO. It also includes a new Claude Code hook for Python linting and formatting, along with updated documentation. The version has been correctly incremented in pyproject.toml and solapi/model/request/__init__.py.

However, there are several areas that require attention, primarily related to error handling in the new linting hook, potential data validation inconsistencies in the BMS models, and the use of hardcoded credentials in example scripts. Additionally, some documentation duplication was noted.

- Introduced a new field validator for the "description" field in the BmsCoupon class.
- Ensures that the description is limited to a maximum of 12 characters, enhancing input validation and error handling.
…mples

- Replaced `os.path.abspath` with `pathlib.Path` for improved file path handling in multiple example scripts.
- Shortened coupon descriptions in various BMS examples for better clarity and consistency.
- Added .omc/ to the .gitignore file to prevent tracking of omc-related files in the repository.
@Palbahngmiyine Palbahngmiyine merged commit 43739b6 into solapi:main Jan 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant