Slack-integrering för kundtillvända aviseringar
Med Adobe Experience Platform kan du använda en webkrok-proxy på Adobe App Builder för att ta emot Adobe I/O Events i Slack. Proxyn hanterar Adobe handskakning för verifiering och förvandlar händelsenyttolaster till Slack meddelanden så att du kan få kundtillvända aviseringar levererade till din arbetsyta.
Förhandskrav prerequisites
Innan du börjar bör du kontrollera följande:
- Adobe Developer Console-åtkomst: En systemadministratör eller utvecklarroll i en organisation där App Builder är aktiverat.
- Node.js och npm: Node.js (LTS rekommenderas), som innehåller npm för installation av Adobe CLI och projektberoenden. Mer information finns i guiden Ladda ned Node.js och npm Getting Started.
- Adobe I/O CLI: Installera Adobe I/O CLI från terminalen:
npm install -g @adobe/aio-cli. - Slack-app med inkommande webkrok: En Slack-app på arbetsytan med en inkommande Webkrok aktiverad. Se Skapa en Slack-app och guiden Slack Inkommande webbhooks för att skapa appen och hämta webkroks-URL:en (format:
https://hooks.slack.com/...).
Konfigurera ett mallprojekt templated-project
Om du vill konfigurera ett mallprojekt loggar du in på Adobe Developer Console och väljer sedan Create project from template på fliken Home.
Välj mallen App Builder, ange en Project Title och välj Add workspace. Välj slutligen Save.
Du får en bekräftelse på att ditt projekt har skapats och att det kommer till fliken Project overview. Härifrån kan du lägga till en Project description.
Initiera projekt initialize-project
Initiera projektet när du har konfigurerat det mallade projektet.
-
Öppna terminalen och ange följande kommando för att logga in på Adobe I/O.
code language-bash aio login -
Initiera programmet och ange ett namn.
code language-bash aio app init slack-webhook-proxy -
Markera
Organizationmed piltangenterna och markera sedanProjectsom du skapade tidigare i Developer Console. VäljOnly Templates Supported By My Orgför de mallar som ska sökas igenom.
-
Tryck sedan på Enter för att hoppa över mallar och installera ett fristående program.
-
Ange de Adobe I/O App-funktioner som du vill aktivera för det här projektet. Använd piltangenterna för att rulla och välj
Actions: Deploy Runtime actions.
-
Använd piltangenterna för att rulla och välj
Adobe Experience Platform: Realtime Customer Profileför den typ av exempelåtgärder som du vill skapa.
-
Rulla och välj
Pure HTML/JSför det användargränssnitt som du vill lägga till i mallen. Tryck på Retur om du vill lämna exempelåtgärderna som standard och tryck sedan på Retur igen om du vill lämna namnet som standard.
Du får en bekräftelse på att appinitieringen har slutförts.
-
Navigera till projektkatalogen.
code language-bash cd slack-webhook-proxy -
Lägg till webbåtgärden.
code language-bash aio app add action -
Välj
Only Action Templates Supported By My Org. En lista med mallar visas.
-
Välj mallen genom att trycka på blankstegstangenten och navigera sedan till
@adobe/generator-add-publish-eventsmed hjälp av pilarna Upp och Ned. Markera slutligen mallen genom att trycka på blankstegstangenten och trycka på Retur.
En bekräftelse på att
npm package @adobe/generator-add-publish-eventshar installerats visas. -
Namnge åtgärden
webhook-proxy.
En bekräftelse på att mallen har installerats visas.
Skapa filåtgärder och distribuera create-file-actions
Lägg till proxykoden, ange miljövariabler och distribuera sedan. Åtgärden blir sedan tillgänglig i Developer Console för registrering.
Implementera körningsproxyn runtime-proxy
Navigera till projektmappen och öppna filen actions/webhook-proxy/index.js. Ta bort innehållet och ersätt med följande:
const fetch = require("node-fetch");
const { Core } = require("@adobe/aio-sdk");
/**
* Adobe I/O Events to Slack Runtime Proxy
*
* Receives events from Adobe I/O Events and forwards them to Slack.
* Signature verification and challenge handling are automatic when
* using Runtime Action registration (non-web action).
*/
async function main(params) {
const logger = Core.Logger("runtime-proxy", { level: params.LOG_LEVEL || "info" });
try {
logger.info(`Event received: ${JSON.stringify(params)}`);
// Forward to Slack
return forwardToSlack(params, params.SLACK_WEBHOOK_URL, logger);
} catch (error) {
logger.error(`Error: ${error.message}`);
return { statusCode: 500, body: { error: "Internal server error" } };
}
}
/**
* Forwards the event payload to Slack
*/
async function forwardToSlack(payload, webhookUrl, logger) {
if (!webhookUrl) {
logger.error("SLACK_WEBHOOK_URL not configured");
return { statusCode: 500, body: { error: "Server configuration error" } };
}
// Extract Adobe headers passed to runtime action
const headers = {
"x-adobe-event-code": payload["x-adobe-event-code"],
"x-adobe-event-id": payload["x-adobe-event-id"],
"x-adobe-provider": payload["x-adobe-provider"]
};
const slackMessage = buildSlackMessage(payload, headers);
const response = await fetch(webhookUrl, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(slackMessage)
});
if (!response.ok) {
const errorText = await response.text();
logger.error(`Slack API error: ${response.status} - ${errorText}`);
return { statusCode: response.status, body: { error: errorText } };
}
logger.info("Event forwarded to Slack");
return { statusCode: 200, body: { success: true } };
}
/**
* Builds a Slack Block Kit message from the event payload
*/
function buildSlackMessage(payload, headers) {
// Adobe passes event code as x-adobe-event-code header (available in params for runtime actions)
const eventType = headers["x-adobe-event-code"] ||
payload["x-adobe-event-code"] ||
payload.event_code ||
payload.type ||
payload.event_type ||
"Adobe Event";
const eventId = headers["x-adobe-event-id"] || payload["x-adobe-event-id"] || payload.event_id || payload.id || "N/A";
const eventData = payload.data || payload.event || payload;
return {
blocks: [
{
type: "header",
text: { type: "plain_text", text: `Event: ${eventType}`, emoji: true }
},
{
type: "section",
fields: formatDataFields(eventData)
},
{ type: "divider" },
{
type: "context",
elements: [{
type: "mrkdwn",
text: `*Event ID:* ${eventId} | *Time:* ${new Date().toISOString()}`
}]
}
]
};
}
/**
* Formats event data as Slack mrkdwn fields
*/
function formatDataFields(data, maxFields = 10) {
if (typeof data !== "object" || data === null) {
return [{ type: "mrkdwn", text: `*Payload:*\n${String(data)}` }];
}
const entries = Object.entries(data);
if (entries.length === 0) {
return [{ type: "mrkdwn", text: "_No data provided_" }];
}
return entries.slice(0, maxFields).map(([key, value]) => ({
type: "mrkdwn",
text: `*${key}:*\n${typeof value === "object" ? `\`\`\`${JSON.stringify(value)}\`\`\`` : value}`
}));
}
exports.main = main;
Konfigurera åtgärden i app.config.yaml app-config
app.config.yaml är viktig. Du måste använda web: no för att skapa en icke-webbåtgärd som kan registreras som en körningsåtgärd i Developer Console.Navigera till projektmappen och öppna app.config.yaml. Ersätt innehållet med följande:
application:
runtimeManifest:
packages:
slack-webhook-proxy:
license: Apache-2.0
actions:
webhook-proxy:
function: actions/webhook-proxy/index.js
web: no
runtime: nodejs:22
inputs:
LOG_LEVEL: info
SLACK_WEBHOOK_URL: $SLACK_WEBHOOK_URL
annotations:
require-adobe-auth: false
final: true
Miljövariabler environment-variables
Använd systemvariabler om du vill hantera inloggningsuppgifter på ett säkert sätt. Ändra filen .env i projektets rot och lägg till:
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/YOUR/WEBHOOK/URL
Distribuera åtgärden deploy-action
Distribuera åtgärden när systemvariablerna har angetts. Kontrollera att du är i roten för projektet (slack-webhook-proxy) när du kör det här kommandot i terminalen:
aio app deploy
En bekräftelse på att distributionen lyckades visas.
Registrera åtgärden hos Adobe I/O Events register-events
När åtgärden har distribuerats registrerar du den som mål för Adobe I/O Events.
Öppna ditt App Builder-projekt i Developer Console och välj sedan din Workspace.
På översiktssidan för Workspace väljer du Add service och Event.
På sidan Lägg till händelser väljer du Experience Platform och Platform notifications och sedan Next.
Markera de händelser som du vill ta emot meddelanden för och välj sedan Next.
Välj autentiseringsuppgifter för server-till-server och välj sedan Next.
Ange en Event registration name och en Event registration description för registreringen och välj sedan Next.
Välj Runtime Action som leveransmetod och den slack-webhook-proxy/runtime-proxy-åtgärd du skapade och välj sedan Save configured events.
Din webkrok-proxy är nu konfigurerad. Du återgår till webbkroks proxysida. Du kan testa hela flödet från början till slut genom att markera ikonen Send sample event bredvid en konfigurerad händelse.