Pinned Tweet
Introducing Towns Academy 🏫
Discover a dynamic hub where anyone can dive into creating bots with Towns Protocol. Start with a intro course or use AI to vibe-code whatever you can imagine.
Let's explore what’s new 👨🏻💻
Keep the answer with the question: Make it clear what your bot is responding to.
Build: Set replyId in bot.sendMessage options to reply to a specific message.
$TOWNS
Plans change: Keep your bot's announcement useful when the details move.
Build: Use bot.editMessage to update an existing message with new content.
$TOWNS
Don't hide a failed send: Show people when their message action fails.
Build: Use isError and error from useSendMessage to make failures visible in your Towns client.
$TOWNS
Open the full story: Give people a way past the summary.
Build: Use actions.openUrl in your Towns miniapp to open the full reference in a new window.
$TOWNS
Let the feedback show: Put reactions beside the message that earned them.
Build: Use useReactions to read reactions by message event ID in your Towns client.
$TOWNS
Ask for a signature: Let people sign a message through your Towns bot, without executing a transaction.
Build: Set the interaction type to 'signature'.
$TOWNS
A way back in: Give people a place to find their existing DMs.
Build: Use useUserDms to list the current user's DM streams in your Towns client.
$TOWNS
Don't make people guess: Show when your Towns client is connecting and when it's connected.
Build: Use the connection flags from useAgentConnection to make that state visible. (docs.towns.com/build/react-s…)
$TOWNS
Give the task an ending: Make it clear when people are finished in your miniapp.
Build: Use actions.close to give them a clear way out. (docs.towns.com/build/miniapp…)
$TOWNS
A better first hello: Help new arrivals find their footing.
Build: Use onChannelJoin to trigger a welcome message. Requires All Messages forwarding mode. (docs.towns.com/build/bots/ev…)
$TOWNS
Thanks, with value attached: Make the helpful answer worth more than a reaction.
Build: Use sendTip in your Towns bot to tip a user on a specific message. (docs.towns.com/build/bots/ev…)
$TOWNS
Ready means ready: Don't leave people staring at a splash screen.
Build: Call actions.ready when your Towns miniapp is ready to display. (docs.towns.com/build/miniapp…)
$TOWNS
Show the work: Give your community the image, not just a description.
Build: Send screenshots or generated images directly from your Towns bot. (docs.towns.com/build/bots/ev…)
$TOWNS
Keep the plan current: Don't leave people working from an outdated announcement.
Build: Update your bot's message when the time, link or details change.
$TOWNS
Keep the conversation going: Give people a way to share what they made in your miniapp.
Build: Add a compose-message action with text and an embed.
$TOWNS
Less tallying, more listening: Ask the community without sending everyone elsewhere.
Build: Put a simple yes/no poll inside the conversation with a Towns bot.
$TOWNS
Make the next action easy to find: Don't make people memorize what your bot can do.
Build: Give each command a clear name and a useful description.
$TOWNS
Build for the people talking: Give the conversation a home without making its contents the network's business.
$TOWNS
Bring the bot to your workbench: Develop locally before deploying.
Build: Try your Towns bot in a test Space, inspect events and refine the response.
$TOWNS
Don't leave send hanging: Give people clear feedback after they hit send.
Build: Show when a send is pending, succeeds or fails in your Towns client.
$TOWNS




















