Asana adapter for Chat SDK. Maps Asana task comment threads to the Chat SDK Thread/Message model.
npm install chat chat-adapter-asanaimport { createMemoryState } from '@chat-adapter/state-memory'
import { Chat } from 'chat'
import { createAsanaAdapter } from 'chat-adapter-asana'
const bot = new Chat({
userName: 'asana-bot',
adapters: {
asana: createAsanaAdapter({
accessToken: process.env.ASANA_ACCESS_TOKEN!,
}),
},
state: createMemoryState(),
})
bot.onNewMention(async (thread, message) => {
await thread.post('Hello from Asana!')
})
// Wire up the webhook in your HTTP framework
// e.g. Next.js App Router:
export async function POST(request: Request) {
return bot.webhooks.asana(request)
}| Variable | Required | Description |
|---|---|---|
ASANA_ACCESS_TOKEN |
Yes | Personal access token or service account token |
ASANA_WEBHOOK_SECRET |
No | Stored automatically during webhook handshake |
| Option | Type | Default | Description |
|---|---|---|---|
accessToken |
string |
ASANA_ACCESS_TOKEN |
Asana API access token |
baseUrl |
string |
"https://app.asana.com/api/1.0" |
Asana API base URL |
userName |
string |
"asana-bot" |
Bot display name |
logger |
Logger |
ConsoleLogger |
Custom logger instance |
- Create an Asana service account or use a personal access token from Asana Developer Console
- Set up a webhook by calling the Asana webhooks API targeting your endpoint:
curl -X POST https://app.asana.com/api/1.0/webhooks \ -H "Authorization: Bearer $ASANA_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "data": { "resource": "<project_gid>", "target": "https://your-domain.com/api/webhooks/asana", "filters": [ { "resource_type": "story", "action": "added" } ] } }'
- The adapter automatically handles the webhook handshake (responds to
X-Hook-Secretheaders) - Set the webhook URL to
https://your-domain.com/api/webhooks/asana
| Asana | Chat SDK |
|---|---|
| Task | Thread |
| Story (comment) | Message |
| Story author | message.author |
| Like on a story | Reaction (heart) |
| @mention in comment | Mention detection |
- Webhook handshake and HMAC-SHA256 signature verification
- Task comment threads (post, edit, delete)
- Message history (fetch task stories)
- Reactions (like/unlike stories)
- @mention detection
- Rich text support (Asana HTML to mdast)
asana:{taskGid}
Task GIDs are Asana's numeric identifiers for tasks.
MIT