microsoftgraph / microsoftgraph/microsoft-graph-comms-samples

Unable to use bot with graph api to call a user on teams whose user id I provided in the calls api

Open
#548 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
No language data
Stars
253
Forks
275
Avg merge
1d 5h
Merged PRs (30d)
1

Description

Expected behavior
Using bot and graph api, I want to call a user on teams whose user id I provided in the calls api

I followed this example https://docs.microsoft.com/en-us/microsoftteams/platform/sbs-calling-and-meeting

These are the steps I have done.
Registered an App in Azure using demo tenant
Created a policy for a demo tenant user for creating the online meeting on behalf of that user
Added following Graph API Applications permissions to my Azure App*

  • CallRecords.Read.All
  • Calls.Initiate.All
  • Calls.AccessMedia.All
  • Calls.InitiateGroupCall.All
  • Calls.JoinGroupCall.All
  • OnlineMeetings.ReadWrite.All
  • OnlineMeetings.Read.All
  • Calls.JoinGroupCallAsGuest.All

Granted Admin consent for the above permissions

Created a Bot Channel Registeration in Azure account which have subscription enabled.
While registering the bot, used https://<my_ngrok_url>/api/messages as the messaging endpoint.
Enabled the Teams Channel
Provided App-Name, Resource Group and other required information
I did Select the Calling tab on the Teams channel page. Select Enable calling, and then updated the Webhook (for calling) with (https://yourNgrok/callback.
I am receiving the notifications.So this part works.

For bot my manifest is

{
  "$schema": "https://github.com/OfficeDev/microsoft-teams-app-schema/blob/preview/DevPreview/MicrosoftTeams.schema.json",
  "manifestVersion": "devPreview",
  "version": "1.0.0",
  "id": "<<app-id>>",
  "packageName": "com.acs.sample",
  "developer": {
    "name": "Contoso",
    "websiteUrl": "https://example.azurewebsites.net",
    "privacyUrl": "https://teams.microsoft.com",
    "termsOfUseUrl": "https://teams.microsoft.com"
  },
  "icons": {
    "color": "color.png",
    "outline": "outline.png"
  },
  "name": {
    "short": "Calling bot",
    "full": "Calling bot"
  },
  "description": {
    "short": "Calling bot",
    "full": "Calling bot"
  },
  "accentColor": "#FFFFFF",
  "bots": [
    {
      "botId": "<<app-id>>",
      "scopes": [ "personal", "team", "groupchat" ],
      "supportsFiles": false,
      "isNotificationOnly": false,
      "supportsCalling": true,
      "supportsVideo": true
    }
  ],
  "permissions": [ "identity", "messageTeamMembers" ],
  "validDomains": [ "*.ngrok.io" ]
}

Installed Calling Bot in Teams. Installed without any error. I can make calls from the bot and see the notifications on my calling endpoints. One strange behavior is Its message text-box become disabled after a while but I can still make call from the bot.

Now I want to make call to a user from an endpoint.
From my python code. I used this code to get access token.

def getToken():
    url = "https://login.microsoftonline.com/tenant_id/oauth2/v2.0/token"
    type = 'post'
    data={
        "client_id": 'client_id',
        "client_secret": 'client_secret',
        "scope": 'https://graph.microsoft.com/.default',
        "grant_type": 'client_credentials',
    }

    resp = requests.request(
        method = type,
        url = url,
        data = data
    )
    resp_data = resp.json()
    return resp_data['access_token'];

This access token is correct because I used the token to get users list etc using graph api to see if I can use the api or not.

Then using this token I call calls endpoint

def call_user():
    accessToken = getToken();
    url = "https://graph.microsoft.com/beta/communications/calls"
    type = 'post'
    
    data={
  "@odata.type": "#microsoft.graph.call",
  "callbackUri": "https://my_ngrok_url/call",
  "targets": [
    {
      "@odata.type": "#microsoft.graph.invitationParticipantInfo",
      "identity": {
        "@odata.type": "#microsoft.graph.identitySet",
        "user": {
          "@odata.type": "#microsoft.graph.identity",
          "displayName": "John",
          "id": "user_id_to_whom_i_want_to_call"
        }
      }
    }
  ],
  "requestedModalities": [
    "audio"
  ],
  "mediaConfig": {
    "@odata.type": "#microsoft.graph.serviceHostedMediaConfig"
  }
}

    resp = requests.request(
        method = type,
        url = url,
        data = data,
        headers={"Authorization": "Bearer " + accessToken},
    )
    resp_data = resp.json()
    return resp_data

It gives internal server error as response. Please help what i am doing wrong.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at the Python getToken and call_user entry points, then inspect the complete status, response body, and request encoding returned by /beta/communications/calls. Compare the request with the linked calling example and verify the required Graph permissions and bot configuration; done means the endpoint returns a successful call response rather than an internal server error.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
api
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.