DirectLineで取得するトークンは、原則30分で有効期限が切れるのでそれを更新する方法についてです。
初めに
この操作もREST APIを呼び出します。
例のごとくSwaggerドキュメントは、ここ です。
APIの仕様
以下APIの仕様です
- エンドポイント : https://directline.botframework.com/api/tokens/{ConversationId}/renew
- ConversationId : 取得してあるトークン内のConversationId
- HTTPメソッド : GET
- Header
レスポンス内容
レスポンスは、単純にTokenが落ちてくるのでJsonではなく生のテキストになります。
コード例
C#
C#だと以下のような感じです。
private static async TaskRenewToken(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", token); var response = await httpClient.GetAsync($"/api/tokens/{conversationId}/renew"); var newToken = await response.Content.ReadAsStringAsync(); newToken = newToken.Replace('"', ' ').Replace('\\', ' ').Trim(); return newToken; }
レスポンスが、”\”token\””という形で取得されるので無駄なテキストを削除する処理を最後に入れています。
Go
Goだと以下のような感じです。
func RenewToken(token string, conversationID string) string { client := &http.Client{} url := "https://directline.botframework.com/api/tokens/" + conversationID + "/renew" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("Content-Type", "application/json") req.Header.Add("Authorization", "Botconnector " + token) res, _ := client.Do(req) body, _ := ioutil.ReadAll(res.Body) defer res.Body.Close() fmt.Println(string(body)) return string(body) }
まとめ
実際のアプリを作る場合は、必ずタイマーとこの処理を入れて有効期限が切れないように気を付けましょう