我想发布松弛的网络钩子,但我得到了一个错误。
这样做是可行的:
(defun post-slack ()
(drakma:http-request "https://hooks.slack.com/services/xxx"
:method :post
:content-type "application/json"
:parameters '(("payload" . "{\"username\":\"bot\",\"icon_emoji\":\":hatching_chick:\",\"text\":\"name: ~A \n email: ~A \n content: ~A \",\"as_user\":true}"))))但这并不意味着:
(defun post-slack (name email text)
(setq *payload* (format nil "{\"username\":\"bot\",\"icon_emoji\":\":hatching_chick:\",\"text\":\"<@U7RM4J8MR> name: ~A \n email: ~A \n text: ~A \",\"as_user\":true}" name email text))
(drakma:http-request "https://hooks.slack.com/services/xxx"
:method :post
:content-type "application/json"
:parameters '(("payload" . *payload*))))这是我的错误:
The value
CAVEMAN-STUDY.CONTROLLER::*PAYLOAD*
is not of type
LIST
when binding SB-C::FAST
[Condition of type TYPE-ERROR]
Restarts:
0: [RETRY] Retry SLIME REPL evaluation request.
1: [*ABORT] Return to SLIME's top level.
2: [ABORT] abort thread (#<THREAD "new-repl-thread" RUNNING {1008826443}>)
Backtrace:
0: (FIND-IF-NOT #<FUNCTION (LAMBDA (DRAKMA::THING) :IN DRAKMA:HTTP-REQUEST) {22D088AB}> ("payload" . CAVEMAN-STUDY.CONTROLLER::*PAYLOAD*) :KEY #<FUNCTION CDR>)
1: (DRAKMA:HTTP-REQUEST #<PURI:URI https://hooks.slack.com/services/xxxx> :METHOD :POST :CONTENT-TYPE "application/json" :PARAMETERS ("payload" . CAVEMAN-STUDY.CON..
2: (SB-INT:SIMPLE-EVAL-IN-LEXENV (CAVEMAN-STUDY.CONTROLLER:POST-SLACK "aaa" "bbb" "ccc") #<NULL-LEXENV>)
3: (EVAL (CAVEMAN-STUDY.CONTROLLER:POST-SLACK "aaa" "bbb" "ccase"))
--more--请告诉我怎么修。谢谢!
发布于 2019-02-25 15:55:03
您正在将(("payload" . *payload*))传递给drakma:http-request,这里的*payload*没有被计算,也就是说,它是作为一个symbol传递的,而不是它的值。
你可能想要的是
(defun post-slack (name email text)
(let ((payload (format nil "..." ...)))
(drakma:http-request "https://hooks.slack.com/services/xxx"
:method :post
:content-type "application/json"
:parameters `(("payload" . ,payload)))))请注意,我将setq替换为let。
PS。如果您想要避免使用(list (cons "payload" *payload*)),也可以使用`(("payload" . ,payload))而不是反引。
发布于 2019-02-25 22:02:49
既然你说的是斯拉克
也有更多的斯拉克机器人。
我是在快速搜索中发现这些的(我不知道这么方便)。
https://stackoverflow.com/questions/54868796
复制相似问题