במדריך הזה נדגים איך להשתמש בפונקציות של Cloud Run כדי להטמיע פקודת לוכסן ב-Slack שמחפשת ב-Google Knowledge Graph API.
מטרות
- יוצרים פקודה דרך שורת הפקודות ב-Slack.
- כתיבה ופריסה של פונקציית HTTP Cloud Run.
- מחפשים ב-Google Knowledge Graph API באמצעות פקודת הלוכס.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
- Cloud Run functions
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Functions, Cloud Build, and Google Knowledge Graph Search APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Functions, Cloud Build, and Google Knowledge Graph Search APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
מכינים את סביבת הפיתוח.
Node.js
Python
המשך
Java
Ruby
אם כבר התקנתם את ה-CLI של gcloud, מריצים את הפקודה הבאה כדי לעדכן אותו:
gcloud components update
המחשת זרימת הנתונים
תהליך העברת הנתונים באפליקציית ההדרכה של פקודות דרך שורת הפקודות ב-Slack כולל כמה שלבים:
- המשתמש מריץ את הפקודה
/kg <search_query>דרך שורת הפקודות בערוץ Slack. - Slack שולחת את מטען הנתונים של הפקודה לנקודת הקצה של הטריגר של הפונקציה.
- הפונקציה שולחת בקשה עם שאילתת החיפוש של המשתמש אל Knowledge Graph API.
- התשובה של Knowledge Graph API כוללת את כל התוצאות התואמות.
- הפונקציה מעצבת את התשובה כהודעה ב-Slack.
- הפונקציה שולחת את ההודעה בחזרה ל-Slack.
- המשתמש רואה את התשובה המעוצבת בערוץ Slack.
כדאי להסתכל על השלבים הבאים:
יצירת מפתח Knowledge Graph API
בדף Google Cloud Credentials במסוף, לוחצים על הלחצן Create credentials ובוחרים באפשרות API key. חשוב לזכור את המפתח הזה, כי תשתמשו בו כדי לגשת ל-Knowledge Graph API בקטע הבא.
הכנת הפונקציה
משכפלים את מאגר האפליקציה לדוגמה ומעבירים אותו למכונה המקומית:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
אפשרות נוספת היא להוריד את הדוגמה כקובץ ZIP ולחלץ אותה.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
אפשרות נוספת היא להוריד את הדוגמה כקובץ ZIP ולחלץ אותה.
המשך
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
אפשרות נוספת היא להוריד את הדוגמה כקובץ ZIP ולחלץ אותה.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
אפשרות נוספת היא להוריד את הדוגמה כקובץ ZIP ולחלץ אותה.
Ruby
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
אפשרות נוספת היא להוריד את הדוגמה כקובץ ZIP ולחלץ אותה.
עוברים לספרייה שמכילה את הקוד לדוגמה של פונקציות Cloud Run:
Node.js
cd nodejs-docs-samples/functions/slack/
Python
cd python-docs-samples/functions/slack/
Go
cd golang-samples/functions/slack/
Java
cd java-docs-samples/functions/slack/
Ruby
cd ruby-docs-samples/functions/slack/
פריסת הפונקציה
כדי לפרוס את הפונקציה שמופעלת כשאתם (או Slack) שולחים בקשת HTTP POST לנקודת הקצה של הפונקציה, מריצים את הפקודה הבאה בספרייה שמכילה את קוד הדוגמה (או את קובץ pom.xml עבור Java):
מחליפים את YOUR_SLACK_SIGNING_SECRET בסוד החתימה שסופק על ידי Slack בדף Basic information של הגדרות האפליקציה, ואת YOUR_KG_API_KEY במפתח Knowledge Graph API שיצרתם קודם לכן.
Node.js
gcloud functions deploy kgSearch \ --runtime nodejs22 \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET,KG_API_KEY=YOUR_KG_API_KEY" \
--allow-unauthenticated
משתמשים בדגל --runtime כדי לציין את מזהה סביבת זמן הריצה של גרסת Node.js נתמכת להרצת הפונקציה.
Python
gcloud functions deploy kg_search \ --runtime python312 \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET,KG_API_KEY=YOUR_KG_API_KEY" \
--allow-unauthenticated
משתמשים בדגל --runtime כדי לציין את מזהה זמן הריצה של גרסת Python נתמכת להרצת הפונקציה.
המשך
gcloud functions deploy KGSearch \ --runtime go121 \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET,KG_API_KEY=YOUR_KG_API_KEY" \
--allow-unauthenticated
כדי לציין את מזהה זמן הריצה של גרסת Go נתמכת להרצת הפונקציה, משתמשים בדגל --runtime.
Java
gcloud functions deploy java-slack-function \ --entry-point functions.SlackSlashCommand \ --runtime java17 \ --memory 512MB \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET,KG_API_KEY=YOUR_KG_API_KEY" \
--allow-unauthenticated
משתמשים בדגל --runtime כדי לציין את מזהה זמן הריצה של גרסת Java נתמכת להרצת הפונקציה.
Ruby
gcloud functions deploy kg_search --runtime ruby33 \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET,KG_API_KEY=YOUR_KG_API_KEY" \
--allow-unauthenticated
משתמשים בדגל --runtime כדי לציין את מזהה זמן הריצה של גרסת Ruby נתמכת להרצת הפונקציה.
הגדרת האפליקציה
אחרי שפורסים את הפונקציה, צריך ליצור פקודת לוכסן ב-Slack שתשלח את השאילתה לפונקציה בכל פעם שהפקודה מופעלת:
יוצרים אפליקציית Slack כדי לארח את פקודת הסלאש של Slack. משייכים אותו לצוות ב-Slack שיש לכם הרשאות להתקין בו שילובים.
עוברים אל פקודות סלאש ולוחצים על הכפתור יצירת פקודה חדשה.
מזינים
/kgכשם הפקודה.מזינים את כתובת ה-URL של הפקודה:
Node.js
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/kgSearch
Python
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/kg_search
Go
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/KGSearch
Java
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/java-slack-function
Ruby
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/kg_search
כאשר
YOUR_REGIONהוא האזור שבו הפונקציה נפרסת ו-YOUR_REGIONהוא מזהה פרויקט Cloud.YOUR_PROJECT_IDשני הערכים מוצגים בטרמינל כשהפריסה של הפונקציה מסתיימת.
לוחצים על Save.
עוברים אל מידע בסיסי.
לוחצים על התקנת האפליקציה בסביבת העבודה ופועלים לפי ההוראות במסך כדי להפעיל את האפליקציה בסביבת העבודה.
הפקודה דרך שורת הפקודות ב-Slack אמורה להתעדכן בקרוב.
הסבר על הקוד
ייבוא יחסי תלות
האפליקציה צריכה לייבא כמה תלויות כדי לתקשר עם שירותי Google Cloud Platform:
Node.js
Python
המשך
Java
Ruby
קבלת ה-webhook
הפונקציה הבאה מופעלת כשאתם (או Slack) שולחים בקשת HTTP POST לנקודת הקצה של הפונקציה:
Node.js
Python
המשך
Java
Ruby
הפונקציה הבאה מאמתת את הבקשה הנכנסת על ידי אימות הכותרת X-Slack-Signature שסופקה על ידי Slack:
Node.js
Python
המשך
Java
Ruby
שליחת שאילתות אל Knowledge Graph API
הפונקציה הבאה שולחת בקשה עם שאילתת החיפוש של המשתמש אל Knowledge Graph API:
Node.js
Python
המשך
Java
Ruby
עיצוב ההודעה ב-Slack
לבסוף, הפונקציה הבאה מעצבת את התוצאה מ-Knowledge Graph להודעה ב-Slack עם עיצוב עשיר שתוצג למשתמש:
Node.js
Python
המשך
Java
Ruby
פסק זמן ב-Slack API
Slack API מצפה שהפונקציה תגיב תוך 3 שניות מרגע קבלת בקשת webhook.
בדרך כלל הפקודות במדריך הזה מגיבות תוך פחות מ-3 שניות. לפקודות שפועלות למשך זמן ארוך יותר, מומלץ להגדיר פונקציה לדחיפת בקשות (כולל response_url) לנושא Pub/Sub שמשמש כתור משימות.
אחר כך תוכלו ליצור פונקציה שנייה שמופעלת על ידי Pub/Sub, שתעבד את המשימות האלה ותשלח את התוצאות בחזרה אל response_url של Slack.
שימוש בפקודה דרך שורת הפקודות
מקלידים את הפקודה בערוץ Slack:
/kg giraffe
כדי לוודא שההפעלות הסתיימו, בודקים את היומנים:
gcloud functions logs read --limit 100
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.
כדי למחוק את הפרויקט:
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
מחיקת הפונקציה
כדי למחוק את הפונקציה שפרסתם במדריך הזה, מריצים את הפקודה הבאה:
Node.js
gcloud functions delete kgSearch
Python
gcloud functions delete kg_search
Go
gcloud functions delete KGSearch
Java
gcloud functions delete java-slack-function
Ruby
gcloud functions delete kg_search
אפשר גם למחוק פונקציות Cloud Run ממסוףGoogle Cloud .