Skip to content

Commit 0ac702a

Browse files
committed
fetch works for bots
1 parent cd4f3ef commit 0ac702a

File tree

4 files changed

+46
-12
lines changed

4 files changed

+46
-12
lines changed

apps/sim/blocks/blocks/microsoft_teams.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ export const MicrosoftTeamsBlock: BlockConfig<MicrosoftTeamsResponse> = {
4848
'ChannelMessage.Send',
4949
'ChannelMessage.Read.All',
5050
'ChannelMember.Read.All',
51+
'TeamsAppInstallation.ReadForTeam.All',
5152
'Group.Read.All',
5253
'Group.ReadWrite.All',
5354
'Team.ReadBasic.All',

apps/sim/lib/auth.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -513,6 +513,7 @@ export const auth = betterAuth({
513513
'ChannelMessage.Send',
514514
'ChannelMessage.Read.All',
515515
'ChannelMember.Read.All',
516+
'TeamsAppInstallation.ReadForTeam.All',
516517
'Group.Read.All',
517518
'Group.ReadWrite.All',
518519
'Team.ReadBasic.All',

apps/sim/lib/oauth/oauth.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,7 @@ export const OAUTH_PROVIDERS: Record<string, OAuthProviderConfig> = {
240240
'ChannelMessage.Send',
241241
'ChannelMessage.Read.All',
242242
'ChannelMember.Read.All',
243+
'TeamsAppInstallation.ReadForTeam.All',
243244
'Group.Read.All',
244245
'Group.ReadWrite.All',
245246
'Team.ReadBasic.All',

apps/sim/tools/microsoft_teams/utils.ts

Lines changed: 43 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,8 @@ async function fetchChannelMembers(
180180
channelId: string,
181181
accessToken: string
182182
): Promise<TeamMember[]> {
183-
const response = await fetch(
183+
// Fetch channel members (users only)
184+
const membersResponse = await fetch(
184185
`https://graph.microsoft.com/v1.0/teams/${encodeURIComponent(teamId)}/channels/${encodeURIComponent(channelId)}/members`,
185186
{
186187
headers: {
@@ -190,22 +191,52 @@ async function fetchChannelMembers(
190191
}
191192
)
192193

193-
if (!response.ok) {
194+
const members: TeamMember[] = []
195+
196+
if (membersResponse.ok) {
197+
const membersData = await membersResponse.json()
198+
const userMembers = (membersData.value || []).map((member: TeamMember) => ({
199+
id: member.id,
200+
displayName: member.displayName || '',
201+
userIdentityType: member.userIdentityType,
202+
}))
203+
members.push(...userMembers)
204+
} else {
194205
logger.error('Failed to fetch channel members:', {
195-
status: response.status,
196-
statusText: response.statusText,
206+
status: membersResponse.status,
207+
statusText: membersResponse.statusText,
197208
})
198-
return []
199209
}
200210

201-
const data = await response.json()
202-
const members = (data.value || []).map((member: TeamMember) => ({
203-
id: member.id,
204-
displayName: member.displayName || '',
205-
userIdentityType: member.userIdentityType,
206-
}))
211+
// Fetch installed apps (includes bots) at team level
212+
const appsResponse = await fetch(
213+
`https://graph.microsoft.com/v1.0/teams/${encodeURIComponent(teamId)}/installedApps?$expand=teamsAppDefinition`,
214+
{
215+
headers: {
216+
Authorization: `Bearer ${accessToken}`,
217+
'Content-Type': 'application/json',
218+
},
219+
}
220+
)
221+
222+
if (appsResponse.ok) {
223+
const appsData = await appsResponse.json()
224+
const bots = (appsData.value || [])
225+
.filter((app: any) => app.teamsAppDefinition?.bot)
226+
.map((app: any) => ({
227+
id: app.teamsAppDefinition.bot.id || app.teamsAppDefinition.teamsAppId,
228+
displayName: app.teamsAppDefinition.displayName || '',
229+
userIdentityType: 'bot',
230+
}))
231+
members.push(...bots)
232+
} else {
233+
logger.warn('Failed to fetch installed apps/bots:', {
234+
status: appsResponse.status,
235+
statusText: appsResponse.statusText,
236+
})
237+
}
207238

208-
logger.info('Fetched channel members:', {
239+
logger.info('Fetched channel members and bots:', {
209240
count: members.length,
210241
members: members.map((m: TeamMember) => ({
211242
displayName: m.displayName,

0 commit comments

Comments
 (0)