Spaces:
Paused
Paused
File size: 2,302 Bytes
82eac1b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | """
Pydantic models β LINE Webhook Payload
ΰΈΰΈ£ΰΈΰΈΰΈΰΈ₯ΰΈΈΰΈ‘ event types ΰΈΰΈ΅ΰΉΰΈΰΈ³ΰΉΰΈΰΉΰΈΰΈͺΰΈ³ΰΈ«ΰΈ£ΰΈ±ΰΈ chat conversation
"""
from typing import Optional, Literal
from pydantic import BaseModel
# βββ Source βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
class LineSource(BaseModel):
type: Literal["user", "group", "room"]
userId: Optional[str] = None
groupId: Optional[str] = None
roomId: Optional[str] = None
# βββ Message ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
class LineMessage(BaseModel):
id: str
type: Literal["text", "image", "sticker", "location", "audio", "video", "file"]
text: Optional[str] = None # ΰΈ‘ΰΈ΅ΰΉΰΈΰΈΰΈ²ΰΈ° type=text
# βββ Events βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
class LineEvent(BaseModel):
type: Literal["message", "follow", "unfollow", "join", "leave", "postback"]
timestamp: int
replyToken: Optional[str] = None
source: LineSource
message: Optional[LineMessage] = None
# βββ Root Payload βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
class LineWebhookPayload(BaseModel):
destination: str # Channel ID ΰΈΰΈ₯ΰΈ²ΰΈ’ΰΈΰΈ²ΰΈ
events: list[LineEvent]
# βββ Sentiment Result βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
class SentimentResult(BaseModel):
label: Literal["positive", "neutral", "negative"]
score: float # confidence ΰΈΰΈΰΈ label ΰΈ«ΰΈ₯ΰΈ±ΰΈ (0β1)
raw_scores: dict[str, float] # {"positive": 0.8, "neutral": 0.1, "negative": 0.1}
|