DirectLineでのBotとの会話中に、現在の会話とは別スレッドの会話を同じBotと別途始める方法についてです。
初めに
別スレッドでの会話を行う場合、認証トークンの再取得が必要ですが、DirectLine用の最初のトークンを引き回すと会話がリセットされるので、新規に認証トークンの生成が必要になります。
この操作もREST APIを呼び出します。
例のごとくSwaggerドキュメントは、ここ です。
APIの仕様
以下APIの仕様です
- エンドポイント : https://directline.botframework.com/api/tokens/conversation
- HTTPメソッド : POST
- Header
- Body : 空
レスポンス内容
レスポンス内容は、DirectLine用の新しい認証トークンがそのまま落ちてきます。
コード例
C#
C#だと以下のような感じです
private static async TaskStartNewConversation(string conversationId, string token) { var httpClient = new HttpClient(); httpClient.BaseAddress = new Uri(baseUrl); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("BotConnector", directLineAuthToken); var response = await httpClient.PostAsync("api/tokens/conversation", new FormUrlEncodedContent(new SortedDictionary<string , string>())); var json = await response.Content.ReadAsStringAsync(); return json.Replace('\\', ' ').Replace('"', ' ').Trim(); }
Go
Goだと以下のような感じです
func StartNewConversation(token string, conversationID string) string { client := &http.Client{} values := url.Values{} req, _ := http.NewRequest("POST", "https://directline.botframework.com/api/tokens/conversation", strings.NewReader(values.Encode())) req.Header.Add("Content-Type", "application/json") req.Header.Add("Content-length", "0") req.Header.Add("Authorization", "Botconnector DirectLineToken") res, _ := client.Do(req) body, _ := ioutil.ReadAll(res.Body) defer res.Body.Close() fmt.Println(string(body)) return string(body) }
まとめ
同時進行で別会話を実行する必要性がよくわからないですがこういうこともできるよっていうことで頭の片隅にあるといつかいいことがあるかもです。