diff --git a/officialaccount/message/template.go b/officialaccount/message/template.go
index 1c657ea9..17176354 100644
--- a/officialaccount/message/template.go
+++ b/officialaccount/message/template.go
@@ -61,15 +61,15 @@ func (tpl *Template) Send(msg *TemplateMessage) (msgID int64, err error) {
 	if err != nil {
 		return
 	}
-	uri := fmt.Sprintf("%s?access_token=%s", templateSendURL, accessToken)
-	var response []byte
-	response, err = util.PostJSON(uri, msg)
-	if err != nil {
+	var (
+		uri      = fmt.Sprintf("%s?access_token=%s", templateSendURL, accessToken)
+		response []byte
+	)
+	if response, err = util.PostJSON(uri, msg); err != nil {
 		return
 	}
 	var result resTemplateSend
-	err = json.Unmarshal(response, &result)
-	if err != nil {
+	if err = json.Unmarshal(response, &result); err != nil {
 		return
 	}
 	if result.ErrCode != 0 {
@@ -103,10 +103,11 @@ func (tpl *Template) List() (templateList []*TemplateItem, err error) {
 	if err != nil {
 		return
 	}
-	uri := fmt.Sprintf("%s?access_token=%s", templateListURL, accessToken)
-	var response []byte
-	response, err = util.HTTPGet(uri)
-	if err != nil {
+	var (
+		uri      = fmt.Sprintf("%s?access_token=%s", templateListURL, accessToken)
+		response []byte
+	)
+	if response, err = util.HTTPGet(uri); err != nil {
 		return
 	}
 	var res resTemplateList
@@ -121,22 +122,23 @@ type resTemplateAdd struct {
 }
 
 // Add 添加模板.
-func (tpl *Template) Add(shortID string) (templateID string, err error) {
+func (tpl *Template) Add(shortID string, keyNameList []string) (templateID string, err error) {
 	var accessToken string
 	accessToken, err = tpl.GetAccessToken()
 	if err != nil {
 		return
 	}
-	var msg = struct {
-		ShortID string `json:"template_id_short"`
-	}{ShortID: shortID}
-	uri := fmt.Sprintf("%s?access_token=%s", templateAddURL, accessToken)
-	var response []byte
-	response, err = util.PostJSON(uri, msg)
-	if err != nil {
+	var (
+		msg = struct {
+			ShortID     string   `json:"template_id_short"`
+			KeyNameList []string `json:"keyword_name_list"`
+		}{ShortID: shortID, KeyNameList: keyNameList}
+		uri      = fmt.Sprintf("%s?access_token=%s", templateAddURL, accessToken)
+		response []byte
+	)
+	if response, err = util.PostJSON(uri, msg); err != nil {
 		return
 	}
-
 	var result resTemplateAdd
 	err = util.DecodeWithError(response, &result, "AddTemplate")
 	return result.TemplateID, err
@@ -149,14 +151,14 @@ func (tpl *Template) Delete(templateID string) (err error) {
 	if err != nil {
 		return
 	}
-	var msg = struct {
-		TemplateID string `json:"template_id"`
-	}{TemplateID: templateID}
-
-	uri := fmt.Sprintf("%s?access_token=%s", templateDelURL, accessToken)
-	var response []byte
-	response, err = util.PostJSON(uri, msg)
-	if err != nil {
+	var (
+		msg = struct {
+			TemplateID string `json:"template_id"`
+		}{TemplateID: templateID}
+		uri      = fmt.Sprintf("%s?access_token=%s", templateDelURL, accessToken)
+		response []byte
+	)
+	if response, err = util.PostJSON(uri, msg); err != nil {
 		return
 	}
 	return util.DecodeWithCommonError(response, "DeleteTemplate")