2017-06-20 49 views
0

我的Alexa技能存在一些問題。我想對話是這樣的:如何在打開技能時驗證用戶的PIN(LaunchRequest)

用戶:「Alexa的,開party」

Alexa的:「你好,你是什麼四位祕密針」

用戶: '1234'

Alexa的: '經證實,有什麼可以幫您?'

但我很困惑如何構造這個。我需要獲取用戶的密碼並在我的代碼庫中進行驗證。我知道你不能得到對話代表團在LaunchRequest裏面工作。 LaunchRequest不能定製,所以我不能添加插槽。我在互聯網上找不到任何其他建議/例子。有沒有人以前做過或有什麼建議?

+0

您的示例對話與您正在尋找的幫助相矛盾。在這個例子中,launchRequest會觸發你的技能請求銷售。之後,您會詢問用戶是否可以在啓動請求中指定其針腳。 – aberger

+0

我已經想出了一些其他的東西,這使得這個問題現在不相關,所以我很抱歉,如果有任何混淆。我即將關閉它。 –

回答

0

事實證明,您不能將槽收集委託給LaunchRequest內的Alexa,因爲它不是有效的response typeLaunchRequest的一部分。

我最初的邏輯是:

  1. 用戶說 'Alexa的,開party'
  2. Alexa的技能要求LaunchRequest。 (在這一點上,我需要通過委託Alexa進行插槽集體詢問用戶的銷售號碼)
  3. LaunchRequest中,立刻用this.emit(':getPinIntent');迴應,其中getPinIntent是我的Alexa技能中存在的另一個意圖。上面的代碼是我在互聯網上看到的如何調用另一個意圖,而用戶不必挑起使用語音。
  4. getPinIntent被調用並立即檢查是否填滿了所有需要的插槽(即如果插槽PIN有一個值)。如果他們不是,並且dialogState !== 'COMPLETED'然後我將插槽集合委託給Alexa。
  5. 上述步驟(#4)是出問題的地方。由於代表團不是LaunchRequest的有效回覆類型,因此沒有字段dialogueState,這是授權給Alexa所需的字段。 Alexa請求仍然是LaunchRequest而不是Intent請求,因爲用戶沒有通過對Alexa說些什麼來調用意圖。
  6. 總之,這是沒有完成,其中一經推出,要求用戶輸入PIN,然後可以通過只說引腳回覆對話的有效方式,下面顯現:

用戶:「Alexa的,開party 「

Alexa的: 」你是什麼針「(ALEXA從來沒有送過來,因爲#4及以上#5)

用戶: 」一二三四「

Alexa的:」 Confirme d,我能幫你什麼?「

如果我犯了任何錯誤或錯誤的假設,請讓我知道。

我現在的邏輯現在已經改變。如果您不使用技能生成器測試版,則您可以將插槽作爲您的意圖之一的話語存在。所以我現在有getPinIntent帶有一個名爲{PIN}的插槽和一個{PIN}形式的話語。這使上述類型的對話會發生,因爲當用戶他或她的腳說回(「一二三四」),它會啓動getPinIntent,我可以再繼續或委託的對話,以Alexa的,因爲IntentRequest對話框是一個有效的response type

我現在唯一的問題是,因爲我沒有使用技能生成器測試版我不能(或者還沒有找到一種方式),以對話模型添加到/我的意圖架構內。在添加正確的對話模型後,我試圖將Skill Builder Beta中的JSON文本複製到我的意圖架構中,但這總是會導致構建錯誤。

所以,現在我可以完成用戶的PIN認證並回應一個「我該怎麼幫忙」,但是之後發佈的IntentRequest可能需要委派給Alexa插槽,並且這會導致崩潰,因爲沒有Skill Builder測試版我無法爲代理插槽收集期間的Alexa添加適當的對話模型。

0

亞馬遜支持account linking作爲連接用戶與其他帳戶的方法。這允許用戶在安裝技能時使用OAuth登錄到他們的其他帳戶。儘管可能根據session object userid確定用戶,但發佈此類技能可能很困難。

+0

對,但在用戶關聯帳戶之後,我仍然希望讓他們在使用我的技能中的任何東西之前(例如手機上的四位數字引腳)使用他們的四位數字引腳。 –

+0

好的。您是否嘗試過接收號碼輸入作爲號碼插槽的意圖?例如,「我的腳是{PinSlot}」,「這是{PinSlot}」,「{PinSlot}」,「{PinSlot}是我的腳」 –

+0

我做的,現在,它的工作,但只有當你這樣做不使用技能生成器測試版。 Skill Builder Beta不會允許只有時隙的話語(即話語「{PinSlot}」)。現在我遇到了另一個問題,因爲顯然你不能在沒有測試版的情況下構建對話框模型。 –