前回のGo言語 + kintone + チャットワークでタスクの自動登録アプリを作ってみる2

Go言語でkintone REST APIを利用して任意のアプリからJSON形式で登録データを取得してみた。

今回は取得したデータをチャットワークにタスクとして登録してみる。


今回の話に入る前にざっくりと説明すると


kintone_app_config


kintoneで上のキャプチャのようなフィールドを設けたアプリを作成して、

指定の月日になったら、チャットワークにラベルをタスク名にして投稿する

というアプリを作成している。


今回チャットワークに登録するデータはラベルの値で、


kintone_cw_go


フィールドコードをlabelにして登録している。

この設定により属性名を日本語を含むものから半角英字に変更できる。


これを踏まえた上で前回のコードにチャットワークへのタスクの登録のコードを追加してみる。

中途半端に関数を作成していてコードが汚いが、そこは優しい目で見守ってください。


main.go

package main

import (
	"bytes"
	"encoding/base64"
	"encoding/json"
	"log"
	"net/http"
)

const (
	// kintone関連のパラメータ
	appId = "{kintoneのアプリのID}"
	token = "{kintoneのアプリ内で発行したAPIキー"
	id    = "{kintoneにログインするためのIDで上のAPIキーを発行したアカウントのもの}"
	pw    = "{上で指定したアカウント用のパスワード}"

	// chatwork関連のパラメータ
	cwToken = "{チャットワークの設定の画面で発行したAPIキー}"
	roomId  = "{タスクを登録したいルームのID}"
	aid     = "{タスクの担当者として登録したいアカウントのID}"
)

type Field struct {
	Type  interface{} `json:"type"`
	Value interface{} `json:"value"`
}

type Record struct {
	Records []map[string]Field `json:"records"`
}

func main() {
	url := "https://**********.cybozu.com/k/v1/records.json?app=" + appId + "&limit=100"
	req, err := http.NewRequest("GET", url, nil)
	if err != nil {
		log.Fatal(err)
	}

	hash := base64.StdEncoding.EncodeToString([]byte(id + ":" + pw))

	req.Header.Add("Cybozu-API-Token", token)
	req.Header.Add("X-Cybozu-Authorization", hash)
	res, err := http.DefaultClient.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer res.Body.Close()

	//JSONの読み込み unmarshal
	var rec Record
	err = json.NewDecoder(res.Body).Decode(&rec)
	if err != nil {
		log.Fatal(err)
	}

	for _, record := range rec.Records {
		/** 諸々のチェックの処理は省略 **/

		//構造体の設計だと各種値はinterface{}なので、文字列型に変換する
		label := record["label"].Value.(string)
		err = RegisterTaskOnChatWork(label)
		if err != nil {
			log.Fatal(err)
		}
	}
}

// チャットワークでタスクの登録
func RegisterTaskOnChatWork(label string) error {
	url := "https://api.chatwork.com/v2/rooms/" + roomId + "/tasks"
	param := "body=" + label + "&to_ids=" + aid

	req, err := http.NewRequest("POST", url, bytes.NewBufferString(param))
	if err != nil {
		return err
	}

	req.Header.Add("X-ChatWorkToken", cwToken)
	req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
	res, err := http.DefaultClient.Do(req)
	if err != nil {
		return err
	}
	defer res.Body.Close()

	return nil
}

このコードでいくつかのパラメータとチャットワークのエンドポイントが増えたけれども、

それらの説明は下記の記載されているので省略する。

PHPでチャットワークAPIを介してタスクを登録してみる


上記のコードを実行する前に

kintoneで作成したアプリで


kintone_cw_go1


こんな感じでレコードを追加した上で上記のコードを実行してみる。

実行後にチャットワークを開いてみると、


kintone_cw_go2


指定のルームで、kintoneで登録した通りの文字列でタスクが追加されていた。


後はチャットワークでのタスク登録時のデータの絞り込みだけれども、

それは細かい話になるのでこれ以上は触れないことにする。