2017-02-09 9 views
1

iOS SwiftアプリケーションからWatson Conversationサービスへの会話の開始時にコンテキスト変数を渡そうとしています。ここまでは、RestKitをインポートして、必要なJSONオブジェクトを作成し、コンテキスト初期化子を使用しなければならないことを理解しました。以下は、私が会話を開始する必要がある(!私は簡潔にするために試みるが含まれている)のコードのサンプルです:Watson iOS SDK(Swift)とコンテキスト変数を会話に渡す

FUNC startWatsonConv(){

var cvar = JSON(json: ["shotInfo":"Pneumovax"]) 

    context = try! Context(json: cvar) 

    let failure = { (error: Error) in print(error) } 
    conversation.message(withWorkspace: conWorkspace, failure: failure) { response in 
     self.context = response.context 
     print ("start of conversation", response.context) 
    } 
} 

私はコンソールで次のエラーを取得しています:

致命的なエラー: 'try!'式が予期せずエラーを発生させました:RestKit.JSON.Error.keyNotFound( "conversation_id"):file /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-800.0.63/src/swift/stdlib/public/core /ErrorType.swift、line 178

このコンテキスト変数を正常に渡す方法の例は非常に高く評価されます。

答えて

0

初めて会話サービスに空のリクエストを送信します。contextを含む応答JSONを返信します(conversation_id)。次に、これを取って、現在入力されたcontextフィールドに必要なvarを追加します。

0

私はミハル・ビダの答えにコメントするのに十分な評判を持っていないので、私は彼の意志が動作しない理由を説明ここに別のものを投稿します、そして、私は私の回避策を説明します:内部

' Contextオブジェクトはjsonのプロパティに「let」を使用します。これにより、コンテキストオブジェクトがWatson Conversation Service(WCS)応答から生成された後であっても、json辞書が定数になり、変更できなくなります。

この問題に注意を喚起するGitHubに関する未解決の問題があります:https://github.com/watson-developer-cloud/swift-sdk/issues/620。うまくいけば、彼らはすぐにそれに対処します。なぜなら、この問題は実際には迷惑であるからです。

ここでは、私のチームの回避策について説明します。これはあなたのプロジェクトではうまくいきません。

私たちは私たちのiOSクライアントとWCSの間の仲介役として私たち自身のサーバーを持っています。このサーバーはテキストをフォーマットしたり、ユーザープロファイル、サードパーティAPIなどにクエリを行うのに役立ちます。特に、私たちはコンテキスト内で 'userId'フィールドを送信したいので、WCSはサーバーにプロファイル情報を取得させ、ウェルカムメッセージ。 iOSはうまくいきませんので、私たちは私たちが文脈に入れたいプロパティを受け入れる別のURLエンドポイントを私たちのサーバに作ることを選択しました。 NodeJSで望ましいコンテキストを生成することは非常に簡単なので、このソリューションは私たちのために機能します。

要約すると、WCSインターフェイスロジックをNodeJSに書き込んで、iOSからそのサーバーに要求を送信し、ノードにコンテキストペイロードを生成することをお勧めします。

関連する問題