Kit(以下CEK)が公開され、公式SDKもリリースされたものの、チュートリアルで使われてなかったり、ドキュメントも見当たらなかったり、サーバはご自由にという状況で戸惑った方も少なからずいらっしゃるのではないでしょうか(私がそうです)。いうわけでひとまず公式SDKのNode.js版ソースを流し読みしてみたので、使い方について簡単にまとめて説明してみようと思います。※AWS(Lambda)、Firebase(Functions)での動かし方について↓の記事にまとめました。アップデートによって追加されたメソッドの説明を追記しました。setSessionAttributesgetSessionAttributesgetUser(setSessionAttributes、getSessionAttributesは、OSSで初プルリクしたものが無事マージされました...!)公式SDK2018/7/20時点ではNode.js版とSwift版が公開されています。今後も随時追加、更新されていくそうです。Assistantアプリの開発でもお馴染みのNode.js版を説明していきます。installでさくっといけます。@line/clova-cek-sdk-nodejs使い方require書くまでもないですが一応。require('@line/clova-cek-sdk-nodejs');handlerClientクラスのconfigureSkillメソッドでSkillConfiguratorクラスのインスタンスを生成してます。そのあとに各リクエストイベントでの処理をonメソッドの引数に渡していきます。.handle();Clovaではリクエストが以下の4タイプあります。スキル起動時のリクエスト。スキル起動~終了までの間呼ばれ続けるリクエスト。ここをあれこれしてく。スキル終了時のリクエスト。応答を返したりはできない。ユーザの発話の有無に関わらず、クライアントの状態の変化や、それに伴うリクエストをExtensionに渡すために使用されるリクエスト。ハードウェアボタンとか?このうちEventRequestを除く3つのリクエストのイベントが用意されています。引数のハンドラー関数にリクエストが呼ばれた際の処理を書いていきます。Contextクラス各リクエストイベントから呼ばれるハンドラー関数の引数としてresponseHelperが渡されます。このresponseHelperはContextクラスのインスタンスで、インテント名やスロットを取得したりする色んな便利メソッドが詰まってるので簡単に説明していきます。getSessionId()セッションIDを取得します。getIntentName()インテント名を取得します。onIntentRequestで拾ったリクエストは基本的にインテント名でswitchして処理を分岐させていきます。getSlots()スロットオブジェクトをごっそり取得します。getSlot(slotName)指定のスロット情報のみを取得します。endSession()このリクエストでスキルを終了させます。Clovaから返事を返してそのままスキル終了させたいときはこのメソッドを入れときます。スキルを継続したい場合はなにもしなくておっけー。setSessionAttributes(sessionAttributes)任意の情報をセッション変数に保持させます。引数のsessionAttributesはオブジェクトです。フラグ等、スキル実行中に継続して保持したい情報はこのsessionAttributesに格納しておきます。さんの「Clova審査一発通過のための注意点」の記事でも書かれていますが、Clovaスキルは現在の仕様上、スキルを終了してもセッションが終了されません。スキル終了後すぐに再びスキルを呼び出すとセッション情報が残ったままスキルが実行されます。プログラムの書き方によっては思わぬバグの原因にもなりますので、LaunchRequest時(スキル起動時)に明示的にクリアさせておくと良いでしょう。...getSessionAttributes()セッション変数を取得します。オブジェクトがまるっと返ってきます。getUser()ユーザー情報を取得します。返ってくるのはUser型オブジェクトです。"xxxxxxxx"}accessTokenがない場合はuserIdのみ返ってきます。返答メソッドClovaからの返答には主に以下の3タイプあり、それぞれのsetメソッドが用意されています。responseHelperから同様に呼び出せます。単文タイプの音声情報です。基本となるタイプです。複文タイプの音声情報です。複数の文章を出力する際に使用されます。複合タイプの音声情報です。画面を持たないクライアントデバイスに、要約音声情報と詳細音声情報を渡す際に使用されます。それぞれのメソッドの最後の引数にrepromptをboolean型で指定でき(省略した場合はfalse)、trueを指定した場合はユーザーが無反応の状態で一定時間経過後にClovaが聞き返しを行ってくれて、入力待ち時間を最大1回延長できます。通常の返答とリプロンプトはそれぞれ個別にメソッドを実行しないとダメです。reprompt])文章または音声データ(mp3とか)を返答させます。引数のspeechInfoはSpeechInfoObjectという形式のオブジェクトになります。後述するSpeechBuilderクラスにvalueの指定のみでSpeechInfoObjectオブジェクトを生成するメソッドがあります。reprompt])複数の文章や音声データのURLを返答させます。引数のspeechInfoは配列になります。reprompt])画面があるデバイスとないデバイスで出力を出し分けるっぽいです。動きとしては画面がある場合はspeechInfoBriefで、ない場合はspeechInfoVerboseで応答するみたいです。Friendsで試した限りはspeechInfoVerboseの応答のみ返ってきました。対話モデル画面のテストからだと「応答がありません。(undefined)」となってしまいます。speechInfoBriefはSpeechInfoObject形式のオブジェクトを渡します。speechInfoVerboseはSpeechInfoObjectとは少し異なる形式のオブジェクトとなります。SimpleSpeechとSpeechListのどちらかを以下の形式で渡します。Array<SpeechInfoObject>}Clova.SpeechBuilderクラス文章と音声データそれぞれのSpeechInfoObjectオブジェクトを生成するスタティックメソッドがあります。lang])文章のSpeechInfoObjectオブジェクトを生成してくれます。省略可能の第二引数で言語を指定できます。lang])音声データのSpeechInfoObjectオブジェクトを生成してくれます。IDが正しいか検証するっぽいメソッド。clovaSkillHandler);なおID検証しなくてもおっけー。clovaSkillHandler);サンプルコード以上を把握するとGitHubのREADMEのサンプルはさくっと読めるんじゃないでしょうか。clovaSkillHandler);おわりに今回まとめた情報はここのソースを読み解いたものです。コード量も少なく、TypeScriptで書かれていますがTypeScript全く触ったことない私でもなんとなく読めたので、一度さくっと目を通してみるのも楽しいかもしれません。Homeの購入を機にITに目覚めた初心者非エンジニアです!分からないことがあったら相談したり一緒に考えたりしたいので是非ともフォローお願いします!FollowIoTLTIoT縛りの勉強会です。登壇者を中心にQiitaでも情報発信していきます。upLoginユーザーは見つかりませんでした。