Set up ServiceDesk Plus integration with Microsoft Teams to leverage the collaboration app from Microsoft as an additional channel for IT and enterprise support. This integration creates a service desk bot that enables users to view their service desk tickets, view pending approvals, and chat with help desk technicians all from within their Microsoft Teams accounts. By bringing a host of service desk capabilities like incident management into Microsoft Teams, ServiceDesk Plus bridges the gap between IT help desk teams and end users.
The ServiceDesk Plus On Premise instance should be hosted publicly with a valid SSL certificate. The instance should be hosted on HTTPS and be accessible over the internet. In the case of an SSL certificate not being present, the Azure Application Proxy service can be used to set up a proxy URL for the ServiceDesk Plus instance. To set up the Azure proxy service, kindly follow the instructions on this link.
To set up the Microsoft Teams integration, you will be working on the integration setup of ServiceDesk Plus, Microsoft Teams desktop or web app, and your Azure Portal. Make sure you have access to all those areas with the following roles:
ServiceDesk Plus SDAdmin
Azure Global administrator/Teams Administrator and Azure Applications Administrator
Now that all the pre-requisites are checked, you can set up things in Microsoft Teams and Azure portal.
Navigate to Developer Portal in MS Teams. To locate the Developer Portal app, click on Apps in the left pane and search/choose Developer Portal.

Inside Developer Portal, navigate to the Apps tab and choose Import app. Download this ServiceDesk Plus zip file and import this app.

Once imported, you'll be redirected to the app configuration page. There, the features available for that app, such as a Personal Tab or the Bot will be shown.
Personal Tab: This personal tab can be used to view open requests in ServiceDesk Plus within the Microsoft Teams app itself. To setup the tab, Choose App features > Choose Personal app > Create your first personal app tab.

Once chosen, fill out the details of your ServiceDesk Plus instance. Provide a name. Under Content URL, provide the URL in the format as below :
<SDP_HOSTED_URL>/WOListView.do?externalframe=true
For example, if your hosted domain is https://servicedeskplus.com, the Content URL will be : https://servicedeskplus.com/WOListView.do?externalframe=true
Under Website URL, provide the URL in the format as below :
<SDP_HOSTED_URL>/WOListView.do
Select Scope as 'personal' and under Context, choose 'personalTab'.

Similarly, to add a personal app to the home page (Applicable for version 14700 and above),
<SDP_HOSTED_URL>/HomePage.do?externalframe=true
<SDP_HOSTED_URL>/HomePage.do

Once everything is done, click Confirm and choose Save.
Now that you have setup the personal app, you can setup the bot for this integration. To do so, go to App features and choose Bot. Click on Create a new Bot.

Now, click on +New Bot at the top. Provide the name for the bot (for example, 'ServiceDesk Plus Bot'). This name will be displayed in the bot chat window.

Now that the bot is created, you can proceed to setup things in the Azure portal to configure the bot further.
Once a bot has been created, you need to specify the permissions and various other configurations of it. To do so, go to the Azure portal's app registration and choose the bot you created in the last step.
Here, in the Overview section, the various details of the bot (app registration) will be shown. Make a note of it.
Copy the Application (Client) ID, Tenant (Directory) ID and keep them stored in a document. They'll be required further for the integration.

Now in the left pane, go to Certificates and Secrets and click on +New Client Secret. Copy the VALUE of the Secret, not the Secret ID and keep it stored in a document.

Now in the left pane, go to API permissions and click on +Add a permission > Microsoft Graph > Delegated Permissions and choose 'openid'.

You have completed the basic configuration of the bot/app registration now. It is time to configure the details in ServiceDesk Plus.
In ServiceDesk Plus, go to Admin > Integrations > Third Party > Microsoft Teams.
Specify the Application ID, Client ID, and Application Password.

In the Application ID field, paste the Application (Client) ID value. In the Tenant ID field, paste the Tenant (directory) ID value. In Application Password, place the VALUE of the client secret generated in Azure.
Once all the three have been filled, click on Save. You will be provided with the Redirect URL and the Bot Endpoint URL after saving.
The basic configurations have been successfully done in all the three applications. Now it is time to specify the Redirect URL and the Bot Endpoint URL.
Copying Redirect URL :
Copy the Redirect URL, go to Azure portal, choose your bot/app registration. In the left pane, navigate to the Authentication tab.

Click on +Add a Platform > Web > Under Redirect URI, paste the Redirect URL copied from ServiceDesk Plus. Check the ID tokens checkbox at the bottom and click Configure.

Copy the Bot Endpoint URL, go to Microsoft Teams > Developer Portal > Tools tab > Bot Management > Choose your bot > Configure > Paste the Bot Endpoint URL copied from ServiceDesk Plus. Once done, click on Save.


Now that both the Redirect URL and Bot Endpoint URL have been specified, this bot has to be associated with the app imported at the beginning.
To do so,
Go to the Apps tab in the Developer Portal and choose the App imported. Click on App Features in the left pane and choose Bot.
Now choose Enter a Bot ID, and paste the Application (Client) ID copied from Azure portal here.
Now under What can your bot do? section, choose Upload and Download files. Under Scope, select all the three (Personal, Team and Group Chat).
Click on Save once done. Once saved, you'll be provided with an option to add a custom command that can be used while chatting with the bot. To add one, simply click on Add a command and specify the details. The Scope can be all the three here too.

In the left pane, go to Publish to Store. Scroll to the bottom and click on Download app package. The app package zip will get downloaded in your machine.

Once downloaded, in the extreme left pane, click on Apps. Inside the Apps page, choose Manage your apps at the bottom. Click on Upload an app and choose Upload a customised app. Choose the app package zip downloaded in the last step.


Once chosen, click on the Add button. After the addition, you'll be redirected to the App. A login card will be thrown when accessing the chat tab for the first time. In case no login card appears, type '/help' and wait for a few seconds, the login card will appear. Follow the on-screen instructions to authorise. After proper authorisation, the bot can be leveraged for integration.

Instead of uploading the app as a customised one, it can also be uploaded to the organisation directly. To do so, follow the same steps to upload an app but this time instead of choosing 'Upload a customised app', choose 'Upload an app to your org's app catalog'. Once the Microsoft Teams administrator makes the ServiceDesk Plus bot available for the organization, each organization user can authorise ServiceDesk Plus from within the bot and start using it.
By default, ServiceDesk Plus contains a list of default commands that can be invoked from Microsoft Teams. You can create more custom commands and execute any action in Microsoft teams right using the ServiceDesk Plus bot.
List of default commands in ServiceDesk Plus:
|
Commands |
Description |
|
/help |
Displays a help card with the commands applicable to the logged in user |
|
/create request |
Quick create requests by providing only the subject and description |
|
/view all requests |
Lists all the requests of the user |
|
/view open requests |
Lists all the open requests of the user |
|
/search request |
Search requests using keywords (the keywords will be looked for in request subjects) |
|
/pending approvals |
Lists all the pending approvals of the user (user can perform approval actions from the respective request cards) |
|
/overview |
Displays a consolidated view of pending approvals and open requests |
|
/select instance |
Lists the portals for the user to select from |
|
/revoke |
Revoke ServiceDesk Plus authorization from the Teams account |
|
/chat (only for requester) |
Initiates a chat with technician |
|
/end chat (only for requester) |
Ends chat with technician |
In the Microsoft Teams Configuration page, go to Bot Commands tab.
Click Custom Command.
Enter the Name of the command.
Outline the functioning of the command in Description.
Configure the Actions to be performed when the command is executed. You can associate global functions as the action or create a global function using the New option.
Click Create Command.
The created commands are reflected immediately in Microsoft Teams. Use the
icon to disable a command and prevent users from using it. You can enable it later if needed.

Edit/Delete Custom Commands
Click on a command name to modify the command details. Use Update to save the changes. You can use the
icon to delete the command.
You can create cards to be displayed in Microsoft Teams by initiating the respective command using global functions.
Create Cards to Add Service Requests
To define the card layout:
|
test='{"attachments":[{"contentType":"application/vnd.microsoft.card.adaptive","contention":"1.2"}}],"action":"sendActivity","type":"message"}'; t=Map(); t=test.toMap(); return t; |
Sample card JSON

To define the action buttons:
|
data = Collection(); data.insert("requester":{"id":metadata.get("user_id")}); data.insert("subject":metadata.get("subject")); data.insert("description":metadata.get("description")); input_data = {"request":data}; response = invokeurl [ url:"https://zylker-sdpclient.mssapp.net/api/v3/requests" type :POST parameters:{"input_data":input_data,"TECHNICIAN_KEY":"39C1A638-191E-4997-9CEF-10A8S220F227"} ]; info response; id=response.get("request").get("id"); responseStatus = response.get("response_status"); returnObj = Collection(); if(responseStatus.get("status_code") == 2000) { returnObj.insert("action":"sendActivity","type":"message","text":"Successfully added with ID "+id); } else { returnObj.insert("action":"sendActivity","type":"message","text":"Failed to add"); } return returnObj; |
Create Service Request using Arguments
|
data = Collection(); data.insert("requester":{"id":metadata.get("user_id")}); data.insert("subject":metadata.get("argument1")); data.insert("description":metadata.get("argument2"));
input_data = {"request":data}; response = invokeurl [ url :"https://zylker-sdpclient.msapp.net/api/v3/requests" type :POST parameters: {"input_data":input_data,"TECHNICIAN_KEY":"B7A223B1-8ED6-4630-B4C1-C1BEEDB64C28"} ]; info response; id=response.get("request").get("id"); responseStatus = response.get("response_status"); returnObj = Collection(); if(responseStatus.get("status_code") == 2000) { returnObj.insert("action":"sendActivity","type":"message","text":"Successfully added with ID "+id); } else { returnObj.insert("action":"sendActivity","type":"message","text":"Failed to add"); } return returnObj; |
After invoking the argument in Microsoft Teams bot, the service request is added in ServiceDesk Plus.

Create Cards to Add Change Requests
To define the card layout:

|
test='{"attachments":[{"contentType":"application/vnd.microsoft.card.adaptive","content":{"$schema":"http://adaptivecards.io/schemas/adaptivedata":{"action":"cancel"},"style":"destructive","type":"Action.Submit","title":"Cancel"}],"version":"1.2"}}],"action":"sendActivity","type":"message"} t=Map(); t=test.toMap(); return t; |
Sample card JSON
The created card will appear as follows:

To define the action buttons:
|
data = Collection(); data.insert("description":metadata.get("description")); data.insert("title":metadata.get("title")); input_data = {"change":data}; response = invokeurl [ url:"https://zylker-sdpclient.msapp.net/api/v3/changes" type :POST parameters:{"input_data":input_data,"TECHNICIAN_KEY":"832B0BCFC-A812-2D3B-A126-C536551DA3768"} ]; info response; id=response.get("change").get("id"); responseStatus = response.get("response_status"); returnObj = Collection(); if(responseStatus.get("status_code") == 2000) { returnObj.insert("action":"sendActivity","type":"message","text":"Successfully added with ID "+id); } else { returnObj.insert("action":"sendActivity","type":"message","text":"Failed to add"); } return returnObj; |
Create Cards to Add Request Tasks
To define the card layout:

|
test='{"attachments":[{"contentType":"application/vnd.microsoft.card.adaptive","content":{"$schema":"htn":"sendActivity","type":"message"}'; t=Map(); t=test.toMap(); return t; |
Sample card JSON

To define the action buttons:
|
data = Collection(); data.insert("description":metadata.get("description")); data.insert("title":metadata.get("title")); data.insert("status":{"name":"Open"}); request_id=metadata.get("request_id"); input_data = {"task":data}; info input_data; response = invokeurl [ url:"https://zylker-sdpclient.msapp.net/api/v3/requests/"+request_id+"/tasks" type :POST parameters:{"input_data":input_data,"TECHNICIAN_KEY":"67B0BCFC-A812-4D3B-A126-C86111DA3768"} ]; info response; id=response.get("task").get("request").get("id"); responseStatus = response.get("response_status"); returnObj = Collection(); if(responseStatus.get("messages").get(0).get("status_code") == 200) { returnObj.insert("action":"sendActivity","type":"message","text": "New Task added successfully to Id "+id); } else { returnObj.insert("action":"sendActivity","type":"message","text":"Failed to add"); } return returnObj; |
On clicking the Create Task button present in the card the task for the specified request gets added in ServiceDesk Plus. A success message is returned along with the ID.
After the bot is added to a team, ServiceDesk Plus will be able to access the channels present in the team.
You can map the various support groups present in ServiceDesk Plus with respective teams channels. When a request is assigned to a support group, the bot will trigger a notification to the respective channel.
You can create requests in ServiceDesk Plus from within Microsoft teams using the quick create feature. This feature works just like the Quick Create feature in ServiceDesk Plus.
To create a request using this feature,
Execute the command /create request.
[OR]
Execute the command /overview and click Quick Create.
Enter the subject and description of the request and click Create Request. Click Cancel to abort the process.


The quick create option uses the default request template to create requests. If the default template has mandatory fields, you can update a request template without any mandatory fields in the database using the following query:
Here <template_name> is the name of the template to be updated.
You can approve/reject a request or change in ServiceDesk Plus from within the teams app. To do this,
Execute the /pending approvals command from the chat window. This displays all your pending approvals as individual cards.
Add relevant comments and perform the required action for each approval.

Users can track their service desk tickets under the Request View tab in the ServiceDesk Plus app in Microsoft Teams.

.png?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kemY4dnF2MjRlcWhnLmNsb3VkZnJvbnQubmV0L3VzZXJmaWxlcy84NjYvMTQyNjIvY2tmaW5kZXIvaW1hZ2VzL2ltYWdlJTIwKDMpLnBuZyIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTc2NDQ5MzQ4NX19fV19&Signature=rVhqkdz1XIlaemnms9VX2J5e0jbr1lUQ94azKq3N8vlrKpASAZ8SbYz18jISbtWah~6w1lcSn3EHEUFZ~fTOZPGBFb5ypNLcJS75ZKmQ~EvSP9j-UPOmPOZoctF~h7ixoVT0kfLrQEaA5G7hkI2IrAg5twboQSLIkPFJBNkmChTJf7M2vaWkA96GeRqf3fisILUOsJm7BlYBm5BI9evoTIAihudW02cnmxcl9agx3VLaZ-YbpWhfE7lbM0oPt0~UqE2s~QCMsoy13KCTNCJvffORUXLgSacmiH2GYjYHe5ENAj0nB0-FCtLpQbZdNy~ou7UNNYsyoCqK6Ox6Insj7Q__&Key-Pair-Id=K2TK3EG287XSFC)
To update the existing ServiceDesk Plus app in Microsoft Teams with the latest version,
icon and select Developer Portal.

Go to App features page on the left pane.

Go to App package page on the left panel.

Head to admin.teams.microsoft.com


To update any configuration in the integration, make the changes and click Update.
To disable the integration while restoring the configurations, uncheck Enable Microsoft Teams displayed at the top of the integration page.
To completely remove the integration, click Remove displayed at the bottom of the page. Note that if you remove the integration, all configurations will be deleted and cannot be restored.

(Post migration to 15110, the following AI Features will be available and are powered by ChatGPT, requiring that integration to be enabled as well)
1.Suggesting solutions for user queries: Users can now send any queries in natural language to the bot, and the bot will cross-reference those queries with the available solutions in ServiceDesk Plus using AI. If a match is found, the bot will display the corresponding solution’s details to the user.
For example, if the user query is "having network issues" and there's a solution available in ServiceDesk Plus with the title "WiFi troubleshooting", this solution will be returned as a response to the user's query
2.Suggesting relevant bot commands: Users’ natural language inputs are now analysed and if there aren’t any relevant solutions, the bot command that best matches the query is returned to the user, which is clickable.
For instance, if the user types “laptop keeps restarting” and ServiceDesk Plus doesn’t have any matching solutions, the bot command “/create request” will be displayed to the user. They can click on this command to initiate the necessary actions.
3.Request Summarisation: Users can have their requests summarised while viewing their request details in Microsoft Teams. The request details card will feature a “Summarize with AI” button, which upon clicking provides a concise summary of the request.
4.Ask AI For Solutions: Before creating a request, the request creation card will feature a “Ask AI For Solutions” button. This button takes the request subject as input and presents some solutions or workarounds related to the subject of the request.
Create requests with templates: Users can create requests in their preferred template by selecting it from a drop-down menu that appears before the request creation card.
View Announcements: Users can view their active announcements from MS Teams with the "/announcements" bot command. A carousel with the latest 10 announcements will be shown to the user.
Search Solutions: Users can search for solutions available in ServiceDesk Plus from Microsoft Teams. Solutions with matching titles will be displayed in a carousel for the user to view.
Assign Technicians to Requests: Technicians can assign a technician to requests directly from Microsoft Teams while viewing the details of all or open requests.
Users can chat with their technicians/requesters from Microsoft Teams itself using this integration. To end the chat, use the '/end chat' command. This will end the chat initiated from Microsoft Teams.
In case the user doesn't have the option to 'Upload a customised app', go to MS Teams's admin setup policies. Choose your Org and make sure that the 'Upload a custom app' slider is on.

After uploading the app, if the app keeps disappearing from MS Teams, go to MS Teams's admin permission policies. Choose your Org and make sure that Custom apps and Third Party apps are being allowed.

If the bot doesn't respond with the login card even after typing the '/help' message, go to Developer Portal and go to the Apps tab. Choose the ServiceDesk Plus app created. Now in the top left, if the logo of the app appears to be something else but not ServiceDesk Plus's, the app parsing hasn't been done properly by Microsoft. Contact our support to fix the app manifest. A sample screenshot of an improperly parsed app is below.

In the personal Request List View tab, if the page doesn't get loaded or if the login fails, make sure that the ServiceDesk Plus instance is running in https. This is one of the major pre-requisite.
If the Request List View tab still fails to load, check for any extra headers in the security settings. If the instance contains a 'X-Frame-Options' header, that will cause the rendering to fail. Add another 'Content-Security-Policy' header and set the value as 'frame-ancestors 'self' <servicedesk-domain> teams.microsoft.com' to fix the issue as shown in the screenshot below. For example, if your domain is https://demo.servicedeskplus.com, then the CSP header should be frame-ancestors 'self' demo.servicedeskplus.com teams.microsoft.com. This workaround is applicable to Microsoft Teams web app alone and not to the Microsoft Teams desktop app. If it still doesn't work, kindly contact our support.
