Google Sign-In สำหรับ Assistant มอบประสบการณ์ใช้งานที่ง่ายและสะดวกที่สุดแก่ผู้ใช้และนักพัฒนาซอฟต์แวร์ทั้งสำหรับการลิงก์บัญชีและการสร้างบัญชี การดำเนินการของคุณ สามารถขอสิทธิ์เข้าถึงโปรไฟล์ Google ของผู้ใช้ของคุณได้ ซึ่งรวมถึงชื่อ อีเมล และรูปโปรไฟล์ของผู้ใช้ในระหว่างการสนทนา
ข้อมูลโปรไฟล์สามารถนำไปใช้เพื่อสร้างประสบการณ์ของผู้ใช้ที่ปรับเปลี่ยนในแบบของคุณในการดำเนินการของคุณ หากมีแอปในแพลตฟอร์มอื่นๆ และแอปนั้นใช้ Google Sign-In คุณจะสามารถค้นหาและลิงก์กับบัญชีของผู้ใช้ที่มีอยู่ สร้างบัญชีใหม่ และสร้างช่องทางการสื่อสารโดยตรงให้แก่ผู้ใช้ได้
หากต้องการลิงก์บัญชีด้วย Google Sign-In คุณต้องขอให้ผู้ใช้ให้ความยินยอมในการเข้าถึงโปรไฟล์ Google ของตน จากนั้นคุณจะใช้ข้อมูลในโปรไฟล์ของบุคคลนั้น เช่น ที่อยู่อีเมล เพื่อระบุผู้ใช้ในระบบของคุณ
ใช้การลิงก์บัญชี Google Sign-In
ทำตามขั้นตอนในส่วนต่อไปนี้เพื่อเพิ่มการลิงก์บัญชี Google Sign-In ลงในการดำเนินการ
เพื่อช่วยให้กระบวนการตรวจสอบง่ายขึ้นกำหนดค่าโปรเจ็กต์
หากต้องการกำหนดค่าโปรเจ็กต์ให้ใช้การลิงก์บัญชี Google Sign-In ให้ทำตามขั้นตอนต่อไปนี้
- เปิดคอนโซล Actions แล้วเลือกโปรเจ็กต์
- คลิกแท็บพัฒนา และเลือกการลิงก์บัญชี
- เปิดใช้สวิตช์ข้างการลิงก์บัญชี
- เลือกใช่ในส่วนการสร้างบัญชี
ในส่วนประเภทการลิงก์ ให้เลือก Google Sign In
เปิดข้อมูลลูกค้า แล้วจดบันทึกค่าของรหัสลูกค้าที่ Google ออกให้กับการดำเนินการของคุณ
คลิกบันทึก
ออกแบบอินเทอร์เฟซผู้ใช้แบบเสียงสำหรับขั้นตอนการตรวจสอบสิทธิ์
ตรวจสอบว่าผู้ใช้ได้รับการยืนยันหรือไม่ และเริ่มขั้นตอนการลิงก์บัญชี
- เปิดโปรเจ็กต์ Actions Builder ในคอนโซล Actions
- สร้างฉากใหม่เพื่อเริ่มลิงก์บัญชีใน Action ของคุณ
- คลิกฉาก
- คลิกไอคอนเพิ่ม (+) เพื่อเพิ่มฉากใหม่
- ในโหมดที่สร้างขึ้นใหม่ ให้คลิกไอคอนเพิ่ม add สำหรับเงื่อนไข
- เพิ่มเงื่อนไขที่ตรวจสอบว่าผู้ใช้ที่เชื่อมโยงกับการสนทนาเป็นผู้ใช้ที่ได้รับการยืนยันหรือไม่ หากการตรวจสอบไม่สำเร็จ การดำเนินการของคุณจะไม่สามารถลิงก์บัญชีในระหว่างการสนทนา และควรกลับไปให้สิทธิ์เข้าถึงฟังก์ชันการทำงานที่ไม่จำเป็นต้องมีการลิงก์บัญชี
- ในช่อง
Enter new expression
ในส่วนเงื่อนไข ให้ป้อนตรรกะต่อไปนี้user.verificationStatus != "VERIFIED"
- ในส่วนการเปลี่ยน ให้เลือกฉากที่ไม่ต้องมีการลิงก์บัญชีหรือฉากที่เป็นจุดเข้าถึงฟังก์ชันการทำงานสำหรับผู้มาเยือนเท่านั้น
- ในช่อง
- คลิกไอคอนเพิ่ม add สำหรับเงื่อนไข
- เพิ่มเงื่อนไขเพื่อทริกเกอร์โฟลว์การลิงก์บัญชีหากผู้ใช้ไม่มีข้อมูลระบุตัวตนที่เชื่อมโยง
- ในช่อง
Enter new expression
ในส่วนเงื่อนไข ให้ป้อนตรรกะต่อไปนี้user.verificationStatus == "VERIFIED"
- ในส่วนการเปลี่ยน ให้เลือกโหมดระบบการลิงก์บัญชี
- คลิกบันทึก
- ในช่อง
เมื่อบันทึกแล้ว ระบบจะเพิ่มโหมดระบบการลิงก์บัญชีใหม่ที่ชื่อว่า <SceneName>_AccountLinking
ลงในโปรเจ็กต์
ปรับแต่งฉากการลิงก์บัญชี
- เลือกโหมดระบบการลิงก์บัญชีในส่วนฉาก
- คลิกส่งพรอมต์ แล้วเพิ่มประโยคสั้นๆ เพื่ออธิบายให้ผู้ใช้ทราบว่าทำไมการดำเนินการจึงจำเป็นต้องเข้าถึงข้อมูลประจำตัว (เช่น "เพื่อบันทึกค่ากำหนดของคุณ")
- คลิกบันทึก
- ในส่วนเงื่อนไข ให้คลิกหากผู้ใช้ลิงก์บัญชีสำเร็จแล้ว
- กำหนดค่าว่าขั้นตอนควรดำเนินการอย่างไรหากผู้ใช้ตกลงที่จะลิงก์บัญชี เช่น เรียกใช้เว็บฮุคเพื่อประมวลผลตรรกะทางธุรกิจที่กำหนดเองที่จำเป็น แล้วเปลี่ยนกลับไปยังฉากที่สร้างขึ้น
- คลิกบันทึก
- คลิกหากผู้ใช้ยกเลิกหรือปิดการลิงก์บัญชีในส่วนเงื่อนไข
- กำหนดค่าว่าขั้นตอนควรดำเนินการอย่างไรหากผู้ใช้ไม่ตกลงที่จะลิงก์บัญชี เช่น ส่งข้อความตอบรับและเปลี่ยนเส้นทางไปยังฉากที่มีฟังก์ชันการทำงานที่ไม่ต้องใช้การลิงก์บัญชี
- คลิกบันทึก
- ในส่วนเงื่อนไข ให้คลิกหากระบบหรือเครือข่ายเกิดข้อผิดพลาด
- กำหนดค่าว่าขั้นตอนควรดำเนินการอย่างไรหากดำเนินการลิงก์บัญชีไม่สำเร็จเนื่องจากข้อผิดพลาดของระบบหรือเครือข่าย เช่น ส่งข้อความตอบรับและเปลี่ยนเส้นทางไปยังฉากที่มีฟังก์ชันการทำงานที่ไม่ต้องใช้การลิงก์บัญชี
- คลิกบันทึก
เข้าถึงข้อมูลโปรไฟล์ในแบ็กเอนด์ของคุณ
หลังจากที่ผู้ใช้อนุญาตให้การดำเนินการของคุณเข้าถึงโปรไฟล์ Google ของตนแล้ว คุณจะได้รับโทเค็นรหัส Google ที่มีข้อมูลโปรไฟล์ Google ของผู้ใช้ในคำขอการดำเนินการที่ตามมาทุกครั้ง
หากต้องการเข้าถึงข้อมูลโปรไฟล์ของผู้ใช้ ก่อนอื่นคุณต้องตรวจสอบและถอดรหัสโทเค็นโดยทำตามขั้นตอนต่อไปนี้
- ใช้ไลบรารีการถอดรหัส JWT สำหรับภาษาของคุณเพื่อถอดรหัสโทเค็น และใช้คีย์สาธารณะของ Google (พร้อมใช้งานในรูปแบบ JWK หรือ PEM) เพื่อยืนยันลายเซ็นของโทเค็น
- ตรวจสอบว่าผู้ออกโทเค็น (ช่อง
iss
ในโทเค็นที่ถอดรหัส) เป็นhttps://accounts.google.com
และกลุ่มเป้าหมาย (ช่องaud
ในโทเค็นที่ถอดรหัส) คือค่าของรหัสไคลเอ็นต์ที่ Google ออกให้กับ Actions ซึ่งกำหนดให้กับโปรเจ็กต์ในคอนโซล Actions
ต่อไปนี้เป็นตัวอย่างของโทเค็นที่ถอดรหัส
{ "sub": 1234567890, // The unique ID of the user's Google Account "iss": "https://accounts.google.com", // The token's issuer "aud": "123-abc.apps.googleusercontent.com", // Client ID assigned to your Actions project "iat": 233366400, // Unix timestamp of the token's creation time "exp": 233370000, // Unix timestamp of the token's expiration time "name": "Jan Jansen", "given_name": "Jan", "family_name": "Jansen", "email": "jan@gmail.com", // If present, the user's email address "locale": "en_US" }
หากคุณใช้ไลบรารี Actions on Google Fulfillment สำหรับ Node.js ระบบจะดูแลความถูกต้องและถอดรหัสโทเค็นให้คุณ รวมทั้งให้สิทธิ์คุณเข้าถึงเนื้อหาโปรไฟล์ ตามที่แสดงในข้อมูลโค้ดต่อไปนี้
... const app = conversation({ // REPLACE THE PLACEHOLDER WITH THE CLIENT_ID OF YOUR ACTIONS PROJECT clientId: CLIENT_ID, }); ... // Invoked on successful completion of account linking flow, check if we need to // create a Firebase user. app.handle('linkAccount', async conv => { let payload = conv.headers.authorization; if (payload) { // Get UID for Firebase auth user using the email of the user const email = payload.email; if (!conv.user.params.uid && email) { try { conv.user.params.uid = (await auth.getUserByEmail(email)).uid; } catch (e) { if (e.code !== 'auth/user-not-found') { throw e; } // If the user is not found, create a new Firebase auth user // using the email obtained from Google Assistant conv.user.params.uid = (await auth.createUser({email})).uid; } } } });
จัดการคำขอเข้าถึงข้อมูล
ในการจัดการคำขอเข้าถึงข้อมูล เพียงยืนยันว่าผู้ใช้ที่ยืนยันด้วยโทเค็นรหัส Google มีอยู่ในฐานข้อมูลของคุณแล้ว ข้อมูลโค้ดต่อไปนี้แสดงตัวอย่างวิธีตรวจสอบว่ามีคำสั่งซื้อสำหรับผู้ใช้อยู่ในฐานข้อมูล Firestore แล้วหรือยัง
... app.handle('Place_Order', async conv => { const order = conv.session.params.order; const userDoc = dbs.user.doc(conv.user.params.uid); const orderHistory = userDoc.collection("orderHistory"); if (orderHistory) { // Order history exists, so the user already placed an order. // Update counter for order type. await orderHistory.doc(order).update({ count: admin.firestore.FieldValue.increment(1)}); } else { // First order they place await orderHistory.doc(order).set({ option: order, count: 1}); options.forEach(opt => { if (opt != order) { orderHistory.doc(opt).set({ option: opt, count: 0}); } }); } return conv.add(`Your ${order} has been placed. ` + 'Thanks for using Boba Bonanza, see you soon!'); });