【发布时间】:2016-10-03 16:36:37
【问题描述】:
这是我的 golang 应用程序监听来自 slack 命令的请求:
main.go:
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"time"
)
type SlackCmdResponse struct {
Text string `json:"text"`
}
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
if err := req.ParseForm(); err != nil {
panic(err)
}
responseUrl := req.PostFormValue("response_url")
go func() {
time.Sleep(time.Second)
postBack(responseUrl)
}()
rj, err := json.Marshal(SlackCmdResponse{Text: "Test started"})
if err != nil {
panic(err)
}
w.Header().Set("Content-Type", "application/json")
w.Write(rj)
})
fmt.Println("listening 8383")
if err := http.ListenAndServe(":8383", nil); err != nil {
panic(err)
}
}
func postBack(responseUrl string) {
fmt.Println("responseUrl", responseUrl)
cResp := SlackCmdResponse{
Text: "Test finished",
}
cj, err := json.Marshal(cResp)
if err != nil {
panic(err)
}
req, err := http.NewRequest("POST", responseUrl, bytes.NewReader(cj))
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
if resp != nil {
fmt.Println(resp.StatusCode)
if b, err := ioutil.ReadAll(resp.Body); err != nil {
panic(err)
} else {
fmt.Println(string(b))
}
if resp.Body != nil {
resp.Body.Close()
}
}
}
我运行它:
$ go run main.go
listening 8383
我使用 ngrok 使其可以从 Internet 访问:
ngrok http 8383
我使用POST 选项创建了斜杠命令/my-command 并粘贴了ngrok 提供的https URL:
现在,当我在 slack 中运行 /my-command 时,我得到了 slack 回复 Test started。然后在第二次松弛打印Test finished
目前,一切都很好。
问题
如果我换行
time.Sleep(time.Second)
逐行
time.Sleep(time.Hour) // long test
我不会在一小时内松弛打印“测试完成”。相反,我在我的应用日志中看到:
responseUrl https://hooks.slack.com/commands/T3GBFUZ64/86817661808/XRmDO21jYaP1Wzu7GFpNw9eW
404
Expired url
看起来 slack 的响应 URL 有一个过期时间。如何延长这个过期时间?
或者在过期的情况下,是否有另一种方法可以向用户发送有关测试已完成的消息?我有启动/my-command的用户的姓名和ID
req.PostFormValue("user_name")
req.PostFormValue("user_id")
所以我想通过 slack 运行超过 2 小时的集成测试,并在 slack 中完成此类测试后得到响应。
【问题讨论】:
-
我对此一无所知(因为我是编程的初学者),但我喜欢学习这样的东西,你能说这是什么,希望这个链接对你有所帮助你,如果不对不起我:(gist.github.com/jmervine/8321794祝你好运@Maxim :)