hab mal eine ganz einfache Teams presence integration für die aktuelle Znuny 7.0.19 zusammengeschustert.
Umfang:
- Oben rechts neben den Agenten Initialen ist ein Login Button / die Teams Info des Agenten nach dem Login
- Im Ticket Zoom gibt es eine Anzeige des Kunden
- Bei den Ticket Artikeln wird statt des Avatars das Teams Profilbild samt Präsents Info angezeigt
- Immer wenn man auf eines der Profilbilder zeigt kommt eine Person Card

Implementierung:
Das ganze läuft über das Microsoft Graph Toolkit und ein paar Änderungen an den Template Dateien.
- Im Entra ID eine App registrieren und TENANTID und CLIENTID notieren.
- Die Registrierung als single tenant app reicht
- Folgende Tempalte Dateien nach Custom kopieren
Code: Select all
mkdir -p /opt/znuny/Custom/Kernel/Output/HTML/Templates/Standard/AgentTicketZoom/ArticleRender/
cp /opt/znuny/Kernel/Output/HTML/Templates/Standard/HTMLHead.tt /opt/znuny/Custom/Kernel/Output/HTML/Templates/Standard/
cp /opt/znuny/Kernel/Output/HTML/Templates/Standard/Header.tt /opt/znuny/Custom/Kernel/Output/HTML/Templates/Standard/
cp /opt/znuny/Kernel/Output/HTML/Templates/Standard/AgentTicketZoom/TicketInformation.tt /opt/znuny/Custom/Kernel/Output/HTML/Templates/Standard/AgentTicketZoom/
cp /opt/znuny/Kernel/Output/HTML/Templates/Standard/AgentTicketZoom/ArticleRender/MIMEBase.tt /opt/znuny/Custom/Kernel/Output/HTML/Templates/Standard/AgentTicketZoom/ArticleRender/
Das lädt das Graph Toolkit, hier müssen auch CLIENTID und TENANTID Eingetragen werden
Code: Select all
<script type="module">
import { registerMgtComponents, Providers, Msal2Provider } from 'https://unpkg.com/@microsoft/mgt@4';
Providers.globalProvider = new Msal2Provider({
clientId: 'CLIENTID',
authority: 'https://login.microsoftonline.com/TENANTID'
});
registerMgtComponents();
</script>
Code: Select all
<li><mgt-login show-presence></mgt-login></li>
Code: Select all
<mgt-person person-query="[% Data.CustomerID | html %]" view="threelines" person-card="hover" show-presence></mgt-person>
Vorher / Original:
Code: Select all
<div class="Avatar">
[% IF Config("Frontend::AvatarEngine") == 'Gravatar' && Data.SenderImage %]
<div class="ArticleSenderImage">
<img src="[% Data.SenderImage | url %]" title="[% Data.From | html %]" />
</div>
[% ELSE %]
<div class="ArticleSenderInitials">
<span>[% Data.SenderInitials | html %]</span>
</div>
[% END %]
</div>
Code: Select all
<div class="Avatar">
[% email = Data.ArticleFields.Sender.Value | html %]
[% SET matched_email = email.match('([\\w\\.\\-]+@[\\w\\.\\-]+)') %]
[% IF matched_email.size > 0 %]
<div class="ArticleSenderImage">
<mgt-person person-query="[% matched_email.0 %]" person-card="hover" show-presence></mgt-person>
</div>
[% ELSE %]
<div class="ArticleSenderInitials">
<span>[% Data.SenderInitials | html %]</span>
</div>
[% END %]
</div>
Wenn jemand was anderes in die Richtung 365 gebastelt hat und teilen möchte, gerne her damit.
Feedback ist immer willkommen.
Stephan