Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 43 additions & 67 deletions examples/cards/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import {
AdaptiveCardActionErrorResponse,
AdaptiveCardActionMessageResponse,
} from '@microsoft/teams.api';
import { App } from '@microsoft/teams.apps';
Expand Down Expand Up @@ -303,78 +302,55 @@ app.on('message', async ({ send, activity }) => {
// await send(message);
});

app.on('card.action', async ({ activity, send }) => {
const data = activity.value?.action?.data;
if (!data?.action) {
return {
statusCode: 400,
type: 'application/vnd.microsoft.error',
value: {
code: 'BadRequest',
message: 'No action specified',
innerHttpError: {
statusCode: 400,
body: { error: 'No action specified' },
},
},
} satisfies AdaptiveCardActionErrorResponse;
}

console.debug('Received action data:', data);

switch (data.action) {
case 'submit_basic':
await send(`Notification preference set to: ${data.notify}`);
break;

case 'submit_form':
await send(
`Form submitted!\nName: ${data.name}\nComments: ${data.comments}\nColor: ${data.color}`
);
break;
// Each card.action handler matches a specific action set by SubmitData
const OK_RESPONSE: AdaptiveCardActionMessageResponse = {
statusCode: 200,
type: 'application/vnd.microsoft.activity.message',
value: 'Action processed successfully',
};

case 'create_task':
await send(
`Task created!\nTitle: ${data.title}\nDescription: ${data.description}\nPriority: ${data.priority}\nDue Date: ${data.due_date}`
);
break;
app.on('card.action.submit_basic', async ({ activity, send }) => {
const data = activity.value.action.data;
await send(`Notification preference set to: ${data.notify}`);
return OK_RESPONSE;
});

case 'submit_feedback':
await send(`Feedback received: ${data.feedback}`);
break;
app.on('card.action.submit_form', async ({ activity, send }) => {
const data = activity.value.action.data;
await send(
`Form submitted!\nName: ${data.name}\nComments: ${data.comments}\nColor: ${data.color}`
);
return OK_RESPONSE;
});

case 'purchase_item':
await send(
`Purchase request received for game: ${data.choiceGameSingle}`
);
break;
app.on('card.action.create_task', async ({ activity, send }) => {
const data = activity.value.action.data;
await send(
`Task created!\nTitle: ${data.title}\nDescription: ${data.description}\nPriority: ${data.priority}\nDue Date: ${data.due_date}`
);
return OK_RESPONSE;
});

case 'save_profile':
await send(
`Profile saved!\nName: ${data.name}\nEmail: ${data.email}\nSubscribed: ${data.subscribe}`
);
break;
app.on('card.action.submit_feedback', async ({ activity, send }) => {
const data = activity.value.action.data;
await send(`Feedback received: ${data.feedback}`);
return OK_RESPONSE;
});

default:
return {
statusCode: 400,
type: 'application/vnd.microsoft.error',
value: {
code: 'BadRequest',
message: 'Unknown action',
innerHttpError: {
statusCode: 400,
body: { error: 'Unknown action' },
},
},
} satisfies AdaptiveCardActionErrorResponse;
}
app.on('card.action.purchase_item', async ({ activity, send }) => {
const data = activity.value.action.data;
await send(
`Purchase request received for game: ${data.choiceGameSingle}`
);
return OK_RESPONSE;
});

return {
statusCode: 200,
type: 'application/vnd.microsoft.activity.message',
value: 'Action processed successfully',
} satisfies AdaptiveCardActionMessageResponse;
app.on('card.action.save_profile', async ({ activity, send }) => {
const data = activity.value.action.data;
await send(
`Profile saved!\nName: ${data.name}\nEmail: ${data.email}\nSubscribed: ${data.subscribe}`
);
return OK_RESPONSE;
});

app.start(process.env.PORT || 3978).catch(console.error);
Loading
Loading