IFTTT众多的service里面,有一个非常强大的service,就是webhooks。当我们在IFTTT里面connect了这个service之后,我们会得到一个唯一的链接,我们访问这个链接就会被视作触发了这个service。
1.创建Applet
1.1新建Applet
在My Applets
界面选择New Applet
,然后选择+this
1.2选择webhooks作为service
1.3选择Receive a web request作为trigger
1.4设置一个Event Name
为webhooks设置一个Event Name
,作为这个Applet的触发条件。因为可能另外的Applet也用了webhooks这个service,那么就要使用这个Event Name
来区分到底是哪个Applet
1.5选择action service
IFTTT里面,最终的动作被称作action。我们现在已经选好了webhooks作为trigger,现在就要来选择action了。我们选择Notifications
作为action service
1.6选择一个action
Notifications
这个service有两个action,一个是普通的通知,另一个是富文本的通知,也就是可以在通知里面显示图片。我们这里选择富文本的通知,普通通知的用法也是类似的
1.7配置action
配置action,可以设置Notifications
的标题还有内容,还可以设置要显示的图片。这里还可以使用Add ingredient
来添加webhooks里面传过来的数据。配置完成之后我们create,然后finish,Applet就创建完成了
2.触发webhooks
2.1使用webhooks的Documentation里面的测试来触发
一开始的时候,我们可以使用这个测试模式来测试自己的配置是否正确。访问webhooks页面,选择Documentation
。输入之前设置好的Event Name
,然后在下面的内容里面也可以填,value1
、value2
这些值都是可以在action的配置里面得到的。之前我们配置了value1
的值是填要在通知里面显示的图片地址。填好之后按Test it
收到的通知
2.2使用curl来触发
我们在2.1里面的测试界面也可以得到自动生成好的curl命令。我们直接拿来使用即可。
收到的通知
2.3使用golang来触发
所有的代码都放在github上了,地址https://github.com/liguoqinjim/go-labs/tree/master/lab143
2.3.1http.Post实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
)
type ConfStruct struct {
Key string `json:"key"`
EventName string `json:"event_name"`
UrlFormat string `json:"url_format"`
Value1 string `json:"value1"`
Value2 string `json:"value2"`
Value3 string `json:"value3"`
}
var conf = new(ConfStruct)
func main() {
//读取配置文件
data, err := ioutil.ReadFile("conf.json")
if err != nil {
log.Fatalf("ioutil.ReadFile error:%v", err)
}
log.Printf("data=\n%s", data)
err = json.Unmarshal(data, conf)
if err != nil {
log.Fatalf("json.Unmarshal error:%v", err)
}
//拼接url
u := fmt.Sprintf(conf.UrlFormat, conf.EventName, conf.Key)
log.Printf("url=%s", u)
//post
values := map[string]string{"value1": conf.Value1, "value2": conf.Value2, "value3": conf.Value3}
jsonStr, _ := json.Marshal(values)
resp, err := http.Post(u, "application/json", bytes.NewBuffer(jsonStr))
if err != nil {
log.Fatalf("http.Post error:%v", err)
}
d, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatalf("ioutil.ReadAll error:%v", err)
}
log.Printf("resp:\n%s", d)
}
|
2.3.2http.Client的方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
| ...
func main() {
//读取配置文件
data, err := ioutil.ReadFile("conf.json")
if err != nil {
log.Fatalf("ioutil.ReadFile error:%v", err)
}
log.Printf("data=\n%s", data)
err = json.Unmarshal(data, conf)
if err != nil {
log.Fatalf("json.Unmarshal error:%v", err)
}
//拼接url
u := fmt.Sprintf(conf.UrlFormat, conf.EventName, conf.Key)
log.Printf("url=%s", u)
//client
client := &http.Client{}
values := map[string]string{
"value1": conf.Value1,
"value2": conf.Value2,
"value3": conf.Value3,
}
jsonStr, _ := json.Marshal(values)
req, err := http.NewRequest(http.MethodPost, u, bytes.NewBuffer(jsonStr))
if err != nil {
log.Fatalf("http.NewRequest error:%v", err)
}
req.Header.Add("Content-Type", "application/json")
resp, err := client.Do(req)
if err != nil {
log.Fatalf("client.Do error:%v", err)
}
d, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatalf("ioutil.ReadAll error:%v", err)
}
log.Printf("resp:\n%s", d)
}
|
2.3.3使用gorequest库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
| ...
func main() {
//读取配置文件
data, err := ioutil.ReadFile("conf.json")
if err != nil {
log.Fatalf("ioutil.ReadFile error:%v", err)
}
log.Printf("data=\n%s", data)
err = json.Unmarshal(data, conf)
if err != nil {
log.Fatalf("json.Unmarshal error:%v", err)
}
//拼接url
u := fmt.Sprintf(conf.UrlFormat, conf.EventName, conf.Key)
log.Printf("url=%s", u)
type ValueStruct struct {
Value1 string `json:"value1"`
Value2 string `json:"value2"`
Value3 string `json:"value3"`
}
val := ValueStruct{Value1: conf.Value1, Value2: conf.Value2, Value3: conf.Value3}
request := gorequest.New()
//http://httpbin.org/post
resp, body, errs := request.Post(u).
Send(val).
End()
if errs != nil {
log.Fatalf("errs:%+v", errs)
}
d, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatalf("ioutil.ReadAll error:%v", err)
}
log.Printf("resp=\n%s", d)
log.Println("body.length=", len(body))
log.Println("body=", body)
}
|