0

I would like to use TeamsFx React package to call MS Graph Api.

I tried to do separated component

import { useContext  } from "react";

import {  useGraph } from "@microsoft/teamsfx-react";

import { TeamsFxContext } from "../Context";
import { TeamsFxProvider } from "@microsoft/mgt-teamsfx-provider";
import { Providers, ProviderState } from "@microsoft/mgt-element";
import * as microsoftTeams from "@microsoft/teams-js";




export function MeetingContext(props: { showFunction?: boolean; environment?: string }) {

const { teamsfx } = useContext(TeamsFxContext);

const { loading, error, data, reload } = useGraph(
    async (graph, teamsfx, scope) => {
      // Call graph api directly to get user profile information
      let profile;
      try {
          profile = await graph.api("/me").get();
      } catch (error) {
          console.log(error);
      }

      // Initialize Graph Toolkit TeamsFx provider
      const provider = new TeamsFxProvider(teamsfx, scope);
      Providers.globalProvider = provider;
      Providers.globalProvider.setState(ProviderState.SignedIn);

      let photoUrl = "";
      let meeting =null;
      try {
        const photo = await graph.api("/me/photo/$value").get();
        photoUrl = URL.createObjectURL(photo);
        microsoftTeams.getContext(async (context)=>{
            console.log(context);
            try {
                meeting = await graph.api(`/me/onlineMeetings/${context.meetingId}`).get();
                
            } catch (error) {
                console.error(error);
            }
            
        })
    } catch {
        // Could not fetch photo from user's profile, return empty string as placeholder.
    }
    console.log(meeting);
      return { meeting };
    },
    { scope: ["User.Read","User.Read","OnlineMeetingArtifact.Read.All"," OnlineMeetings.Read"], teamsfx: teamsfx }
    );
return (
    <>

    
    </>
)
}

When I debug my interpreter stops on

profile = await graph.api("/me").get();

Then it does not pass after.

I would like also to know what should I put in scope field ?

Should I put the authorisations listed here ?

Should I also Add them in registered app in Azure Portal ?

Update:

I'm getting response from

Failed to get access token cache silently, please login first: you need login first before get access token.

I'm using the teams toolkit and I'm already logged in . I don't know what Should I do to be considered as logged in ?

Update :

I have updated my app api authorisations in azure portal now I'm not getting anymore this error.

But I'm getting a new error :

    meeting = await graph.api(`/me/onlineMeetings/${context.chatId}`).get();

"Invalid meeting id 19:meeting_MzU0MzFhYTQtNjlmOS00NGI4LTg1MTYtMGI3ZTkwOWYwMzk4@thread.v2."

I'll post a new question about this as it not the original problem

infodev
  • 4,673
  • 17
  • 65
  • 138

1 Answers1

1

You can get the details of an online meeting using videoTeleconferenceId, meeting ID, or joinWebURL.

Instead of ChatID you have to use meeting ID or you have to use filter with videoTeleconferenceId or joinWebURL.

The invalid meeting ID error get because chatID is not the correct parameter for this graph API.

You can refer below API for getting meeting information.

To get an onlineMeeting using meeting ID with delegated (/me) and app (/users/{userId}) permission:

GET /me/onlineMeetings/{meetingId}

GET /users/{userId}/onlineMeetings/{meetingId}

To get an onlineMeeting using videoTeleconferenceId with app permission*:

GET /communications/onlineMeetings/?$filter=VideoTeleconferenceId%20eq%20'{videoTeleconferenceId}'

To get an onlineMeeting using joinWebUrl with delegated and app permission:

GET /me/onlineMeetings?$filter=JoinWebUrl%20eq%20'{joinWebUrl}'
GET /users/{userId}/onlineMeetings?$filter=JoinWebUrl%20eq%20'{joinWebUrl}'

Ref Doc: https://learn.microsoft.com/en-us/graph/api/onlinemeeting-get?view=graph-rest-1.0&tabs=http

Nivedipa-MSFT
  • 1,237
  • 1
  • 2
  • 8