wyliegr nah, you'd be fine. You need to have a little more faith in your ability. 
Let me try and give you the gist.
Determine Associated Calendar Event for Booking Entry
Firstly (and you'll see from the thread above) there is no hard link between the booking and the calendar event. This is a bit of a pain given you have to find the associated calendar event rather than just getting it from the an ID attached to the booking. I raised that in a comment above but that's as far as it got.
I do that by making a call to the list calendar events Graph endpoint and order the list by last modified date. The url looks like this ...
https://graph.microsoft.com/v1.0/users/@{variables('Booking Business ID')}/calendar/events/?$expand=singleValueExtendedProperties($filter=id eq 'Binary {ccb88e73-951a-4b10-bb49-e6628b8d8494} Name BookingItemAnsweredCustomQuestions' or id eq 'String {ccb88e73-951a-4b10-bb49-e6628b8d8494} Name BookingItemCustomerName' or id eq 'String {ccb88e73-951a-4b10-bb49-e6628b8d8494} Name BookingItemCustomerEmail' or id eq 'String {ccb88e73-951a-4b10-bb49-e6628b8d8494} Name BookingItemCustomerPhone' or id eq 'String {a719e259-2a9a-4fb8-bab3-3a9f02970e4b} Name CustomerLocationDisplayName' or id eq 'String {a719e259-2a9a-4fb8-bab3-3a9f02970e4b} Name CustomerLocationStreet' or id eq 'String {a719e259-2a9a-4fb8-bab3-3a9f02970e4b} Name CustomerLocationCity' or id eq 'String {a719e259-2a9a-4fb8-bab3-3a9f02970e4b} Name CustomerLocationState' or id eq 'String {a719e259-2a9a-4fb8-bab3-3a9f02970e4b} Name CustomerLocationCountry' or id eq 'String {a719e259-2a9a-4fb8-bab3-3a9f02970e4b} Name CustomerLocationPostalCode')&$orderby=lastModifiedDateTime DESC
You can see the variable I have in bold which contains the name of my booking calendar, this will be the booking calendar SMTP address associated with your booking business ID. Also, any call to that API will require auth but that's a whole other topic.
All of those expand clauses tells the API call to retrieve all of that additional information that was captured when the booking was made and is specific to the bookings application.
If I list them out, they're much easier to see ...
- Binary {ccb88e73-951a-4b10-bb49-e6628b8d8494} Name BookingItemAnsweredCustomQuestions
- String {ccb88e73-951a-4b10-bb49-e6628b8d8494} Name BookingItemCustomerName
- String {ccb88e73-951a-4b10-bb49-e6628b8d8494} Name BookingItemCustomerEmail
- String {ccb88e73-951a-4b10-bb49-e6628b8d8494} Name BookingItemCustomerPhone
- String {a719e259-2a9a-4fb8-bab3-3a9f02970e4b} Name CustomerLocationDisplayName
- String {a719e259-2a9a-4fb8-bab3-3a9f02970e4b} Name CustomerLocationStreet
- String {a719e259-2a9a-4fb8-bab3-3a9f02970e4b} Name CustomerLocationCity
- String {a719e259-2a9a-4fb8-bab3-3a9f02970e4b} Name CustomerLocationState
- String {a719e259-2a9a-4fb8-bab3-3a9f02970e4b} Name CustomerLocationCountry
- String {a719e259-2a9a-4fb8-bab3-3a9f02970e4b} Name CustomerLocationPostalCode
You can see they're all strings except the custom questions because it's (as previously stated) a base64 encoded string that when converted, is the JSON representation of the custom questions.
I then use the customer name, customer email and customer phone fields along with the booking start/end date and the customer ID to determine if the calendar event lines up with the booking.
This is an example of a response for the calendar event ...
{
"@odata.etag": "W/\"b8EZoO6pU0KB88QMOxZVP...\"",
"id": "AAMkADJkMjI3N2E5LWZ...",
"createdDateTime": "2022-11-17T22:11:50.7977695Z",
"lastModifiedDateTime": "2022-11-18T12:02:54.3001651Z",
"changeKey": "b8EZoO6pU0KB88QMOxZVPAAAECJukA==",
"categories": [
"Somewhere"
],
"transactionId": null,
"originalStartTimeZone": "AUS Eastern Standard Time",
"originalEndTimeZone": "AUS Eastern Standard Time",
"iCalUId": "040000008200E00074C5...",
"reminderMinutesBeforeStart": 15,
"isReminderOn": true,
"hasAttachments": false,
"subject": "Half Day Booking",
"bodyPreview": "********************************************************\r\n NOTE: This is a read-only view of the booking.\n Please use Microsoft Bookings for web, iOS or Android to edit this booking.\n Any changes made here will be lost.\r\n**********************************",
"importance": "normal",
"sensitivity": "normal",
"isAllDay": false,
"isCancelled": false,
"isOrganizer": true,
"responseRequested": false,
"seriesMasterId": null,
"showAs": "busy",
"type": "singleInstance",
"webLink": "https://outlook.office365.com/owa/?itemid=AAMkADJkMjI3...&exvsurl=1&path=/calendar/item",
"onlineMeetingUrl": null,
"isOnlineMeeting": false,
"onlineMeetingProvider": "unknown",
"allowNewTimeProposals": true,
"occurrenceId": null,
"isDraft": false,
"hideAttendees": false,
"responseStatus": {
"response": "organizer",
"time": "0001-01-01T00:00:00Z"
},
"body": {
"contentType": "html",
"content": "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n<meta nam..."
},
"start": {
"dateTime": "2022-12-04T21:45:00.0000000",
"timeZone": "UTC"
},
"end": {
"dateTime": "2022-12-05T02:15:00.0000000",
"timeZone": "UTC"
},
"location": {
"displayName": "",
"locationType": "default",
"uniqueIdType": "unknown",
"address": {},
"coordinates": {}
},
"locations": [],
"recurrence": null,
"attendees": [
{
"type": "required",
"status": {
"response": "none",
"time": "0001-01-01T00:00:00Z"
},
"emailAddress": {
"name": "Somewhere",
"address": "email address removed for privacy reasons"
}
}
],
"organizer": {
"emailAddress": {
"name": "Bookings",
"address": "email address removed for privacy reasons"
}
},
"onlineMeeting": null,
"singleValueExtendedProperties": [
{
"id": "Binary {ccb88e73-951a-4b10-bb49-e6628b8d8494} Name BookingItemAnsweredCustomQuestions",
"value": "W3siQW5zd2VyIjpudWxsLCJPcHRpb25zIjpbIk5vIiw..."
},
{
"id": "String {ccb88e73-951a-4b10-bb49-e6628b8d8494} Name BookingItemCustomerName",
"value": "John Smith"
},
{
"id": "String {ccb88e73-951a-4b10-bb49-e6628b8d8494} Name BookingItemCustomerEmail",
"value": "email address removed for privacy reasons"
},
{
"id": "String {ccb88e73-951a-4b10-bb49-e6628b8d8494} Name BookingItemCustomerPhone",
"value": "123456789"
},
{
"id": "String {a719e259-2a9a-4fb8-bab3-3a9f02970e4b} Name CustomerLocationDisplayName",
"value": "123 Smith Place"
},
{
"id": "String {a719e259-2a9a-4fb8-bab3-3a9f02970e4b} Name CustomerLocationCity",
"value": ""
},
{
"id": "String {a719e259-2a9a-4fb8-bab3-3a9f02970e4b} Name CustomerLocationState",
"value": ""
},
{
"id": "String {a719e259-2a9a-4fb8-bab3-3a9f02970e4b} Name CustomerLocationCountry",
"value": ""
},
{
"id": "String {a719e259-2a9a-4fb8-bab3-3a9f02970e4b} Name CustomerLocationPostalCode",
"value": ""
}
],
"calendar@odata.associationLink": "https://graph.microsoft.com/v1.0/users('email address removed for privacy reasons')/calendars('AAMkADJkMjI3N2E5...')/$ref",
"calendar@odata.navigationLink": "https://graph.microsoft.com/v1.0/users('email address removed for privacy reasons')/calendars('AAMkADJkMjI3N2E5LW...')"
}
You can see all of the booking questions contained within the singleValueExtendedProperties property and you can clearly see the custom questions (although I cut it off) is a base64 encoded string.
Extract Custom Questions
Once I have the associated calendar event, I can then extract the custom questions. Obviously, my solution isn't that simple and there's a fair bit going on but in relation to the custom questions, this is the basic approach.
Firstly, I filter the singleValueExtendedProperties array using this expression ... @endswith(item()?['id'], 'BookingItemAnsweredCustomQuestions')
... within a filter action. That gives me the item. Based on the above example, this is the item I get ...
{
"id": "Binary {ccb88e73-951a-4b10-bb49-e6628b8d8494} Name BookingItemAnsweredCustomQuestions",
"value": "W3siQW5zd2VyIjpudWxsLCJPcHRpb25zIjpbIk5vIiw..."
}
I then inject a Parse JSON step passing in the value (Content = first(body('Filter_For_BookingItemAnsweredCustomQuestions'))?['value']) from the item with the following schema ...
{
"items": {
"properties": {
"Answer": {
"type": [
"string",
"null"
]
},
"Options": {
"items": {
"type": "string"
},
"type": "array"
},
"Question": {
"type": "string"
},
"QuestionGuid": {
"type": "string"
},
"Required": {
"type": "boolean"
},
"SelectedOptions": {
"items": {
"type": "integer"
},
"type": [
"array",
"null"
]
}
},
"required": [
"Answer",
"Options",
"Question",
"QuestionGuid",
"Required",
"SelectedOptions"
],
"type": "object"
},
"type": "array"
}
... that then gives me the custom questions in a format that looks like this ...
[
{
"Answer": null,
"Options": [
"No",
"Yes"
],
"Question": "Do you have any dietry requirements?",
"QuestionGuid": "fe27a8a5-d331-4377-af44-cb1a41453614",
"Required": false,
"SelectedOptions": null
},
{
"Answer": "Yes",
"Options": [
"No",
"Yes"
],
"Question": "Are you older than 40?",
"QuestionGuid": "7c8710a1-e1ab-46cc-bd3b-62922efc45c7",
"Required": false,
"SelectedOptions": [
1
]
},
{
"Answer": null,
"Options": [
"No",
"Yes"
],
"Question": "Are you a male?",
"QuestionGuid": "acb4b20b-b394-4935-93ac-19fb0b5375eb",
"Required": false,
"SelectedOptions": null
}
]
... and voila! I now have my custom questions/answers and can do with them what I please.