
เวลาที่เราสร้าง assistant มา ปัญหานึงที่เราไม่อยากให้เกิด ก็คือ ไม่อยากให้ Assistant ของเราดูแห้งๆตอบคำถามได้แค่คำถามง่ายๆแต่ไม่สามารถรู้เรื่องอะไรของ user ได้เลย ซึ่ง เจ้าตัว action on google sdk เนี่ย ได้มีเครื่องมือให้เราได้เล่นและบริหารจัดการ user อยู่พอสมควร ลงมาดูครับว่ามีอะไรบ้าง
Permission request
โดยพื้นฐานแล้ว ตัว Assistant จะไม่สามารถเข้าถึงตัว ข้อมูลผู้ใช้ได้หากไม่ขอ permission ก่อน ซึ่งวิธีการขอ premission บน action on google SDK เนี่ย ไม่ยากเลยครับ โดยขึ้นตอนง่ายๆคือ เราต้อง เรียก method Permission พร้อมระบุ options ว่าเราต้องการอะไรบ้างไปอย่างเช่น
https://gist.github.com/thangman22/b07ae8f85484a2598e1c3762d1237b1d
context คือ คำที่จะให้ assistant พูดเพื่อขอ permission จากผู้ใช้
permission คือ permission ที่อยากจะขอ จากลูกค้า โดย สิ่งที่เราขอ จาก user ได้ก็จะประกอบด้วย NAME, DEVICE_PRECISE_LOCATION, DEVICE_COARSE_LOCATION และเมื่อขอ permission แล้วเราต้องไปสร้าง intent เพื่อรับการตอบรับจาก user ใน dialogflow และไปกำหนดว่า ให้รับ event actions_intent_PERMISSION ถ้างง ก็ดูตามตัวอย่างข้างล่างได้เลยครับ

และเมื่อเรากำหนดเสร็จแล้วข้อมูลขอ user จะส่งมากับ API ทันที เราก็ดึงด้วยวิธี ตาม code ด้านล่าง
https://gist.github.com/thangman22/b193a72e5e3d514a36da3ec441465e4b
นอกจากเรียก method Premission เรายังสามารถเรียก method SignIn ซึ่งคุณจะได้ Access Token มาเพื่อใช้งาน หรือ Place เพื่อขอ location ของ device ซึ่งแต่ละ method ก็จะต้องสร้าง intent มาเพื่อรับ event ต่างกันออกไป โดยเราสามารถไปดูได้จาก link นี้ https://developers.google.com/actions/assistant/helpers
State
ในหลายครั้ง conversation กับ ตัว assistant ไม่ได้จบภายในคำสั่งเดียว และเราต้องการจะเก็บค่าจาก conversation ก่อนไว้ เพื่อเอามาใช้ใหม่ บางคนก็อาจจะใช้วิธี implement database ขึ้นมาเอง แต่จริงๆแล้วนั้นตัว action on google SDK มีตัวจัดกร state ให้เราเอาไว้เรียกใช้ง่ายๆอยู่แล้ว โดยมีวิธีเรียกใช้อยู่สองแบบ
https://gist.github.com/thangman22/e92338f710d17b2c2bf8894ef5316ece
ซึ่งทั้งเรียกใช้ และสั่งเก็บข้อมูลเราใช้ตัวแปรนี้ได้เลย โดยเราสามารถเปลี่ยนชื่อตัวแปร count เป็นอย่างอื่นได้เลย
User ID
ในกรณีที่เราไม่ได้ให้ user login เราจะต้องหาทางเพื่อให้ได้มาซึ่ง ID ของ user ซึ่งแต่เดิมนั้น ตัว userID คืนมากับ API ของ SDK แต่ตั้งแต่ version ใหม่ออกมา action on google ก็ เอา UserID ทิ้งไป ตาม document แล้ว Google บอกว่าให้เราสร้าง random number หรือ สร้าง UUID ขึ้นมาซักอันแล้วก็เอาเก็บไว้ใน conv.user.storage ได้เลย ซึ่งดูแปลกมากๆ แต่ก็ให้ใช้วิธีนี้จริงๆ ตัวอย่าง code ก็จะออกมาหน้าตาประมาณนี้
https://gist.github.com/thangman22/2017d3257e0c4c0828023525e394e4db
คุยกับ แม่ซื้อ
บางครั้งเอง User ก็จะมีอาการถามแล้วไม่ตอบ ซึ่ง ก็จะทำให้ assistant ไม่รู้ว่าต้องไปยังไงต่อ ซึ่งจริงๆแล้วทุกครั้งที่ user ไม่คุยกับ Assistant ช่วงเวลาหนึ่งตัว Assistant จะยิง event ชื่อว่า actions_intent_NO_INPUT ไปยัง Dialogflow เพียงแค่เราสร้าง intent มารับ event นี้ เราก็สามารถที่จะ custom คำที่จะให้ action ของเราตอบกลับไปที่ user ในเวลาที่ไม่มี input ได้ โดยที่จะพิเศษขึ้นมาหน่อยคือ ตัว SDK จะส่ง จำนวนครั้งที่ reprompt มาให้เราด้วย โดย maximum คือ สามครั้ง
https://gist.github.com/thangman22/508255e68777444a087339137411b55a
ซึ่งก็จะช่วยเป็นการเตือน user เพื่อไม่ให้ Assistant เหมือนคุยกับแม่ซื้ออยู่คนเดียว
ถ้าใครกำลังทำ assistant อยู่ก็ลองเอาปรับไปใช้ดูได้ครับ
Leave a Reply