Skip to content

feat(xo-server-web-hooks): handle office 365 connector format #8498

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: master
Choose a base branch
from

Conversation

MathieuRA
Copy link
Member

@MathieuRA MathieuRA commented Apr 9, 2025

Description

Microsoft teams webhook require a payload in the office 365 connector format.
This PR add a toggle in the plugin configuration to handle URL that require payload in this format.

zammad#36742

Screenshots

Capture d’écran de 2025-04-09 17-10-14

Capture d’écran de 2025-04-10 10-20-31

Checklist

  • Commit
    • Title follows commit conventions
    • Reference the relevant issue (Fixes #007, See xoa-support#42, See https://...)
    • If bug fix, add Introduced by
  • Changelog
    • If visible by XOA users, add changelog entry
    • Update "Packages to release" in CHANGELOG.unreleased.md
  • PR
    • If UI changes, add screenshots
    • If not finished or not tested, open as Draft

Review process

This 2-passes review process aims to:

  • develop skills of junior reviewers
  • limit the workload for senior reviewers
  • limit the number of unnecessary changes by the author
  1. The author creates a PR.
  2. Review process:
    1. The author assigns the junior reviewer.
    2. The junior reviewer conducts their review:
      • Resolves their comments if they are addressed.
      • Adds comments if necessary or approves the PR.
    3. The junior reviewer assigns the senior reviewer.
    4. The senior reviewer conducts their review:
      • If there are no unresolved comments on the PR → merge.
      • Otherwise, we continue with 3.
  3. The author responds to comments and/or makes corrections, and we go back to 2.

Notes:

  1. The author can request a review at any time, even if the PR is still a Draft.
  2. In theory, there should not be more than one reviewer at a time.
  3. The author should not make any changes:
    • When a reviewer is assigned.
    • Between the junior and senior reviews.

@MathieuRA MathieuRA self-assigned this Apr 9, 2025
@olivierlambert
Copy link
Member

Probably worth a highlight for the next release 👍

Copy link
Contributor

@b-Nollet b-Nollet left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me apart from the typo

@@ -141,6 +173,11 @@ export const configurationSchema = ({ xo: { apiMethods } }) => ({
title: 'URL',
type: 'string',
},
isOfficeHook: {
description: 'Enable if your URL require a payload that follow the office 365 connector format',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
description: 'Enable if your URL require a payload that follow the office 365 connector format',
description: 'Enable if your URL requires a payload that follow the office 365 connector format',

@@ -163,6 +200,11 @@ export const testSchema = {
type: 'string',
description: 'The URL the test request will be sent to',
},
isOfficeHook: {
description: 'Enable if your URL require a payload that follow the office 365 connector format',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
description: 'Enable if your URL require a payload that follow the office 365 connector format',
description: 'Enable if your URL requires a payload that follow the office 365 connector format',

@b-Nollet b-Nollet requested a review from fbeauchamp April 10, 2025 08:48
Comment on lines +5 to +23
function constructPayload(isOfficeHook, data, type) {
if (isOfficeHook) {
// https://learn.microsoft.com/en-us/outlook/actionable-messages/message-card-reference
const facts = Object.keys(data).map(key => {
const value = data[key]
return { name: key, value: typeof value === 'string' ? value : JSON.stringify(value) }
})

return {
'@type': 'MessageCard',
'@context': 'https://schema.org/extensions',
themeColor: 'BE1621',
summary: 'New notification from the Xen-Orchestra webhook plugin',
sections: [{ title: `XO ${type.toUpperCase()} notification` }, { facts }],
}
}

return { ...data, type }
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since we want to support multiple formats, we might want to:

  • Use an enum in the configuration
  • Return a string here instead of an object (to be able to support non-JSON formats in the future)

What do you think?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants