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实现 Copy 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的方式 Copy 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库 Copy 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 )
}