Graph API
Communicates with the Microsoft Graph API to share information with Microsoft services
Type: Service Driver
Dependencies: None
Source: https://github.com/PlaceOS/drivers/blob/master/drivers/microsoft/graph_api.cr
Functions
Groups booking requests and sends them to the Microsoft calendar
Manages calendar events, groups, and users through Microsoft Graph API
Sends emails and notifies invited users
Creates email templates for specified responses
Settings
calendar_service_account
String
service_account@email.address
---
calendar_config
Object
{tenant: "", client_id: "", client_secret: "", conference_type: ""}
---
rate_limit
---
5
limits the number of API calls so it does not exceed limits set by Microsoft
mailer_from
String
email_or_office_userPrincipalName
email_templates
Object
{visitor: {checkin: {subject: "%{name} has arrived", text: "for your meeting at %{time}", }}}
Status Variables
connected
connected
Shows true if the driver is connected to the Microsoft Graph API and false if not
Schema/Type
Boolean
Examples
1. If connected to Microsoft Graph API
{
"connected": true
}
Commands
queue_size
queue_size
Displays the number of API calls waiting in the queue to be sent to Microsoft Graph API
Parameters
None
Response Schema
Example Responses
1. If no calls waiting in the queue:
0
in_flight_size
in_flight_size
Displays the number of API calls to Microsoft Graph API currently in progress
Parameters
None
Response Schema
Example Responses
1. If no calls in progress:
0
generate_svg_qrcode
generate_svg_qrcode
Generates an SVG of a QR code which encodes the given text.
Parameters
text
true
String
N/A
The text the user wishes to turn into a QR code
Response Schema
Example Responses
1.
<?xml version="1.0" standalone="yes"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" width="231" height="231" shape-rendering="crispEdges">
<rect width="231" height="231" x="0" y="0" style="fill:#fff"/>
<rect width="11" height="11" x="0" y="0" style="fill:#000"/><rect width="11" height="11" x="11" y="0" style="fill:#000"/><rect width="11" height="11" x="22" y="0" style="fill:#000"/><rect width="11" height="11" x="33" y="0" style="fill:#000"/><rect width="11" height="11" x="44" y="0" style="fill:#000"/><rect width="11" height="11" x="55" y="0" style="fill:#000"/><rect width="11" height="11" x="66" y="0" style="fill:#000"/><rect width="11" height="11" x="88" y="0" style="fill:#000"/><rect width="11" height="11" x="132" y="0" style="fill:#000"/><rect width="11" height="11" x="154" y="0" style="fill:#000"/><rect width="11" height="11" x="165" y="0" style="fill:#000"/><rect width="11" height="11" x="176" y="0" style="fill:#000"/><rect width="11" height="11" x="187" y="0" style="fill:#000"/><rect width="11" height="11" x="198" y="0" style="fill:#000"/><rect width="11" height="11" x="209" y="0" style="fill:#000"/><rect width="11" height="11" x="220" y="0" style="fill:#000"/>
<rect width="11" height="11" x="0" y="11" style="fill:#000"/><rect width="11" height="11" x="66" y="11" style="fill:#000"/><rect width="11" height="11" x="99" y="11" style="fill:#000"/><rect width="11" height="11" x="110" y="11" style="fill:#000"/><rect width="11" height="11" x="121" y="11" style="fill:#000"/><rect width="11" height="11" x="132" y="11" style="fill:#000"/><rect width="11" height="11" x="154" y="11" style="fill:#000"/><rect width="11" height="11" x="220" y="11" style="fill:#000"/>
<rect width="11" height="11" x="0" y="22" style="fill:#000"/><rect width="11" height="11" x="22" y="22" style="fill:#000"/><rect width="11" height="11" x="33" y="22" style="fill:#000"/><rect width="11" height="11" x="44" y="22" style="fill:#000"/><rect width="11" height="11" x="66" y="22" style="fill:#000"/><rect width="11" height="11" x="88" y="22" style="fill:#000"/><rect width="11" height="11" x="99" y="22" style="fill:#000"/><rect width="11" height="11" x="121" y="22" style="fill:#000"/><rect width="11" height="11" x="132" y="22" style="fill:#000"/><rect width="11" height="11" x="154" y="22" style="fill:#000"/><rect width="11" height="11" x="176" y="22" style="fill:#000"/><rect width="11" height="11" x="187" y="22" style="fill:#000"/><rect width="11" height="11" x="198" y="22" style="fill:#000"/><rect width="11" height="11" x="220" y="22" style="fill:#000"/>
<rect width="11" height="11" x="0" y="33" style="fill:#000"/><rect width="11" height="11" x="22" y="33" style="fill:#000"/><rect width="11" height="11" x="33" y="33" style="fill:#000"/><rect width="11" height="11" x="44" y="33" style="fill:#000"/><rect width="11" height="11" x="66" y="33" style="fill:#000"/><rect width="11" height="11" x="110" y="33" style="fill:#000"/><rect width="11" height="11" x="121" y="33" style="fill:#000"/><rect width="11" height="11" x="154" y="33" style="fill:#000"/><rect width="11" height="11" x="176" y="33" style="fill:#000"/><rect width="11" height="11" x="187" y="33" style="fill:#000"/><rect width="11" height="11" x="198" y="33" style="fill:#000"/><rect width="11" height="11" x="220" y="33" style="fill:#000"/>
<rect width="11" height="11" x="0" y="44" style="fill:#000"/><rect width="11" height="11" x="22" y="44" style="fill:#000"/><rect width="11" height="11" x="33" y="44" style="fill:#000"/><rect width="11" height="11" x="44" y="44" style="fill:#000"/><rect width="11" height="11" x="66" y="44" style="fill:#000"/><rect width="11" height="11" x="88" y="44" style="fill:#000"/><rect width="11" height="11" x="99" y="44" style="fill:#000"/><rect width="11" height="11" x="121" y="44" style="fill:#000"/><rect width="11" height="11" x="154" y="44" style="fill:#000"/><rect width="11" height="11" x="176" y="44" style="fill:#000"/><rect width="11" height="11" x="187" y="44" style="fill:#000"/><rect width="11" height="11" x="198" y="44" style="fill:#000"/><rect width="11" height="11" x="220" y="44" style="fill:#000"/>
<rect width="11" height="11" x="0" y="55" style="fill:#000"/><rect width="11" height="11" x="66" y="55" style="fill:#000"/><rect width="11" height="11" x="99" y="55" style="fill:#000"/><rect width="11" height="11" x="132" y="55" style="fill:#000"/><rect width="11" height="11" x="154" y="55" style="fill:#000"/><rect width="11" height="11" x="220" y="55" style="fill:#000"/>
<rect width="11" height="11" x="0" y="66" style="fill:#000"/><rect width="11" height="11" x="11" y="66" style="fill:#000"/><rect width="11" height="11" x="22" y="66" style="fill:#000"/><rect width="11" height="11" x="33" y="66" style="fill:#000"/><rect width="11" height="11" x="44" y="66" style="fill:#000"/><rect width="11" height="11" x="55" y="66" style="fill:#000"/><rect width="11" height="11" x="66" y="66" style="fill:#000"/><rect width="11" height="11" x="88" y="66" style="fill:#000"/><rect width="11" height="11" x="110" y="66" style="fill:#000"/><rect width="11" height="11" x="132" y="66" style="fill:#000"/><rect width="11" height="11" x="154" y="66" style="fill:#000"/><rect width="11" height="11" x="165" y="66" style="fill:#000"/><rect width="11" height="11" x="176" y="66" style="fill:#000"/><rect width="11" height="11" x="187" y="66" style="fill:#000"/><rect width="11" height="11" x="198" y="66" style="fill:#000"/><rect width="11" height="11" x="209" y="66" style="fill:#000"/><rect width="11" height="11" x="220" y="66" style="fill:#000"/>
<rect width="11" height="11" x="88" y="77" style="fill:#000"/><rect width="11" height="11" x="99" y="77" style="fill:#000"/><rect width="11" height="11" x="110" y="77" style="fill:#000"/><rect width="11" height="11" x="132" y="77" style="fill:#000"/>
<rect width="11" height="11" x="55" y="88" style="fill:#000"/><rect width="11" height="11" x="66" y="88" style="fill:#000"/><rect width="11" height="11" x="132" y="88" style="fill:#000"/><rect width="11" height="11" x="154" y="88" style="fill:#000"/><rect width="11" height="11" x="176" y="88" style="fill:#000"/><rect width="11" height="11" x="198" y="88" style="fill:#000"/><rect width="11" height="11" x="220" y="88" style="fill:#000"/>
<rect width="11" height="11" x="0" y="99" style="fill:#000"/><rect width="11" height="11" x="11" y="99" style="fill:#000"/><rect width="11" height="11" x="22" y="99" style="fill:#000"/><rect width="11" height="11" x="33" y="99" style="fill:#000"/><rect width="11" height="11" x="88" y="99" style="fill:#000"/><rect width="11" height="11" x="99" y="99" style="fill:#000"/><rect width="11" height="11" x="110" y="99" style="fill:#000"/><rect width="11" height="11" x="121" y="99" style="fill:#000"/><rect width="11" height="11" x="143" y="99" style="fill:#000"/><rect width="11" height="11" x="154" y="99" style="fill:#000"/><rect width="11" height="11" x="176" y="99" style="fill:#000"/><rect width="11" height="11" x="187" y="99" style="fill:#000"/><rect width="11" height="11" x="198" y="99" style="fill:#000"/>
<rect width="11" height="11" x="22" y="110" style="fill:#000"/><rect width="11" height="11" x="33" y="110" style="fill:#000"/><rect width="11" height="11" x="44" y="110" style="fill:#000"/><rect width="11" height="11" x="66" y="110" style="fill:#000"/><rect width="11" height="11" x="88" y="110" style="fill:#000"/><rect width="11" height="11" x="99" y="110" style="fill:#000"/><rect width="11" height="11" x="121" y="110" style="fill:#000"/><rect width="11" height="11" x="132" y="110" style="fill:#000"/><rect width="11" height="11" x="143" y="110" style="fill:#000"/><rect width="11" height="11" x="176" y="110" style="fill:#000"/><rect width="11" height="11" x="187" y="110" style="fill:#000"/><rect width="11" height="11" x="198" y="110" style="fill:#000"/><rect width="11" height="11" x="209" y="110" style="fill:#000"/>
<rect width="11" height="11" x="33" y="121" style="fill:#000"/><rect width="11" height="11" x="55" y="121" style="fill:#000"/><rect width="11" height="11" x="121" y="121" style="fill:#000"/><rect width="11" height="11" x="176" y="121" style="fill:#000"/><rect width="11" height="11" x="187" y="121" style="fill:#000"/><rect width="11" height="11" x="198" y="121" style="fill:#000"/>
<rect width="11" height="11" x="22" y="132" style="fill:#000"/><rect width="11" height="11" x="66" y="132" style="fill:#000"/><rect width="11" height="11" x="88" y="132" style="fill:#000"/><rect width="11" height="11" x="110" y="132" style="fill:#000"/><rect width="11" height="11" x="121" y="132" style="fill:#000"/><rect width="11" height="11" x="143" y="132" style="fill:#000"/><rect width="11" height="11" x="154" y="132" style="fill:#000"/><rect width="11" height="11" x="220" y="132" style="fill:#000"/>
<rect width="11" height="11" x="88" y="143" style="fill:#000"/><rect width="11" height="11" x="110" y="143" style="fill:#000"/><rect width="11" height="11" x="154" y="143" style="fill:#000"/><rect width="11" height="11" x="165" y="143" style="fill:#000"/><rect width="11" height="11" x="198" y="143" style="fill:#000"/><rect width="11" height="11" x="209" y="143" style="fill:#000"/>
<rect width="11" height="11" x="0" y="154" style="fill:#000"/><rect width="11" height="11" x="11" y="154" style="fill:#000"/><rect width="11" height="11" x="22" y="154" style="fill:#000"/><rect width="11" height="11" x="33" y="154" style="fill:#000"/><rect width="11" height="11" x="44" y="154" style="fill:#000"/><rect width="11" height="11" x="55" y="154" style="fill:#000"/><rect width="11" height="11" x="66" y="154" style="fill:#000"/><rect width="11" height="11" x="110" y="154" style="fill:#000"/><rect width="11" height="11" x="154" y="154" style="fill:#000"/><rect width="11" height="11" x="165" y="154" style="fill:#000"/><rect width="11" height="11" x="187" y="154" style="fill:#000"/><rect width="11" height="11" x="209" y="154" style="fill:#000"/>
<rect width="11" height="11" x="0" y="165" style="fill:#000"/><rect width="11" height="11" x="66" y="165" style="fill:#000"/><rect width="11" height="11" x="88" y="165" style="fill:#000"/><rect width="11" height="11" x="99" y="165" style="fill:#000"/><rect width="11" height="11" x="121" y="165" style="fill:#000"/><rect width="11" height="11" x="132" y="165" style="fill:#000"/><rect width="11" height="11" x="143" y="165" style="fill:#000"/><rect width="11" height="11" x="165" y="165" style="fill:#000"/><rect width="11" height="11" x="176" y="165" style="fill:#000"/><rect width="11" height="11" x="187" y="165" style="fill:#000"/><rect width="11" height="11" x="198" y="165" style="fill:#000"/><rect width="11" height="11" x="220" y="165" style="fill:#000"/>
<rect width="11" height="11" x="0" y="176" style="fill:#000"/><rect width="11" height="11" x="22" y="176" style="fill:#000"/><rect width="11" height="11" x="33" y="176" style="fill:#000"/><rect width="11" height="11" x="44" y="176" style="fill:#000"/><rect width="11" height="11" x="66" y="176" style="fill:#000"/><rect width="11" height="11" x="110" y="176" style="fill:#000"/><rect width="11" height="11" x="143" y="176" style="fill:#000"/><rect width="11" height="11" x="165" y="176" style="fill:#000"/><rect width="11" height="11" x="187" y="176" style="fill:#000"/><rect width="11" height="11" x="209" y="176" style="fill:#000"/>
<rect width="11" height="11" x="0" y="187" style="fill:#000"/><rect width="11" height="11" x="22" y="187" style="fill:#000"/><rect width="11" height="11" x="33" y="187" style="fill:#000"/><rect width="11" height="11" x="44" y="187" style="fill:#000"/><rect width="11" height="11" x="66" y="187" style="fill:#000"/><rect width="11" height="11" x="99" y="187" style="fill:#000"/><rect width="11" height="11" x="110" y="187" style="fill:#000"/><rect width="11" height="11" x="121" y="187" style="fill:#000"/><rect width="11" height="11" x="143" y="187" style="fill:#000"/><rect width="11" height="11" x="154" y="187" style="fill:#000"/><rect width="11" height="11" x="187" y="187" style="fill:#000"/><rect width="11" height="11" x="198" y="187" style="fill:#000"/>
<rect width="11" height="11" x="0" y="198" style="fill:#000"/><rect width="11" height="11" x="22" y="198" style="fill:#000"/><rect width="11" height="11" x="33" y="198" style="fill:#000"/><rect width="11" height="11" x="44" y="198" style="fill:#000"/><rect width="11" height="11" x="66" y="198" style="fill:#000"/><rect width="11" height="11" x="99" y="198" style="fill:#000"/><rect width="11" height="11" x="132" y="198" style="fill:#000"/><rect width="11" height="11" x="143" y="198" style="fill:#000"/><rect width="11" height="11" x="187" y="198" style="fill:#000"/><rect width="11" height="11" x="198" y="198" style="fill:#000"/><rect width="11" height="11" x="209" y="198" style="fill:#000"/><rect width="11" height="11" x="220" y="198" style="fill:#000"/>
<rect width="11" height="11" x="0" y="209" style="fill:#000"/><rect width="11" height="11" x="66" y="209" style="fill:#000"/><rect width="11" height="11" x="99" y="209" style="fill:#000"/><rect width="11" height="11" x="110" y="209" style="fill:#000"/><rect width="11" height="11" x="132" y="209" style="fill:#000"/><rect width="11" height="11" x="143" y="209" style="fill:#000"/><rect width="11" height="11" x="154" y="209" style="fill:#000"/><rect width="11" height="11" x="176" y="209" style="fill:#000"/><rect width="11" height="11" x="198" y="209" style="fill:#000"/>
<rect width="11" height="11" x="0" y="220" style="fill:#000"/><rect width="11" height="11" x="11" y="220" style="fill:#000"/><rect width="11" height="11" x="22" y="220" style="fill:#000"/><rect width="11" height="11" x="33" y="220" style="fill:#000"/><rect width="11" height="11" x="44" y="220" style="fill:#000"/><rect width="11" height="11" x="55" y="220" style="fill:#000"/><rect width="11" height="11" x="66" y="220" style="fill:#000"/><rect width="11" height="11" x="99" y="220" style="fill:#000"/><rect width="11" height="11" x="121" y="220" style="fill:#000"/><rect width="11" height="11" x="132" y="220" style="fill:#000"/><rect width="11" height="11" x="154" y="220" style="fill:#000"/><rect width="11" height="11" x="176" y="220" style="fill:#000"/><rect width="11" height="11" x="198" y="220" style="fill:#000"/><rect width="11" height="11" x="209" y="220" style="fill:#000"/>
</svg>
generate_png_qrcode
generate_png_qrcode
Generates the code for a PNG version of a QR code which encodes the text provided at the specified size.
Parameters
text
true
String
N/A
The text the user wishes to turn into a QR code
size
false
Int32
128
The size of the image the user wants to create
Response Schema
Example Responses
1. For the word "Test" at size 100:
iVBORw0KGgoAAAANSUhEUgAAAGQAAABkEAYAAAAgckkXAAADrklEQVR4nO2TMZLkMAzE5v+fvqvaumSCpcfnpgl6gESJioJI9uuPiPzKa1pAhIwBESkwICIFBkSkwICIFBgQkQIDIlJgQEQKDIhIgQERKTAgIgUGRKTAgIgUGBCRAgMiUmBARAoMiEgBLiCvH/jnWf/u/jy1n9Pg1KYHdXWg3QuQ8qGdVHBq04O6OtDuBUj50E4qODVaA1M+Uwv21H7eBU6N1kADkoXmcwROjdZAA5KF5nMETi21AFML1v0uzb/bZxqc2vaBdr9L8+/2mQantn2g3e/S/Lt9psGpfdtAU54p/+39TINT+7aBpjxT/tv7mQan9m0DTXmm/Lf3Mw1ObftAaYu0vZ/T4NS2D5S2SNv7OQ1ObftAaYu0vZ/T4NRoDZxa1FSdp/bzLnBqtAYakCw0nyNwarQGGpAsNJ8jcGq/NZB2nvWn3aedVHBq04O6OtAt92knFZza9KCuDnTLfdpJBay2k+6F2bZg27G1YQzIs7C1YQzIs7C1/0gt8JTnU+9PA1a7FwPCvD8NWO1eDAjz/jQ4tbOLSlvsKf+pOlN9vgvcV6YWbLv/VJ2pPt8F7itTC7bdf6rOVJ/vYv1XphYv5TP1r+53Uz7TLFR+p3twqfvddVILmXo35TPNQuV3ugeXut9dJ7WQqXdTPtMsVP6M1EJOMeXzrUH4jQd95R0Dkn3XgDwMA5J914AspXtA3UFLLd6WBab5HAFW+wwDkq3TDc3nCLDaZxiQbJ1uaD5HgNV20h2olE/q3S3B/F8WKrMxIAZECgyIAWnlbMOnzu7/dtc/+273fSo45enFv7pIqf921z/7bvd9Kjjl6cW/ukip/3bXP/tu930qOGVaY1OL0V1nqn7qXSo4NVoDuxcvVWeqfupdKjg1WgO7Fy9VZ6p+6l0qOLUtizT131Qd2n0qOGUDYkBI4JQNiAEhgVN+akCmPKf8nwLuK92Lkaqf+le355T/U8B9pXsxUvVT/+r2nPJ/CrivdC9Gqn73v1L/TZHqc7dnGpxaaoFTA0oNtLtO9+Kl+tztmQanllrg1IBSA+2u0714qT53e6bBqdEaSFvs7oXsvr8N3FdoDTcgBgQFreEGxICgSC1A95n6V6oP3e92e1LBKXctdPpM/SvVh+53uz2p4JS7Fjp9pv6V6kP3u92eVBYqi9yHAREpMCAiBQZEpMCAiBQYEJECAyJSYEBECgyISIEBESkwICIFBkSkwICIFBgQkQIDIlJgQEQKDIhIgQERKTAgIgV/AVWCRjmiRazdAAAAAElFTkSuQmCC
send_mail
send_mail
Sends an email to any email address NOTE - ONE of message_plaintext OR message_html IS required.
Security Level: Support
Parameters
to
true
String OR Array(String)
N/A
the destation of the email
subject
true
String
N/A
The subject line of the email
message_plaintext
false
String
nil
The message body of the email
message_html
false
String
nil
The message body of the email that will be displayed as HTML
resource_attachments
false
Array(ResourceAttachment)
[]
Array of objects to be attached to the email
cc
false
String OR Array(String)
[]
---
bcc
false
String OR Array(String)
[]
---
from
false
String Or Array(String) Or Nil
nil
---
Response Schema
Example Responses
1. If the email is not registered to a user
{
"error": "request failed",
"sys_id": "sys-E7A7jh9V4U",
"module_name": "Calendar",
"index": 1,
"message": "module raised: \"email_or_office_userPrincipalName\" is invalid as a mail address. (EMail::Error::AddressError)",
"backtrace": [
"repositories/drivers/lib/email/src/email/address.cr:16:5 in 'valid_address!'",
"repositories/drivers/lib/email/src/email/address.cr:32:13 in 'initialize'",
"repositories/drivers/lib/email/src/email/address.cr:31:3 in 'new'",
"repositories/drivers/lib/email/src/email/header.cr:114:16 in 'add'",
"repositories/drivers/lib/email/src/email/message.cr:415:3 in 'from'",
"repositories/drivers/lib/place_calendar/src/google.cr:447:7 in 'send_mail'",
"repositories/drivers/drivers/place/calendar_common.cr:142:14 in 'send_mail'",
"repositories/drivers/drivers/place/calendar.cr:3:1 in '->'",
"repositories/drivers/drivers/place/calendar.cr:3:1 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:164:5 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver.cr:522:1 in 'run_execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:262:24 in 'process'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:179:7 in '->'",
"/usr/share/crystal/src/fiber.cr:146:11 in 'run'",
"/usr/share/crystal/src/fiber.cr:98:34 in '->'",
"???"
]
}
access_token
access_token
Generates an access token for an admin to log in to Microsoft services as a given user.
Security Level: Admin
Parameters
user_id
false
String
nil
email address of the user as registered in BackOffice
Response Schema
Example Responses
1. If user does not exist:
{
"error": "request failed",
"sys_id": "sys-E7A7jh9V4U",
"module_name": "Calendar",
"index": 1,
"message": "module raised: Bad Request\n{\n \"error\": \"invalid_request\",\n \"error_description\": \"Invalid impersonation \\u0026quot;sub\\u0026quot; field: H84U9JLbocG\"\n} (Google::Exception)",
"backtrace": [
"repositories/drivers/lib/google/src/google.cr:25:9 in 'raise_on_failure'",
"repositories/drivers/lib/google/src/auth/service_auth.cr:50:7 in 'get_token'",
"repositories/drivers/lib/place_calendar/src/google.cr:67:15 in 'access_token'",
"repositories/drivers/lib/place_calendar/src/place_calendar.cr:23:5 in 'access_token'",
"repositories/drivers/drivers/place/calendar_common.cr:158:14 in 'access_token'",
"repositories/drivers/drivers/place/calendar.cr:3:1 in '->'",
"repositories/drivers/drivers/place/calendar.cr:3:1 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:164:5 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver.cr:522:1 in 'run_execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:262:24 in 'process'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:179:7 in '->'",
"/usr/share/crystal/src/fiber.cr:146:11 in 'run'",
"/usr/share/crystal/src/fiber.cr:98:34 in '->'",
"???"
]
}
2. If user exists:
{
"expires": "2023-03-09T12:51:24Z",
"token": "eyJ0eXAiOiJKV1QiLCJub25jZSI6IjhkXzJxRVMxb0hoWHFjV2h1cnh1RUlwNWVUQlBvM3A1SjVicTlpaTRxWm8iLCJhbGciOiJSUzI1NiIsIng1dCI6Ii1LSTNROW5OUjdiUm9meG1lWm9YcWJIWkdldyIsImtpZCI6Ii1LSTNROW5OUjdiUm9meG1lWm9YcWJIWkdldyJ9.eyJhdWQiOiJodHRwczovL2dyYXBoLm1pY3Jvc29mdC5jb20iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC9lMTJkNDlhZi02YWRkLTRlNmQtODNiOS1hZTI4YWJhNmZhYmMvIiwiaWF0IjoxNjc4MzYyMzg1LCJuYwa3Q0ZDFxYlU2RHVhNG9xNmI2dkFNQUFBQUFBQUFBd0FBQUFBQUFBQUJCQUFBLiIsInJvbGVzIjpbIkRpcmVjdG9yeS5SZWFkV3JpdGUuQWxsIiwiQ29udGFjdHMuUmVhZFdyaXRlIiwiVXNlci5SZWFkLkFsbCIsIkNhbGVuZGFycy5SZWFkV3JpdGUiXSwic31uv58xYs4Ul7naaDPJZzDz49q5ZeukN-2qLAoHBP6wBa57Ms55rmFsaijTovYemVIzDpFBVltczZbTVkUSHb0vpbqB3GJAo5yO_qder_U5kugC48RLJxzxSnNZRnjLLbFLuA10uFDFkLJGb4sgQCPAjLvyYxcolu8bdnZYFalMY55-tF2nhEB0aHcCAszs4ikPMxsxXP7RoF8UjBQiYbLayGXhGMN8U_M7LlqRJMOmCd162wQsV31WnMeDSIFC7GQ"
}
get_groups
get_groups
Shows all the groups a given user belongs to.
Security Level: Support
Parameters
user_id
false
String
nil
email address of the user to search
Response Schema
[
{
"id": <the id of the group,
"name": <the name of the group>
}
]
Example Responses
1. If the user exists and is a member of at least one group:
[
{
"id": "668dsfd3c5-fcd4-4dc8-a6bb-335ewerfsb8c5",
"name": "All Users"
}
]
2. If user does not exist:
{
"error": "request failed",
"sys_id": "sys-E7A7jh9V4U",
"module_name": "Calendar",
"index": 1,
"message": "module raised: Forbidden\n{\n \"error\": {\n \"code\": 403,\n \"message\": \"Request had insufficient authentication scopes.\",\n \"errors\": [\n {\n \"message\": \"Insufficient Permission\",\n \"domain\": \"global\",\n \"reason\": \"insufficientPermissions\"\n }\n ],\n \"status\": \"PERMISSION_DENIED\",\n \"details\": [\n {\n \"@type\": \"type.googleapis.com/google.rpc.ErrorInfo\",\n \"reason\": \"ACCESS_TOKEN_SCOPE_INSUFFICIENT\",\n \"domain\": \"googleapis.com\",\n \"metadata\": {\n \"service\": \"admin.googleapis.com\",\n \"method\": \"ccc.hosted.frontend.directory.v1.DirectoryGroups.List\"\n }\n }\n ]\n }\n}\n (PlaceCalendar::Exception)",
"backtrace": [
"repositories/drivers/lib/place_calendar/src/google.cr:303:7 in 'handle_google_exception'",
"repositories/drivers/lib/place_calendar/src/google.cr:94:7 in 'get_groups'",
"repositories/drivers/lib/place_calendar/src/place_calendar.cr:23:5 in 'get_groups'",
"repositories/drivers/drivers/place/calendar_common.cr:164:14 in 'get_groups'",
"repositories/drivers/drivers/place/calendar.cr:3:1 in '->'",
"repositories/drivers/drivers/place/calendar.cr:3:1 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:164:5 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver.cr:522:1 in 'run_execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:262:24 in 'process'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:179:7 in '->'",
"/usr/share/crystal/src/fiber.cr:146:11 in 'run'",
"/usr/share/crystal/src/fiber.cr:98:34 in '->'",
"???"
]
}
get_members
get_members
Shows all the members of a given group.
Security Level: Support
Parameters
group_id
false
String
nil
The group ID - can be obtained by running get_groups on a known group member
Response Schema
Example Responses
2. If group exisits:
[
{
"id": "9ddsfs04e-ffa3-451f-93cb-dfhsfh74ac70",
"name": "On-Premises Directory Synchronization Service Account",
"email": "Sync_c7dfgdf2ae9c@company.onmicrosoft.com",
"username": "Sync__c7dfgdf2ae9c@company.onmicrosoft.com"
},
{
"id": "a7asdgf8b-ebc1-4843-8479-0ctgsdgfsb2d6",
"name": "variant",
"email": "variant@company.onmicrosoft.com",
"username": "variant@company.com.au"
}
1. If group does not exist:
{
"error": "request failed",
"sys_id": "sys-E7A7jh9V4U",
"module_name": "Calendar",
"index": 1,
"message": "module raised: Forbidden\n{\n \"error\": {\n \"code\": 403,\n \"message\": \"Request had insufficient authentication scopes.\",\n \"errors\": [\n {\n \"message\": \"Insufficient Permission\",\n \"domain\": \"global\",\n \"reason\": \"insufficientPermissions\"\n }\n ],\n \"status\": \"PERMISSION_DENIED\",\n \"details\": [\n {\n \"@type\": \"type.googleapis.com/google.rpc.ErrorInfo\",\n \"reason\": \"ACCESS_TOKEN_SCOPE_INSUFFICIENT\",\n \"domain\": \"googleapis.com\",\n \"metadata\": {\n \"service\": \"admin.googleapis.com\",\n \"method\": \"ccc.hosted.frontend.directory.v1.DirectoryMembers.List\"\n }\n }\n ]\n }\n}\n (PlaceCalendar::Exception)",
"backtrace": [
"repositories/drivers/lib/place_calendar/src/google.cr:303:7 in 'handle_google_exception'",
"repositories/drivers/lib/place_calendar/src/google.cr:100:7 in 'get_members'",
"repositories/drivers/lib/place_calendar/src/place_calendar.cr:23:5 in 'get_members'",
"repositories/drivers/drivers/place/calendar_common.cr:170:14 in 'get_members'",
"repositories/drivers/drivers/place/calendar.cr:3:1 in '->'",
"repositories/drivers/drivers/place/calendar.cr:3:1 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:164:5 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver.cr:522:1 in 'run_execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:262:24 in 'process'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:179:7 in '->'",
"/usr/share/crystal/src/fiber.cr:146:11 in 'run'",
"/usr/share/crystal/src/fiber.cr:98:34 in '->'",
"???"
]
}
list_users
list_users
Lists all users if no paramaters are filled. Can be filtered by name.
Security Level: Support
Parameters
query
false
String
nil
filters results whose "name" category contains the entered string
limit
false
Int32
nil
Limits the number of results to the number entered
Response Schema
Example Responses
1. If group does not exist:
[
{
"id": "116847001215",
"name": "Firstname Lastname",
"email": "email@place.os"
},
{
"id": "107849665",
"name": "First Last",
"email": "email1@place.os",
"photo": "https://www.google.com/photos/private/AIbEiAIAAABDCIHpmpHo6cCzGUO0TUcpevl6e27"
},
{
"id": "1017948066277",
"name": "Given Last",
"email": "email2@place.os",
"department": "Department department",
"title": "Department head",
"photo": "https://www.google.com/photos/private/AIbEiAIAkS9j5GQ"
}
]
get_user
get_user
Searches for a user by their email. The user_id is considered their email - this is different from what is returned in the results under "id".
Security Level: Support
Parameters
user_id
true
String
N/A
The user email to search for
Response Schema
Example Responses
2. If user exists:
{
"id": "85348a34-1c88-4ed6-9efd-92gefgddb2daa",
"name": "ACA test",
"email": "ACA.test@company.com.au",
"username": "ACA.test@company.com.au"
}
1. If user does not exist:
{
"error": "request failed",
"sys_id": "sys-EJhU_4DEvQ",
"module_name": "Calendar",
"index": 1,
"message": "module raised: Forbidden (PlaceCalendar::Exception)",
"backtrace": [
"repositories/drivers/lib/place_calendar/src/office365.cr:420:7 in 'handle_office365_exception'",
"repositories/drivers/lib/place_calendar/src/office365.cr:85:7 in 'get_user'",
"repositories/drivers/lib/place_calendar/src/office365.cr:93:9 in 'get_user_by_email'",
"repositories/drivers/lib/place_calendar/src/place_calendar.cr:23:5 in 'get_user_by_email'",
"repositories/drivers/drivers/place/calendar_common.cr:182:14 in 'get_user'",
"repositories/drivers/drivers/microsoft/graph_api.cr:3:1 in '->'",
"repositories/drivers/drivers/microsoft/graph_api.cr:3:1 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:164:5 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver.cr:522:1 in 'run_execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:262:24 in 'process'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:179:7 in '->'",
"/usr/share/crystal/src/fiber.cr:146:11 in 'run'",
"/usr/share/crystal/src/fiber.cr:98:34 in '->'",
"???"
]
}
list_calendars
list_calendars
Lists the calendars that belong to a user, specified by their email as registered in BackOffice.
Security Level: Support
Parameters
user_id
true
String
N/A
The email of the user, as shown in BackOffice
Response Schema
Example Responses
2. If user exists:
[
{
"id": "ACA.test@company.com.au",
"ref": "AAkALgAAAAfdgdfmEc2byACqAC-EWg0ASuIL0BZ9OEGaBdfgdfgKM9wAAAAAhlgAA",
"summary": "Calendar",
"primary": true,
"can_edit": true
}
]
1. If user does not exist:
{
"error": "request failed",
"sys_id": "sys-EJhU_4DEvQ",
"module_name": "Calendar",
"index": 1,
"message": "module raised: Not Found (PlaceCalendar::Exception)",
"backtrace": [
"repositories/drivers/lib/place_calendar/src/office365.cr:420:7 in 'handle_office365_exception'",
"repositories/drivers/lib/place_calendar/src/office365.cr:138:7 in 'list_calendars'",
"repositories/drivers/lib/place_calendar/src/place_calendar.cr:23:5 in 'list_calendars'",
"repositories/drivers/drivers/place/calendar_common.cr:188:14 in 'list_calendars'",
"repositories/drivers/drivers/microsoft/graph_api.cr:3:1 in '->'",
"repositories/drivers/drivers/microsoft/graph_api.cr:3:1 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:164:5 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver.cr:522:1 in 'run_execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:262:24 in 'process'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:179:7 in '->'",
"/usr/share/crystal/src/fiber.cr:146:11 in 'run'",
"/usr/share/crystal/src/fiber.cr:98:34 in '->'",
"???"
]
}
get_user_manager
get_user_manager
Gets the registered manager of a given user
Security Level: Support
Parameters
user_id
true
String
N/A
The email of the user to search
Response Schema
Example Responses
1. If user does not have a registered manager:
{
"error": "request failed",
"sys_id": "sys-Ewmyx8wEF_",
"module_name": "Calendar",
"index": 1,
"message": "module raised: Not Found (Office365::Exception)",
"backtrace": [
"repositories/drivers/lib/office365/src/client.cr:132:9 in 'graph_request'",
"repositories/drivers/lib/office365/src/users.cr:39:22 in 'get_user_manager'",
"repositories/drivers/drivers/place/calendar_common.cr:197:9 in 'get_user_manager'",
"repositories/drivers/drivers/microsoft/graph_api.cr:3:1 in '->'",
"repositories/drivers/drivers/microsoft/graph_api.cr:3:1 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:164:5 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver.cr:522:1 in 'run_execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:262:24 in 'process'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:179:7 in '->'",
"/usr/share/crystal/src/fiber.cr:146:11 in 'run'",
"/usr/share/crystal/src/fiber.cr:98:34 in '->'",
"???"
]
}
list_groups
list_groups
Lists all groups if no parameters entered.
Security Level: Support
Parameters
query
false
String
nil
filters search results by whether the query appears in the "name"
Response Schema
Example Responses
1.
[
{
"id": "0013fdgd63-7bd8-4e8d-92d4-ea3dfgfg7d38",
"name": "LaptopUsers-Brisbane"
},
{
"id": "0dfgdfcd-dfg6-462d-aa86-8fcaf2dfgdfdf",
"name": "UserAdmins",
"description": "Members can manage users in this forest."
},
{
"id": "00dfgfg3ae-9fdgd-4645-9dbc-a4172a4fdg8e",
"name": "WebVPN"
}
]
get_group
get_group
Searches for a group by its group ID, as returned in the "id" section of list_groups UNLIKE with get_user
Security Level: Support
Parameters
group_id
true
String
N/A
The group ID to use in the search - can be found by using list_groups
Response Schema
Example Responses
1. If id is correct:
{
"id": "0sfdf6063-7bd8-4e8sdfd-92d4-ea3sdfd38",
"name": "LaptopUsers-Brisbane"
}
2. If group does not exist:
{
"error": "request failed",
"sys_id": "sys-Ewmyx8wEF_",
"module_name": "Calendar",
"index": 1,
"message": "module raised: Bad Request (Office365::Exception)",
"backtrace": [
"repositories/drivers/lib/office365/src/client.cr:132:9 in 'graph_request'",
"repositories/drivers/lib/office365/src/groups.cr:41:15 in 'get_group'",
"repositories/drivers/drivers/place/calendar_common.cr:219:9 in 'get_group'",
"repositories/drivers/drivers/microsoft/graph_api.cr:3:1 in '->'",
"repositories/drivers/drivers/microsoft/graph_api.cr:3:1 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:164:5 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver.cr:522:1 in 'run_execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:262:24 in 'process'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:179:7 in '->'",
"/usr/share/crystal/src/fiber.cr:146:11 in 'run'",
"/usr/share/crystal/src/fiber.cr:98:34 in '->'",
"???"
]
}
list_events
list_events
Searches for all events happening on a given calendar within a specified time frame.
Security Level: Support
Parameters
calendar_id
true
String
N/A
The EMAIL of the user OR the EMAIL of the room whose calender you want to search
period_start
true
Int64
N/A
The start of the time period to search in Unix time
period_end
true
Int64
N/A
The end of the period to search in Unix time
time_zone
false
String
nil
filters results by time zone - format: 2/3 letter timezone code e.g UTC, AU
user_id
false
String
nil
filters results by user EMAIL (Only necessary if the calendar_id you are looking up belongs to a room)
include_cancelled
false
Boolean
false
if true, includes cancelled events
Response Schema
Example Responses
1. If the user or room has no events in the given time frame:
[]
4. If the room or user has events within the given time frame:
[
{
"event_start": 1671408000,
"event_end": 1671410700,
"id": "AAkALgAAAAAAHYQDEapmdsfdsm8FgRUSiiZH26Qy2dwAEM3At3gAA",
"host": "Person@company.com.au",
"title": "Fortnightly Catch-Up",
"body": "<html>\r\n<head></head>\r\n<body>html body</body>\r\n</html>\r\n",
"attendees": [
{
"name": "Person Mcfolk",
"email": "Person@company.com.au",
"response_status": "needsAction",
"resource": false
},
{
"name": "Jim Bob",
"email": "Jim@company.com.au",
"response_status": "accepted",
"resource": false
},
{
"name": "Resource - Meeting Room",
"email": "meetingroom@company.com.au",
"response_status": "accepted",
"resource": false
}
],
"location": "Microsoft Teams Meeting",
"private": false,
"all_day": false,
"timezone": "Australia/Sydney",
"recurring": false,
"created": "2022-12-18T23:58:18Z",
"updated": "2022-12-19T00:08:08Z",
"attachments": [],
"status": "confirmed",
"creator": "person@company.com.au",
"ical_uid": "04000000810000000000000000100000001186DAC27148E847BB58B773F3B941A7",
"online_meeting_provider": "teamsForBusiness",
"online_meeting_phones": [],
"online_meeting_url": "https://teams.microsoft.com/l/meetup-join/19%3ameetFkLTliNjMtODQ2NzcwODJkZjQ1%40thread.v2/0?context=%7b%2212d49af-6add-4e6d-83b9-ae28aba6fabc%22%2c%2f-431f-91a1-b893ed3b6dbf%22%7d"
},
{
"event_start": 1671417000,
"event_end": 1671420600,
"id": "AAkALgAAAAAAHYQDEapmEc2byACqAC-EWg0A2oF4m8FgRUSiiZH26Qy2dwAEM3BNNQAA",
"host": "person2@company.com.au",
"title": "Meeting",
"body": "<html>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n<meta name=\"Generator\" content=\"Microsoft Word 15 (filt63C1;\r\n\ttext-decoration:underline}\r\nspan.EmailStyle18\r\n\t{font-family:\"Calibri\",sans-serif;\r\n\tcolor:windowtext}\r\n.MsoChpDefault\r\n\t{font-size:10.0pt}\r\n@page WordSection1\r\n\t{margin:72.0pt 72.0pt 72.0pt 72.0pt}\r\ndiv.WordSection1\r\n\t{}\r\n-->\r\n</style>\r\n</head>\r\n<body lang=\"EN-AU\" link=\"#0563C1\" vlink=\"#954F72\" style=\"word-wrap:break-word\">\r\n<div class=\"WordSection1\">\r\n<p class=\"MsoNormal\"> </p>\r\n<div>\r\n<p class=\"MsoNormal\"><span style=\"color:#5F5F5F\">________________________________________________________________________________</span>\r\n</p>\r\n</div>\r\n<div>\r\n<div style=\"margin-top:18.0pt; margin-bottom:15.0pt\">\r\n<p class=\"MsoNormal\"><span lang=\"EN-US\" style=\"font-size:18.0pt; font-family:"Segoe UI",sans-serif; color:#252424\">Microsoft Teams meeting</span><span lang=\"EN-US\" style=\"font-family:"Segoe UI",sans-serif; color:#252424\">\r\n</span></p>\r\n</div>\r\n<div style=\"margin-bottom:15.0pt\">\r\n<div>\r\n<p class=\"MsoNormal\"><b><span lang=\"EN-US\" style=\"font-size:10.52424\">Join with a video conferencing device</span></b><span lang=\"EN-US\" style=\"font-family:"Segoe UI",sans-serif; color:#252424\">\r\n</span></p>\r\n</div>\r\n</span></a> </span></p>\r\n</div>\r\n<div style=\"margin-top:15.0pt; margin-bottom:18.0pt\">\r\n<p class=\"MsoNormal\"><span lang=\"EN-US\" style=\"font-family:"Segoe UI",sans-serif; color:#252424\"><a href=\"https://aka.ms/JoinTeamsMeeting\"><span style=\"font-size:10.5pt; colorZDdmMzUtNWYzYy00NGJkLWE2N2QtNmYyOTMyMGFjYjRl@thread.v2&messageId=0&language=en-US\">\r\n<span style=\"font-size:10.5pt; color:#6264A7\">Meeting options</span></a> </span></p>\r\n</div>\r\n</div>\r\n<div>\r\n<p class=\"MsoNormal\"><span style=\"color:#5F5F5F\">________________________________________________________________________________</span>\r\n</p>\r\n</div>\r\n<p class=\"MsoNormal\"> </p>\r\n</div>\r\n</body>\r\n</html>\r\n",
"attendees": [
{
"name": "Person Two",
"email": "person2@company.com.au",
"response_status": "needsAction",
"resource": false
},
{
"name": "Resource Meeting Room",
"email": "meetingroom@company.com.au",
"response_status": "accepted",
"resource": true
}
],
"location": "Microsoft Teams Meeting; Resource VIC - Meeting Room 2 (80a Turner St, Port Melb)",
"private": false,
"all_day": false,
"timezone": "Australia/Sydney",
"recurring": false,
"created": "2022-12-19T02:23:59Z",
"updated": "2022-12-19T02:29:40Z",
"attachments": [],
"status": "confirmed",
"creator": "person2@company.com.au",
"ical_uid": "040000008200E00074C5B71010010000000B4D1E494FA625B43B2FEE33B578A80A6",
"online_meeting_provider": "teamsForBusiness",
"online_meeting_phones": [],
"online_meeting_url": "https://teams.microsoft.com/l/meetup-join/19%3ameeting_ZDZlZDdmMzUtNWYzYy00NGJkLWE2N2QtNmYyOTMyMGFjYjRl%40thread.v2/0?context=%7b%22Tid%22%3a%22e50f-a2fe-41c6-af48-4bd90ecc006e%22%7d"
}
3. If calendar_id does not exist:
{
"error": "request failed",
"sys_id": "sys-EJhU_4DEvQ",
"module_name": "Calendar",
"index": 1,
"message": "module raised: Not Found (PlaceCalendar::Exception)",
"backtrace": [
"repositories/drivers/lib/place_calendar/src/office365.cr:420:7 in 'handle_office365_exception'",
"repositories/drivers/lib/place_calendar/src/office365.cr:192:7 in 'list_events:period_start:period_end:showDeleted'",
"repositories/drivers/lib/place_calendar/src/place_calendar.cr:23:5 in 'list_events:period_start:period_end:showDeleted'",
"repositories/drivers/drivers/place/calendar_common.cr:243:7 in 'list_events'",
"repositories/drivers/drivers/microsoft/graph_api.cr:3:1 in '->'",
"repositories/drivers/drivers/microsoft/graph_api.cr:3:1 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:164:5 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver.cr:522:1 in 'run_execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:262:24 in 'process'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:179:7 in '->'",
"/usr/share/crystal/src/fiber.cr:146:11 in 'run'",
"/usr/share/crystal/src/fiber.cr:98:34 in '->'",
"???"
]
}
delete_event
delete_event
Deletes an event from the calendar. Requires a calendar ID (the email of the room OR a user) AND a meeting ID - a long set of numbers and letters as returned by list_events
Security Level: Support
Parameters
calendar_id
true
String
N/A
The user Email OR the room EMAIL
event_id
true
String
N/A
The ID of the event as returned by list_events
user_id
false
String
nil
IF the calendar_id is the email of a ROOM, this filters by the email of a user
notify
false
Boolean
false
notifies attendees if set to true
comment
false
String
nil
adds a comment to the cancellation notification
Response Schema
Example Responses
1. If request fails:
{
"error": "request failed",
"sys_id": "sys-Ewmyx8wEF_",
"module_name": "Calendar",
"index": 1,
"message": "module raised: Status 204 should not have a body (ArgumentError)",
"backtrace": [
"/usr/share/crystal/src/http/client/response.cr:20:11 in 'initialize'",
"/usr/share/crystal/src/http/client/response.cr:13:5 in 'new'",
"/usr/share/crystal/src/http/client/response.cr:150:22 in 'from_io?'",
"/usr/share/crystal/src/http/client.cr:604:5 in 'exec_internal_single'",
"/usr/share/crystal/src/http/client.cr:587:18 in 'exec_internal'",
"/usr/share/crystal/src/http/client.cr:581:7 in 'exec'",
"repositories/drivers/lib/office365/src/client.cr:125:7 in 'graph_request'",
"repositories/drivers/lib/office365/src/events.cr:107:16 in 'delete_event:mailbox:calendar_id:id'",
"repositories/drivers/lib/place_calendar/src/office365.cr:239:7 in 'delete_event:calendar_id:notify'",
"repositories/drivers/lib/place_calendar/src/place_calendar.cr:23:5 in 'delete_event:calendar_id:notify'",
"repositories/drivers/drivers/place/calendar_common.cr:275:14 in 'delete_event'",
"repositories/drivers/drivers/microsoft/graph_api.cr:3:1 in '->'",
"repositories/drivers/drivers/microsoft/graph_api.cr:3:1 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:164:5 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver.cr:522:1 in 'run_execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:262:24 in 'process'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:179:7 in '->'",
"/usr/share/crystal/src/fiber.cr:146:11 in 'run'",
"/usr/share/crystal/src/fiber.cr:98:34 in '->'",
"???"
]
}
decline_event
decline_event
Declines an event from the calendar. Event is still shown but crossed out. Requires a calendar ID (the email of the room OR a user) AND a meeting ID - a long set of numbers and letters as returned by list_events
Security Level: Support
Parameters
calendar_id
true
String
N/A
The user Email OR the room EMAIL
event_id
true
String
N/A
The ID of the event as returned by list_events
user_id
false
String
nil
IF the calendar_id is the email of a ROOM, this filters by the email of a user
notify
false
Boolean
false
notifies attendees if set to true
comment
false
String
nil
adds a comment to the cancellation notification
Response Schema
Example Responses
1. If request fails:
{
"error": "request failed",
"sys_id": "sys-EJhU_4DEvQ",
"module_name": "Calendar",
"index": 1,
"message": "module raised: Not Found (PlaceCalendar::Exception)",
"backtrace": [
"repositories/drivers/lib/place_calendar/src/office365.cr:420:7 in 'handle_office365_exception'",
"repositories/drivers/lib/place_calendar/src/office365.cr:251:7 in 'decline_event:calendar_id:notify:comment'",
"repositories/drivers/lib/place_calendar/src/place_calendar.cr:23:5 in 'decline_event:calendar_id:notify:comment'",
"repositories/drivers/drivers/place/calendar_common.cr:266:14 in 'decline_event'",
"repositories/drivers/drivers/microsoft/graph_api.cr:3:1 in '->'",
"repositories/drivers/drivers/microsoft/graph_api.cr:3:1 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:164:5 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver.cr:522:1 in 'run_execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:262:24 in 'process'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:179:7 in '->'",
"/usr/share/crystal/src/fiber.cr:146:11 in 'run'",
"/usr/share/crystal/src/fiber.cr:98:34 in '->'",
"???"
]
}
create_event
create_event
Creates an event
Security Level: Support
Parameters
title
true
String
N/A
The title of the event
event_start
true
Int64
N/A
Start time of the event in Unix time
event_end
false
String
N/A
End time of the even in Unix time
description
false
String
N/A
description of the event sent to the attendees
attendees
false
String/Array(String)
nil
---
location
false
String
nil
Shown on the invitation, human-readable name
timezone
false
String
nil
2/3 letter timezone code - affects time meeting may appear for all users
user_id
false
String
nil
The SERVER user to create the event AS
calendar_id
false
String
nil
The EMAIL of the ROOM
online_meeting_id
false
String
nil
Need to generate meeting with provider first, these details will be provided by then
online_meeting_provider
false
String
nil
Need to generate meeting with provider first, these details will be provided by them
online_meeting_url
false
String
nil
Need to generate meeting with provider first, these details will be provided by them
online_meeting_sip
false
String
nil
Need to generate meeting with provider first, these details will be provided by them
online_meeting_phones
false
String
nil
Need to generate meeting with provider first, these details will be provided by them
online_meeting_pin
false
String
nil
Need to generate meeting with provider first, these details will be provided by them
#### Response Schema
```
```
Example Responses
1. If request fails:
{
"error": "request failed",
"sys_id": "sys-Ewmyx8wEF_",
"module_name": "Calendar",
"index": 1,
"message": "module raised: Not Found (PlaceCalendar::Exception)",
"backtrace": [
"repositories/drivers/lib/place_calendar/src/office365.cr:420:7 in 'handle_office365_exception'",
"repositories/drivers/lib/place_calendar/src/office365.cr:213:7 in 'create_event'",
"repositories/drivers/lib/place_calendar/src/place_calendar.cr:23:5 in 'create_event'",
"repositories/drivers/drivers/place/calendar_common.cr:322:14 in 'create_event'",
"repositories/drivers/drivers/microsoft/graph_api.cr:3:1 in '->'",
"repositories/drivers/drivers/microsoft/graph_api.cr:3:1 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:164:5 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver.cr:522:1 in 'run_execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:262:24 in 'process'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:179:7 in '->'",
"/usr/share/crystal/src/fiber.cr:146:11 in 'run'",
"/usr/share/crystal/src/fiber.cr:98:34 in '->'",
"???"
]
}
send_template
send_template
Send an email template you have created to given users to get specific responses back from them.
Parameters
| Name | Required? | Type | Default | Description | | to | true | String | N/A | email to send the template to | | template | true | String | N/A | template to send | | args | true | String | N/A | --- | | resource_attachments | false | String/Array(string) | [] | --- | | attachments | false | String/Array(string) | [] | --- | | cc | false | String/Array(string) | [] | --- | | bcc | false | String/Array(string) | [] | --- | | from | false | String | null | optional email to use as sender |
Response Schema
Example Responses
1. If request fails:
{
"error": "request failed",
"sys_id": "sys-Ewmyx8wEF_",
"module_name": "Calendar",
"index": 1,
"message": "module raised: Not Found (PlaceCalendar::Exception)",
"backtrace": [
"repositories/drivers/lib/place_calendar/src/office365.cr:420:7 in 'handle_office365_exception'",
"repositories/drivers/lib/place_calendar/src/office365.cr:213:7 in 'create_event'",
"repositories/drivers/lib/place_calendar/src/place_calendar.cr:23:5 in 'create_event'",
"repositories/drivers/drivers/place/calendar_common.cr:322:14 in 'create_event'",
"repositories/drivers/drivers/microsoft/graph_api.cr:3:1 in '->'",
"repositories/drivers/drivers/microsoft/graph_api.cr:3:1 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:164:5 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver.cr:522:1 in 'run_execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:262:24 in 'process'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:179:7 in '->'",
"/usr/share/crystal/src/fiber.cr:146:11 in 'run'",
"/usr/share/crystal/src/fiber.cr:98:34 in '->'",
"???"
]
}
build_template
build_template
Generates an email template to be used for questionaires/to generate specific responses
Parameters
| Name | Required? | Type | Default | Description | | string | true | String | N/A | --- | | args | true | String | N/A | --- |
Response Schema
Example Responses
1. If request fails:
{
"error": "request failed",
"sys_id": "sys-Ewmyx8wEF_",
"module_name": "Calendar",
"index": 1,
"message": "module raised: Not Found (PlaceCalendar::Exception)",
"backtrace": [
"repositories/drivers/lib/place_calendar/src/office365.cr:420:7 in 'handle_office365_exception'",
"repositories/drivers/lib/place_calendar/src/office365.cr:213:7 in 'create_event'",
"repositories/drivers/lib/place_calendar/src/place_calendar.cr:23:5 in 'create_event'",
"repositories/drivers/drivers/place/calendar_common.cr:322:14 in 'create_event'",
"repositories/drivers/drivers/microsoft/graph_api.cr:3:1 in '->'",
"repositories/drivers/drivers/microsoft/graph_api.cr:3:1 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:164:5 in 'execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver.cr:522:1 in 'run_execute'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:262:24 in 'process'",
"repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:179:7 in '->'",
"/usr/share/crystal/src/fiber.cr:146:11 in 'run'",
"/usr/share/crystal/src/fiber.cr:98:34 in '->'",
"???"
]
}
Last updated