From 21b53ee0989827d091be92373f7a303161a03452 Mon Sep 17 00:00:00 2001 From: sbhadwal-moveworks Date: Mon, 13 Apr 2026 23:58:16 +0530 Subject: [PATCH] add concur plugin --- .../.codeblocks/block_0.sh | 4 + .../.codeblocks/block_1.sh | 15 ++ .../.codeblocks/block_2.sh | 8 ++ .../.codeblocks/block_3.sh | 9 ++ .../.codeblocks/block_0.sh | 4 + .../.codeblocks/block_1.sh | 4 + .../.codeblocks/block_2.sh | 4 + .../.codeblocks/block_3.sh | 4 + .../.codeblocks/block_4.sh | 8 ++ .../.codeblocks/block_5.sh | 5 + .../.codeblocks/block_6.sh | 12 ++ .../.codeblocks/block_0.sh | 20 +-- .../.codeblocks/block_1.sh | 6 +- .../.codeblocks/block_2.sh | 6 +- .../.codeblocks/block_3.sh | 4 + .../.codeblocks/block_4.sh | 4 + .../.codeblocks/block_5.sh | 4 + .../.codeblocks/block_6.sh | 4 + .../.codeblocks/block_7.sh | 4 + .../.codeblocks/block_8.sh | 4 + .../.codeblocks/block_9.sh | 4 + .../.codeblocks/block_0.sh | 4 + .../.codeblocks/block_1.sh | 19 +++ .../.codeblocks/block_2.sh | 8 ++ .../.codeblocks/block_3.sh | 11 ++ .../.codeblocks/block_0.sh | 4 + .../.codeblocks/block_1.sh | 5 + .../.codeblocks/block_2.sh | 4 + .../.codeblocks/block_3.sh | 7 + .../.codeblocks/block_4.sh | 13 ++ .../.codeblocks/block_0.sh | 4 + .../.codeblocks/block_1.sh | 24 ++++ .../.codeblocks/block_0.sh | 4 + .../.codeblocks/block_1.sh | 5 + .../.codeblocks/block_2.sh | 11 ++ .../.codeblocks/block_0.sh | 4 + .../.codeblocks/block_1.sh | 5 + .../.codeblocks/block_0.sh | 4 + .../.codeblocks/block_1.sh | 5 + .../.codeblocks/block_2.sh | 4 + .../.codeblocks/block_3.sh | 14 ++ .../.codeblocks/block_4.sh | 14 ++ .../.codeblocks/block_0.sh | 3 + .../.codeblocks/block_1.sh | 7 + .../.codeblocks/block_2.sh | 14 ++ .../.codeblocks/block_3.sh | 4 + .../README.md | 135 ++++++++++++++++++ .../.codeblocks/block_0.sh | 2 + .../.codeblocks/block_1.sh | 2 + .../.codeblocks/block_2.sh | 1 + .../.codeblocks/block_3.sh | 1 + .../.codeblocks/block_4.sh | 1 + .../.codeblocks/block_0.sh | 9 +- .../.codeblocks/block_1.sh | 16 +-- .../.codeblocks/block_2.sh | 20 ++- .../.codeblocks/block_3.sh | 5 +- .../.codeblocks/block_4.sh | 11 +- .../.codeblocks/block_5.sh | 19 --- .../.codeblocks/block_6.sh | 132 ----------------- .../.codeblocks/block_2.sh | 15 +- .../.codeblocks/block_3.sh | 4 + 61 files changed, 504 insertions(+), 207 deletions(-) create mode 100644 plugins/google-calendar-book-meeting/.codeblocks/block_0.sh create mode 100644 plugins/google-calendar-book-meeting/.codeblocks/block_1.sh create mode 100644 plugins/google-calendar-book-meeting/.codeblocks/block_2.sh create mode 100644 plugins/google-calendar-book-meeting/.codeblocks/block_3.sh create mode 100644 plugins/google-calendar-update-meeting/.codeblocks/block_0.sh create mode 100644 plugins/google-calendar-update-meeting/.codeblocks/block_1.sh create mode 100644 plugins/google-calendar-update-meeting/.codeblocks/block_2.sh create mode 100644 plugins/google-calendar-update-meeting/.codeblocks/block_3.sh create mode 100644 plugins/google-calendar-update-meeting/.codeblocks/block_4.sh create mode 100644 plugins/google-calendar-update-meeting/.codeblocks/block_5.sh create mode 100644 plugins/google-calendar-update-meeting/.codeblocks/block_6.sh create mode 100644 plugins/moveworks-data-api-unified-analytics/.codeblocks/block_3.sh create mode 100644 plugins/moveworks-data-api-unified-analytics/.codeblocks/block_4.sh create mode 100644 plugins/moveworks-data-api-unified-analytics/.codeblocks/block_5.sh create mode 100644 plugins/moveworks-data-api-unified-analytics/.codeblocks/block_6.sh create mode 100644 plugins/moveworks-data-api-unified-analytics/.codeblocks/block_7.sh create mode 100644 plugins/moveworks-data-api-unified-analytics/.codeblocks/block_8.sh create mode 100644 plugins/moveworks-data-api-unified-analytics/.codeblocks/block_9.sh create mode 100644 plugins/outlook-book-meeting/.codeblocks/block_0.sh create mode 100644 plugins/outlook-book-meeting/.codeblocks/block_1.sh create mode 100644 plugins/outlook-book-meeting/.codeblocks/block_2.sh create mode 100644 plugins/outlook-book-meeting/.codeblocks/block_3.sh create mode 100644 plugins/outlook-cancel-meeting/.codeblocks/block_0.sh create mode 100644 plugins/outlook-cancel-meeting/.codeblocks/block_1.sh create mode 100644 plugins/outlook-cancel-meeting/.codeblocks/block_2.sh create mode 100644 plugins/outlook-cancel-meeting/.codeblocks/block_3.sh create mode 100644 plugins/outlook-cancel-meeting/.codeblocks/block_4.sh create mode 100644 plugins/outlook-lookup-availability/.codeblocks/block_0.sh create mode 100644 plugins/outlook-lookup-availability/.codeblocks/block_1.sh create mode 100644 plugins/outlook-respond-meeting/.codeblocks/block_0.sh create mode 100644 plugins/outlook-respond-meeting/.codeblocks/block_1.sh create mode 100644 plugins/outlook-respond-meeting/.codeblocks/block_2.sh create mode 100644 plugins/outlook-search-calendar-events/.codeblocks/block_0.sh create mode 100644 plugins/outlook-search-calendar-events/.codeblocks/block_1.sh create mode 100644 plugins/outlook-update-meeting/.codeblocks/block_0.sh create mode 100644 plugins/outlook-update-meeting/.codeblocks/block_1.sh create mode 100644 plugins/outlook-update-meeting/.codeblocks/block_2.sh create mode 100644 plugins/outlook-update-meeting/.codeblocks/block_3.sh create mode 100644 plugins/outlook-update-meeting/.codeblocks/block_4.sh create mode 100644 plugins/sap-concur-create-expense-report-with-expense-from-image/.codeblocks/block_0.sh create mode 100644 plugins/sap-concur-create-expense-report-with-expense-from-image/.codeblocks/block_1.sh create mode 100644 plugins/sap-concur-create-expense-report-with-expense-from-image/.codeblocks/block_2.sh create mode 100644 plugins/sap-concur-create-expense-report-with-expense-from-image/.codeblocks/block_3.sh create mode 100644 plugins/sap-concur-create-expense-report-with-expense-from-image/README.md create mode 100644 plugins/sap-success-factors-view-pto-requests-and-calendar/.codeblocks/block_0.sh create mode 100644 plugins/sap-success-factors-view-pto-requests-and-calendar/.codeblocks/block_1.sh create mode 100644 plugins/sap-success-factors-view-pto-requests-and-calendar/.codeblocks/block_2.sh create mode 100644 plugins/sap-success-factors-view-pto-requests-and-calendar/.codeblocks/block_3.sh create mode 100644 plugins/sap-success-factors-view-pto-requests-and-calendar/.codeblocks/block_4.sh delete mode 100644 plugins/ukg-notify-on-pto-submission/.codeblocks/block_5.sh delete mode 100644 plugins/ukg-notify-on-pto-submission/.codeblocks/block_6.sh create mode 100644 plugins/ukg-view-time-off-balance/.codeblocks/block_3.sh diff --git a/plugins/google-calendar-book-meeting/.codeblocks/block_0.sh b/plugins/google-calendar-book-meeting/.codeblocks/block_0.sh new file mode 100644 index 00000000..2c8664f2 --- /dev/null +++ b/plugins/google-calendar-book-meeting/.codeblocks/block_0.sh @@ -0,0 +1,4 @@ +curl --request GET \ + --url 'https://www.googleapis.com/calendar/v3/calendars/primary/events' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' diff --git a/plugins/google-calendar-book-meeting/.codeblocks/block_1.sh b/plugins/google-calendar-book-meeting/.codeblocks/block_1.sh new file mode 100644 index 00000000..a82634b9 --- /dev/null +++ b/plugins/google-calendar-book-meeting/.codeblocks/block_1.sh @@ -0,0 +1,15 @@ +curl --request POST \ + --url 'https://www.googleapis.com/calendar/v3/calendars/primary/events' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' \ + --data '{ + "summary": "{{event_title}}", + "description": "{{event_description}}", + "start": {"dateTime": "{{start_date_time}}", "timeZone": "{{user_time_zone}}"}, + "end": {"dateTime": "{{end_date_time}}", "timeZone": "{{user_time_zone}}"}, + "attendees": [{"email": "{{attendee_email}}", "optional": false}, ...], + "recurrence": ["{{recurrence_rules}}"], + "transparency": "{{show_as}}", + "visibility": "{{visibility}}", + "eventType": "{{event_type}}" + }' diff --git a/plugins/google-calendar-book-meeting/.codeblocks/block_2.sh b/plugins/google-calendar-book-meeting/.codeblocks/block_2.sh new file mode 100644 index 00000000..23367622 --- /dev/null +++ b/plugins/google-calendar-book-meeting/.codeblocks/block_2.sh @@ -0,0 +1,8 @@ +curl --request POST \ + --url 'https://api.zoom.us/v2/users/me/meetings' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' \ + --data '{ + "topic": "{{meeting_title}}", + "type": 1 + }' diff --git a/plugins/google-calendar-book-meeting/.codeblocks/block_3.sh b/plugins/google-calendar-book-meeting/.codeblocks/block_3.sh new file mode 100644 index 00000000..3696ce83 --- /dev/null +++ b/plugins/google-calendar-book-meeting/.codeblocks/block_3.sh @@ -0,0 +1,9 @@ +curl --request PATCH \ + --url 'https://www.googleapis.com/calendar/v3/calendars/primary/events/{{event_id}}' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'If-Match: {{etag}}' \ + --header 'Content-Type: application/json' \ + --data '{ + "description": "{{zoom_details}}", + "location": "{{zoom_join_url}}" + }' diff --git a/plugins/google-calendar-update-meeting/.codeblocks/block_0.sh b/plugins/google-calendar-update-meeting/.codeblocks/block_0.sh new file mode 100644 index 00000000..37031bdc --- /dev/null +++ b/plugins/google-calendar-update-meeting/.codeblocks/block_0.sh @@ -0,0 +1,4 @@ +curl --request GET \\ + --url '}&timeMax={{end_date_range}}&singleEvents=true&orderBy=startTime&maxResults=350' \\ + --header 'Authorization: Bearer {{access_token}}' \\ + --header 'Content-Type: application/json' diff --git a/plugins/google-calendar-update-meeting/.codeblocks/block_1.sh b/plugins/google-calendar-update-meeting/.codeblocks/block_1.sh new file mode 100644 index 00000000..2c8664f2 --- /dev/null +++ b/plugins/google-calendar-update-meeting/.codeblocks/block_1.sh @@ -0,0 +1,4 @@ +curl --request GET \ + --url 'https://www.googleapis.com/calendar/v3/calendars/primary/events' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' diff --git a/plugins/google-calendar-update-meeting/.codeblocks/block_2.sh b/plugins/google-calendar-update-meeting/.codeblocks/block_2.sh new file mode 100644 index 00000000..d0b86043 --- /dev/null +++ b/plugins/google-calendar-update-meeting/.codeblocks/block_2.sh @@ -0,0 +1,4 @@ +curl --request GET \ + --url 'https://www.googleapis.com/calendar/v3/calendars/primary/events/{{event_id}}' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' diff --git a/plugins/google-calendar-update-meeting/.codeblocks/block_3.sh b/plugins/google-calendar-update-meeting/.codeblocks/block_3.sh new file mode 100644 index 00000000..115e4b63 --- /dev/null +++ b/plugins/google-calendar-update-meeting/.codeblocks/block_3.sh @@ -0,0 +1,4 @@ +curl --request GET \ + --url 'https://www.googleapis.com/calendar/v3/calendars/primary/events/{{recurring_event_id}}' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' diff --git a/plugins/google-calendar-update-meeting/.codeblocks/block_4.sh b/plugins/google-calendar-update-meeting/.codeblocks/block_4.sh new file mode 100644 index 00000000..3035e11b --- /dev/null +++ b/plugins/google-calendar-update-meeting/.codeblocks/block_4.sh @@ -0,0 +1,8 @@ +curl --request PATCH \ + --url 'https://www.googleapis.com/calendar/v3/calendars/primary/events/{{series_master_event_id}}?sendUpdates=all' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'If-Match: {{etag}}' \ + --header 'Content-Type: application/json' \ + --data '{ + "recurrence": ["{{updated_recurrence_rules}}"] + }' diff --git a/plugins/google-calendar-update-meeting/.codeblocks/block_5.sh b/plugins/google-calendar-update-meeting/.codeblocks/block_5.sh new file mode 100644 index 00000000..1a9d7076 --- /dev/null +++ b/plugins/google-calendar-update-meeting/.codeblocks/block_5.sh @@ -0,0 +1,5 @@ +curl --request POST \ + --url 'https://www.googleapis.com/calendar/v3/calendars/primary/events' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' \ + --data '{{cloned_event_body}}' diff --git a/plugins/google-calendar-update-meeting/.codeblocks/block_6.sh b/plugins/google-calendar-update-meeting/.codeblocks/block_6.sh new file mode 100644 index 00000000..19fb7750 --- /dev/null +++ b/plugins/google-calendar-update-meeting/.codeblocks/block_6.sh @@ -0,0 +1,12 @@ +curl --request PATCH \\ + --url '}?sendUpdates=all' \\ + --header 'Authorization: Bearer {{access_token}}' \\ + --header 'If-Match: {{etag}}' \\ + --header 'Content-Type: application/json' \\ + --data '{ + "summary": "{{event_title}}", + "description": "{{event_description}}", + "start": {"dateTime": "{{new_start_date_time}}", "timeZone": "{{user_time_zone}}"}, + "end": {"dateTime": "{{new_end_date_time}}", "timeZone": "{{user_time_zone}}"}, + "attendees": [...] + }' diff --git a/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_0.sh b/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_0.sh index 46049846..3662d00c 100644 --- a/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_0.sh +++ b/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_0.sh @@ -1,16 +1,4 @@ -curl --request POST \ - --url https:///api/v1/commons/persons/extensions/multi_read \ - --header 'Authorization: {{access_token}}' \ - --header 'Content-Type: application/json' \ - --data '{ - "where": { - "employees": { - "key": "useremailaddress", - "values": [ - "{{USER_EMAIL}}" - ] - }, - "includeBaseWages": false, - "includeAccrualPolicyDetails": false - } -}' +curl --request GET \ + --url 'https://api.moveworks.ai/export/v1/records/interactions/$count?$orderby=created_time&$filter=created_time gt '{{start_date}}T00:00:00Z' and created_time lt '{{end_date}}T00:00:00Z'' \ + --header 'Authorization: Bearer ' \ + --header 'Accept: application/json' diff --git a/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_1.sh b/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_1.sh index bb258d24..fce2d310 100644 --- a/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_1.sh +++ b/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_1.sh @@ -1,4 +1,4 @@ curl --request GET \ - --url 'https:///api/v1/scheduling/timeoff/request_subtypes?person_number={{USER_NUMBER}}' \ - --header 'Authorization: {{access_token}}' \ - --header 'Content-Type: application/json' + --url 'https://api.moveworks.ai/export/v1/records/interactions?$skip={{skip}}&$orderby=created_time&$filter=created_time gt '{{start_date}}T00:00:00Z' and created_time lt '{{end_date}}T00:00:00Z'' \ + --header 'Authorization: Bearer ' \ + --header 'Accept: application/json' diff --git a/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_2.sh b/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_2.sh index d8e5759c..fe2a6a62 100644 --- a/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_2.sh +++ b/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_2.sh @@ -1,4 +1,4 @@ curl --request GET \ ---url 'https:///api/v1/scheduling/timeoff/accruals?date={{date}}&subtype_name={{subtype_name}}&employee_id={{user_id}}' \ ---header 'Authorization: {{access_token}}' \ ---header 'Content-Type: application/json' + --url 'https://api.moveworks.ai/export/v1/records/users/$count?$orderby=id&$filter=last_updated_time gt '{{yesterday_date}}T06:27:58.321Z'' \ + --header 'Authorization: Bearer ' \ + --header 'Accept: application/json' diff --git a/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_3.sh b/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_3.sh new file mode 100644 index 00000000..ed54454c --- /dev/null +++ b/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_3.sh @@ -0,0 +1,4 @@ +curl --request GET \ + --url 'https://api.moveworks.ai/export/v1/records/users?$skip={{skip}}&$filter=last_updated_time gt '{{yesterday_date}}T06:27:58.321Z'' \ + --header 'Authorization: Bearer ' \ + --header 'Accept: application/json' diff --git a/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_4.sh b/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_4.sh new file mode 100644 index 00000000..f6be0df4 --- /dev/null +++ b/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_4.sh @@ -0,0 +1,4 @@ +curl --request GET \ + --url 'https://api.moveworks.ai/export/v1/records/conversations/$count?$orderby=created_time&$filter=created_time gt '{{start_date}}T00:00:00Z' and created_time lt '{{end_date}}T00:00:00Z'' \ + --header 'Authorization: Bearer ' \ + --header 'Accept: application/json' diff --git a/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_5.sh b/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_5.sh new file mode 100644 index 00000000..d346667d --- /dev/null +++ b/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_5.sh @@ -0,0 +1,4 @@ +curl --request GET \ + --url 'https://api.moveworks.ai/export/v1/records/conversations?$skip={{skip}}&$orderby=created_time&$filter=created_time gt '{{start_date}}T00:00:00Z' and created_time lt '{{end_date}}T00:00:00Z'' \ + --header 'Authorization: Bearer ' \ + --header 'Accept: application/json' diff --git a/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_6.sh b/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_6.sh new file mode 100644 index 00000000..7f8df6c1 --- /dev/null +++ b/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_6.sh @@ -0,0 +1,4 @@ +curl --request GET \ + --url 'https://api.moveworks.ai/export/v1/records/plugin-calls/$count?$orderby=created_time&$filter=created_time gt '{{start_date}}T00:00:00Z' and created_time lt '{{end_date}}T00:00:00Z'' \ + --header 'Authorization: Bearer ' \ + --header 'Accept: application/json' diff --git a/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_7.sh b/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_7.sh new file mode 100644 index 00000000..c9abb6f4 --- /dev/null +++ b/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_7.sh @@ -0,0 +1,4 @@ +curl --request GET \ + --url 'https://api.moveworks.ai/export/v1/records/plugin-calls?$skip={{skip}}&$orderby=created_time&$filter=created_time gt '{{start_date}}T00:00:00Z' and created_time lt '{{end_date}}T00:00:00Z'' \ + --header 'Authorization: Bearer ' \ + --header 'Accept: application/json' diff --git a/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_8.sh b/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_8.sh new file mode 100644 index 00000000..53c1d385 --- /dev/null +++ b/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_8.sh @@ -0,0 +1,4 @@ +curl --request GET \ + --url 'https://api.moveworks.ai/export/v1/records/plugin-resources/$count?$orderby=created_time&$filter=created_time gt '{{start_date}}T00:00:00Z' and created_time lt '{{end_date}}T00:00:00Z'' \ + --header 'Authorization: Bearer ' \ + --header 'Accept: application/json' diff --git a/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_9.sh b/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_9.sh new file mode 100644 index 00000000..65bb2182 --- /dev/null +++ b/plugins/moveworks-data-api-unified-analytics/.codeblocks/block_9.sh @@ -0,0 +1,4 @@ +curl --request GET \ + --url 'https://api.moveworks.ai/export/v1/records/plugin-resources?$skip={{skip}}&$orderby=created_time&$filter=created_time gt '{{start_date}}T00:00:00Z' and created_time lt '{{end_date}}T00:00:00Z'' \ + --header 'Authorization: Bearer ' \ + --header 'Accept: application/json' diff --git a/plugins/outlook-book-meeting/.codeblocks/block_0.sh b/plugins/outlook-book-meeting/.codeblocks/block_0.sh new file mode 100644 index 00000000..012df89d --- /dev/null +++ b/plugins/outlook-book-meeting/.codeblocks/block_0.sh @@ -0,0 +1,4 @@ +curl --request GET \ + --url 'https://graph.microsoft.com/v1.0/me/mailboxSettings' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' diff --git a/plugins/outlook-book-meeting/.codeblocks/block_1.sh b/plugins/outlook-book-meeting/.codeblocks/block_1.sh new file mode 100644 index 00000000..972062b9 --- /dev/null +++ b/plugins/outlook-book-meeting/.codeblocks/block_1.sh @@ -0,0 +1,19 @@ +curl --request POST \ + --url 'https://graph.microsoft.com/v1.0/me/events' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' \ + --data '{ + "subject": "{{event_title}}", + "body": { "contentType": "HTML", "content": "{{event_description}}" }, + "start": { "dateTime": "{{start_date_time}}", "timeZone": "{{user_time_zone}}" }, + "end": { "dateTime": "{{end_date_time}}", "timeZone": "{{user_time_zone}}" }, + "attendees": [ + { "type": "required", "emailAddress": { "address": "{{attendee_email}}" } } + ], + "isOnlineMeeting": true, + "onlineMeetingProvider": "teamsForBusiness", + "recurrence": "{{recurrence}}", + "showAs": "{{show_as}}", + "sensitivity": "{{sensitivity}}", + "isAllDay": false + }' diff --git a/plugins/outlook-book-meeting/.codeblocks/block_2.sh b/plugins/outlook-book-meeting/.codeblocks/block_2.sh new file mode 100644 index 00000000..28dbe795 --- /dev/null +++ b/plugins/outlook-book-meeting/.codeblocks/block_2.sh @@ -0,0 +1,8 @@ +curl --request POST \ + --url 'https://api.zoom.us/v2/users/me/meetings' \ + --header 'Authorization: Bearer {{zoom_access_token}}' \ + --header 'Content-Type: application/json' \ + --data '{ + "topic": "{{event_title}}", + "type": 1 + }' diff --git a/plugins/outlook-book-meeting/.codeblocks/block_3.sh b/plugins/outlook-book-meeting/.codeblocks/block_3.sh new file mode 100644 index 00000000..055eac66 --- /dev/null +++ b/plugins/outlook-book-meeting/.codeblocks/block_3.sh @@ -0,0 +1,11 @@ +curl --request PATCH \ + --url 'https://graph.microsoft.com/v1.0/me/events/{{event_id}}' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' \ + --data '{ + "body": { + "contentType": "HTML", + "content": "

Zoom

Join Zoom Meeting
{{join_url}}

Meeting ID: {{zoom_meeting_id}}
Passcode: {{password}}

" + }, + "location": { "displayName": "{{join_url}}" } + }' diff --git a/plugins/outlook-cancel-meeting/.codeblocks/block_0.sh b/plugins/outlook-cancel-meeting/.codeblocks/block_0.sh new file mode 100644 index 00000000..012df89d --- /dev/null +++ b/plugins/outlook-cancel-meeting/.codeblocks/block_0.sh @@ -0,0 +1,4 @@ +curl --request GET \ + --url 'https://graph.microsoft.com/v1.0/me/mailboxSettings' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' diff --git a/plugins/outlook-cancel-meeting/.codeblocks/block_1.sh b/plugins/outlook-cancel-meeting/.codeblocks/block_1.sh new file mode 100644 index 00000000..fe04dde7 --- /dev/null +++ b/plugins/outlook-cancel-meeting/.codeblocks/block_1.sh @@ -0,0 +1,5 @@ +curl --request GET \ + --url 'https://graph.microsoft.com/v1.0/users/{{email}}/calendarView?startDateTime={{start_date_range}}&endDateTime={{end_date_range}}&$orderby=start/dateTime&$top=350' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' \ + --header 'Prefer: outlook.timezone="{{timezone}}"' diff --git a/plugins/outlook-cancel-meeting/.codeblocks/block_2.sh b/plugins/outlook-cancel-meeting/.codeblocks/block_2.sh new file mode 100644 index 00000000..385996ff --- /dev/null +++ b/plugins/outlook-cancel-meeting/.codeblocks/block_2.sh @@ -0,0 +1,4 @@ +curl --request GET \ + --url 'https://graph.microsoft.com/v1.0/me/events/{{event_id}}' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' diff --git a/plugins/outlook-cancel-meeting/.codeblocks/block_3.sh b/plugins/outlook-cancel-meeting/.codeblocks/block_3.sh new file mode 100644 index 00000000..2e188f2f --- /dev/null +++ b/plugins/outlook-cancel-meeting/.codeblocks/block_3.sh @@ -0,0 +1,7 @@ +curl --request POST \ + --url 'https://graph.microsoft.com/v1.0/me/events/{{event_id}}/cancel' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' \ + --data '{ + "comment": "{{reason_for_cancellation}}" + }' diff --git a/plugins/outlook-cancel-meeting/.codeblocks/block_4.sh b/plugins/outlook-cancel-meeting/.codeblocks/block_4.sh new file mode 100644 index 00000000..90ce7ca7 --- /dev/null +++ b/plugins/outlook-cancel-meeting/.codeblocks/block_4.sh @@ -0,0 +1,13 @@ +curl --request PATCH \ + --url 'https://graph.microsoft.com/v1.0/me/events/{{series_master_id}}' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' \ + --data '{ + "recurrence": { + "pattern": "{{recurrence_pattern}}", + "range": { + "type": "endDate", + "endDate": "{{day_before_selected_occurrence}}" + } + } + }' diff --git a/plugins/outlook-lookup-availability/.codeblocks/block_0.sh b/plugins/outlook-lookup-availability/.codeblocks/block_0.sh new file mode 100644 index 00000000..012df89d --- /dev/null +++ b/plugins/outlook-lookup-availability/.codeblocks/block_0.sh @@ -0,0 +1,4 @@ +curl --request GET \ + --url 'https://graph.microsoft.com/v1.0/me/mailboxSettings' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' diff --git a/plugins/outlook-lookup-availability/.codeblocks/block_1.sh b/plugins/outlook-lookup-availability/.codeblocks/block_1.sh new file mode 100644 index 00000000..1a161ff6 --- /dev/null +++ b/plugins/outlook-lookup-availability/.codeblocks/block_1.sh @@ -0,0 +1,24 @@ +curl --request POST \ + --url 'https://graph.microsoft.com/v1.0/me/findMeetingTimes' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' \ + --header 'Prefer: outlook.timezone="{{timezone}}"' \ + --data '{ + "attendees": [ + { "type": "required", "emailAddress": { "address": "{{required_attendee_email}}" } }, + { "type": "optional", "emailAddress": { "address": "{{optional_attendee_email}}" } } + ], + "timeConstraint": { + "activityDomain": "work", + "timeSlots": [ + { + "start": { "dateTime": "{{start_datetime}}", "timeZone": "{{timezone}}" }, + "end": { "dateTime": "{{end_datetime}}", "timeZone": "{{timezone}}" } + } + ] + }, + "meetingDuration": "PT{{duration_in_minutes}}M", + "isOrganizerOptional": false, + "locationConstraint": { "isRequired": false, "suggestLocation": true }, + "returnSuggestionReasons": true + }' diff --git a/plugins/outlook-respond-meeting/.codeblocks/block_0.sh b/plugins/outlook-respond-meeting/.codeblocks/block_0.sh new file mode 100644 index 00000000..012df89d --- /dev/null +++ b/plugins/outlook-respond-meeting/.codeblocks/block_0.sh @@ -0,0 +1,4 @@ +curl --request GET \ + --url 'https://graph.microsoft.com/v1.0/me/mailboxSettings' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' diff --git a/plugins/outlook-respond-meeting/.codeblocks/block_1.sh b/plugins/outlook-respond-meeting/.codeblocks/block_1.sh new file mode 100644 index 00000000..fe04dde7 --- /dev/null +++ b/plugins/outlook-respond-meeting/.codeblocks/block_1.sh @@ -0,0 +1,5 @@ +curl --request GET \ + --url 'https://graph.microsoft.com/v1.0/users/{{email}}/calendarView?startDateTime={{start_date_range}}&endDateTime={{end_date_range}}&$orderby=start/dateTime&$top=350' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' \ + --header 'Prefer: outlook.timezone="{{timezone}}"' diff --git a/plugins/outlook-respond-meeting/.codeblocks/block_2.sh b/plugins/outlook-respond-meeting/.codeblocks/block_2.sh new file mode 100644 index 00000000..c1b01f31 --- /dev/null +++ b/plugins/outlook-respond-meeting/.codeblocks/block_2.sh @@ -0,0 +1,11 @@ +curl --request POST \ + --url 'https://graph.microsoft.com/v1.0/me/events/{{event_id}}/{{action}}' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' \ + --data '{ + "comment": "{{comment}}", + "proposedNewTime": { + "start": { "dateTime": "{{start_date_time}}", "timeZone": "{{proposal_timezone}}" }, + "end": { "dateTime": "{{end_date_time}}", "timeZone": "{{proposal_timezone}}" } + } + }' diff --git a/plugins/outlook-search-calendar-events/.codeblocks/block_0.sh b/plugins/outlook-search-calendar-events/.codeblocks/block_0.sh new file mode 100644 index 00000000..012df89d --- /dev/null +++ b/plugins/outlook-search-calendar-events/.codeblocks/block_0.sh @@ -0,0 +1,4 @@ +curl --request GET \ + --url 'https://graph.microsoft.com/v1.0/me/mailboxSettings' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' diff --git a/plugins/outlook-search-calendar-events/.codeblocks/block_1.sh b/plugins/outlook-search-calendar-events/.codeblocks/block_1.sh new file mode 100644 index 00000000..f1f0d793 --- /dev/null +++ b/plugins/outlook-search-calendar-events/.codeblocks/block_1.sh @@ -0,0 +1,5 @@ +curl --request GET \ + --url 'https://graph.microsoft.com/v1.0/users/{{email}}/calendarView?startDateTime={{start_date_range}}&endDateTime={{end_date_range}}' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' \ + --header 'Prefer: outlook.timezone="{{timezone}}"' diff --git a/plugins/outlook-update-meeting/.codeblocks/block_0.sh b/plugins/outlook-update-meeting/.codeblocks/block_0.sh new file mode 100644 index 00000000..012df89d --- /dev/null +++ b/plugins/outlook-update-meeting/.codeblocks/block_0.sh @@ -0,0 +1,4 @@ +curl --request GET \ + --url 'https://graph.microsoft.com/v1.0/me/mailboxSettings' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' diff --git a/plugins/outlook-update-meeting/.codeblocks/block_1.sh b/plugins/outlook-update-meeting/.codeblocks/block_1.sh new file mode 100644 index 00000000..fe04dde7 --- /dev/null +++ b/plugins/outlook-update-meeting/.codeblocks/block_1.sh @@ -0,0 +1,5 @@ +curl --request GET \ + --url 'https://graph.microsoft.com/v1.0/users/{{email}}/calendarView?startDateTime={{start_date_range}}&endDateTime={{end_date_range}}&$orderby=start/dateTime&$top=350' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' \ + --header 'Prefer: outlook.timezone="{{timezone}}"' diff --git a/plugins/outlook-update-meeting/.codeblocks/block_2.sh b/plugins/outlook-update-meeting/.codeblocks/block_2.sh new file mode 100644 index 00000000..385996ff --- /dev/null +++ b/plugins/outlook-update-meeting/.codeblocks/block_2.sh @@ -0,0 +1,4 @@ +curl --request GET \ + --url 'https://graph.microsoft.com/v1.0/me/events/{{event_id}}' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' diff --git a/plugins/outlook-update-meeting/.codeblocks/block_3.sh b/plugins/outlook-update-meeting/.codeblocks/block_3.sh new file mode 100644 index 00000000..784d43ec --- /dev/null +++ b/plugins/outlook-update-meeting/.codeblocks/block_3.sh @@ -0,0 +1,14 @@ +curl --request PATCH \ + --url 'https://graph.microsoft.com/v1.0/me/events/{{event_id}}' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' \ + --data '{ + "subject": "{{event_title}}", + "body": { "contentType": "HTML", "content": "{{event_description}}" }, + "start": { "dateTime": "{{new_start_date_time}}", "timeZone": "{{user_timezone}}" }, + "end": { "dateTime": "{{new_end_date_time}}", "timeZone": "{{user_timezone}}" }, + "location": { "displayName": "{{location_display_name}}" }, + "attendees": [ + { "type": "required", "emailAddress": { "address": "{{attendee_email}}" } } + ] + }' diff --git a/plugins/outlook-update-meeting/.codeblocks/block_4.sh b/plugins/outlook-update-meeting/.codeblocks/block_4.sh new file mode 100644 index 00000000..b53877b0 --- /dev/null +++ b/plugins/outlook-update-meeting/.codeblocks/block_4.sh @@ -0,0 +1,14 @@ +curl --request POST \ + --url 'https://graph.microsoft.com/v1.0/me/events' \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' \ + --data '{ + "subject": "{{event_title}}", + "body": { "contentType": "HTML", "content": "{{event_description}}" }, + "start": { "dateTime": "{{start_date_time}}", "timeZone": "{{user_time_zone}}" }, + "end": { "dateTime": "{{end_date_time}}", "timeZone": "{{user_time_zone}}" }, + "attendees": [...], + "recurrence": { "pattern": "{{pattern}}", "range": { "startDate": "{{occurrence_start_date}}" } }, + "isOnlineMeeting": true, + "onlineMeetingProvider": "teamsForBusiness" + }' diff --git a/plugins/sap-concur-create-expense-report-with-expense-from-image/.codeblocks/block_0.sh b/plugins/sap-concur-create-expense-report-with-expense-from-image/.codeblocks/block_0.sh new file mode 100644 index 00000000..6539219e --- /dev/null +++ b/plugins/sap-concur-create-expense-report-with-expense-from-image/.codeblocks/block_0.sh @@ -0,0 +1,3 @@ +curl --location 'https://your.domain.com/api/v3.0/expense/expensegroupconfigurations' \ +--header 'Accept: application/json' \ +--header 'Authorization: Bearer {{generated_bearer_token}}' diff --git a/plugins/sap-concur-create-expense-report-with-expense-from-image/.codeblocks/block_1.sh b/plugins/sap-concur-create-expense-report-with-expense-from-image/.codeblocks/block_1.sh new file mode 100644 index 00000000..a48b6898 --- /dev/null +++ b/plugins/sap-concur-create-expense-report-with-expense-from-image/.codeblocks/block_1.sh @@ -0,0 +1,7 @@ +curl --location 'https://your.domain.com/api/v3.0/expense/reports' \ +--header 'Accept: application/json' \ +--header 'Authorization: Bearer {{generated_bearer_token}}' \ +--header 'Content-Type: application/json' \ +--data '{ + "name": "{{report_name}}" +}' diff --git a/plugins/sap-concur-create-expense-report-with-expense-from-image/.codeblocks/block_2.sh b/plugins/sap-concur-create-expense-report-with-expense-from-image/.codeblocks/block_2.sh new file mode 100644 index 00000000..b0b981f3 --- /dev/null +++ b/plugins/sap-concur-create-expense-report-with-expense-from-image/.codeblocks/block_2.sh @@ -0,0 +1,14 @@ +curl --location 'https://your.domain.com/api/v3.0/expense/entries' \ +--header 'Accept: application/json' \ +--header 'Authorization: Bearer {{generated_bearer_token}}' \ +--header 'Content-Type: application/json' \ +--data '{ + "ReportID": "{{report_id}}", + "ExpenseTypeCode": "{{expense_type_code}}", + "PaymentTypeID": "{{payment_type_id}}", + "TransactionDate": "{{transaction_date}}", + "TransactionAmount": {{transaction_amount}}, + "TransactionCurrencyCode": "{{currency_code}}", + "VendorDescription": "{{vendor_description}}", + "Comment": "{{comment}}" +}' diff --git a/plugins/sap-concur-create-expense-report-with-expense-from-image/.codeblocks/block_3.sh b/plugins/sap-concur-create-expense-report-with-expense-from-image/.codeblocks/block_3.sh new file mode 100644 index 00000000..d898ef54 --- /dev/null +++ b/plugins/sap-concur-create-expense-report-with-expense-from-image/.codeblocks/block_3.sh @@ -0,0 +1,4 @@ +curl --location 'https://your.domain.com/api/image/v1.0/expenseentry/{{expense_entry_id}}' \ +--header 'Authorization: Bearer {{generated_bearer_token}}' \ +--header 'Content-Type: image/jpeg' \ +--data-binary '@{{receipt_file_path}}' diff --git a/plugins/sap-concur-create-expense-report-with-expense-from-image/README.md b/plugins/sap-concur-create-expense-report-with-expense-from-image/README.md new file mode 100644 index 00000000..aa7e21b0 --- /dev/null +++ b/plugins/sap-concur-create-expense-report-with-expense-from-image/README.md @@ -0,0 +1,135 @@ +--- +availability: INSTALLABLE +description: A plugin that allows users to create an expense report with an expense from an image. +name: Create Expense Report with Expense from Image +installation_asset_uuid: 49afa7d6-1ae7-4f56-8046-e648ffb551ca +purple_chat_link: https://marketplace.moveworks.com/purple-chat?conversation=%7B%22messages%22%3A%5B%7B%22role%22%3A%22user%22%2C%22parts%22%3A%5B%7B%22richText%22%3A%22I+need+to+add+an+expense+for+a+team+dinner%22%7D%5D%7D%2C%7B%22role%22%3A%22assistant%22%2C%22parts%22%3A%5B%7B%22richText%22%3A%22%3Cp%3EGot+it+%E2%80%94+I%E2%80%99ll+add+an+expense+for+a+team+dinner.%3C%2Fp%3E%3Cp%3EPlease+use+the+%3Cstrong%3EUpload+file%3C%2Fstrong%3E+button+to+upload+the+receipt+image+so+I+can+create+the+expense+report+with+the+expense+attached.%3C%2Fp%3E%22%7D%5D%7D%2C%7B%22role%22%3A%22user%22%2C%22parts%22%3A%5B%7B%22citations%22%3A%5B%7B%22connectorName%22%3A%22sap-concur%22%2C%22citationTitle%22%3A%22receipt_team_dinner.png%22%7D%5D%7D%2C%7B%22richText%22%3A%22I%27ve+uploaded+the+receipt.%22%7D%5D%7D%2C%7B%22role%22%3A%22assistant%22%2C%22parts%22%3A%5B%7B%22richText%22%3A%22%3Cp%3EI%E2%80%99ve+got+the+receipt+image+attached.%3C%2Fp%3E%3Cp%3EWhat+name+should+I+use+for+the+expense+report%3F%3C%2Fp%3E%22%7D%5D%7D%2C%7B%22role%22%3A%22user%22%2C%22parts%22%3A%5B%7B%22richText%22%3A%22April+test%22%7D%5D%7D%2C%7B%22role%22%3A%22assistant%22%2C%22parts%22%3A%5B%7B%22reasoningSteps%22%3A%5B%7B%22status%22%3A%22success%22%2C%22richText%22%3A%22%3Cp%3EUsing+%3Cb%3EApril+test%3C%2Fb%3E+as+the+expense+report+name.%3C%2Fp%3E%22%2C%22connectorName%22%3A%22sap-concur%22%7D%2C%7B%22status%22%3A%22pending%22%2C%22richText%22%3A%22%3Cp%3EClassifying+the+expense+from+your+receipt+image+for+%3Cb%3ESAP+Concur%3C%2Fb%3E...%3C%2Fp%3E%22%2C%22connectorName%22%3A%22sap-concur%22%7D%5D%7D%2C%7B%22richText%22%3A%22%3Cp%3EHere%E2%80%99s+what+I+extracted+from+the+receipt+and+will+add+to+%3Cstrong%3ESAP+Concur%3C%2Fstrong%3E+under+report+%3Cstrong%3EApril+test%3C%2Fstrong%3E%3A%3C%2Fp%3E%3Cul%3E%3Cli%3E%3Cstrong%3EDescription%3A%3C%2Fstrong%3E+Team+dinner%3C%2Fli%3E%3Cli%3E%3Cstrong%3ECategory%2FType%3A%3C%2Fstrong%3E+Meals+%2F+Business+Meals+%28Attendees%29%3C%2Fli%3E%3Cli%3E%3Cstrong%3EDate%3A%3C%2Fstrong%3E+2024-11-12%3C%2Fli%3E%3Cli%3E%3Cstrong%3EAmount%3A%3C%2Fstrong%3E+%2453.56%3C%2Fli%3E%3Cli%3E%3Cstrong%3EPayment+type%3A%3C%2Fstrong%3E+Out-of-Pocket%3C%2Fli%3E%3C%2Ful%3E%3Cp%3EPlease+confirm+these+details+are+correct+and+you+want+me+to+proceed+with+creating+the+expense+and+uploading+the+receipt.%3C%2Fp%3E%22%7D%2C%7B%22buttons%22%3A%5B%7B%22buttonText%22%3A%22Confirm%22%2C%22style%22%3A%22filled%22%7D%2C%7B%22buttonText%22%3A%22Edit+Details%22%2C%22style%22%3A%22outlined%22%7D%2C%7B%22buttonText%22%3A%22Cancel%22%2C%22style%22%3A%22outlined%22%7D%5D%7D%5D%7D%2C%7B%22role%22%3A%22user%22%2C%22parts%22%3A%5B%7B%22richText%22%3A%22Yes%22%7D%5D%7D%2C%7B%22role%22%3A%22assistant%22%2C%22parts%22%3A%5B%7B%22reasoningSteps%22%3A%5B%7B%22status%22%3A%22success%22%2C%22richText%22%3A%22%3Cp%3ECreating+the+Team+dinner+expense+on+report+%3Cb%3EApril+test%3C%2Fb%3E+and+uploading+the+receipt+now...%3C%2Fp%3E%22%2C%22connectorName%22%3A%22sap-concur%22%7D%5D%7D%2C%7B%22apiBlock%22%3A%7B%22code%22%3A%22%7B%5Cn++%5C%22ReportName%5C%22%3A+%5C%22April+test%5C%22%2C%5Cn++%5C%22ExpenseType%5C%22%3A+%5C%22Business+Meals%5C%22%2C%5Cn++%5C%22TransactionDate%5C%22%3A+%5C%222024-11-12%5C%22%2C%5Cn++%5C%22TransactionAmount%5C%22%3A+53.56%2C%5Cn++%5C%22CurrencyCode%5C%22%3A+%5C%22USD%5C%22%2C%5Cn++%5C%22ReceiptImageId%5C%22%3A+%5C%22img_982347%5C%22%5Cn%7D%22%2C%22connectorName%22%3A%22sap-concur%22%2C%22title%22%3A%22POST+%2Fexpense%2Freports%2Fentries%22%7D%7D%2C%7B%22richText%22%3A%22%3Cp%3ENew+entries+were+added+to+your+%3Cstrong%3ESAP+Concur%3C%2Fstrong%3E+expense+report.%3C%2Fp%3E%3Cp%3EView+it+here%3A%3C%2Fp%3E%22%7D%2C%7B%22citations%22%3A%5B%7B%22connectorName%22%3A%22sap-concur%22%2C%22citationTitle%22%3A%22April+test%22%7D%5D%7D%5D%7D%5D%7D +solution_tags: +- Finance - Other +- Productivity +systems: +- sap-concur +--- +### Introduction + +SAP Concur is widely used to manage expense reports and receipts. Instead of manually creating a report, adding an expense, and uploading a receipt in Concur, this plugin lets users complete the entire workflow through a simple conversational experience. + +In this guide, we'll walk through how to build **Create Expense Report with Expense from Image** in Agent Studio. + +Let's get started! + +### User Experience Preview + +Please refer to the following [Purple Chat](https://marketplace.moveworks.com/purple-chat?conversation=%7B%22messages%22%3A%5B%7B%22role%22%3A%22user%22%2C%22parts%22%3A%5B%7B%22richText%22%3A%22I+need+to+add+an+expense+for+a+team+dinner%22%7D%5D%7D%2C%7B%22role%22%3A%22assistant%22%2C%22parts%22%3A%5B%7B%22richText%22%3A%22%3Cp%3EGot+it+%E2%80%94+I%E2%80%99ll+add+an+expense+for+a+team+dinner.%3C%2Fp%3E%3Cp%3EPlease+use+the+%3Cstrong%3EUpload+file%3C%2Fstrong%3E+button+to+upload+the+receipt+image+so+I+can+create+the+expense+report+with+the+expense+attached.%3C%2Fp%3E%22%7D%5D%7D%2C%7B%22role%22%3A%22user%22%2C%22parts%22%3A%5B%7B%22citations%22%3A%5B%7B%22connectorName%22%3A%22sap-concur%22%2C%22citationTitle%22%3A%22receipt_team_dinner.png%22%7D%5D%7D%2C%7B%22richText%22%3A%22I%27ve+uploaded+the+receipt.%22%7D%5D%7D%2C%7B%22role%22%3A%22assistant%22%2C%22parts%22%3A%5B%7B%22richText%22%3A%22%3Cp%3EI%E2%80%99ve+got+the+receipt+image+attached.%3C%2Fp%3E%3Cp%3EWhat+name+should+I+use+for+the+expense+report%3F%3C%2Fp%3E%22%7D%5D%7D%2C%7B%22role%22%3A%22user%22%2C%22parts%22%3A%5B%7B%22richText%22%3A%22April+test%22%7D%5D%7D%2C%7B%22role%22%3A%22assistant%22%2C%22parts%22%3A%5B%7B%22reasoningSteps%22%3A%5B%7B%22status%22%3A%22success%22%2C%22richText%22%3A%22%3Cp%3EUsing+%3Cb%3EApril+test%3C%2Fb%3E+as+the+expense+report+name.%3C%2Fp%3E%22%2C%22connectorName%22%3A%22sap-concur%22%7D%2C%7B%22status%22%3A%22pending%22%2C%22richText%22%3A%22%3Cp%3EClassifying+the+expense+from+your+receipt+image+for+%3Cb%3ESAP+Concur%3C%2Fb%3E...%3C%2Fp%3E%22%2C%22connectorName%22%3A%22sap-concur%22%7D%5D%7D%2C%7B%22richText%22%3A%22%3Cp%3EHere%E2%80%99s+what+I+extracted+from+the+receipt+and+will+add+to+%3Cstrong%3ESAP+Concur%3C%2Fstrong%3E+under+report+%3Cstrong%3EApril+test%3C%2Fstrong%3E%3A%3C%2Fp%3E%3Cul%3E%3Cli%3E%3Cstrong%3EDescription%3A%3C%2Fstrong%3E+Team+dinner%3C%2Fli%3E%3Cli%3E%3Cstrong%3ECategory%2FType%3A%3C%2Fstrong%3E+Meals+%2F+Business+Meals+%28Attendees%29%3C%2Fli%3E%3Cli%3E%3Cstrong%3EDate%3A%3C%2Fstrong%3E+2024-11-12%3C%2Fli%3E%3Cli%3E%3Cstrong%3EAmount%3A%3C%2Fstrong%3E+%2453.56%3C%2Fli%3E%3Cli%3E%3Cstrong%3EPayment+type%3A%3C%2Fstrong%3E+Out-of-Pocket%3C%2Fli%3E%3C%2Ful%3E%3Cp%3EPlease+confirm+these+details+are+correct+and+you+want+me+to+proceed+with+creating+the+expense+and+uploading+the+receipt.%3C%2Fp%3E%22%7D%2C%7B%22buttons%22%3A%5B%7B%22buttonText%22%3A%22Confirm%22%2C%22style%22%3A%22filled%22%7D%2C%7B%22buttonText%22%3A%22Edit+Details%22%2C%22style%22%3A%22outlined%22%7D%2C%7B%22buttonText%22%3A%22Cancel%22%2C%22style%22%3A%22outlined%22%7D%5D%7D%5D%7D%2C%7B%22role%22%3A%22user%22%2C%22parts%22%3A%5B%7B%22richText%22%3A%22Yes%22%7D%5D%7D%2C%7B%22role%22%3A%22assistant%22%2C%22parts%22%3A%5B%7B%22reasoningSteps%22%3A%5B%7B%22status%22%3A%22success%22%2C%22richText%22%3A%22%3Cp%3ECreating+the+Team+dinner+expense+on+report+%3Cb%3EApril+test%3C%2Fb%3E+and+uploading+the+receipt+now...%3C%2Fp%3E%22%2C%22connectorName%22%3A%22sap-concur%22%7D%5D%7D%2C%7B%22apiBlock%22%3A%7B%22code%22%3A%22%7B%5Cn++%5C%22ReportName%5C%22%3A+%5C%22April+test%5C%22%2C%5Cn++%5C%22ExpenseType%5C%22%3A+%5C%22Business+Meals%5C%22%2C%5Cn++%5C%22TransactionDate%5C%22%3A+%5C%222024-11-12%5C%22%2C%5Cn++%5C%22TransactionAmount%5C%22%3A+53.56%2C%5Cn++%5C%22CurrencyCode%5C%22%3A+%5C%22USD%5C%22%2C%5Cn++%5C%22ReceiptImageId%5C%22%3A+%5C%22img_982347%5C%22%5Cn%7D%22%2C%22connectorName%22%3A%22sap-concur%22%2C%22title%22%3A%22POST+%2Fexpense%2Freports%2Fentries%22%7D%7D%2C%7B%22richText%22%3A%22%3Cp%3ENew+entries+were+added+to+your+%3Cstrong%3ESAP+Concur%3C%2Fstrong%3E+expense+report.%3C%2Fp%3E%3Cp%3EView+it+here%3A%3C%2Fp%3E%22%7D%2C%7B%22citations%22%3A%5B%7B%22connectorName%22%3A%22sap-concur%22%2C%22citationTitle%22%3A%22April+test%22%7D%5D%7D%5D%7D%5D%7D) for a sample conversational experience between a user and the AI Assistant for this plugin. + + +### Prerequisites + +* Access to Agent Studio +* A configured SAP Concur connector using **Authorization Code** authentication. Please follow the [SAP Concur connector guide](https://marketplace.moveworks.com/connectors/sap-concur#how-to-implement) to create the connector. +* The following scopes added to the connector: + + * `openid` + * `user.read` + * `EXPRPT` + * `IMAGE` + * `LIST` + * `expense.report.read` + * `expense.report.readwrite` + * `expense.config.policies.restricted.read` + * `expense.config.expensetypes.restricted.read` + +* Once the connector is ready, follow the [plugin installation documentation](https://docs.moveworks.com/agent-studio/agentic-automation/ai-agent-marketplace-installation) for steps on how to install and activate the plugin in Agent Studio. + +### Implementation Details + +To efficiently build the use case, we utilize four APIs. + +--- + +### API #1: Get Expense Group Configurations + +The Expense Group Configurations API allows you to retrieve valid expense types and payment types for the authenticated user. This helps ensure the expense entry is created using supported values. + +```bash +curl --location 'https://your.domain.com/api/v3.0/expense/expensegroupconfigurations' \ +--header 'Accept: application/json' \ +--header 'Authorization: Bearer {{generated_bearer_token}}' +``` + +#### Parameters + +This API does not require additional parameters for the user-scoped lookup. + +--- + +### API #2: Create Expense Report + +The Expense Reports API allows you to create a new expense report for the authenticated user. + +```bash +curl --location 'https://your.domain.com/api/v3.0/expense/reports' \ +--header 'Accept: application/json' \ +--header 'Authorization: Bearer {{generated_bearer_token}}' \ +--header 'Content-Type: application/json' \ +--data '{ + "name": "{{report_name}}" +}' +``` + +#### Parameters + +* `name` - The name of the new expense report. + +--- + +### API #3: Create Expense Entry + +The Expense Entries API allows you to add an expense entry to an existing expense report. + +```bash +curl --location 'https://your.domain.com/api/v3.0/expense/entries' \ +--header 'Accept: application/json' \ +--header 'Authorization: Bearer {{generated_bearer_token}}' \ +--header 'Content-Type: application/json' \ +--data '{ + "ReportID": "{{report_id}}", + "ExpenseTypeCode": "{{expense_type_code}}", + "PaymentTypeID": "{{payment_type_id}}", + "TransactionDate": "{{transaction_date}}", + "TransactionAmount": {{transaction_amount}}, + "TransactionCurrencyCode": "{{currency_code}}", + "VendorDescription": "{{vendor_description}}", + "Comment": "{{comment}}" +}' +``` + +#### Parameters + +* `ReportID` - The unique identifier of the expense report. +* `ExpenseTypeCode` - The expense type code for the entry. +* `PaymentTypeID` - The payment type identifier for the entry. +* `TransactionDate` - The transaction date for the expense. +* `TransactionAmount` - The amount of the expense. +* `TransactionCurrencyCode` - The currency code for the transaction. +* `VendorDescription` - The merchant or vendor name. +* `Comment` - A note to include with the expense entry. + +--- + +### API #4: Upload Receipt Image to Expense Entry + +The Image API allows you to upload a receipt image to the created expense entry. + +```bash +curl --location 'https://your.domain.com/api/image/v1.0/expenseentry/{{expense_entry_id}}' \ +--header 'Authorization: Bearer {{generated_bearer_token}}' \ +--header 'Content-Type: image/jpeg' \ +--data-binary '@{{receipt_file_path}}' +``` + +#### Parameters + +* `expense_entry_id` - The unique identifier of the expense entry. +* `receipt_file_path` - The file path of the receipt image to upload. +* `Content-Type` - The MIME type of the uploaded file. \ No newline at end of file diff --git a/plugins/sap-success-factors-view-pto-requests-and-calendar/.codeblocks/block_0.sh b/plugins/sap-success-factors-view-pto-requests-and-calendar/.codeblocks/block_0.sh new file mode 100644 index 00000000..54784994 --- /dev/null +++ b/plugins/sap-success-factors-view-pto-requests-and-calendar/.codeblocks/block_0.sh @@ -0,0 +1,2 @@ +curl -X GET "https:///odata/v2/User?$filter=(email eq '{{emailAddress}}')&$select=userId,email,firstName,lastName,defaultFullName&$format=json" \ + -H "Content-Type: application/json" diff --git a/plugins/sap-success-factors-view-pto-requests-and-calendar/.codeblocks/block_1.sh b/plugins/sap-success-factors-view-pto-requests-and-calendar/.codeblocks/block_1.sh new file mode 100644 index 00000000..02c3cccb --- /dev/null +++ b/plugins/sap-success-factors-view-pto-requests-and-calendar/.codeblocks/block_1.sh @@ -0,0 +1,2 @@ +curl -X GET "https:///rest/timemanagement/absence/v1/availableTimeTypes?$at={{as_of_date}}" \ + -H "Content-Type: application/json" diff --git a/plugins/sap-success-factors-view-pto-requests-and-calendar/.codeblocks/block_2.sh b/plugins/sap-success-factors-view-pto-requests-and-calendar/.codeblocks/block_2.sh new file mode 100644 index 00000000..35ca6d58 --- /dev/null +++ b/plugins/sap-success-factors-view-pto-requests-and-calendar/.codeblocks/block_2.sh @@ -0,0 +1 @@ +curl --request GET 'https:///odata/v2/EmployeeTime?$filter=approvalStatus eq 'PENDING' and {{{user_IDs}}} and {{{externalCode}}} and startDate ge datetime'{{start_date}}T00:00:00' and endDate le datetime'{{end_date}}T23:59:59'&$format=json&$expand=userIdNav,timeTypeNav&$select=userId,startDate,endDate,timeTypeNav/externalCode,timeTypeNav/externalName_defaultValue,approvalStatus,userIdNav/defaultFullName,userIdNav/country,workflowRequestId,externalCode,createdDateTime,quantityInHours&$orderby=startDate asc' diff --git a/plugins/sap-success-factors-view-pto-requests-and-calendar/.codeblocks/block_3.sh b/plugins/sap-success-factors-view-pto-requests-and-calendar/.codeblocks/block_3.sh new file mode 100644 index 00000000..10abc3b9 --- /dev/null +++ b/plugins/sap-success-factors-view-pto-requests-and-calendar/.codeblocks/block_3.sh @@ -0,0 +1 @@ +curl --request GET 'https:///odata/v2/EmployeeTime?$filter=approvalStatus eq 'APPROVED' and userId eq '{{userId}}' and startDate ge datetime'{{start_date}}T00:00:00' and endDate le datetime'{{end_date}}T23:59:59' and {{{externalCode}}}&$format=json&$expand=userIdNav,timeTypeNav&$select=userId,startDate,endDate,timeTypeNav/externalCode,timeTypeNav/externalName_defaultValue,approvalStatus,userIdNav/defaultFullName,userIdNav/country,workflowRequestId,externalCode,createdDateTime,quantityInHours,comment&$orderby=startDate asc' diff --git a/plugins/sap-success-factors-view-pto-requests-and-calendar/.codeblocks/block_4.sh b/plugins/sap-success-factors-view-pto-requests-and-calendar/.codeblocks/block_4.sh new file mode 100644 index 00000000..240f6a13 --- /dev/null +++ b/plugins/sap-success-factors-view-pto-requests-and-calendar/.codeblocks/block_4.sh @@ -0,0 +1 @@ +curl --request GET 'https://apisalesdemo8.successfactors.com/odata/v2/EmployeeTime?$filter=approvalStatus eq 'APPROVED' and {{{user_IDs}}} and {{{externalCode}}} and startDate ge datetime'{{start_date}}T00:00:00' and endDate le datetime'{{end_date}}T23:59:59'&$format=json&$expand=userIdNav,timeTypeNav&$select=userId,startDate,endDate,timeTypeNav/externalCode,timeTypeNav/externalName_defaultValue,approvalStatus,userIdNav/defaultFullName,userIdNav/country,workflowRequestId,externalCode,createdDateTime,quantityInHours,comment&$orderby=startDate asc' diff --git a/plugins/ukg-notify-on-pto-submission/.codeblocks/block_0.sh b/plugins/ukg-notify-on-pto-submission/.codeblocks/block_0.sh index 8689270f..173835fd 100644 --- a/plugins/ukg-notify-on-pto-submission/.codeblocks/block_0.sh +++ b/plugins/ukg-notify-on-pto-submission/.codeblocks/block_0.sh @@ -1,3 +1,8 @@ -end_date: "$TIME().$FORMAT_TIME('%Y-%m-%dT%H:%M:%S')" -max_pages:"200" +# Start of the polling window (1 hour before current time) start_date: "($TIME() - 3600).$FORMAT_TIME('%Y-%m-%dT%H:%M:%S')" + +# End of the polling window (current time) +end_date: "$TIME().$FORMAT_TIME('%Y-%m-%dT%H:%M:%S')" + +# Number of pages to fetch users from (200 users per page) +max_pages: "200" diff --git a/plugins/ukg-notify-on-pto-submission/.codeblocks/block_1.sh b/plugins/ukg-notify-on-pto-submission/.codeblocks/block_1.sh index 38648dcf..b1a86d64 100644 --- a/plugins/ukg-notify-on-pto-submission/.codeblocks/block_1.sh +++ b/plugins/ukg-notify-on-pto-submission/.codeblocks/block_1.sh @@ -1,14 +1,14 @@ curl --request POST \ - --url https:///api/v1/commons/persons/apply_read \ - --header 'accept: application/json' \ - --header 'content-type: application/json' \ - --data '{ + --url https:///api/v1/commons/persons/apply_read \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' \ + --data '{ "count": {{count}}, "index": {{index}}, "where": { - "employmentStatus": "Not Applicable", - "userAccountStatus": "Not Applicable", - "returnPersonIdOnly": true, - "snapshotDate": "{{date}}" + "snapshotDate": "{{date}}", + "employmentStatus": "Active", + "userAccountStatus": "Active", + "returnPersonIdOnly": true } }' diff --git a/plugins/ukg-notify-on-pto-submission/.codeblocks/block_2.sh b/plugins/ukg-notify-on-pto-submission/.codeblocks/block_2.sh index 1c3b43b7..bd23fbbd 100644 --- a/plugins/ukg-notify-on-pto-submission/.codeblocks/block_2.sh +++ b/plugins/ukg-notify-on-pto-submission/.codeblocks/block_2.sh @@ -1,16 +1,12 @@ curl --request POST \ - --url https:///api/v1/commons/notifications/apply_read \ - --header 'accept: application/json' \ - --header 'content-type: application/json' \ - --data '{ + --url https:///api/v1/commons/notifications/apply_read \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' \ + --data '{ "employees": { - "ids": [ - "{{ids}}" - ] + "ids": {{ids}} }, - "types": [ - "TIME_OFF" - ], - "endDateTime": "{{end_date_time}}", - "startDateTime": "{{start_date_time}}" + "types": ["TIME_OFF"], + "startDateTime": "{{start_date_time}}", + "endDateTime": "{{end_date_time}}" }' diff --git a/plugins/ukg-notify-on-pto-submission/.codeblocks/block_3.sh b/plugins/ukg-notify-on-pto-submission/.codeblocks/block_3.sh index f9f25e4d..040af6f9 100644 --- a/plugins/ukg-notify-on-pto-submission/.codeblocks/block_3.sh +++ b/plugins/ukg-notify-on-pto-submission/.codeblocks/block_3.sh @@ -1,3 +1,4 @@ curl --request GET \ - --url https:///api/v1/commons/persons/{{person_id}} \ - --header 'accept: application/json' + --url https:///api/v1/commons/persons/{{personId}} \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Accept: application/json' diff --git a/plugins/ukg-notify-on-pto-submission/.codeblocks/block_4.sh b/plugins/ukg-notify-on-pto-submission/.codeblocks/block_4.sh index a2a5203a..8528b78b 100644 --- a/plugins/ukg-notify-on-pto-submission/.codeblocks/block_4.sh +++ b/plugins/ukg-notify-on-pto-submission/.codeblocks/block_4.sh @@ -1,8 +1,7 @@ curl --request POST \ - --url https:///api/v1/commons/notifications/multi_review \ - --header 'content-type: application/json' \ - --data '{ - "messageIds": [ - "{{ids}}" - ] + --url https:///api/v1/commons/notifications/multi_review \ + --header 'Authorization: Bearer {{access_token}}' \ + --header 'Content-Type: application/json' \ + --data '{ + "messageIds": ["{{uuid}}"] }' diff --git a/plugins/ukg-notify-on-pto-submission/.codeblocks/block_5.sh b/plugins/ukg-notify-on-pto-submission/.codeblocks/block_5.sh deleted file mode 100644 index 5641c438..00000000 --- a/plugins/ukg-notify-on-pto-submission/.codeblocks/block_5.sh +++ /dev/null @@ -1,19 +0,0 @@ -# 1. Initialize variables -# 'ukg_data' is injected automatically because you defined it in Input Args -safe_data = ukg_data if ukg_data else {} - -# 2. Navigate to the email list safely -person_info = safe_data.get("personInformation", {}) -emails = person_info.get("emailAddresses", []) - -# 3. Find the email where contactTypeName == 'Work' -work_email = None - -if isinstance(emails, list): - for email_obj in emails: - if email_obj.get("contactTypeName") == "Work": - work_email = email_obj.get("address") - break - -# 4. The last line is the Return Value -{"work_email": work_email} diff --git a/plugins/ukg-notify-on-pto-submission/.codeblocks/block_6.sh b/plugins/ukg-notify-on-pto-submission/.codeblocks/block_6.sh deleted file mode 100644 index da9bf7a2..00000000 --- a/plugins/ukg-notify-on-pto-submission/.codeblocks/block_6.sh +++ /dev/null @@ -1,132 +0,0 @@ -steps: - # --- Generate Page Indices to Fetch Users --- - - script: - output_key: page_indices - input_args: - max_pages: data.max_pages - code: | - # Default to 2 if input is missing or 0 - limit = int(max_pages) if max_pages else 2 - return list(range(limit)) - - # 1. Fetch All Users via Pagination (200 per page) - - parallel: - for: - each: page - index: page_idx - in: data.page_indices - output_key: paginated_user_responses - steps: - - action: - action_name: UKG_Get_All_Users - input_args: - index: $TEXT(page) - count: "'200'" - date: $TIME().$FORMAT_TIME('%Y-%m-%d') - output_key: page_data - - # --- OUTER LOOP: BATCH PROCESSING LOOP --- - - for: - each: page_response - in: data.paginated_user_responses.$FILTER(item => item != null) - output_key: batch_response_data - steps: - # 2. Fetch Bulk Notifications for List of Employees - - action: - action_name: UKG_Fetch_Bulk_Notifications_For_Employee_List - input_args: - start_date_time: data.start_date - end_date_time: data.end_date - ids: - EVAL(): - expression: ids_list.$STRINGIFY_JSON() - args: - ids_list: page_response.page_data.records.$MAP(item => item.personId) - output_key: bulk_notifications_response - - # --- INNER LOOP: Process Records --- - - parallel: - for: - each: record - in: data.bulk_notifications_response.notifications - output_key: records_loop_result - steps: - # 3. Filter - - switch: - cases: - # Logic: Check for Submitted PTOs that are actionable for managers/approvers - - condition: >- - record.type == 'TIME_OFF' AND record.reviewed == false AND record.status == 'Submitted' AND disableActions == false AND category == "REQUEST" - steps: - # 4a. Get User Details (The Manager/Approver) - - action: - action_name: UKG_Lookup_User_by_ID - input_args: - personId: record.receiverId - output_key: ukg_person_details - - # 4b. Extract Work Email - - action: - action_name: UKG_Fetch_Email_Using_ID - input_args: - ukg_data: data.ukg_person_details - output_key: email_data - - # 4c. Resolve Moveworks User - - action: - action_name: mw.batch_get_users_by_email - input_args: - user_emails: - - data.email_data.work_email - output_key: batch_user_info - - for: - each: recipient - in: data.batch_user_info.user_records - output_key: batch_notification_results - steps: - # 6. Notify the Manager with Actions (Approve/Reject) - - notify: - output_key: notification_result - recipient_id: recipient.user.record_id - message: - RENDER(): - template: | - *Approval Action Required: New PTO Request Submission* - - {{employee_name}} has submitted a request for {{leave_type}}. - - *Dates:* {{dates}} - *Duration:* {{duration}} - *Reason:* {{reason}} - - *Note:* If you want to reject this request, please provide a comment. - args: - employee_name: record.requesterName - leave_type: record.subtype - dates: record.requestedPeriods - duration: record.duration - reason: record.shortMessage - actions: - - key: approve - label: "'Approve'" - conversation_action: - conversation_process_name: "UKG_Approve_Refuse_Pending_PTO_Requests_CP" - input_args: - ptos: - - pto_id: record.requestId - pto_decision: '"Approved"' - - key: reject - label: "'Reject'" - conversation_action: - conversation_process_name: "UKG_Approve_Refuse_Pending_PTO_Requests_CP" - input_args: - ptos: - - pto_id: record.requestId - pto_decision: '"Refused"' - - # 7. Auto-Acknowledge in UKG so that users don't receive the same notification again - - action: - action_name: UKG_Acknowledge_Notifications - input_args: - ids: record.uuid - output_key: ack_response diff --git a/plugins/ukg-view-time-off-balance/.codeblocks/block_2.sh b/plugins/ukg-view-time-off-balance/.codeblocks/block_2.sh index d8e5759c..1679ec69 100644 --- a/plugins/ukg-view-time-off-balance/.codeblocks/block_2.sh +++ b/plugins/ukg-view-time-off-balance/.codeblocks/block_2.sh @@ -1,4 +1,11 @@ -curl --request GET \ ---url 'https:///api/v1/scheduling/timeoff/accruals?date={{date}}&subtype_name={{subtype_name}}&employee_id={{user_id}}' \ ---header 'Authorization: {{access_token}}' \ ---header 'Content-Type: application/json' +curl --request POST \ +--url 'https:///api/v1/timekeeping/paycodes_to_accrual_codes/multi_read' \ +--header 'Authorization: Bearer {{access_token}}' \ +--header 'Content-Type: application/json' \ +--data '{ + "timeframe_id": "Current_Payperiod", + "paycodes": {{{paycodes_payload}}}, + "employee": { + "qualifier": "{{person_number}}" + } +}' diff --git a/plugins/ukg-view-time-off-balance/.codeblocks/block_3.sh b/plugins/ukg-view-time-off-balance/.codeblocks/block_3.sh new file mode 100644 index 00000000..d8e5759c --- /dev/null +++ b/plugins/ukg-view-time-off-balance/.codeblocks/block_3.sh @@ -0,0 +1,4 @@ +curl --request GET \ +--url 'https:///api/v1/scheduling/timeoff/accruals?date={{date}}&subtype_name={{subtype_name}}&employee_id={{user_id}}' \ +--header 'Authorization: {{access_token}}' \ +--header 'Content-Type: application/json'