
Plateau NguyenandGitHub
fb8afd41bf
feat(channels): add Facebook Messenger and Pancake channel integrations (#731)
Add two new channel implementations for Facebook Fanpage (comment + Messenger
auto-reply, first inbox DM) and Pancake/pages.fm (multi-platform inbox via
Facebook, Zalo, Instagram, TikTok, WhatsApp, LINE).
Key features:
- Facebook: comment auto-reply, Messenger auto-reply, first inbox DM,
HMAC-SHA256 webhook verification, multi-page webhook routing
- Pancake: multi-platform inbox, outbound echo dedup with HTML normalization,
race-condition-safe echo fingerprinting, platform-aware formatting
- Bootstrap skip: pre-fill USER.md from channel metadata (Pancake)
- SanitizeDisplayName across all channels (defense in depth)
Code audit fixes:
- Fix truncateForTikTok byte→rune slicing (UTF-8 corruption)
- Fix empty message.ID shared dedup slot (silent message loss)
- Fix DisplayName markdown injection in buildPrefilledUser
- Consolidate duplicate ChannelMeta type (agent→bootstrap)
- Compile-time interface assertions, alphabetical type constants
- Per-message logs demoted to slog.Debug, errors.As for wrapped errors
- UI: alphabetical channel ordering, complete config schemas
- Remove deprecated WhatsApp bridge_url, fix nested error parsing
2026-04-09 23:15:08 +07:00
..
2026-04-09 21:15:19 +07:00
2026-04-09 21:15:19 +07:00
2026-03-27 09:35:57 +07:00
2026-03-19 13:59:32 +07:00
2026-02-22 14:58:07 +07:00
2026-02-22 14:58:07 +07:00
2026-03-20 13:42:19 +07:00
2026-04-09 21:15:19 +07:00
2026-04-05 21:32:59 +07:00
2026-03-31 11:44:54 +07:00
2026-04-09 23:15:08 +07:00
2026-04-09 21:15:19 +07:00
2026-04-02 22:58:35 +07:00
2026-04-09 21:15:19 +07:00
2026-04-09 21:15:19 +07:00
2026-04-09 21:15:19 +07:00
2026-04-02 22:58:35 +07:00
2026-04-09 21:15:19 +07:00
2026-04-09 21:15:19 +07:00
2026-03-28 17:25:59 +07:00
2026-03-17 13:18:27 +07:00
2026-03-29 22:33:17 +07:00
2026-03-25 12:37:49 +07:00
2026-03-17 15:43:24 +07:00
2026-04-09 21:15:19 +07:00
2026-04-09 21:15:19 +07:00
2026-04-09 21:15:19 +07:00
2026-04-09 21:15:19 +07:00
2026-03-30 15:20:01 +07:00
2026-04-09 21:15:19 +07:00
2026-03-28 14:53:43 +07:00
2026-04-03 19:38:51 +07:00
2026-03-31 14:33:33 +07:00
2026-04-09 23:15:08 +07:00
2026-04-09 23:15:08 +07:00
2026-04-09 21:15:19 +07:00
2026-04-09 21:15:19 +07:00
2026-03-30 22:15:34 +07:00
2026-03-31 19:26:40 +07:00
2026-03-23 08:08:23 +07:00
2026-04-01 18:11:42 +07:00
2026-04-01 09:16:16 +07:00
2026-04-09 21:15:19 +07:00
2026-04-09 21:15:19 +07:00
2026-04-09 21:15:19 +07:00
2026-04-09 21:15:19 +07:00
2026-04-09 21:15:19 +07:00
2026-04-09 21:15:19 +07:00
2026-04-08 15:52:37 +07:00
2026-03-31 11:44:54 +07:00
2026-04-09 23:15:08 +07:00
2026-04-09 21:15:19 +07:00
2026-03-29 09:00:06 +07:00
2026-03-28 19:02:53 +07:00
2026-04-01 16:12:44 +07:00
2026-03-10 23:11:02 +07:00
2026-03-24 10:24:10 +07:00
2026-04-04 21:17:47 +07:00
2026-04-04 21:17:47 +07:00
2026-04-09 21:15:19 +07:00
2026-04-09 21:15:19 +07:00
2026-04-09 21:15:19 +07:00
2026-04-09 21:15:19 +07:00
2026-04-09 21:15:19 +07:00
2026-03-27 19:16:31 +07:00
2026-04-09 21:15:19 +07:00
2026-04-09 21:15:19 +07:00
2026-04-09 21:15:19 +07:00
2026-04-09 21:15:19 +07:00
2026-04-09 21:15:19 +07:00
2026-04-02 18:32:43 +07:00
2026-04-09 21:15:19 +07:00
2026-03-21 12:01:04 +07:00
2026-03-31 08:35:06 +07:00
2026-03-19 13:35:57 +07:00
2026-03-28 14:53:43 +07:00
2026-03-28 14:53:43 +07:00
2026-03-19 23:34:45 +07:00
2026-04-08 14:47:39 +07:00
2026-04-08 14:47:39 +07:00
2026-03-12 18:26:40 +07:00