최근 유행하는 ojichat를 slackbot으로 만들었다.
최근 유행하는 ojichat을 slackbot으로 한 이야기
최근 쉘 예보의 맹위에 의해 TL이 아저씨 투성이가 되어 버렸다.
우리 slack에도 아저씨로 활기차고 싶다~라고 생각했기 때문에 만들어 보았다.
greymd/ojichat
htps : // 기주 b. 코 m / g yymd / 할아버지 t
처리 흐름
Outgoing WebHooks
지정한 문자의 투고가 있었을 때, Slack로부터 외부의 서버에 POST 보내는 녀석.
각각의 설정 항목이 있으므로 넣어 간다.
Channel #general
TriggerWord(s) 오지산
URL (s) http://X.X.X.X:8080
이번에는 이 정도 밖에 설정 넣지 않습니다.
URL(s)에는 요청을 받고 싶은 서버의 ip 주소 지정해 주세요.
이제 ojisan 키워드가 게시되면 위 URL에 POST됩니다.
Incoming WebHooks
외부에서 Slack에 메시지를 보내는 사람. 이제 삼촌 메시지를 보냅니다.
Outgoing WebHooks와 마찬가지로 설정 항목을 넣습니다.
Post to Channel#general
Customize Name 아저씨
그 밖에도 아이콘 등도 바꿀 수 있습니다.
항목의 Webhook URL에 있는 URL에 JSON 형식으로 요청을 보내
Slack의 지정된 채널로 메시지를 보낼 수 있습니다.
수신 서버
최근 Go만 쓰고 있기 때문에, Go제 Web 어플리케이션 프레임워크의 gin/gonic 사용했습니다.
htps : // 기주 b. 코 m / 긴 - 고니 c / 긴
이미 여기까지 오면 거의 완성이라고 생각하고,
우키 우키에서받은 데이터는 이것입니다 ...
token=vFlRfdwGp9Nk5koVtSrbMxxx&
team_id=T63EC9xxx&
team_domain=xxx-network-club&
service_id=652176051511&
channel_id=CJSJ7TXXX&
channel_name=general&
timestamp=1559196598.002400&
user_id=U643K5XXX&
user_name=minatoo&
text=ojisan&
trigger_word=ojisan"
무슨 형식이나 넨이 ....
조사하면
application/x-www-form-urlencoded: キーと値は、その間に '=' がある形でキーと値の組になり、 '&' で区切られてエンコードされます。
htps : //로 ゔぇぺぺr. 모잖아. 오 rg / 자 / 도 cs / 우 b라는 것으로 JSON 형식으로 변환하는 처리를 가키 같은 코드로 구현했다.
htps : // 기주 b. 코 m/m tky/곤ゔ2J/bぉb/마s r/pkg/곤 v. 고
이제 자유롭게 데이터를 다룰 수 있습니다 ... !!
수신 서버 코드
package main
import (
"fmt"
"os/exec"
"encoding/json"
"github.com/gin-gonic/gin"
"github.com/mntky/convA2J/pkg"
)
type ConvData struct {
Token string
Team_id string
Team_domain string
Service_id string
Channel_id string
Channel_name string
Timestamp string
User_id string
User_name string
}
func main() {
g := gin.Default()
g.POST("/", func(c *gin.Context) {
buf := make([]byte, 2048)
n, _ := c.Request.Body.Read(buf)
b := string(buf[0:n])
decode(b)
})
g.Run(":8080")
}
func decode(data string) {
var convdata *ConvData = &ConvData{}
resp := conv.Convert(data)
err := json.Unmarshal([]byte(resp), convdata)
if err != nil {
fmt.Println(err)
}
fmt.Println(convdata.User_name)
out, err := exec.Command("sh", "./send.sh", convdata.User_name).Output()
if err != nil {
fmt.Println(err)
}
fmt.Println(string(out))
}
꺼낸 이름은 exec에서 send.sh에 인수 전달하여 실행시킵니다.
curl incomingwebhookの指定URL -X POST -H "Content-Type: application/json" -d '{"username":"おぢさん", "text":"'$(ojichat $1)'"}'
요약
이것으로 완성입니다.
마지막으로 움직인 예를 ...
변함없는 키모로 피로가 날아갔습니다.
덧붙여 자신 이외 아무도 ojisan 쳐주지 않기 때문에 두 번 다시 차례가 없을 것 같습니다.
꼭 여러분의 채널에도 어떻습니까?
Reference
이 문제에 관하여(최근 유행하는 ojichat를 slackbot으로 만들었다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Minatoo/items/9ff8bbc2d1ae16c5def1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)