Webhook 함수와의 데이터 일관성
12746 단어 typescriptwebhooksyextwebdev
Webhooks을 사용하여 동일한 논리를 적용하여 변환된 사진이라는 새로 계산된 필드를 만들 수 있었습니다.
내 기능 플러그인 업데이트
이미 작성한 기존 코드를 변경할 필요가 없었습니다. Webhook 호출과 호환되도록 몇 가지만 추가하면 됩니다.
먼저 Webhook 함수에 대한 입력의 유효성을 검사하는 데 사용되는 일부 유형 정의에 대해
types.ts
를 추가했습니다.// types.ts
export interface WebhookPayload {
changedFields: ChangedFields;
entityId: string;
primaryProfile: PrimaryProfile;
meta: {
eventType: string;
};
}
export interface PrimaryProfile {
primaryPhoto: PrimaryPhoto;
}
export interface PrimaryPhoto {
image: Image;
}
export interface Image {
url: string;
}
export interface ChangedFields {
fieldNames: string[];
}
api.ts
에서 새로 생성된 엔티티를 편집하기 위한 Knowledge API 클라이언트 기능을 추가했습니다.// api.ts
import axiod from "https://deno.land/x/[email protected]/mod.ts";
declare const YEXT_ACCOUNT_API_KEY: string;
export const editEntity = async (
entityId: string,
// deno-lint-ignore no-explicit-any
data: Record<string, any>
) => {
try {
// using fetch instead of axios works too. I just prefer axios syntax.
await axiod.put(
`https://api-sandbox.yext.com/v2/accounts/me/entities/${entityId}`,
data,
{
params: {
api_key: YEXT_ACCOUNT_API_KEY,
v: "20220322",
},
}
);
} catch (error) {
if (error.response) {
console.error(`${error.response.status}: ${error.response.data}`);
}
throw error;
}
console.log(`Edited entity ${entityId}`);
};
마지막으로 기본 사진이 변경된 필드인지 확인하는
removeBackgroundHook
기능을 mod.ts
에 추가했습니다. 기본 사진 필드가 업데이트되면 함수는 myremoveBackground
함수를 호출하여 새 이미지 URL을 가져온 다음 edit entity API를 호출하고 음료 엔티티에 추가한 새 필드c_transformedPhoto
를 업데이트합니다.// mod.ts
export const removeBackgroundHook = async (payload?: WebhookPayload) => {
if (payload?.changedFields.fieldNames.includes("primaryPhoto")) {
console.log(`Transforming primaryPhoto for Entity ${payload?.entityId} `);
const imageUrl = await removeBackground(
`${payload.entityId}|${payload.primaryProfile.primaryPhoto.image.url}`
);
if (imageUrl) {
await editEntity(payload.entityId, {
c_transformedPhoto: { url: imageUrl },
});
}
}
};
yext resources apply
를 실행하기 전에 엔티티 편집 API를 호출하는 데 필요한 추가 변수를 포함하도록 내_resource.json
를 업데이트했습니다.{
"$id": "TransformImagePlugin",
"$schema": "https://schema.yext.com/config/platform/plugin/v1",
"globals": {
"CLOUDINARY_API_KEY": "${{CLOUDINARY_API_KEY}}",
"CLOUDINARY_API_SECRET": "${{CLOUDINARY_API_SECRET}}",
"YEXT_ACCOUNT_API_KEY": "${{YEXT_ACCOUNT_API_KEY}}"
}
}
Developer Console에서 Webhook 추가
내 계정의 개발자 콘솔에서 기존 앱에 새 Webhook을 추가했습니다. 내 플러그인과 함께 업로드한 API 키에는 엔터티를 업데이트할 수 있는 권한이 필요하므로 API 자격 증명 화면에서 엔터티 지식 API에 대한 읽기/쓰기 액세스 권한을 추가해야 했습니다.
그런 다음 후크가 트리거되는 시기를 결정하는 웹후크 유형을 설정합니다.
Webhook 유형을 선택한 후 새 후크에 이름, 설명 및 트리거될 때 호출해야 하는 함수를 지정했습니다.
후크가 제대로 작동하는지 확인하기 위해 Knowledge Graph의 엔티티에 새 기본 사진을 추가한 다음 c_transformedPhoto 필드가 변경되었는지 확인했습니다.
기본 사진 필드가 변경될 때마다 변환된 사진 필드에 새 값이 추가되는 것을 볼 수 있습니다. UI, CSV 업로드, 데이터 커넥터 또는 API 호출을 통해 엔터티를 생성하거나 편집하면 Webhook이 호출되어 새로 변환된 사진을 생성합니다. 웹후크는 또한 다양한 기타 이벤트를 기반으로 실행되도록 구성할 수 있으며 함수가 아닌 API를 호출하는 데 사용할 수 있습니다.
완전한 Webhook 기능 플러그인 코드here를 찾을 수 있습니다.
Reference
이 문제에 관하여(Webhook 함수와의 데이터 일관성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/yext/data-consistency-with-webhook-functions-48n8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)