喊单事件
通过 WebSocket 接收 pump.fun 喊单、作者更新、回复和转发。先展示初始内容,再合并可选的补充数据。
选择喊单账号
在喊单标签页中使用 pump.fun 用户名、Solana 钱包或个人主页链接添加账号。标签可选。
- 账号使用 Solana 钱包,与代币所在链无关。
- Minimum:10 个账号。Pro、Scale 和 Ultra Speed:100 个。等待添加的账号也计入上限。
account/callout
收到内容即可展示,不必等待补充数据。d.platform 为 pump_fun,喊单者用户名和代币地址必有。
可选的 d.token.chainId 使用 CAIP-2:Solana 主网为 solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp;EVM 链如 eip155:56、eip155:999、eip155:4663 或 eip155:8453。缺失时表示未指定链。
文本、媒体、头像、持仓、代币详情和价格均可选。d.caller.image 是账号头像,d.token.image 是代币图片。
- 可选的
d.kind:callout、author_update、reply或repost。作者更新是原作者的新帖子,不是元数据补充。 d.caller是被跟踪的行为发起者。d.reference保留原作者、文本和媒体;d.reference.reply保留被转发的回复及其作者。两者都不是转发者。replyId标识回复或作者更新。可选的parentReplyId和rootReplyId保留回复关系;calloutId标识原始喊单。- 价格使用精确十进制字符串:
calloutPrice和maxPriceSol以 SOL 计价,calloutPriceUsd和maxPriceUsd以 USD 计价。请保留字符串或使用十进制库。USD 价格存在不代表 SOL 价格也存在。 marketCapUsd和multiple是可选数值。持仓值使用精确十进制字符串:amountHeld为代币数量,pnlPercentage为百分比,*Usd字段为 USD 金额。
喊单事件类型
typescripttype CalloutCaller = {
username: string;
image?: string;
};
type CalloutReply = {
caller: CalloutCaller;
replyId: string;
parentReplyId?: string;
rootReplyId?: string;
text?: string;
mediaUrl?: string;
};
type CalloutEvent = {
platform: 'pump_fun';
caller: CalloutCaller;
kind?: 'callout' | 'author_update' | 'reply' | 'repost';
text?: string;
mediaUrl?: string;
// Required for replies and author updates.
replyId?: string;
parentReplyId?: string;
rootReplyId?: string;
reference?: {
caller: CalloutCaller;
text?: string;
mediaUrl?: string;
reply?: CalloutReply;
};
position?: {
amountHeld?: string;
valueUsd?: string;
costBasisUsd?: string;
pnlUsd?: string;
pnlPercentage?: string;
realizedPnlUsd?: string;
};
token: {
address: string;
chainId?: string;
symbol?: string;
name?: string;
image?: string;
};
url?: string;
marketCapUsd?: number;
// SOL, exact decimal.
calloutPrice?: string;
// USD, exact decimal.
calloutPriceUsd?: string;
multiple?: number;
// SOL peak, exact decimal.
maxPriceSol?: string;
// USD peak, exact decimal.
maxPriceUsd?: string;
calloutId: string;
createdAt: number;
receivedAt?: number;
};
type CalloutUpdateEvent = CalloutEvent & {
// Original envelope id, not calloutId.
updateOf: string;
};喊单事件
json{
"v": 1,
"t": "account",
"op": "callout",
"id": "callout.0123456789abcdef0123",
"ts": 1772000001060,
"d": {
"platform": "pump_fun",
"caller": {
"username": "CryptoCalls",
"image": "https://cdn.example/avatar.png"
},
"kind": "callout",
"text": "Watching this token.",
"mediaUrl": "https://cdn.example/chart.png",
"token": {
"address": "So11111111111111111111111111111111111111112",
"chainId": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp"
},
"url": "https://pump.fun/callouts/So11111111111111111111111111111111111111112/9ab3177c-7b35-4d99-9cca-8b426f74a270",
"marketCapUsd": 156230.75,
"calloutPriceUsd": "0.00018750",
"multiple": 2.5,
"calloutId": "9ab3177c-7b35-4d99-9cca-8b426f74a270",
"createdAt": 1772000001000,
"receivedAt": 1772000001050
}
}转发其他作者的回复
json{
"v": 1,
"t": "account",
"op": "callout",
"id": "callout.repost-example",
"ts": 1772000003060,
"d": {
"platform": "pump_fun",
"kind": "repost",
"caller": { "username": "MarketReader" },
"token": { "address": "So11111111111111111111111111111111111111112" },
"calloutId": "9ab3177c-7b35-4d99-9cca-8b426f74a270",
"createdAt": 1772000003000,
"reference": {
"caller": { "username": "CryptoCalls" },
"text": "Watching this token.",
"reply": {
"caller": { "username": "ReplyAuthor" },
"replyId": "reply-example",
"text": "Watching the volume too."
}
}
}
}account/callout_update
将可选详情合并到原事件,不再触发提醒。
- 按本次信封的
id去重。d.updateOf指向原始信封id,不是calloutId。 - 仅合并本次提供的字段,包括嵌套的
caller、token、position和reference字段。缺失字段不删除旧值。 - 找不到原事件时,存储或忽略更新,不要把它当作新喊单。
- 更新可选,即使没有更新也应展示初始内容。
喊单补充数据
json{
"v": 1,
"t": "account",
"op": "callout_update",
"id": "callout_update.556abf0021a7ff937a1a804ec0a0c245d497bcc6090af66179e74ce03c0970e0",
"ts": 1772000002060,
"d": {
"platform": "pump_fun",
"updateOf": "callout.0123456789abcdef0123",
"caller": { "username": "CryptoCalls" },
"kind": "callout",
"token": {
"address": "So11111111111111111111111111111111111111112",
"symbol": "ABC",
"name": "Alpha Beta",
"image": "https://cdn.example/token.png"
},
"calloutPriceUsd": "0.00018750",
"calloutPrice": "0.00000125",
"maxPriceSol": "0.00000450",
"maxPriceUsd": "0.00067500",
"calloutId": "9ab3177c-7b35-4d99-9cca-8b426f74a270",
"createdAt": 1772000001000
}
}使用标识符和时间戳
回复和转发有各自的信封 ID,但共享原始 calloutId。按信封 id 去重。
d.createdAt:动态创建时间。d.receivedAt:可选的 TweetStream 接收时间。- 信封
ts:准备发送的时间。