Line Messaging API webhookイベントオブジェクトの型
投稿日: 2024年10月27日
外部APIの型定義、結構大変だなと感じたので使う人がいたらと思い共有します!!
公式ドキュメントを元にAIで生成しました。
全てのイベントは検証していないのでご利用の際は使いたいイベントの型に間違いないか念のためドキュメント確認してからご使用ください!!
使いたいプロパティの型定義だけしていればよいとのことではあります!!(ぶべさんに確認済)
type WebhookEvent =
| MessageEvent
| UnsendEvent
| FollowEvent
| UnfollowEvent
| JoinEvent
| LeaveEvent
| MemberJoinedEvent
| MemberLeftEvent
| PostbackEvent;
export interface WebhookRequest {
destination: string;
events: WebhookEvent[];
}
interface CommonProperties {
type: string;
mode: "active" | "standby";
timestamp: number;
source: EventSource;
webhookEventId: string;
deliveryContext: {
isRedelivery: boolean;
};
}
interface EventSource {
type: "user" | "group" | "room";
userId?: string;
groupId?: string;
roomId?: string;
}
interface MessageEvent extends CommonProperties {
type: "message";
replyToken: string;
message: Message;
}
interface UnsendEvent extends CommonProperties {
type: "unsend";
unsend: {
messageId: string;
};
}
interface FollowEvent extends CommonProperties {
type: "follow";
replyToken: string;
follow: {
isUnblocked: boolean;
};
}
interface UnfollowEvent extends CommonProperties {
type: "unfollow";
}
interface JoinEvent extends CommonProperties {
type: "join";
replyToken: string;
}
interface LeaveEvent extends CommonProperties {
type: "leave";
}
interface MemberJoinedEvent extends CommonProperties {
type: "memberJoined";
replyToken: string;
joined: {
members: EventSource[];
};
}
interface MemberLeftEvent extends CommonProperties {
type: "memberLeft";
left: {
members: EventSource[];
};
}
interface PostbackEvent extends CommonProperties {
type: "postback";
replyToken: string;
postback: {
data: string;
params?: {
datetime?: string;
newRichMenuAliasId?: string;
};
};
}
type Message = TextMessage | StickerMessage;
interface TextMessage {
type: "text";
id: string;
text: string;
}
interface StickerMessage {
type: "sticker";
id: string;
stickerId: string;
packageId: string;
stickerResourceType: "ANIMATION" | "MESSAGE";
keywords: string[];
text?: string;
quoteToken?: string;
}
こういった長いのは見るのダルって思うタイプなのですが(素直ですみませんね)、今回私が使いたいところだけちょっと確認するところまでやってみようかなと思います。
参加したタイミングでデータベース登録等行うことになると思うので、このイベントの型定義は個人的に要チェックです。
公式ドキュメントの参加イベントの例は下記のような感じです。
{
"destination": "xxxxxxxxxx",
"events": [
{
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
"type": "join",
"mode": "active",
"timestamp": 1462629479859,
"source": {
"type": "group",
"groupId": "C4af4980629..."
},
"webhookEventId": "01FZ74A0TDDPYRVKNK77XKC3ZR",
"deliveryContext": {
"isRedelivery": false
}
}
]
}
型定義の方見てみます。
interface CommonProperties {
type: string;
mode: "active" | "standby";
timestamp: number;
source: EventSource;
webhookEventId: string;
deliveryContext: {
isRedelivery: boolean;
};
}
interface JoinEvent extends CommonProperties {
type: "join";
replyToken: string;
}
問題なさそうですね・・!!
そのまま使います!!
LINE通知したいなって思ったらこの記事思い出してくださ~い!