DirectLineを使ってのBotとのやり取りを以前まとめましたが、今回はそれをラッパーライブラリなしでやってみます。
初めに
今回の内容は、DirectLineの認証トークンを取得するまでを行います。
ちなみにDirectLine全体のSwaggerドキュメントは、ここ にあります。
APIの仕様
認証トークンの取得用のREST APIの使い方は、以下のような感じです。
- エンドポイント : https://directline.botframework.com/api/conversations
- HTTPメソッド : POST
- content-type : application/json
- header
- Body : 空
大体こんな感じです。
レスポンス内容
以下のような感じです。
Swaggerには、eTag要素が含まれていますが落ちてこないので謎です。
{ "conversationId": "string",
"token": "string" }
コード例
C#
C#だと大体以下のような感じで取得できます。
まずレスポンスを格納するモデルです。
class AuthTokenModel { [JsonProperty("conversationId")] public string ConversationId { get; set; } [JsonProperty("token")] public string Token { get; set; } [JsonProperty("eTag")] public string ETag { get; set; } }
実際に取得するコード
private static async TaskGetDirectLineAuthToken() { var httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("BotConnector", "DirectLineToken"); httpClient.BaseAddress = new Uri("https://directline.botframework.com/"); var response = await httpClient.PostAsync("api/conversations", new FormUrlEncodedContent(new SortedDictionary ())); var json = await response.Content.ReadAsStringAsync(); var authTokenModel = JsonConvert.DeserializeObject (json); return authTokenModel; }
Curl
Curlで呼び出すと以下のような感じです。
curl -H "Authorization: BotConnector Token" \ -X POST \ -H "Content-type: application/json" \ -H "Content-length: 0" \ https://directline.botframework.com/api/conversations
Go言語
Goでやると以下のような感じ
まずレスポンスを格納する構造体です。
type Token struct { ConversationId string ETag string Token string }
全体のコードは、以下のような感じ
DirectLineTokenのところにBot Frameworkのサイトから取得できるトークンを入れます
package main import( "fmt" "net/http" "net/url" "strings" "io/ioutil" "encoding/json" ) type Token struct { ConversationId string ETag string Token string } func main(){ values := url.Values{} req, err := http.NewRequest("POST", "https://directline.botframework.com/api/conversations", strings.NewReader(values.Encode())) req.Header.Add("Content-Type", "application/json") req.Header.Add("Content-length", "0") req.Header.Add("Authorization", "Botconnector DirectLineToken") if err != nil{ fmt.Println("erro1") return } client := &http.Client{} resp, err := client.Do(req) if err != nil{ return } defer resp.Body.Close() token, err := ParseJson(resp) if err != nil{ return } fmt.Println(token.Token) fmt.Println(token.ConversationId) } func ParseJson(resp *http.Response) (Token, error){ b, err := ioutil.ReadAll(resp.Body) var token Token json.Unmarshal(b, &token) return token, err }
まとめ
認証トークンが取れたらあとはBotにメッセージを投げて、メッセージの取得の繰り返しです。
そこら辺の処理についてはまた今度
DirectLineならSDKやらがない言語でも単純なHTTPのやり取りで会話できるのでGoとかJavaとかでやりたかったらこれを使う方向で行きましょう